File: uprights.gujarati.fea

package info (click to toggle)
fonts-yrsa-rasa 2.005-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, sid, trixie
  • size: 36,204 kB
  • sloc: sh: 307; python: 224; makefile: 2
file content (867 lines) | stat: -rw-r--r-- 35,255 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
#----------------------------------------------------------------------------
# Classes

# Copies of kerning classes for convenience

@gjKa_right = [gjKa gjKRa gjKKa gjKKRa gjK gjKT gjKM gjKY gjKTa gjKMa gjKYa gjK.calt gjK.calt2 gjK.calt3 gjKR.calt gjKR.calt2 gjKR.calt3 gjKTta gjKSa gjKS gjKSha gjKSh];
@gjGa_right = [gjGa gjG gjGRa];
@gjGha_right = [gjGha gjGh gjGhR gjGhN gjGhRa gjGhNa];
@gjCa_right = [gjCa gjC gjA gjAa gjCandraE gjE gjAi gjCandraO gjO gjAu];
@gjCha_right = [gjCha];
@gjJa_right = [gjJa gjJRa gjJKa gjJa_gjMatraAa gjJa_gjMatraIi gjJRa_gjMatraAa gjJRa_gjMatraIi gjJY gjJYa gjJ gjJ.calt gjJ.calt2 gjJ.calt3 gjZha gjZhRa gjZhKa gjZha_gjMatraAa gjZha_gjMatraIi gjZhRa_gjMatraAa gjZhRa_gjMatraIi gjZhY gjZhYa gjZh gjZh.calt gjZh.calt2 gjZh.calt3];
@gjJha_right = [gjJha gjJhY gjJhYa];
@gjNya_right = [gjNya gjNy gjNyY gjNyYa];
@gjTta_right = [gjTta];
@gjTtha_right = [gjTtha gjTthY gjTthYa];
@gjDda_right = [gjDda gjNga gjDdY gjNgY gjNgYa gjDdYa gjNgM gjNgMa gjDdM gjDdMa];
@gjDdha_right = [gjDdha];
@gjNna_right = [gjNna gjNn gjNna_gjMatraU];
@gjTa_right = [gjTa gjT gjT.calt gjTY gjTN gjTNa gjTMa gjTYa];
@gjTha_right = [gjTha gjTh gjThR gjThRa gjTh.calt];
@gjDa_right = [gjDa gjDDa];
@gjDha_right = [gjDha gjDh gjDhR gjDhN gjDhRa gjDhNa gjDh.calt];
@gjNa_right = [gjNa gjN gjNM gjNRa gjNMa gjN.calt gjN.calt2];
@gjPa_right = [gjPa gjSsa gjKha gjKh gjKhR gjP gjPR gjSs gjSs.calt gjSsR gjKhRa gjPRa gjSsRa gjPKa gjPPha gjKhY gjKhYa];
@gjPha_right = [gjPha gjPhRa gjPh gjPhY gjPhYa gjPh.calt gjPh.calt2 gjPh.calt3 gjPhTta gjPhS gjPhSa];
@gjBa_right = [gjBa gjB gjBKa gjBR gjBRa gjBYa gjBY];
@gjBha_right = [gjBha gjBh gjBhR gjBhRa];
@gjMa_right = [gjMa gjM gjMR gjMRa gjMKa gjMPha];
@gjYa_right = [gjYa gjY gjY.calt];
@gjLa_right = [gjLa gjL gjLY gjLKa gjLDda gjLYa];
@gjLla_right = [gjLla gjLl gjLlY gjLlYa gjLla_gjMatraVocalicR gjLla_gjMatraVocalicRr];
@gjVa_right = [gjVa gjV gjVR gjVY gjVYa gjVRa];
@gjSa_right = [gjSa gjRa gjSKa gjSTta gjSPha gjSKRa gjRa_gjMatraU gjS gjS.calt gjSR gjSY gjSTR gjSTh gjSTRa gjSRa gjSTha gjSYa];
@gjSha_right = [gjSha gjSh];
@gjHa_right = [gjHa gjHY gjHM gjHMa gjHYa];
@gjKSsa_right = [gjKSsa gjKSs gjKSsR gjKSsY gjKSsRa gjKSsYa gjKSsa_gjMatraU];
@gjHNa_right = [gjHNa gjHNna gjHLa gjHVa];
@gjKa_left = [gjKa gjKRa gjKKa gjKKRa gjJKa gjLKa gjSKRa gjBKa gjMKa gjPKa gjSKa];
@gjPha_left = [gjPha gjPhRa gjMPha gjPPha gjSPha];
@gjTta_left = [gjTta gjKTta gjPhTta gjSTta];



#----------------------------------------------------------------------------
# MarkAttachmentType Classes

@gjMarks_above = [@MC_abvmBINDU @MC_abvmTOP];
@gjMarks_below = [@MC_blwmBOTTOM @MC_blwmRUKAR];
@gjMarks_nukta = [@MC_blwmNUKTA @MC_blwmNUKTA2];



#----------------------------------------------------------------------------
# Akhand ligatures

feature akhn {
	lookupflag MarkAttachmentType @gjMarks_below;
	
	sub gjKa gjVirama gjSsa by gjKSsa;
	sub	gjJa gjVirama gjNya by gjJNya;
} akhn;



#----------------------------------------------------------------------------
# Reph Form

feature rphf {
	lookupflag MarkAttachmentType @gjMarks_below;

	sub gjRa gjVirama by gjReph;
} rphf;



#----------------------------------------------------------------------------
# Rakar conjuncts

feature rkrf {

script DFLT;
	language dflt;
		lookup RKRF_1 {
			lookupflag MarkAttachmentType @gjMarks_below;
			
			sub gjKa gjVirama gjKa gjVirama gjRa by gjKKRa;
			sub gjSa gjVirama gjKa gjVirama gjRa by gjSKRa;
			sub gjSa gjVirama gjTa gjVirama gjRa by gjSTRa;
			sub gjDa gjVirama gjRa gjVirama gjYa by gjDRYa;
		} RKRF_1;
		lookup RKRF_2 {
			lookupflag MarkAttachmentType @gjMarks_below;
			
			sub gjKa gjVirama gjRa by gjKRa;
			sub gjKSsa gjVirama gjRa by gjKSsRa;
			sub gjKha gjVirama gjRa by gjKhRa;
			sub gjGa gjVirama gjRa by gjGRa;
			sub gjGha gjVirama gjRa by gjGhRa;
			sub gjJa gjVirama gjRa by gjJRa;
			sub gjJha gjVirama gjRa by gjJhRa;
			sub gjNna gjVirama gjRa by gjNnRa;
			sub gjTa gjVirama gjRa by gjTRa;
			sub gjTha gjVirama gjRa by gjThRa;
			sub gjDa gjVirama gjRa by gjDRa;
			sub gjDha gjVirama gjRa by gjDhRa;
			sub gjNa gjVirama gjRa by gjNRa;
			sub gjPa gjVirama gjRa by gjPRa;
			sub gjPha gjVirama gjRa by gjPhRa;
			sub gjBa gjVirama gjRa by gjBRa;
			sub gjBha gjVirama gjRa by gjBhRa;
			sub gjMa gjVirama gjRa by gjMRa;
			sub gjVa gjVirama gjRa by gjVRa;
			sub gjLla gjVirama gjRa by gjLlRa;
			sub gjSha gjVirama gjRa by gjShRa;
			sub gjSsa gjVirama gjRa by gjSsRa;
			sub gjSa gjVirama gjRa by gjSRa;
			sub gjZha gjVirama gjRa by gjZhRa;
		} RKRF_2;

script gjr2;
	language dflt;
		lookup RKRF_1;
		lookup RKRF_2;

} rkrf;



#----------------------------------------------------------------------------
# Below-base forms

feature blwf {

script DFLT;
	language dflt;
		lookup BLWF {
			sub gjVirama gjRa by gjRakar;
		} BLWF;

script gjr2;
	language dflt;
		lookup BLWF;

script gujr;
	language dflt;
		sub gjRa gjVirama by gjRakar;

} blwf;



#----------------------------------------------------------------------------
# Half forms

@gjK = [gjK gjK.calt gjK.calt2 gjK.calt3];
@gjPh = [gjPh gjPh.calt gjPh.calt2 gjPh.calt3];
@gjKR = [gjKR gjKR.calt gjKR.calt2 gjKR.calt3];
@gjJ = [gjJ gjJ.calt gjJ.calt2 gjJ.calt3];
@gjZh = [gjZh gjZh.calt gjZh.calt2 gjZh.calt3];
@gjT = [gjT gjT.calt];
@gjP = [gjP gjP.calt];
@gjL = [gjL gjL.calt];
@gjTh = [gjTh gjTh.calt];
@gjDh = [gjDh gjDh.calt];
@gjY = [gjY gjY.calt];
@gjS = [gjS gjS.calt];
@gjSs = [gjSs gjSs.calt];
@gjN = [gjN gjN.calt gjN.calt2];



feature half {

script DFLT;
	language dflt;
		lookup HALF {
			lookupflag MarkAttachmentType @gjMarks_below;
			
			sub gjNga gjVirama gjM by gjNgM;
			sub gjNga gjVirama gjY by gjNgY;
			sub gjJha gjVirama gjY by gjJhY;
			sub gjTtha gjVirama gjY by gjTthY;
			sub gjDda gjVirama gjM by gjDdM;
			sub gjDda gjVirama gjY by gjDdY;
			sub gjDa gjVirama gjM by gjDM;
			sub gjDa gjVirama gjY by gjDY;
			sub gjHa gjVirama gjM by gjHM;
			sub gjHa gjVirama gjY by gjHY;

			sub gjTa gjVirama gjTa gjVirama gjYa gjVirama by gjTTY;
			sub gjKa gjVirama gjTa gjVirama by gjKT;
			sub gjKa gjVirama gjMa gjVirama by gjKM;
			sub gjKa gjVirama gjYa gjVirama by gjKY;
			sub gjKa gjVirama gjSa gjVirama by gjKS;
			sub gjKa gjVirama gjSha gjVirama by gjKSh;
			sub gjKha gjVirama gjYa gjVirama by gjKhY;
			sub gjGha gjVirama gjNa gjVirama by gjGhN;
			sub gjJa gjVirama gjYa gjVirama by gjJY;
			sub gjNya gjVirama gjYa gjVirama by gjNyY;
			sub gjTa gjVirama gjTa gjVirama by gjTT;
			sub gjTa gjVirama gjMa gjVirama by gjTM;
			sub gjTa gjVirama gjNa gjVirama by gjTN;
			sub gjTa gjVirama gjYa gjVirama by gjTY;
			sub gjDha gjVirama gjNa gjVirama by gjDhN;
			sub gjNa gjVirama gjNa gjVirama by gjNN;
			sub gjNa gjVirama gjMa gjVirama by gjNM;
			sub gjPa gjVirama gjTa gjVirama by gjPT;
			sub gjPha gjVirama gjYa gjVirama by gjPhY;
			sub gjPha gjVirama gjSa gjVirama by gjPhS;
			sub gjBa gjVirama gjYa gjVirama by gjBY;
			sub gjLa gjVirama gjYa gjVirama by gjLY;
			sub gjLla gjVirama gjYa gjVirama by gjLlY;
			sub gjVa gjVirama gjYa gjVirama by gjVY;
			sub gjSha gjVirama gjCa gjVirama by gjShC;
			sub gjSha gjVirama gjNa gjVirama by gjShN;
			sub gjSha gjVirama gjLa gjVirama by gjShL;
			sub gjSha gjVirama gjVa gjVirama by gjShV;
			sub gjSa gjVirama gjTha gjVirama by gjSTh;
			sub gjSa gjVirama gjYa gjVirama by gjSY;
			sub gjZha gjVirama gjYa gjVirama by gjZhY;
			sub gjKSsa gjVirama gjYa gjVirama by gjKSsY;
			sub gjJNya gjVirama gjYa gjVirama by gjJNyY;

			sub gjKa gjVirama by gjK;
			sub gjKha gjVirama by gjKh;
			sub gjGa gjVirama by gjG;
			sub gjGha gjVirama by gjGh;
			sub gjCa gjVirama by gjC;
			sub gjJa gjVirama by gjJ;
			sub gjNya gjVirama by gjNy;
			sub gjNna gjVirama by gjNn;
			sub gjTa gjVirama by gjT;
			sub gjTha gjVirama by gjTh;
			sub gjDha gjVirama by gjDh;
			sub gjNa gjVirama by gjN;
			sub gjPa gjVirama by gjP;
			sub gjPha gjVirama by gjPh;
			sub gjBa gjVirama by gjB;
			sub gjBha gjVirama by gjBh;
			sub gjMa gjVirama by gjM;
			sub gjYa gjVirama by gjY;
			sub gjLa gjVirama by gjL;
			sub gjLla gjVirama by gjLl;
			sub gjVa gjVirama by gjV;
			sub gjSha gjVirama by gjSh;
			sub gjSsa gjVirama by gjSs;
			sub gjSa gjVirama by gjS;
			sub gjZha gjVirama by gjZh;

			sub gjKSsa gjVirama by gjKSs;
			sub gjJNya gjVirama by gjJNy;
		} HALF;
		
		lookup HALF_RKRF {
			lookupflag MarkAttachmentType @gjMarks_below;
			
			sub gjSTRa gjVirama by gjSTR;
			sub gjDRYa gjVirama by gjDRY;
			sub gjKRa gjVirama by gjKR;
			sub gjKhRa gjVirama by gjKhR;
			sub gjGRa gjVirama by gjGR;
			sub gjGhRa gjVirama by gjGhR;
			sub gjNnRa gjVirama by gjNnR;
			sub gjTRa gjVirama by gjTR;
			sub gjThRa gjVirama by gjThR;
			sub gjDhRa gjVirama by gjDhR;
			sub gjNRa gjVirama by gjNR;
			sub gjPRa gjVirama by gjPR;
			sub gjBRa gjVirama by gjBR;
			sub gjBhRa gjVirama by gjBhR;
			sub gjMRa gjVirama by gjMR;
			sub gjVRa gjVirama by gjVR;
			sub gjShRa gjVirama by gjShR;
			sub gjSsRa gjVirama by gjSsR;
			sub gjSRa gjVirama by gjSR;
			sub gjKSsRa gjVirama by gjKSsR;
		} HALF_RKRF;
		lookup HALF_ContextualHalfForms {
			sub gjT' [@gjCa_right @gjTta_right @gjTha_right @gjTtha_right @gjDdha_right @gjPa_right @gjYa_right @gjSa_right] by gjT.calt;
			sub gjP' [@gjGha_right @gjCha_right @gjTta_right @gjTtha_right @gjDdha_right @gjDa_right @gjPha_right @gjMa_right @gjSha_right @gjKSsa_right @gjHNa_right] by gjP.calt;
			sub [gjTh gjDh gjY gjS]' [@gjCha_right @gjDa_right @gjTa_right @gjTta_right @gjTtha_right @gjDdha_right @gjMa_right @gjNa_right @gjSa_right @gjKSsa_right] by [gjTh.calt gjDh.calt gjY.calt gjS.calt];
			sub gjL' [@gjSa_right] by gjL.calt;
			sub gjS' [@gjCa_right @gjCha_right @gjTta_right @gjTtha_right @gjDdha_right @gjTa_right @gjDa_right @gjPa_right @gjNa_right @gjMa_right @gjSa_right @gjKSsa_right gjDRa] by gjS.calt;
			sub gjSs' [@gjCa_right @gjCha_right @gjNna_right @gjDa_right @gjDha_right @gjNa_right @gjPa_right @gjBa_right @gjBha_right @gjSa_right] by gjSs.calt;
			sub gjN' [@gjGa_right @gjCa_right @gjTta_right @gjDdha_right @gjTha_right @gjMa_right @gjSa_right gjSha] by gjN.calt;
			sub gjN' [@gjJa_right] by gjN.calt2;

			sub [gjK gjPh gjKR]' [@gjJa_right] by [gjK.calt gjPh.calt gjKR.calt];
			sub [gjK gjPh gjKR]' [@gjNa_right @gjGha_right @gjDha_right @gjTa_right @gjDa_right @gjNa_right @gjPa_right @gjBa_right @gjBha_right @gjLa_right @gjLla_right @gjVa_right @gjSa_right @gjHNa_right @gjCha_right @gjNna_right gjDRa] by [gjK.calt2 gjPh.calt2 gjKR.calt2];
			sub [gjK gjPh gjKR]' [@gjCa_right @gjTha_right] by [gjK.calt3 gjPh.calt3 gjKR.calt3];
			sub gjJ' [@gjGa_right @gjCa_right @gjNya_right @gjTta_right @gjDdha_right @gjTha_right @gjDha_right @gjPa_right @gjMa_right @gjYa_right @gjSa_right] by gjJ.calt;
			sub gjJ' [@gjJa_right] by gjJ.calt2;
			sub gjJ' [@gjGha_right @gjCha_right @gjNna_right @gjDa_right @gjBa_right @gjBha_right @gjLa_right @gjLla_right @gjVa_right @gjSha_right] by gjJ.calt3;
			sub gjZh' [@gjGa_right @gjCa_right @gjNya_right @gjTta_right @gjDdha_right @gjTha_right @gjDha_right @gjPa_right @gjMa_right @gjYa_right @gjSa_right] by gjZh.calt;
			sub gjZh' [@gjJa_right] by gjZh.calt2;
			sub gjZh' [@gjGha_right @gjCha_right @gjNna_right @gjDa_right @gjBa_right @gjBha_right @gjLa_right @gjLla_right @gjVa_right @gjSha_right] by gjZh.calt3;
		} HALF_ContextualHalfForms;

script gjr2;
	language dflt;
		lookup HALF;
		lookup HALF_RKRF;
		lookup HALF_ContextualHalfForms;

script gujr;
	language dflt;
		lookup HALF;
		lookup HALF_GUJR {
			lookupflag MarkAttachmentType @gjMarks_below;
			
			sub gjNga gjVirama by gjNg;
			sub gjCha gjVirama by gjCh;
			sub gjJha gjVirama by gjJh;
			sub gjTta gjVirama by gjTt;
			sub gjTtha gjVirama by gjTth;
			sub gjDda gjVirama by gjDd;
			sub gjDdha gjVirama by gjDdh;
			sub gjDa gjVirama by gjD;
			sub gjHa gjVirama by gjH;
		} HALF_GUJR;
		lookup HALF_VATU {
			lookupflag MarkAttachmentType @gjMarks_below;

			sub @gjS gjT gjRakar by gjSTR;
			sub gjD gjRakar @gjY by gjDRY;
			sub @gjK gjRakar by gjKR;
			sub gjKh gjRakar by gjKhR;
			sub gjG gjRakar by gjGR;
			sub gjGh gjRakar by gjGhR;
			sub gjNn gjRakar by gjNnR;
			sub @gjT gjRakar by gjTR;
			sub gjTh gjRakar by gjThR;
			sub @gjDh gjRakar by gjDhR;
			sub @gjN gjRakar by gjNR;
			sub @gjP gjRakar by gjPR;
			sub gjB gjRakar by gjBR;
			sub gjBh gjRakar by gjBhR;
			sub gjM gjRakar by gjMR;
			sub gjV gjRakar by gjVR;
			sub gjSh gjRakar by gjShR;
			sub @gjSs gjRakar by gjSsR;
			sub @gjS gjRakar by gjSR;
			sub gjKSs gjRakar by gjKSsR;
		} HALF_VATU;
		lookup HALF_ContextualHalfForms;
} half;



#----------------------------------------------------------------------------
# Rakar conjuncts

feature vatu {

#script gjr;
#	language dflt;
		lookup HALF_VATU;

		lookup VATU {
			lookupflag MarkAttachmentType @gjMarks_below;
		
			sub gjKa gjRakar by gjKRa;
			sub gjKSsa gjRakar by gjKSsRa;
			sub gjKha gjRakar by gjKhRa;
			sub gjGa gjRakar by gjGRa;
			sub gjGha gjRakar by gjGhRa;
			sub gjJa gjRakar by gjJRa;
			sub gjJha gjRakar by gjJhRa;
			sub gjNna gjRakar by gjNnRa;
			sub gjTa gjRakar by gjTRa;
			sub gjTha gjRakar by gjThRa;
			sub gjDa gjRakar by gjDRa;
			sub gjDha gjRakar by gjDhRa;
			sub gjNa gjRakar by gjNRa;
			sub gjPa gjRakar by gjPRa;
			sub gjPha gjRakar by gjPhRa;
			sub gjBa gjRakar by gjBRa;
			sub gjBha gjRakar by gjBhRa;
			sub gjMa gjRakar by gjMRa;
			sub gjVa gjRakar by gjVRa;
			sub gjLla gjRakar by gjLlRa;
			sub gjSha gjRakar by gjShRa;
			sub gjSsa gjRakar by gjSsRa;
			sub gjSa gjRakar by gjSRa;
			sub gjZha gjRakar by gjZhRa;
		} VATU;
} vatu;



#----------------------------------------------------------------------------
# Conjuncts

feature cjct {

script DFLT;
	language dflt;
		lookup CJCT {
			lookupflag MarkAttachmentType @gjMarks_below;
			
			sub gjNga gjVirama gjKa by gjNgKa;
			sub gjNga gjVirama gjKSsa by gjNgKSsa;
			sub gjNga gjVirama gjMa by gjNgMa;
			sub gjNga gjVirama gjYa by gjNgYa;
			sub gjTta gjVirama gjTta by gjTtTta;
			sub gjTta gjVirama gjTtha by gjTtTtha;
			sub gjTta gjVirama gjVa by gjTtVa;
			sub gjTtha gjVirama gjTtha by gjTthTtha;
			sub gjTtha gjVirama gjYa by gjTthYa;
			sub gjDda gjVirama gjDda by gjDdDda;
			sub gjDda gjVirama gjNa by gjDdNa;
			sub gjDda gjVirama gjVa by gjDdVa;
			sub gjDda gjVirama gjMa by gjDdMa;
			sub gjDda gjVirama gjYa by gjDdYa;
			sub gjDdha gjVirama gjDdha by gjDdhDdha;
			sub gjDdha gjVirama gjNa by gjDdhNa;
			sub gjDa gjVirama gjGa by gjDGa;
			sub gjDa gjVirama gjGha by gjDGha;
			sub gjDa gjVirama gjDa by gjDDa;
			sub gjDa gjVirama gjDha by gjDDha;
			sub gjDa gjVirama gjNa by gjDNa;
			sub gjDa gjVirama gjMa by gjDMa;
			sub gjDa gjVirama gjYa by gjDYa;
			sub gjDa gjVirama gjBa by gjDBa;
			sub gjDa gjVirama gjVa by gjDVa;
			sub gjPa gjVirama gjKa by gjPKa;
			sub gjPa gjVirama gjPha by gjPPha;
			sub gjHa gjVirama gjNna by gjHNna;
			sub gjHa gjVirama gjNa by gjHNa;
			sub gjHa gjVirama gjLa by gjHLa;
			sub gjHa gjVirama gjVa by gjHVa;
			sub gjHa gjVirama gjMa by gjHMa;
			sub gjHa gjVirama gjYa by gjHYa;
			sub gjJha gjVirama gjYa by gjJhYa;

			sub gjKa gjVirama gjKa by gjKKa;
			sub gjKa gjVirama gjTta by gjKTta;
			sub gjKa gjVirama gjTa by gjKTa;
			sub gjKa gjVirama gjMa by gjKMa;
			sub gjKa gjVirama gjYa by gjKYa;
			sub gjKa gjVirama gjSha by gjKSha;
			sub gjKa gjVirama gjSa  by gjKSa;
			sub gjPha gjVirama gjTta by gjPhTta;
			sub gjPha gjVirama gjYa by gjPhYa;
			sub gjPha gjVirama gjSa by gjPhSa;
			sub gjJa gjVirama gjKa by gjJKa;
			sub gjJa gjVirama gjYa by gjJYa;
			sub gjZha gjVirama gjKa by gjZhKa;
			sub gjZha gjVirama gjYa by gjZhYa;
		} CJCT;

script gjr2;
	language dflt;
		lookup CJCT;
} cjct;



#----------------------------------------------------------------------------
# Pre-base Substitutions

lookup decomposeHalfForms {
	sub gjDdh by gjDdha gjVirama;
	sub gjTt by gjTta gjVirama;
} decomposeHalfForms;

lookup makePostYa {
	sub gjVirama gjY by gjY.post;
	sub gjVirama gjYa by gjYa.post;
} makePostYa;

lookup makePostRa {
	sub gjRakar by gjR.post gjMatraAa.base;
} makePostRa;

lookup makePostNa {
	sub gjNa by gjN.post gjMatraAa.base;
} makePostNa;

@gjFullForms = [gjKha gjGa gjGha gjCa gjNya gjNna gjTa gjTha gjDha gjNa gjPa gjBa gjBha gjMa gjYa gjLa gjLla gjVa gjSha  gjSsa gjSa gjKSsa gjJNya gjKSsRa gjKhRa gjGRa gjGhRa gjNnRa gjTRa gjThRa gjDRYa gjDhRa gjNRa gjPRa gjBRa gjBhRa gjMRa gjVRa gjShRa gjSsRa gjSTRa gjSRa gjKTa gjKMa gjKYa gjKSha gjKSsYa gjKSa gjKhYa gjGhNa gjNgMa gjNgYa gjJNyYa gjJYa gjJhYa gjNyYa gjTthYa gjDdMa gjDdYa gjTTa gjTTYa gjTNa gjTMa gjTYa gjDMa gjDYa gjDhNa gjNNa gjNMa gjPTa gjPhYa gjPhSa gjBYa gjLYa gjLlYa gjVYa gjShCa gjShNa gjShLa gjShVa gjSTha gjSYa gjHMa gjHYa gjZhYa gjYa.post];
@gjFullForms_Halfs = [gjKh gjG gjGh gjC gjNy gjNn gjT gjTh gjDh gjN gjP gjB gjBh gjM gjY gjL gjLl gjV gjSh  gjSs gjS gjKSs gjJNy gjKSsR gjKhR gjGR gjGhR gjNnR gjTR gjThR gjDRY gjDhR gjNR gjPR gjBR gjBhR gjMR gjVR gjShR gjSsR gjSTR gjSR gjKT gjKM gjKY gjKSh gjKSsY gjKS gjKhY gjGhN gjNgM gjNgY gjJNyY gjJY gjJhY gjNyY gjTthY gjDdM gjDdY gjTT gjTTY gjTN gjTM gjTY gjDM gjDY gjDhN gjNN gjNM gjPT gjPhY gjPhS gjBY gjLY gjLlY gjVY gjShC gjShN gjShL gjShV gjSTh gjSY gjHM gjHY gjZhY gjY.post];
@gjBaseForms = [gjKa gjKha gjGa gjGha gjNga gjCa gjCha gjJa gjJha gjNya gjTta gjTtha gjDda gjDdha gjNna gjTa gjTha gjDa gjDha gjNa gjPa gjPha gjBa gjBha gjMa gjYa gjRa gjLa gjLla gjVa gjSha gjSsa gjSa gjHa gjZha gjKSsa gjJNya gjKRa gjKKRa gjKSsRa gjKhRa gjGRa gjGhRa gjJRa gjJhRa gjNnRa gjTRa gjThRa gjDRa gjDRYa gjDhRa gjNRa gjPRa gjPhRa gjBRa gjBhRa gjMRa gjLlRa gjVRa gjShRa gjSsRa gjZhRa gjSKRa gjSTRa gjSRa gjKKa gjKTta gjKTa gjKMa gjKYa gjKSha gjKSsYa gjKSa gjKhYa gjGhNa gjNgKa gjNgKSsa gjNgMa gjNgYa gjJKa gjJNyYa gjJYa gjJhYa gjNyYa gjTtTta gjTtTtha gjTtVa gjTthTtha gjTthYa gjDdDda gjDdNa gjDdMa gjDdYa gjDdVa gjDdhDdha gjDdhNa gjTTa gjTTYa gjTNa gjTMa gjTYa gjDGa gjDGha gjDDa gjDDha gjDNa gjDBa gjDMa gjDYa gjDVa gjDhNa gjNNa gjNMa gjPKa gjPTa gjPPha gjPhTta gjPhYa gjPhSa gjBKa gjBYa gjMKa gjMPha gjLKa gjLDda gjLYa gjLlYa gjVYa gjShCa gjShNa gjShLa gjShVa gjSsTta gjSsTtha gjSsDda gjSKa gjSDda gjSTta gjSTha gjSPha gjSYa gjHNna gjHNa gjHLa gjHVa gjHMa gjHYa gjZhKa gjZhYa gjJa_gjMatraAa gjJa_gjMatraIi gjJRa_gjMatraAa gjJRa_gjMatraIi gjZha_gjMatraAa gjZha_gjMatraIi gjZhRa_gjMatraAa gjZhRa_gjMatraIi gjNna_gjMatraU gjRa_gjMatraU gjRa_gjMatraUu gjLla_gjMatraVocalicR gjLla_gjMatraVocalicRr gjKSsa_gjMatraU gjDRa.ss01 gjDGa.ss01 gjDGha.ss01 gjDDha.ss01 gjDNa.ss01 gjDBa.ss01 gjDVa.ss01 gjYa.post];



feature pres {
	# fixes unprocessed Rakar halfs
	sub gjD gjRakar @gjY by gjDRY;
	sub gjD gjRakar gjYa by gjDRYa;
	sub gjKR' [@gjJa_right] by gjKR.calt;
	sub gjKR' [@gjNa_right @gjGha_right @gjDha_right @gjTa_right @gjDa_right @gjNa_right @gjPa_right @gjBa_right @gjBha_right @gjLa_right @gjLla_right @gjVa_right @gjSa_right @gjHNa_right @gjCha_right @gjNna_right gjDRa] by gjKR.calt2;
	sub gjKR' [@gjCa_right @gjTha_right] by gjKR.calt3;
	sub @gjS gjTR by gjSTR;
	sub @gjK gjKRa by gjKKRa;
	sub @gjS gjKRa by gjSKRa;
	sub @gjS gjTRa by gjSTRa;

	lookup PRES_GUJR {

		sub gjNg gjKa by gjNgKa;
		sub gjNg gjKSsa by gjNgKSsa;
		sub gjNg gjMa by gjNgMa;
		sub gjNg gjYa by gjNgYa;
		sub gjTt gjTta by gjTtTta;
		sub gjTt gjTtha by gjTtTtha;
		sub gjTt gjVa by gjTtVa;
		sub gjTth gjTtha by gjTthTtha;
		sub gjTth gjYa by gjTthYa;
		sub gjDd gjDda by gjDdDda;
		sub gjDd gjNa by gjDdNa;
		sub gjDd gjVa by gjDdVa;
		sub gjDd gjMa by gjDdMa;
		sub gjDd gjYa by gjDdYa;
		sub gjDdh gjDdha by gjDdhDdha;
		sub gjDdh gjNa by gjDdhNa;
		sub gjD gjGa by gjDGa;
		sub gjD gjGha by gjDGha;
		sub gjD gjDa by gjDDa;
		sub gjD gjDha by gjDDha;
		sub gjD gjNa by gjDNa;
		sub gjD gjMa by gjDMa;
		sub gjD gjYa by gjDYa;
		sub gjD gjBa by gjDBa;
		sub gjD gjVa by gjDVa;
		sub gjP gjKa by gjPKa;
		sub gjP gjPha by gjPPha;
		sub gjH gjNna by gjHNna;
		sub gjH gjNa by gjHNa;
		sub gjH gjLa by gjHLa;
		sub gjH gjVa by gjHVa;
		sub gjH gjMa by gjHMa;
		sub gjH gjYa by gjHYa;
		sub gjJh gjYa by gjJhYa;

		sub gjKa gjVirama gjKa by gjKKa;
		sub gjKa gjVirama gjTta by gjKTta;
		sub gjKa gjVirama gjTa by gjKTa;
		sub gjKa gjVirama gjMa by gjKMa;
		sub gjKa gjVirama gjYa by gjKYa;
		sub gjKa gjVirama gjSa  by gjKSa;
		sub gjKa gjVirama gjSha by gjKSha;
		sub gjPha gjVirama gjTta by gjPhTta;
		sub gjPha gjVirama gjYa by gjPhYa;
		sub gjPha gjVirama gjSa by gjPhSa;
		sub gjJa gjVirama gjKa by gjJKa;
		sub gjJa gjVirama gjYa by gjJYa;
		sub gjZha gjVirama gjKa by gjZhKa;
		sub gjZha gjVirama gjYa by gjZhYa;
	} PRES_GUJR;
	lookup PRES {
		sub @gjK gjKa by gjKKa;
		sub @gjK gjTta by gjKTta;
		sub @gjK gjTa by gjKTa;
		sub @gjK gjMa by gjKMa;
		sub @gjK gjYa by gjKYa;
		sub @gjK gjSa by gjKSa;
		sub @gjK gjSha by gjKSha;
		sub @gjPh gjTta by gjPhTta;
		sub @gjPh gjYa by gjPhYa;
		sub @gjPh gjSa by gjPhSa;
		sub @gjJ gjKa by gjJKa;
		sub @gjJ gjYa by gjJYa;
		sub gjKh gjYa by gjKhYa;
		sub gjGh gjNa by gjGhNa;
		sub gjNy gjYa by gjNyYa;
		sub @gjT gjTa by gjTTa;
		sub @gjT gjMa by gjTMa;
		sub @gjT gjNa by gjTNa;
		sub @gjT gjYa by gjTYa;
		sub @gjDh gjNa by gjDhNa;
		sub @gjN gjNa by gjNNa;
		sub @gjN gjMa by gjNMa;
		sub @gjP gjTa by gjPTa;
		sub @gjP gjKa by gjPKa;
		sub @gjP gjPha by gjPPha;
		sub gjB gjYa by gjBYa;
		sub gjB gjKa by gjBKa;
		sub gjM gjKa by gjMKa;
		sub gjM gjPha by gjMPha;
		sub @gjL gjYa by gjLYa;
		sub @gjL gjKa by gjLKa;
		sub @gjL gjDda by gjLDda;
		sub gjLl gjYa by gjLlYa;
		sub gjV gjYa by gjVYa;
		sub @gjSs gjTta by gjSsTta;
		sub @gjSs gjTtha by gjSsTtha;
		sub @gjSs gjDda by gjSsDda;
		sub @gjS gjKa by gjSKa;
		sub @gjS gjTta by gjSTta;
		sub @gjS gjDda by gjSDda;
		sub @gjS gjPha by gjSPha;
		sub @gjS gjTha by gjSTha;
		sub @gjS gjYa by gjSYa;
		sub gjSh gjCa by gjShCa;
		sub gjSh gjNa by gjShNa;
		sub gjSh gjLa by gjShLa;
		sub gjSh gjVa by gjShVa;
		sub @gjZh gjKa by gjZhKa;
		sub @gjZh gjYa by gjZhYa;
		sub gjKSs gjYa by gjKSsYa;
		sub gjJNy gjYa by gjJNyYa;
		sub gjTT gjYa by gjTTYa;
	} PRES;

	sub [gjDdh gjTt]' lookup decomposeHalfForms [gjYa gjY];

	lookup PRES_PostForms {
		sub [gjKh gjG gjC gjNy @gjTh @gjP gjB gjBh gjM @gjY @gjL gjLl gjV] gjNa' lookup makePostNa;
		sub [gjCha @gjTta_left gjDdha gjTtTta gjTtTtha gjTtVa gjDdhDdha gjDdhNa gjDRa gjSsTta gjSsTtha] gjVirama' lookup makePostYa [gjYa gjY]';
		sub [gjDdh gjTt]' lookup makePostYa [gjYa gjY]';
		
		ignore sub gjLla gjRakar;
		sub @gjFullForms' gjRakar by @gjFullForms_Halfs;
		sub @gjFullForms_Halfs gjRakar' [@gjFullForms_Halfs @gjBaseForms] by gjR.post;
		sub @gjFullForms_Halfs gjRakar' lookup makePostRa;
	} PRES_PostForms;

	lookup PRES_MatraIContext;
} pres;



#----------------------------------------------------------------------------
# Above-base substitutions

lookup ABVS_insertRephAnusvara {
	sub gjMatraI by gjMatraI gjReph_gjAnusvara.calt;
	sub gjMatraI.1 by gjMatraI.1 gjReph_gjAnusvara.calt;
	sub gjMatraI.2 by gjMatraI.2 gjReph_gjAnusvara.calt;
	sub gjMatraI.3 by gjMatraI.3 gjReph_gjAnusvara.calt;
	sub gjMatraI.4 by gjMatraI.4 gjReph_gjAnusvara.calt;
	sub gjMatraI.5 by gjMatraI.5 gjReph_gjAnusvara.calt;
	sub gjMatraI.6 by gjMatraI.6 gjReph_gjAnusvara.calt;
	sub gjMatraI.7 by gjMatraI.7 gjReph_gjAnusvara.calt;
	sub gjMatraI.8 by gjMatraI.8 gjReph_gjAnusvara.calt;
} ABVS_insertRephAnusvara;

lookup ABVS_insertReph {
	sub gjMatraI by gjMatraI gjReph.calt;
	sub gjMatraI.1 by gjMatraI.1 gjReph.calt;
	sub gjMatraI.2 by gjMatraI.2 gjReph.calt;
	sub gjMatraI.3 by gjMatraI.3 gjReph.calt;
	sub gjMatraI.4 by gjMatraI.4 gjReph.calt;
	sub gjMatraI.5 by gjMatraI.5 gjReph.calt;
	sub gjMatraI.6 by gjMatraI.6 gjReph.calt;
	sub gjMatraI.7 by gjMatraI.7 gjReph.calt;
	sub gjMatraI.8 by gjMatraI.8 gjReph.calt;
} ABVS_insertReph;

lookup ABVS_insertAnusvara {
	sub gjMatraI by gjMatraI gjAnusvara.calt;
	sub gjMatraI.1 by gjMatraI.1 gjAnusvara.calt;
	sub gjMatraI.2 by gjMatraI.2 gjAnusvara.calt;
	sub gjMatraI.3 by gjMatraI.3 gjAnusvara.calt;
	sub gjMatraI.4 by gjMatraI.4 gjAnusvara.calt;
	sub gjMatraI.5 by gjMatraI.5 gjAnusvara.calt;
	sub gjMatraI.6 by gjMatraI.6 gjAnusvara.calt;
	sub gjMatraI.7 by gjMatraI.7 gjAnusvara.calt;
	sub gjMatraI.8 by gjMatraI.8 gjAnusvara.calt;
} ABVS_insertAnusvara;

lookup ABVS_insertCandrabindu {
	sub gjMatraI by gjMatraI gjCandrabindu.calt;
	sub gjMatraI.1 by gjMatraI.1 gjCandrabindu.calt;
	sub gjMatraI.2 by gjMatraI.2 gjCandrabindu.calt;
	sub gjMatraI.3 by gjMatraI.3 gjCandrabindu.calt;
	sub gjMatraI.4 by gjMatraI.4 gjCandrabindu.calt;
	sub gjMatraI.5 by gjMatraI.5 gjCandrabindu.calt;
	sub gjMatraI.6 by gjMatraI.6 gjCandrabindu.calt;
	sub gjMatraI.7 by gjMatraI.7 gjCandrabindu.calt;
	sub gjMatraI.8 by gjMatraI.8 gjCandrabindu.calt;
} ABVS_insertCandrabindu;

@gjHalfForms = [gjK gjK.calt gjK.calt2 gjK.calt3 gjKh gjG gjGh gjNg gjC gjCh gjJ gjJ.calt gjJ.calt2 gjJ.calt3 gjJh gjNy gjTt gjTth gjDd gjDdh gjNn gjT gjT.calt gjTh gjTh.calt gjD gjDh gjDh.calt gjN gjN.calt gjN.calt2 gjN.post gjP gjP.calt gjPh gjPh.calt gjPh.calt2 gjPh.calt3 gjB gjBh gjM gjY gjY.calt gjY.post gjR.post gjL gjL.calt gjLl gjV gjSh gjSh.calt gjSs gjSs.calt gjS gjS.calt gjH gjZh gjZh.calt gjZh.calt2 gjZh.calt3 gjKSs gjJNy gjKR.calt gjKR.calt2 gjKR.calt3 gjKSsR gjKhR gjGR gjGhR gjNnR gjTR gjThR gjDRY gjDhR gjNR gjPR gjBR gjBhR gjMR gjVR gjShR gjSsR gjSTR gjSR gjKT gjKM gjKY gjKSh gjKSsY gjKS gjKhY gjGhN gjNgM gjNgY gjJNyY gjJY gjJhY gjNyY gjTthY gjDdM gjDdY gjTT gjTTY gjTN gjTM gjTY gjDM gjDY gjDhN gjNN gjNM gjPT gjPhY gjPhS gjBY gjLY gjLlY gjVY gjShC gjShN gjShL gjShV gjSTh gjSY gjHM gjHY gjZhY];
@gjEndForms = [gjKa gjKha gjGa gjGha gjNga gjCa gjCha gjJa gjJha gjNya gjTta gjTtha gjDda gjDdha gjNna gjTa gjTha gjDa gjDha gjNa gjPa gjPha gjBa gjBha gjMa gjYa gjRa gjLa gjLla gjVa gjSha gjSsa gjSa gjHa gjZha gjMatraAa.base gjKSsa gjJNya gjKRa gjKKRa gjKSsRa gjKhRa gjGRa gjGhRa gjJRa gjJhRa gjNnRa gjTRa gjThRa gjDRa gjDRYa gjDhRa gjNRa gjPRa gjPhRa gjBRa gjBhRa gjMRa gjLlRa gjVRa gjShRa gjSsRa gjSKRa gjSTRa gjSRa gjZhRa gjKKa gjKTta gjKTa gjKMa gjKYa gjKSha gjKSsYa gjKSa gjKhYa gjGhNa gjNgKa gjNgKSsa gjNgMa gjNgYa gjJKa gjJNyYa gjJYa gjJhYa gjNyYa gjTtTta gjTtTtha gjTtVa gjTthTtha gjTthYa gjDdDda gjDdNa gjDdMa gjDdYa gjDdVa gjDdhDdha gjDdhNa gjTTa gjTTYa gjTNa gjTMa gjTYa gjDGa gjDGha gjDDa gjDDha gjDNa gjDBa gjDMa gjDYa gjDVa gjDhNa gjNNa gjNMa gjPKa gjPTa gjPPha gjPhTta gjPhYa gjPhSa gjBKa gjBYa gjMKa gjMPha gjLKa gjLDda gjLYa gjLlYa gjVYa gjShCa gjShNa gjShLa gjShVa gjSsTta gjSsTtha gjSsDda gjSKa gjSDda gjSTta gjSTha gjSPha gjSYa gjHNna gjHNa gjHLa gjHVa gjHMa gjHYa gjZhKa gjZhYa];

@gjNormalRephAnusvara = [gjReph gjAnusvara gjReph_gjAnusvara gjCandrabindu];
@gjAltRephAnusvara = [gjReph.calt gjAnusvara.calt gjReph_gjAnusvara.calt gjCandrabindu.calt];
@gjHiddenRephAnusvara = [gjReph.calt2 gjAnusvara.calt2 gjReph_gjAnusvara.calt2 gjCandrabindu.calt2];

@gjMatraI = [gjMatraI gjMatraI.1 gjMatraI.2 gjMatraI.3 gjMatraI.4 gjMatraI.5 gjMatraI.6 gjMatraI.7 gjMatraI.8];

@gjMatras = [gjMatraAa gjMatraIi gjMatraCandraO gjMatraO gjMatraAu gjMatraCandraE gjMatraE gjMatraAi];

feature abvs {
	# bugfix (Webkit) - places Reph on the base, not on the matra
	sub gjReph gjMatraCandraO [gjAnusvara gjCandrabindu] by gjMatraCandraO_gjReph_gjAnusvara;
	sub gjReph gjMatraCandraO by gjMatraCandraO_gjReph;
	sub gjReph gjMatraO [gjAnusvara gjCandrabindu] by gjMatraO_gjReph_gjAnusvara;
	sub gjReph gjMatraO by gjMatraO_gjReph;
	sub gjReph gjMatraAu [gjAnusvara gjCandrabindu] by gjMatraAu_gjReph_gjAnusvara;
	sub gjReph gjMatraAu by gjMatraAu_gjReph;
	sub gjReph gjMatraAa [gjAnusvara gjCandrabindu] by gjMatraAa_gjReph_gjAnusvara;
	sub gjReph gjMatraAa by gjMatraAa_gjReph;

	lookup ABVS_decompose {
		sub gjCandraE by gjA gjMatraCandraE;
		sub gjE by gjA gjMatraE;
		sub gjAi by gjA gjMatraAi;
		sub gjCandraO by gjAa gjMatraCandraE;
		sub gjO by gjAa gjMatraE;
		sub gjAu by gjAa gjMatraAi;
		sub gjMatraCandraO by gjMatraAa gjMatraCandraE;
		sub gjMatraO by gjMatraAa gjMatraE;
		sub gjMatraAu by gjMatraAa gjMatraAi;
	} ABVS_decompose;

	lookup ABVS_candrabindu {
		lookupflag MarkAttachmentType @gjMarks_above;

		sub gjMatraIi gjCandrabindu' by gjCandrabindu.calt3;
	} ABVS_candrabindu;

	lookup ABVS_makeMatraIiLigatures {
		lookupflag MarkAttachmentType @gjMarks_above;

		sub gjMatraIi gjReph [gjAnusvara gjCandrabindu gjCandrabindu.calt3] by gjMatraIi_gjReph_gjAnusvara;
		sub gjMatraIi gjReph by gjMatraIi_gjReph;

		# bugfix (Webkit)
		sub gjReph gjMatraIi [gjAnusvara gjCandrabindu gjCandrabindu.calt3] by gjMatraIi_gjReph_gjAnusvara;
		sub gjReph gjMatraIi by gjMatraIi_gjReph;
	} ABVS_makeMatraIiLigatures;

	lookup ABVS_matraLigatures {
		lookupflag IgnoreBaseGlyphs;

		sub gjReph [gjAnusvara gjCandrabindu] by gjReph_gjAnusvara;
		sub gjMatraCandraE gjAnusvara by gjCandrabindu;
		sub gjMatraAi gjAnusvara by gjMatraAi_gjAnusvara;
		sub gjMatraE gjAnusvara by gjMatraE_gjAnusvara;
		sub gjMatraCandraE gjCandrabindu by gjCandrabindu;
		sub gjMatraAi gjCandrabindu by gjMatraAi_gjCandrabindu;
		sub gjMatraE gjCandrabindu by gjMatraE_gjCandrabindu;

		sub gjMatraCandraE gjReph [gjAnusvara gjCandrabindu] by gjMatraCandraE_gjReph_gjAnusvara;
		sub gjMatraCandraE gjReph by gjMatraCandraE_gjReph;
		sub gjMatraE gjReph [gjAnusvara gjCandrabindu] by gjMatraE_gjReph_gjAnusvara;
		sub gjMatraE gjReph by gjMatraE_gjReph;
		sub gjMatraAi gjReph [gjAnusvara gjCandrabindu] by gjMatraAi_gjReph_gjAnusvara;
		sub gjMatraAi gjReph by gjMatraAi_gjReph;

		# bugfix (Webkit)
		sub gjReph gjMatraCandraE gjAnusvara by gjMatraCandraE_gjReph_gjAnusvara;
		sub gjReph gjMatraCandraE by gjMatraCandraE_gjReph;
		sub gjReph gjMatraE gjAnusvara by gjMatraE_gjReph_gjAnusvara;
		sub gjReph gjMatraE by gjMatraE_gjReph;
		sub gjReph gjMatraAi gjAnusvara by gjMatraAi_gjReph_gjAnusvara;
		sub gjReph gjMatraAi by gjMatraAi_gjReph;
	} ABVS_matraLigatures;

	lookup ABVS_MatraIRephAnusvara2 {
		lookupflag MarkAttachmentType @gjMarks_above;

		sub @gjMatraI @gjHalfForms @gjHalfForms @gjEndForms @gjNormalRephAnusvara' by @gjHiddenRephAnusvara;
		sub @gjMatraI @gjHalfForms @gjEndForms @gjNormalRephAnusvara' by @gjHiddenRephAnusvara;
		sub @gjMatraI @gjEndForms @gjNormalRephAnusvara' by @gjHiddenRephAnusvara;
		sub gjReph.calt2 gjAnusvara' by gjAnusvara.calt2;
	} ABVS_MatraIRephAnusvara2;

	lookup ABVS_MatraIRephAnusvara1 {
		lookupflag MarkAttachmentType @gjMarks_above;
	
		sub @gjMatraI' lookup ABVS_insertRephAnusvara @gjHalfForms @gjHalfForms @gjEndForms [gjReph_gjAnusvara gjReph_gjAnusvara.calt2];
		sub @gjMatraI' lookup ABVS_insertRephAnusvara @gjHalfForms @gjEndForms [gjReph_gjAnusvara gjReph_gjAnusvara.calt2];
		sub @gjMatraI' lookup ABVS_insertRephAnusvara @gjEndForms [gjReph_gjAnusvara gjReph_gjAnusvara.calt2];
		sub @gjMatraI' lookup ABVS_insertReph @gjHalfForms @gjHalfForms @gjEndForms [gjReph gjReph.calt2];
		sub @gjMatraI' lookup ABVS_insertReph @gjHalfForms @gjEndForms [gjReph gjReph.calt2];
		sub @gjMatraI' lookup ABVS_insertReph @gjEndForms [gjReph gjReph.calt2];
		sub @gjMatraI' lookup ABVS_insertAnusvara @gjHalfForms @gjHalfForms @gjEndForms [gjAnusvara gjAnusvara.calt2];
		sub @gjMatraI' lookup ABVS_insertAnusvara @gjHalfForms @gjEndForms [gjAnusvara gjAnusvara.calt2];
		sub @gjMatraI' lookup ABVS_insertAnusvara @gjEndForms [gjAnusvara gjAnusvara.calt2];
		sub @gjMatraI' lookup ABVS_insertCandrabindu @gjHalfForms @gjHalfForms @gjEndForms [gjCandrabindu gjCandrabindu.calt2];
		sub @gjMatraI' lookup ABVS_insertCandrabindu @gjHalfForms @gjEndForms [gjCandrabindu gjCandrabindu.calt2];
		sub @gjMatraI' lookup ABVS_insertCandrabindu @gjEndForms [gjCandrabindu gjCandrabindu.calt2];
	} ABVS_MatraIRephAnusvara1;
} abvs;



#----------------------------------------------------------------------------
# Below-base substitutions

lookup makeMatraAa_gMatraVocalicR {
	sub gjMatraVocalicR by gjMatraAa_gjMatraVocalicR;
	sub gjMatraVocalicRr by gjMatraAa_gjMatraVocalicRr;
} makeMatraAa_gMatraVocalicR;

lookup nuktify {
	sub gjNukta by gjNukta.calt;
} nuktify;

@gjBaseFormsWithNuktaAlt = [
	gjKa gjNga gjCha gjJa gjJha gjTta gjTtha gjDda gjDdha gjTa gjDa gjHa gjZha
	gjKRa gjJRa gjZhRa gjK gjJ gjZh gjKR];

@gjMarks_nuktabelow = [@gjMarks_nukta @gjMarks_below];



feature blws {
	sub gjRakar gjMatraU by gjRakar_gjMatraU;
	sub gjRakar gjMatraUu by gjRakar_gjMatraUu;

	sub gjMatraAa.base gjVirama by gjAnusvara.calt2; # just to erase this combination

	lookup BLWS_Rukar1 {
		lookupflag MarkAttachmentType @gjMarks_below;

		sub gjNna gjMatraU by gjNna_gjMatraU;
		sub gjRa gjMatraU by gjRa_gjMatraU;
		sub gjRa gjMatraUu by gjRa_gjMatraUu;
		sub gjKSsa gjMatraU by gjKSsa_gjMatraU;
		sub gjLla gjMatraVocalicR by gjLla_gjMatraVocalicR;
		sub gjLla gjMatraVocalicRr by gjLla_gjMatraVocalicRr;
	} BLWS_Rukar1;

	lookup BLWS_Nukta {
		lookupflag UseMarkFilteringSet @gjMarks_nuktabelow;

		sub @gjBaseFormsWithNuktaAlt gjNukta' lookup nuktify [gjMatraU gjMatraUu gjRakar_gjMatraU gjRakar_gjMatraUu gjMatraVocalicR gjMatraVocalicRr gjVirama];
	} BLWS_Nukta;

	lookup BLWS_Rukar2 {
		lookupflag MarkAttachmentType @gjMarks_below;

		sub @gjFullForms' [gjMatraVocalicR gjMatraVocalicRr] by @gjFullForms_Halfs;
		sub @gjFullForms_Halfs [gjMatraVocalicR gjMatraVocalicRr]' lookup makeMatraAa_gMatraVocalicR;
	} BLWS_Rukar2;
} blws;



#----------------------------------------------------------------------------
# Post-base Substitutions

@gjMatraIi = [gjMatraIi gjMatraIi_gjReph gjMatraIi_gjReph_gjAnusvara];
@gjMatraIi.1 =[gjMatraIi.1 gjMatraIi_gjReph.1 gjMatraIi_gjReph_gjAnusvara.1];
@gjMatraIi.2 =[gjMatraIi.2 gjMatraIi_gjReph.2 gjMatraIi_gjReph_gjAnusvara.2];
@gjMatraIi.3 =[gjMatraIi.3 gjMatraIi_gjReph.3 gjMatraIi_gjReph_gjAnusvara.3];



feature psts {
	lookup PSTS_JaZhaMatraLigatures {
		lookupflag IgnoreMarks;

		sub gjJa gjMatraAa by gjJa_gjMatraAa;
		sub gjJa gjMatraIi by gjJa_gjMatraIi;
		sub gjJRa gjMatraAa by gjJRa_gjMatraAa;
		sub gjJRa gjMatraIi by gjJRa_gjMatraIi;
		
		sub gjZha gjMatraAa by gjZha_gjMatraAa;
		sub gjZha gjMatraIi by gjZha_gjMatraIi;
		sub gjZhRa gjMatraAa by gjZhRa_gjMatraAa;
		sub gjZhRa gjMatraIi by gjZhRa_gjMatraIi;
	} PSTS_JaZhaMatraLigatures;

	lookup PSTS_ContextualMatraIi {
		lookupflag IgnoreMarks;
		
		sub [gjNga gjCha gjJha gjJhRa gjDa gjDDa gjDRa gjDGa gjDGha gjDDha gjDNa gjDBa gjDVa gjTthTtha gjSsTta gjSsTtha] @gjMatraIi' by @gjMatraIi.1;
		sub [@gjKa_left gjTtha @gjPha_left gjRa gjLla gjNgKa gjNgKSsa] @gjMatraIi' by @gjMatraIi.2;
		sub [gjTta gjKTta gjPhTta gjDdha gjDdhDdha gjDdhNa gjTtTta gjTtTtha gjTtVa gjHNna gjHNa gjHLa gjHVa] @gjMatraIi' by @gjMatraIi.3;
	} PSTS_ContextualMatraIi;
} psts;