-
Notifications
You must be signed in to change notification settings - Fork 162
/
familyGSUB.fea
870 lines (746 loc) · 44.9 KB
/
familyGSUB.fea
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
868
869
870
languagesystem DFLT dflt;
languagesystem latn dflt; # Latin default
languagesystem cyrl dflt; # Cyrillic default
languagesystem grek dflt; # Greek default
languagesystem latn AZE; # Azeri
languagesystem latn CRT; # Crimean Tatar
languagesystem latn TRK; # Turkish
languagesystem latn NLD; # Dutch
languagesystem cyrl SRB; # Serbian
languagesystem cyrl BGR; # Bulgarian
# Figures:
@FIG_LINING_TAB = [ zero one two three four five six seven eight nine ];
@FIG_OLDSTYLE_TAB = [ zero.tosf one.tosf two.tosf three.tosf four.tosf five.tosf six.tosf seven.tosf eight.tosf nine.tosf ];
@FIG_LINING = [ zero.lf one.lf two.lf three.lf four.lf five.lf six.lf seven.lf eight.lf nine.lf ];
@FIG_OLDSTYLE = [ zero.osf one.osf two.osf three.osf four.osf five.osf six.osf seven.osf eight.osf nine.osf ];
@FIG_NUMR = [ zero.numr one.numr two.numr three.numr four.numr five.numr six.numr seven.numr eight.numr nine.numr ];
@FIG_DNOM = [ zero.dnom one.dnom two.dnom three.dnom four.dnom five.dnom six.dnom seven.dnom eight.dnom nine.dnom ];
@FIG_SUPS = [ zero.sups one.sups two.sups three.sups four.sups five.sups six.sups seven.sups eight.sups nine.sups ];
@FIG_INF = [ zero.subs one.subs two.subs three.subs four.subs five.subs six.subs seven.subs eight.subs nine.subs ];
@FIG_CASE = [ zero.cap one.cap two.cap three.cap four.cap five.cap six.cap seven.cap eight.cap nine.cap ];
@FIG_SC = [ zero.sc one.sc two.sc three.sc four.sc five.sc six.sc seven.sc eight.sc nine.sc ];
# Latin:
@LAT_LC_BASIC = [ a b c d e f g h i j k l m n o p q r s t u v w x y z ];
@LAT_UC_BASIC = [ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ];
@LAT_SC_BASIC = [ A.sc B.sc C.sc D.sc E.sc F.sc G.sc H.sc I.sc J.sc K.sc L.sc M.sc N.sc O.sc P.sc Q.sc R.sc S.sc T.sc U.sc V.sc W.sc X.sc Y.sc Z.sc ];
@LAT_LC_ACCENTED = [ agrave aacute acircumflex atilde adieresis amacron abreve abreveacute abrevedotbelow abrevegrave abrevehoi abrevetilde acaron acircumflexacute acircumflexdotbelow acircumflexgrave acircumflexhoi acircumflextilde adotbelow ahoi aring aogonek ccedilla cacute ccaron ccircumflex cdotaccent dcaron ddotbelow dlinebelow egrave eacute ecircumflex ecaron edieresis emacron edotaccent eogonek ebreve ecircumflexacute ecircumflexdotbelow ecircumflexgrave ecircumflexhoi ecircumflextilde edotbelow ehoi etilde gbreve gdotaccent gcommaaccent gcaron gcircumflex gmacron gtilde hbrevebelow hcircumflex hdotbelow igrave iacute icircumflex idieresis imacron i.trk iogonek icaron idotbelow ihoi itilde jcircumflex kcommaaccent lacute lcaron lcommaaccent ldot ldotbelow ldotbelowmacron llinebelow mdotbelow nacute ncaron ntilde ncommaaccent ndotaccent ndotbelow nlinebelow ograve oacute ocircumflex otilde odieresis omacron ohungarumlaut ocaron ocircumflexacute ocircumflexdotbelow ocircumflexgrave ocircumflexhoi ocircumflextilde odotbelow ohoi ohorn ohornacute ohorndotbelow ohorngrave ohornhoi ohorntilde racute rcaron rcommaaccent rdotbelow rdotbelowmacron rlinebelow sacute scaron scedilla scommaaccent scircumflex sdotaccent sdotbelow tcaron tcedilla tcommaaccent tdotbelow tlinebelow ugrave uacute ucircumflex udieresis umacron uring uhungarumlaut uogonek ubreve ucaron udieresisacute udieresiscaron udieresisgrave udieresismacron udotbelow uhoi uhorn uhornacute uhorndotbelow uhorngrave uhornhoi uhorntilde utilde wacute wcircumflex wdieresis wgrave yacute ydieresis ycircumflex ydotaccent ydotbelow ygrave yhoi ytilde zacute zcaron zdotaccent zdotbelow macute ngrave obreve ];
@LAT_UC_ACCENTED = [ Agrave Aacute Acircumflex Atilde Adieresis Amacron Abreve Abreveacute Abrevedotbelow Abrevegrave Abrevehoi Abrevetilde Acaron Acircumflexacute Acircumflexdotbelow Acircumflexgrave Acircumflexhoi Acircumflextilde Adotbelow Ahoi Aring Aogonek Ccedilla Cacute Ccaron Ccircumflex Cdotaccent Dcaron Ddotbelow Dlinebelow Egrave Eacute Ecircumflex Ecaron Edieresis Emacron Edotaccent Eogonek Ebreve Ecircumflexacute Ecircumflexdotbelow Ecircumflexgrave Ecircumflexhoi Ecircumflextilde Edotbelow Ehoi Etilde Gbreve Gdotaccent Gcommaaccent Gcaron Gcircumflex Gmacron Gtilde Hbrevebelow Hcircumflex Hdotbelow Igrave Iacute Icircumflex Idieresis Imacron Idotaccent Iogonek Icaron Idotbelow Ihoi Itilde Jcircumflex Kcommaaccent Lacute Lcaron Lcommaaccent Ldot Ldotbelow Ldotbelowmacron Llinebelow Mdotbelow Nacute Ncaron Ntilde Ncommaaccent Ndotaccent Ndotbelow Nlinebelow Ograve Oacute Ocircumflex Otilde Odieresis Omacron Ohungarumlaut Ocaron Ocircumflexacute Ocircumflexdotbelow Ocircumflexgrave Ocircumflexhoi Ocircumflextilde Odotbelow Ohoi Ohorn Ohornacute Ohorndotbelow Ohorngrave Ohornhoi Ohorntilde Racute Rcaron Rcommaaccent Rdotbelow Rdotbelowmacron Rlinebelow Sacute Scaron Scedilla Scommaaccent Scircumflex Sdotaccent Sdotbelow Tcaron Tcedilla Tcommaaccent Tdotbelow Tlinebelow Ugrave Uacute Ucircumflex Udieresis Umacron Uring Uhungarumlaut Uogonek Ubreve Ucaron Udieresisacute Udieresiscaron Udieresisgrave Udieresismacron Udotbelow Uhoi Uhorn Uhornacute Uhorndotbelow Uhorngrave Uhornhoi Uhorntilde Utilde Wacute Wcircumflex Wdieresis Wgrave Yacute Ydieresis Ycircumflex Ydotaccent Ydotbelow Ygrave Yhoi Ytilde Zacute Zcaron Zdotaccent Zdotbelow Macute Ngrave Obreve ];
@LAT_SC_ACCENTED = [ Agrave.sc Aacute.sc Acircumflex.sc Atilde.sc Adieresis.sc Amacron.sc Abreve.sc Abreveacute.sc Abrevedotbelow.sc Abrevegrave.sc Abrevehoi.sc Abrevetilde.sc Acaron.sc Acircumflexacute.sc Acircumflexdotbelow.sc Acircumflexgrave.sc Acircumflexhoi.sc Acircumflextilde.sc Adotbelow.sc Ahoi.sc Aring.sc Aogonek.sc Ccedilla.sc Cacute.sc Ccaron.sc Ccircumflex.sc Cdotaccent.sc Dcaron.sc Ddotbelow.sc Dlinebelow.sc Egrave.sc Eacute.sc Ecircumflex.sc Ecaron.sc Edieresis.sc Emacron.sc Edotaccent.sc Eogonek.sc Ebreve.sc Ecircumflexacute.sc Ecircumflexdotbelow.sc Ecircumflexgrave.sc Ecircumflexhoi.sc Ecircumflextilde.sc Edotbelow.sc Ehoi.sc Etilde.sc Gbreve.sc Gdotaccent.sc Gcommaaccent.sc Gcaron.sc Gcircumflex.sc Gmacron.sc Gtilde.sc Hbrevebelow.sc Hcircumflex.sc Hdotbelow.sc Igrave.sc Iacute.sc Icircumflex.sc Idieresis.sc Imacron.sc Idotaccent.sc Iogonek.sc Icaron.sc Idotbelow.sc Ihoi.sc Itilde.sc Jcircumflex.sc Kcommaaccent.sc Lacute.sc Lcaron.sc Lcommaaccent.sc Ldot.sc Ldotbelow.sc Ldotbelowmacron.sc Llinebelow.sc Mdotbelow.sc Nacute.sc Ncaron.sc Ntilde.sc Ncommaaccent.sc Ndotaccent.sc Ndotbelow.sc Nlinebelow.sc Ograve.sc Oacute.sc Ocircumflex.sc Otilde.sc Odieresis.sc Omacron.sc Ohungarumlaut.sc Ocaron.sc Ocircumflexacute.sc Ocircumflexdotbelow.sc Ocircumflexgrave.sc Ocircumflexhoi.sc Ocircumflextilde.sc Odotbelow.sc Ohoi.sc Ohorn.sc Ohornacute.sc Ohorndotbelow.sc Ohorngrave.sc Ohornhoi.sc Ohorntilde.sc Racute.sc Rcaron.sc Rcommaaccent.sc Rdotbelow.sc Rdotbelowmacron.sc Rlinebelow.sc Sacute.sc Scaron.sc Scedilla.sc Scommaaccent.sc Scircumflex.sc Sdotaccent.sc Sdotbelow.sc Tcaron.sc Tcedilla.sc Tcommaaccent.sc Tdotbelow.sc Tlinebelow.sc Ugrave.sc Uacute.sc Ucircumflex.sc Udieresis.sc Umacron.sc Uring.sc Uhungarumlaut.sc Uogonek.sc Ubreve.sc Ucaron.sc Udieresisacute.sc Udieresiscaron.sc Udieresisgrave.sc Udieresismacron.sc Udotbelow.sc Uhoi.sc Uhorn.sc Uhornacute.sc Uhorndotbelow.sc Uhorngrave.sc Uhornhoi.sc Uhorntilde.sc Utilde.sc Wacute.sc Wcircumflex.sc Wdieresis.sc Wgrave.sc Yacute.sc Ydieresis.sc Ycircumflex.sc Ydotaccent.sc Ydotbelow.sc Ygrave.sc Yhoi.sc Ytilde.sc Zacute.sc Zcaron.sc Zdotaccent.sc Zdotbelow.sc Macute.sc Ngrave.sc Obreve.sc ];
@LAT_LC_ADDL = [ ae dcroat hbar lslash oslash oe eth thorn eng schwa ];
@LAT_UC_ADDL = [ AE Dcroat Hbar Lslash Oslash OE Eth Thorn Eng Schwa ];
@LAT_SC_ADDL = [ AE.sc Dcroat.sc Hbar.sc Lslash.sc Oslash.sc OE.sc Eth.sc Thorn.sc Eng.sc Schwa.sc ];
@LAT_LCSUPS_BASIC = [ a.sups b.sups c.sups d.sups e.sups f.sups g.sups h.sups i.sups j.sups k.sups l.sups m.sups n.sups o.sups p.sups q.sups r.sups s.sups t.sups u.sups v.sups w.sups x.sups y.sups z.sups ];
@LAT_UCSUPS_BASIC = [ A.sups B.sups C.sups D.sups E.sups F.sups G.sups H.sups I.sups J.sups K.sups L.sups M.sups N.sups O.sups P.sups Q.sups R.sups S.sups T.sups U.sups V.sups W.sups X.sups Y.sups Z.sups ];
@LAT_UC_ALL = [ @LAT_UC_BASIC @LAT_UC_ACCENTED @LAT_UC_ADDL ];
@LAT_SC_ALL = [ @LAT_SC_BASIC @LAT_SC_ACCENTED @LAT_SC_ADDL ];
# for ccmp
@LAT_UC_ACCENTED_DECOMP = [ Agrave Aacute Acircumflex Atilde Adieresis Amacron Abreve Abreveacute Abrevedotbelow Abrevegrave Abrevehoi Abrevetilde Acaron Acircumflexacute Acircumflexdotbelow Acircumflexgrave Acircumflexhoi Acircumflextilde Adotbelow Ahoi Aring Aogonek Ccedilla Cacute Ccaron Ccircumflex Cdotaccent Dcaron Ddotbelow Dlinebelow Egrave Eacute Ecircumflex Ecaron Edieresis Emacron Edotaccent Eogonek Ebreve Ecircumflexacute Ecircumflexdotbelow Ecircumflexgrave Ecircumflexhoi Ecircumflextilde Edotbelow Ehoi Etilde Gbreve Gdotaccent Gcommaaccent Gcaron Gcircumflex Gmacron Gtilde Hbrevebelow Hcircumflex Hdotbelow Igrave Iacute Icircumflex Idieresis Imacron Idotaccent Iogonek Icaron Idotbelow Ihoi Itilde Jcircumflex Kcommaaccent Lacute Lcommaaccent Ldotbelow Ldotbelowmacron Llinebelow Macute Mdotbelow Nacute Ncaron Ngrave Ntilde Ncommaaccent Ndotaccent Ndotbelow Nlinebelow Ograve Oacute Obreve Ocircumflex Otilde Odieresis Omacron Ohungarumlaut Ocaron Ocircumflexacute Ocircumflexdotbelow Ocircumflexgrave Ocircumflexhoi Ocircumflextilde Odotbelow Ohoi Ohornacute Ohorndotbelow Ohorngrave Ohornhoi Ohorntilde Racute Rcaron Rcommaaccent Rdotbelow Rdotbelowmacron Rlinebelow Sacute Scaron Scedilla Scommaaccent Scircumflex Sdotaccent Sdotbelow Tcaron Tcedilla Tcommaaccent Tdotbelow Tlinebelow Ugrave Uacute Ucircumflex Udieresis Umacron Uring Uhungarumlaut Ubreve Ucaron Udieresisacute Udieresiscaron Udieresisgrave Udieresismacron Udotbelow Uhoi Uhornacute Uhorndotbelow Uhorngrave Uhornhoi Uhorntilde Utilde Wacute Wcircumflex Wdieresis Wgrave Yacute Ydieresis Ycircumflex Ydotaccent Ydotbelow Ygrave Yhoi Ytilde Zacute Zcaron Zdotaccent Zdotbelow ];
@LAT_LC_ACCENTED_DECOMP = [ agrave aacute acircumflex atilde adieresis amacron abreve abreveacute abrevedotbelow abrevegrave abrevehoi abrevetilde acaron acircumflexacute acircumflexdotbelow acircumflexgrave acircumflexhoi acircumflextilde adotbelow ahoi aring ccedilla cacute ccaron ccircumflex cdotaccent ddotbelow dlinebelow egrave eacute ecircumflex ecaron edieresis emacron edotaccent ebreve ecircumflexacute ecircumflexdotbelow ecircumflexgrave ecircumflexhoi ecircumflextilde edotbelow ehoi etilde gbreve gdotaccent gcaron gcircumflex gmacron gtilde hbrevebelow hcircumflex hdotbelow igrave iacute icircumflex idieresis imacron iogonek icaron idotbelow ihoi itilde jcircumflex kcommaaccent lacute lcommaaccent ldotbelow ldotbelowmacron llinebelow macute mdotbelow nacute ncaron ngrave ntilde ncommaaccent ndotaccent ndotbelow nlinebelow ograve oacute obreve ocircumflex otilde odieresis omacron ohungarumlaut ocaron ocircumflexacute ocircumflexdotbelow ocircumflexgrave ocircumflexhoi ocircumflextilde odotbelow ohoi ohornacute ohorndotbelow ohorngrave ohornhoi ohorntilde racute rcaron rcommaaccent rdotbelow rdotbelowmacron rlinebelow sacute scaron scedilla scommaaccent scircumflex sdotaccent sdotbelow tcedilla tcommaaccent tdieresis tdotbelow tlinebelow ugrave uacute ucircumflex udieresis umacron uring uhungarumlaut ubreve ucaron udieresisacute udieresiscaron udieresisgrave udieresismacron udotbelow uhoi uhornacute uhorndotbelow uhorngrave uhornhoi uhorntilde utilde wacute wcircumflex wdieresis wgrave yacute ydieresis ycircumflex ydotaccent ydotbelow ygrave yhoi ytilde zacute zcaron zdotaccent zdotbelow ];
@GRK_LC_ACCENTED_DECOMP = [ alphatonos epsilontonos etatonos iotatonos iotadieresis omicrontonos upsilontonos upsilondieresis omegatonos iotadieresistonos upsilondieresistonos ];
@CYR_UC_ACCENTED_DECOMP = [ Ishort Io Gje Yi Kje Igravecyr Ushort Zhebreve Abrevecyr Iebreve Imacroncyr Odieresiscyr Umacroncyr Uacutedblcyr ];
@CYR_LC_ACCENTED_DECOMP = [ ishort io gje yi kje igravecyr ushort zhebreve abrevecyr iebreve imacroncyr odieresiscyr umacroncyr uacutedblcyr ];
@LC_ACCENTED_DECOMP_ALL = [ @LAT_LC_ACCENTED_DECOMP @CYR_LC_ACCENTED_DECOMP @GRK_LC_ACCENTED_DECOMP ];
@UC_ACCENTED_DECOMP_ALL = [ @LAT_UC_ACCENTED_DECOMP @CYR_UC_ACCENTED_DECOMP ];
@LAT_LC_ASCENDING = [ b d f h k l dcaron gcommaaccent lcaron tcaron thorn ];
@CYR_LC_ASCENDING = [ yat zhe.bgr ka.bgr yu.bgr ];
@LC_ASCENDING_ALL = [ @LAT_LC_ASCENDING @CYR_LC_ASCENDING ];
# Greek:
@GRK_UC_BASIC = [ Alpha Beta Gamma Delta Epsilon Zeta Eta Theta Iota Kappa Lambda Mu Nu Xi Omicron Pi Rho Sigma Tau Upsilon Phi Chi Psi Omega ];
@GRK_LC_BASIC = [ alpha beta gamma delta epsilon zeta eta theta iota kappa lambda mu nu xi omicron pi rho sigma tau upsilon phi chi psi omega ];
@GRK_SC_BASIC = [ Alpha.sc Beta.sc Gamma.sc Delta.sc Epsilon.sc Zeta.sc Eta.sc Theta.sc Iota.sc Kappa.sc Lambda.sc Mu.sc Nu.sc Xi.sc Omicron.sc Pi.sc Rho.sc Sigma.sc Tau.sc Upsilon.sc Phi.sc Chi.sc Psi.sc Omega.sc ];
@GRK_UC_ACCENTED = [ Alphatonos Epsilontonos Etatonos Iotatonos Iotadieresis Omicrontonos Upsilontonos Upsilondieresis Omegatonos ];
@GRK_LC_ACCENTED = [ alphatonos epsilontonos etatonos iotatonos iotadieresis omicrontonos upsilontonos upsilondieresis omegatonos ];
@GRK_SC_ACCENTED = [ Alpha.sc Epsilon.sc Eta.sc Iota.sc Iotadieresis.sc Omicron.sc Upsilon.sc Upsilondieresis.sc Omega.sc ];
@GRK_UC_ALL = [ @GRK_UC_BASIC @GRK_UC_ACCENTED ];
@GRK_SC_ALL = [ @GRK_SC_BASIC @GRK_SC_ACCENTED ];
# Cyrillic:
@CYR_LC_BASIC = [ acyr be ve ghe de ie zhe ze icyr ishort ka el em en ocyr pe er es te ucyr ef ha tse che sha shcha hard yeru soft ecyr yu ya ];
@CYR_UC_BASIC = [ Acyr Be Ve Ghe De Ie Zhe Ze Icyr Ishort Ka El Em En Ocyr Pe Er Es Te Ucyr Ef Ha Tse Che Sha Shcha Hard Yeru Soft Ecyr Yu Ya ];
@CYR_SC_BASIC = [ Acyr.sc Be.sc Ve.sc Ghe.sc De.sc Ie.sc Zhe.sc Ze.sc Icyr.sc Ishort.sc Ka.sc El.sc Em.sc En.sc Ocyr.sc Pe.sc Er.sc Es.sc Te.sc Ucyr.sc Ef.sc Ha.sc Tse.sc Che.sc Sha.sc Shcha.sc Hard.sc Yeru.sc Soft.sc Ecyr.sc Yu.sc Ya.sc ];
@CYR_LC_BGR = [ ve.bgr ghe.bgr de.bgr zhe.bgr ze.bgr icyr.bgr ishort.bgr ka.bgr el.bgr en.bgr pe.bgr te.bgr ef.bgr tse.bgr che.bgr sha.bgr shcha.bgr hard.bgr soft.bgr yu.bgr igravecyr.bgr ];
@CYR_UC_BGR = [ Icyr.bgr Ishort.bgr Igravecyr.bgr El.bgr Ef.bgr ];
@CYR_SC_BGR = [ Icyr.scbgr Ishort.scbgr Igravecyr.scbgr El.scbgr Ef.scbgr ];
@CYR_UC_EXTENDED = [ Iegrave Io Dje Gje Ieukran Dze Iukran Yi Je Lje Nje Tshe Kje Igravecyr Ushort Dzhe Yat Fita Izhitsa Gheup Ghestroke Zhedescender Zedescender Kadescender Kabashkir Endescender Esdescender Ustraight Ustraightstroke Hadescender Chedescender Shha Palochka Zhebreve Abrevecyr Aie Iebreve Schwacyr Imacroncyr Odieresiscyr Obarcyr Umacroncyr Uacutedblcyr ];
@CYR_LC_EXTENDED = [ iegrave io dje gje ieukran dze iukran yi je lje nje tshe kje igravecyr ushort dzhe yat fita izhitsa gheup ghestroke zhedescender zedescender kadescender kabashkir endescender esdescender ustraight ustraightstroke hadescender chedescender shha palochka zhebreve abrevecyr aie iebreve schwacyr imacroncyr odieresiscyr obarcyr umacroncyr uacutedblcyr ];
@CYR_SC_EXTENDED = [ Iegrave.sc Io.sc Dje.sc Gje.sc Ieukran.sc Dze.sc Iukran.sc Yi.sc Je.sc Lje.sc Nje.sc Tshe.sc Kje.sc Igravecyr.sc Ushort.sc Dzhe.sc Yat.sc Fita.sc Izhitsa.sc Gheup.sc Ghestroke.sc Zhedescender.sc Zedescender.sc Kadescender.sc Kabashkir.sc Endescender.sc Esdescender.sc Ustraight.sc Ustraightstroke.sc Hadescender.sc Chedescender.sc Shha.sc Palochka.sc Zhebreve.sc Abrevecyr.sc Aie.sc Iebreve.sc Schwacyr.sc Imacroncyr.sc Odieresiscyr.sc Obarcyr.sc Umacroncyr.sc Uacutedblcyr.sc ];
@CYR_UC_ALL = [ @CYR_UC_BASIC @CYR_UC_EXTENDED ];
@CYR_SC_ALL = [ @CYR_SC_BASIC @CYR_SC_EXTENDED ];
@UC_ALL = [ @LAT_UC_ALL @CYR_UC_ALL @GRK_UC_ALL ];
@SC_ALL = [ @LAT_SC_ALL @CYR_SC_ALL @GRK_SC_ALL ];
# Punctuation etc.:
@PUNCT_SMALL_FIG = [ bracketleft bracketright parenleft parenright period comma ];
@PUNCT_NUMR = [ bracketleft.numr bracketright.numr parenleft.numr parenright.numr period.numr comma.numr ];
@PUNCT_DNOM = [ bracketleft.dnom bracketright.dnom parenleft.dnom parenright.dnom period.dnom comma.dnom ];
@PUNCT_SUPS = [ bracketleft.sups bracketright.sups parenleft.sups parenright.sups period.sups comma.sups ];
@PUNCT_SUBS = [ bracketleft.subs bracketright.subs parenleft.subs parenright.subs period.subs comma.subs ];
@PUNCT_SC_SRC = [ ampersand exclam exclamdown question questiondown quotesingle quotedbl quoteleft quoteright quotedblleft quotedblright hyphen endash emdash parenleft parenright bracketleft bracketright braceleft braceright ];
@PUNCT_SC = [ ampersand.sc exclam.sc exclamdown.sc question.sc questiondown.sc quotesingle.sc quotedbl.sc quoteleft.sc quoteright.sc quotedblleft.sc quotedblright.sc hyphen.sc endash.sc emdash.sc parenleft.sc parenright.sc bracketleft.sc bracketright.sc braceleft.sc braceright.sc ];
@CASE_SOURCE = [ at braceleft braceright bracketleft bracketright emdash endash exclamdown guillemotleft guillemotright guilsinglleft guilsinglright horizontalbar hyphen parenleft parenright questiondown ];
@CASE_TARGET = [ at.cap braceleft.cap braceright.cap bracketleft.cap bracketright.cap emdash.cap endash.cap exclamdown.cap guillemotleft.cap guillemotright.cap guilsinglleft.cap guilsinglright.cap horizontalbar.cap hyphen.cap parenleft.cap parenright.cap questiondown.cap ];
@MARKS_CMB_ABOVE = [ gravecmb acutecmb circumflexcmb tildecmb macroncmb brevecmb dotaccentcmb dieresiscmb ringcmb hungarumlautcmb caroncmb hoicmb dieresisacute dieresisgrave dieresismacron dieresiscaron circumflexacute circumflexgrave circumflexhoi circumflextilde breveacute brevegrave brevehoi brevetilde brevecmb.cyr ];
@MARKS_CMB_ABOVE_CAP = [ gravecmb.cap acutecmb.cap circumflexcmb.cap tildecmb.cap macroncmb.cap brevecmb.cap dotaccentcmb.cap dieresiscmb.cap ringcmb.cap hungarumlautcmb.cap caroncmb.cap hoicmb.cap dieresisacute.cap dieresisgrave.cap dieresismacron.cap dieresiscaron.cap circumflexacute.cap circumflexgrave.cap circumflexhoi.cap circumflextilde.cap breveacute.cap brevegrave.cap brevehoi.cap brevetilde.cap brevecmb.cyrcap ];
@MARKS_CMB_BELOW = [ commabelowcmb cedillacmb ogonekcmb verticallinebelowcmb brevebelowcmb dieresisbelowcmb dotbelowcmb macronbelowcmb ];
@DOUBLE_MARKS = [ dieresisacute dieresistonoscmb dieresisgrave dieresismacron dieresiscaron circumflexacute circumflexgrave circumflexhoi circumflextilde breveacute brevegrave brevehoi brevetilde ];
lookup locl_NLD_ijacute {
# lookup for handling the Dutch double-accented IJ
sub j by dotlessj acutecmb;
sub J by J acutecmb.cap;
} locl_NLD_ijacute;
lookup DECOMPOSITION {
# for decomposing glyphs in case stacked accents are desired
sub Agrave by A gravecmb.cap;
sub Aacute by A acutecmb.cap;
sub Acircumflex by A circumflexcmb.cap;
sub Atilde by A tildecmb.cap;
sub Adieresis by A dieresiscmb.cap;
sub Amacron by A macroncmb.cap;
sub Abreve by A brevecmb.cap;
sub Abreveacute by A brevecmb.cap acutecmb.cap;
sub Abrevedotbelow by Abreve dotbelowcmb;
sub Abrevegrave by A brevecmb.cap gravecmb.cap;
sub Abrevehoi by A brevecmb.cap hoicmb.cap;
sub Abrevetilde by A brevecmb.cap tildecmb.cap;
sub Acaron by A caroncmb.cap;
sub Acircumflexacute by A circumflexcmb.cap acutecmb.cap;
sub Acircumflexdotbelow by Acircumflex dotbelowcmb;
sub Acircumflexgrave by A circumflexcmb.cap gravecmb.cap;
sub Acircumflexhoi by A circumflexcmb.cap hoicmb.cap;
sub Acircumflextilde by A circumflexcmb.cap tildecmb.cap;
sub Adotbelow by A dotbelowcmb;
sub Ahoi by A hoicmb.cap;
sub Aring by A ringcmb.cap;
sub Aogonek by A ogonekcmb;
sub Ccedilla by C cedillacmb;
sub Cacute by C acutecmb.cap;
sub Ccaron by C caroncmb.cap;
sub Ccircumflex by C circumflexcmb.cap;
sub Cdotaccent by C dotaccentcmb.cap;
sub Dcaron by D caroncmb.cap;
sub Ddotbelow by D dotbelowcmb;
sub Dlinebelow by D macronbelowcmb;
sub Egrave by E gravecmb.cap;
sub Eacute by E acutecmb.cap;
sub Ecircumflex by E circumflexcmb.cap;
sub Ecaron by E caroncmb.cap;
sub Edieresis by E dieresiscmb.cap;
sub Emacron by E macroncmb.cap;
sub Edotaccent by E dotaccentcmb.cap;
sub Eogonek by E ogonekcmb;
sub Ebreve by E brevecmb.cap;
sub Ecircumflexacute by E circumflexcmb.cap acutecmb.cap;
sub Ecircumflexdotbelow by Ecircumflex dotbelowcmb;
sub Ecircumflexgrave by E circumflexcmb.cap gravecmb.cap;
sub Ecircumflexhoi by E circumflexcmb.cap hoicmb.cap;
sub Ecircumflextilde by E circumflexcmb.cap tildecmb.cap;
sub Edotbelow by E dotbelowcmb;
sub Ehoi by E hoicmb.cap;
sub Etilde by E tildecmb.cap;
sub Gbreve by G brevecmb.cap;
sub Gdotaccent by G dotaccentcmb.cap;
sub Gcommaaccent by G commabelowcmb;
sub Gcaron by G caroncmb.cap;
sub Gcircumflex by G circumflexcmb.cap;
sub Gmacron by G macroncmb.cap;
sub Gtilde by G tildecmb.cap;
sub Hbrevebelow by H brevebelowcmb;
sub Hcircumflex by H circumflexcmb.cap;
sub Hdotbelow by H dotbelowcmb;
sub Igrave by I gravecmb.cap;
sub Iacute by I acutecmb.cap;
sub Icircumflex by I circumflexcmb.cap;
sub Idieresis by I dieresiscmb.cap;
sub Imacron by I macroncmb.cap;
sub Idotaccent by I dotaccentcmb.cap;
sub Iogonek by I ogonekcmb;
sub Icaron by I caroncmb.cap;
sub Idotbelow by I dotbelowcmb;
sub Ihoi by I hoicmb.cap;
sub Itilde by I tildecmb.cap;
sub Jcircumflex by J circumflexcmb.cap;
sub Kcommaaccent by K commabelowcmb;
sub Lacute by L acutecmb.cap;
sub Lcommaaccent by L commabelowcmb;
sub Ldotbelow by L dotbelowcmb;
sub Ldotbelowmacron by Ldotbelow macroncmb.cap;
sub Llinebelow by L macronbelowcmb;
sub Macute by M acutecmb.cap;
sub Mdotbelow by M dotbelowcmb;
sub Nacute by N acutecmb.cap;
sub Ncaron by N caroncmb.cap;
sub Ngrave by N gravecmb.cap;
sub Ntilde by N tildecmb.cap;
sub Ncommaaccent by N commabelowcmb;
sub Ndotaccent by N dotaccentcmb.cap;
sub Ndotbelow by N dotbelowcmb;
sub Nlinebelow by N macronbelowcmb;
sub Ograve by O gravecmb.cap;
sub Oacute by O acutecmb.cap;
sub Obreve by O brevecmb.cap;
sub Ocircumflex by O circumflexcmb.cap;
sub Otilde by O tildecmb.cap;
sub Odieresis by O dieresiscmb.cap;
sub Omacron by O macroncmb.cap;
sub Ohungarumlaut by O hungarumlautcmb.cap;
sub Ocaron by O caroncmb.cap;
sub Ocircumflexacute by O circumflexcmb.cap acutecmb.cap;
sub Ocircumflexdotbelow by Ocircumflex dotbelowcmb;
sub Ocircumflexgrave by O circumflexcmb.cap gravecmb.cap;
sub Ocircumflexhoi by O circumflexcmb.cap hoicmb.cap;
sub Ocircumflextilde by O circumflexcmb.cap tildecmb.cap;
sub Odotbelow by O dotbelowcmb;
sub Ohoi by O hoicmb.cap;
# sub Ohorn by O horncmb;
sub Ohornacute by Ohorn acutecmb.cap;
sub Ohorndotbelow by Ohorn dotbelowcmb;
sub Ohorngrave by Ohorn gravecmb.cap;
sub Ohornhoi by Ohorn hoicmb.cap;
sub Ohorntilde by Ohorn tildecmb.cap;
sub Racute by R acutecmb.cap;
sub Rcaron by R caroncmb.cap;
sub Rcommaaccent by R commabelowcmb;
sub Rdotbelow by R dotbelowcmb;
sub Rdotbelowmacron by Rdotbelow macroncmb.cap;
sub Rlinebelow by R macronbelowcmb;
sub Sacute by S acutecmb.cap;
sub Scaron by S caroncmb.cap;
sub Scedilla by S cedillacmb;
sub Scommaaccent by S commabelowcmb;
sub Scircumflex by S circumflexcmb.cap;
sub Sdotaccent by S dotaccentcmb.cap;
sub Sdotbelow by S dotbelowcmb;
sub Tcaron by T caroncmb.cap;
sub Tcedilla by T cedillacmb;
sub Tcommaaccent by T commabelowcmb;
sub Tdotbelow by T dotbelowcmb;
sub Tlinebelow by T macronbelowcmb;
sub Ugrave by U gravecmb.cap;
sub Uacute by U acutecmb.cap;
sub Ucircumflex by U circumflexcmb.cap;
sub Udieresis by U dieresiscmb.cap;
sub Umacron by U macroncmb.cap;
sub Uring by U ringcmb.cap;
sub Uhungarumlaut by U hungarumlautcmb.cap;
sub Ubreve by U brevecmb.cap;
sub Ucaron by U caroncmb.cap;
sub Udieresisacute by U dieresiscmb.cap acutecmb.cap;
sub Udieresiscaron by U dieresiscmb.cap caroncmb.cap;
sub Udieresisgrave by U dieresiscmb.cap gravecmb.cap;
sub Udieresismacron by U dieresiscmb.cap macroncmb.cap;
sub Udotbelow by U dotbelowcmb;
sub Uhoi by U hoicmb.cap;
# sub Uhorn by U horncmb;
sub Uhornacute by Uhorn acutecmb.cap;
sub Uhorndotbelow by Uhorn dotbelowcmb;
sub Uhorngrave by Uhorn gravecmb.cap;
sub Uhornhoi by Uhorn hoicmb.cap;
sub Uhorntilde by Uhorn tildecmb.cap;
sub Utilde by U tildecmb.cap;
sub Wacute by W acutecmb.cap;
sub Wcircumflex by W circumflexcmb.cap;
sub Wdieresis by W dieresiscmb.cap;
sub Wgrave by W gravecmb.cap;
sub Yacute by Y acutecmb.cap;
sub Ydieresis by Y dieresiscmb.cap;
sub Ycircumflex by Y circumflexcmb.cap;
sub Ydotaccent by Y dotaccentcmb.cap;
sub Ydotbelow by Y dotbelowcmb;
sub Ygrave by Y gravecmb.cap;
sub Yhoi by Y hoicmb.cap;
sub Ytilde by Y tildecmb.cap;
sub Zacute by Z acutecmb.cap;
sub Zcaron by Z caroncmb.cap;
sub Zdotaccent by Z dotaccentcmb.cap;
sub Zdotbelow by Z dotbelowcmb;
sub agrave by a gravecmb;
sub aacute by a acutecmb;
sub acircumflex by a circumflexcmb;
sub atilde by a tildecmb;
sub adieresis by a dieresiscmb;
sub amacron by a macroncmb;
sub abreve by a brevecmb;
sub abreveacute by a brevecmb acutecmb;
sub abrevedotbelow by abreve dotbelowcmb;
sub abrevegrave by a brevecmb gravecmb;
sub abrevehoi by a brevecmb hoicmb;
sub abrevetilde by a brevecmb tildecmb;
sub acaron by a caroncmb;
sub acircumflexacute by a circumflexcmb acutecmb;
sub acircumflexdotbelow by acircumflex dotbelowcmb;
sub acircumflexgrave by a circumflexcmb gravecmb;
sub acircumflexhoi by a circumflexcmb hoicmb;
sub acircumflextilde by a circumflexcmb tildecmb;
sub adotbelow by a dotbelowcmb;
sub ahoi by a hoicmb;
sub aring by a ringcmb;
sub ccedilla by c cedillacmb;
sub cacute by c acutecmb;
sub ccaron by c caroncmb;
sub ccircumflex by c circumflexcmb;
sub cdotaccent by c dotaccentcmb;
sub ddotbelow by d dotbelowcmb;
sub dlinebelow by d macronbelowcmb;
sub egrave by e gravecmb;
sub eacute by e acutecmb;
sub ecircumflex by e circumflexcmb;
sub ecaron by e caroncmb;
sub edieresis by e dieresiscmb;
sub emacron by e macroncmb;
sub edotaccent by e dotaccentcmb;
sub ebreve by e brevecmb;
sub ecircumflexacute by e circumflexcmb acutecmb;
sub ecircumflexdotbelow by ecircumflex dotbelowcmb;
sub ecircumflexgrave by e circumflexcmb gravecmb;
sub ecircumflexhoi by e circumflexcmb hoicmb;
sub ecircumflextilde by e circumflexcmb tildecmb;
sub edotbelow by e dotbelowcmb;
sub ehoi by e hoicmb;
sub etilde by e tildecmb;
sub gbreve by g brevecmb;
sub gdotaccent by g dotaccentcmb;
sub gcaron by g caroncmb;
sub gcircumflex by g circumflexcmb;
sub gmacron by g macroncmb;
sub gtilde by g tildecmb;
sub hbrevebelow by h brevebelowcmb;
sub hcircumflex by h circumflexcmb.cap;
sub hdotbelow by h dotbelowcmb;
sub igrave by dotlessi gravecmb;
sub iacute by dotlessi acutecmb;
sub icircumflex by dotlessi circumflexcmb;
sub idieresis by dotlessi dieresiscmb;
sub imacron by dotlessi macroncmb;
sub iogonek by dotlessi ogonekcmb;
sub icaron by dotlessi caroncmb;
sub idotbelow by dotlessi dotbelowcmb;
sub ihoi by dotlessi hoicmb;
sub itilde by dotlessi tildecmb;
sub jcircumflex by dotlessj circumflexcmb;
sub kcommaaccent by k commabelowcmb;
sub lacute by l acutecmb.cap;
sub lcommaaccent by l commabelowcmb;
sub ldotbelow by l dotbelowcmb;
sub ldotbelowmacron by ldotbelow macroncmb;
sub llinebelow by l macronbelowcmb;
sub macute by m acutecmb;
sub mdotbelow by m dotbelowcmb;
sub nacute by n acutecmb;
sub ncaron by n caroncmb;
sub ngrave by n gravecmb;
sub ntilde by n tildecmb;
sub ncommaaccent by n commabelowcmb;
sub ndotaccent by n dotaccentcmb;
sub ndotbelow by n dotbelowcmb;
sub nlinebelow by n macronbelowcmb;
sub ograve by o gravecmb;
sub oacute by o acutecmb;
sub obreve by o brevecmb;
sub ocircumflex by o circumflexcmb;
sub otilde by o tildecmb;
sub odieresis by o dieresiscmb;
sub omacron by o macroncmb;
sub ohungarumlaut by o hungarumlautcmb;
sub ocaron by o caroncmb;
sub ocircumflexacute by o circumflexcmb acutecmb;
sub ocircumflexdotbelow by ocircumflex dotbelowcmb;
sub ocircumflexgrave by o circumflexcmb gravecmb;
sub ocircumflexhoi by o circumflexcmb hoicmb;
sub ocircumflextilde by o circumflexcmb tildecmb;
sub odotbelow by o dotbelowcmb;
sub ohoi by o hoicmb;
sub ohornacute by ohorn acutecmb;
sub ohorndotbelow by ohorn dotbelowcmb;
sub ohorngrave by ohorn gravecmb;
sub ohornhoi by ohorn hoicmb;
sub ohorntilde by ohorn tildecmb;
sub racute by r acutecmb;
sub rcaron by r caroncmb;
sub rcommaaccent by r commabelowcmb;
sub rdotbelow by r dotbelowcmb;
sub rdotbelowmacron by rdotbelow macroncmb;
sub rlinebelow by r macronbelowcmb;
sub sacute by s acutecmb;
sub scaron by s caroncmb;
sub scedilla by s cedillacmb;
sub scommaaccent by s commabelowcmb;
sub scircumflex by s circumflexcmb;
sub sdotaccent by s dotaccentcmb;
sub sdotbelow by s dotbelowcmb;
sub tcedilla by t cedillacmb;
sub tcommaaccent by t commabelowcmb;
sub tdieresis by t dieresiscmb;
sub tdotbelow by t dotbelowcmb;
sub tlinebelow by t macronbelowcmb;
sub ugrave by u gravecmb;
sub uacute by u acutecmb;
sub ucircumflex by u circumflexcmb;
sub udieresis by u dieresiscmb;
sub umacron by u macroncmb;
sub uring by u ringcmb;
sub uhungarumlaut by u hungarumlautcmb;
sub ubreve by u brevecmb;
sub ucaron by u caroncmb;
sub udieresisacute by u dieresiscmb acutecmb;
sub udieresiscaron by u dieresiscmb caroncmb;
sub udieresisgrave by u dieresiscmb gravecmb;
sub udieresismacron by u dieresiscmb macroncmb;
sub udotbelow by u dotbelowcmb;
sub uhoi by u hoicmb;
sub uhornacute by uhorn acutecmb;
sub uhorndotbelow by uhorn dotbelowcmb;
sub uhorngrave by uhorn gravecmb;
sub uhornhoi by uhorn hoicmb;
sub uhorntilde by uhorn tildecmb;
sub utilde by u tildecmb;
sub wacute by w acutecmb;
sub wcircumflex by w circumflexcmb;
sub wdieresis by w dieresiscmb;
sub wgrave by w gravecmb;
sub yacute by y acutecmb;
sub ydieresis by y dieresiscmb;
sub ycircumflex by y circumflexcmb;
sub ydotaccent by y dotaccentcmb;
sub ydotbelow by y dotbelowcmb;
sub ygrave by y gravecmb;
sub yhoi by y hoicmb;
sub ytilde by y tildecmb;
sub zacute by z acutecmb;
sub zcaron by z caroncmb;
sub zdotaccent by z dotaccentcmb;
sub zdotbelow by z dotbelowcmb;
sub alphatonos by alpha tonoscmb;
sub epsilontonos by epsilon tonoscmb;
sub etatonos by eta tonoscmb;
sub iotatonos by iota tonoscmb;
sub iotadieresis by iota dieresiscmb;
sub omicrontonos by omicron tonoscmb;
sub upsilontonos by upsilon tonoscmb;
sub upsilondieresis by upsilon dieresiscmb;
sub omegatonos by omega tonoscmb;
sub iotadieresistonos by iota dieresistonoscmb;
sub upsilondieresistonos by upsilon dieresistonoscmb;
sub Ishort by Icyr brevecmb.cyrcap;
sub Io by Ie dieresiscmb.cap;
sub Gje by Ghe acutecmb.cap;
sub Yi by Iukran dieresiscmb.cap;
sub Kje by Ka acutecmb.cap;
sub Igravecyr by Icyr gravecmb.cap;
sub Ushort by Ucyr brevecmb.cyrcap;
sub Zhebreve by Zhe brevecmb.cyrcap;
sub Abrevecyr by Acyr brevecmb.cyrcap;
sub Iebreve by Ie brevecmb.cyrcap;
sub Imacroncyr by Icyr macroncmb.cap;
sub Odieresiscyr by Ocyr dieresiscmb.cap;
sub Umacroncyr by Ucyr macroncmb.cap;
sub Uacutedblcyr by Ucyr hungarumlautcmb.cap;
sub ishort by icyr brevecmb.cyr;
sub io by ie dieresiscmb;
sub gje by ghe acutecmb;
sub yi by dotlessi dieresiscmb;
sub kje by ka acutecmb;
sub igravecyr by icyr gravecmb;
sub ushort by ucyr brevecmb.cyr;
sub zhebreve by zhe brevecmb.cyr;
sub abrevecyr by acyr brevecmb.cyr;
sub iebreve by ie brevecmb.cyr;
sub imacroncyr by icyr macroncmb;
sub odieresiscyr by ocyr dieresiscmb;
sub umacroncyr by ucyr macroncmb;
sub uacutedblcyr by ucyr hungarumlautcmb;
} DECOMPOSITION;
lookup SOFT_DOT {
sub i by dotlessi;
sub j by dotlessj;
sub iukran by dotlessi;
sub je by dotlessj;
} SOFT_DOT;
lookup MARKS_DECOMPOSITION {
sub dieresisacute by dieresiscmb acutecmb;
sub dieresistonoscmb by dieresiscmb tonoscmb;
sub dieresisgrave by dieresiscmb gravecmb;
sub dieresismacron by dieresiscmb macroncmb;
sub dieresiscaron by dieresiscmb caroncmb;
sub circumflexacute by circumflexcmb acutecmb;
sub circumflexgrave by circumflexcmb gravecmb;
sub circumflexhoi by circumflexcmb hoicmb;
sub circumflextilde by circumflexcmb tildecmb;
sub breveacute by brevecmb acutecmb;
sub brevegrave by brevecmb gravecmb;
sub brevehoi by brevecmb hoicmb;
sub brevetilde by brevecmb tildecmb;
} MARKS_DECOMPOSITION;
#--------------------------------------
feature aalt { # Access All Alternates
feature locl;
feature c2sc;
feature smcp;
feature numr;
feature dnom;
feature ordn;
feature sups;
feature subs;
feature sinf;
feature pnum;
feature onum;
feature tnum;
feature lnum;
feature ss01;
feature ss02;
feature case;
feature zero;
} aalt;
#--------------------------------------
feature locl { # Localized Forms
script latn;
language TRK exclude_dflt;
lookup I_DOT {
sub i by i.trk;
} I_DOT;
language AZE exclude_dflt;
lookup I_DOT;
language CRT exclude_dflt;
lookup I_DOT;
script grek;
sub acutecmb by tonoscmb; # combining marks
script cyrl;
sub brevecmb by brevecmb.cyr; # combining marks
language SRB include_dflt;
lookup SRB_MKD_CYRILLIC {
sub be by be.srb;
} SRB_MKD_CYRILLIC;
language MKD include_dflt;
lookup SRB_MKD_CYRILLIC;
language BGR include_dflt;
lookup BULGARIAN_CYRILLIC {
sub [ Icyr Ishort Igravecyr El Ef ] by @CYR_UC_BGR;
sub [ ve ghe de zhe ze icyr ishort ka el en pe te ef tse che sha shcha hard soft yu igravecyr ] by @CYR_LC_BGR;
} BULGARIAN_CYRILLIC;
} locl;
#--------------------------------------
feature ccmp {
lookup DOUBLE_I_DIAERESIS { # substitutes alternate yi/idieresis in context
sub [idieresis yi]' [idieresis yi] by [idieresis.narrow yi.narrow];
sub [idieresis.narrow yi.narrow] [idieresis yi]' by [idieresis.narrow yi.narrow];
} DOUBLE_I_DIAERESIS;
lookup MARKS_COMPOSITION {
sub dieresiscmb acutecmb by dieresisacute;
sub dieresiscmb tonoscmb by dieresistonoscmb;
sub dieresiscmb gravecmb by dieresisgrave;
sub dieresiscmb macroncmb by dieresismacron;
sub dieresiscmb caroncmb by dieresiscaron;
sub circumflexcmb acutecmb by circumflexacute;
sub circumflexcmb gravecmb by circumflexgrave;
sub circumflexcmb hoicmb by circumflexhoi;
sub circumflexcmb tildecmb by circumflextilde;
sub brevecmb acutecmb by breveacute;
sub brevecmb gravecmb by brevegrave;
sub brevecmb hoicmb by brevehoi;
sub brevecmb tildecmb by brevetilde;
} MARKS_COMPOSITION;
lookup DECOMPOSE_PRECOMPOSED {
sub [ @UC_ACCENTED_DECOMP_ALL @LC_ACCENTED_DECOMP_ALL ]' lookup DECOMPOSITION [ @MARKS_CMB_ABOVE @MARKS_CMB_BELOW ];
sub [ i j iukran je ]' lookup SOFT_DOT @MARKS_CMB_ABOVE;
sub @DOUBLE_MARKS' lookup MARKS_DECOMPOSITION @MARKS_CMB_ABOVE;
} DECOMPOSE_PRECOMPOSED;
lookup CAP_ACCENTS_CMB_CONTEXT {
# substitutes combining marks for minuscules with forms for uppercase
sub [ @UC_ALL @SC_ALL @LC_ASCENDING_ALL ] @MARKS_CMB_ABOVE' by @MARKS_CMB_ABOVE_CAP;
sub [ @UC_ALL @SC_ALL @LC_ASCENDING_ALL ] @MARKS_CMB_BELOW @MARKS_CMB_ABOVE' by @MARKS_CMB_ABOVE_CAP;
sub @MARKS_CMB_ABOVE_CAP @MARKS_CMB_ABOVE' by @MARKS_CMB_ABOVE_CAP;
sub @MARKS_CMB_ABOVE_CAP @MARKS_CMB_BELOW @MARKS_CMB_ABOVE' by @MARKS_CMB_ABOVE_CAP;
} CAP_ACCENTS_CMB_CONTEXT;
lookup GLYPH_COMPOSITION_LAT_NONCONTEXTUAL {
# Glyphs that would look odd or be wrong if composed only with combining accents.
# The re-constructional substitution is mostly for InDesign.
# Works as expected in InDesign (15.1.2), not in Chrome (86.0) or Safari (14.0).
# For some reason, L|l|d + caron + dotbelowcmb/macronbelowcmb (in any order) will produce the wrong (and unattached) caron form in Chrome/Safari.
sub d caroncmb by dcaron;
sub l caroncmb by lcaron;
sub t caroncmb by tcaron;
sub L caroncmb.cap by Lcaron;
sub g tildecmb by gtilde; # AL4
sub G tildecmb.cap by Gtilde; # AL4
sub e ogonekcmb by eogonek;
sub u ogonekcmb by uogonek;
sub U ogonekcmb by Uogonek;
sub g cedillacmb by gcommaaccent; # The decomposition defined by Unicode is: 0067+0327
} GLYPH_COMPOSITION_LAT_NONCONTEXTUAL;
# works but silly. The caron is duplicated in the end.
# lookup CARON_RESHUFFLE {
# sub [ d l t L ]' [ @MARKS_CMB_BELOW @MARKS_CMB_ABOVE ] [ caroncmb caroncmb.cap ] by [ dcaron lcaron tcaron Lcaron ];
# } CARON_RESHUFFLE;
lookup IJ_ACUTE {
script latn;
language NLD exclude_dflt;
sub Iacute J' lookup locl_NLD_ijacute;
sub iacute j' lookup locl_NLD_ijacute;
} IJ_ACUTE;
} ccmp;
#--------------------------------------
feature numr { # Numerators
lookup NUMR {
sub @FIG_LINING_TAB by @FIG_NUMR;
sub @PUNCT_SMALL_FIG by @PUNCT_NUMR;
} NUMR;
} numr;
#--------------------------------------
feature dnom { # Denominators
sub @FIG_LINING_TAB by @FIG_DNOM;
sub @PUNCT_SMALL_FIG by @PUNCT_DNOM;
} dnom;
#--------------------------------------
feature frac { # Fractions
@SLASH = [ slash.frac fraction ];
lookup NUMR;
sub slash by slash.frac;
sub @FIG_NUMR space' by space.frac;
sub [ fraction slash.frac @FIG_DNOM @PUNCT_DNOM ] [ @FIG_NUMR @PUNCT_NUMR ]' by [ @FIG_DNOM @PUNCT_DNOM ];
sub @FIG_DNOM space.frac [ @FIG_NUMR @PUNCT_NUMR ]' by [ @FIG_DNOM @PUNCT_DNOM ];
} frac;
#--------------------------------------
feature ordn { # Ordinals
lookup SUPERIOR_MINUSCULE {
sub @LAT_LC_BASIC by @LAT_LCSUPS_BASIC;
sub [ egrave eacute ] by [ egrave.sups eacute.sups ];
sub i.trk by i.sups;
} SUPERIOR_MINUSCULE;
} ordn;
#--------------------------------------
feature sups { # Superscript
lookup SUPERIOR_MINUSCULE;
sub @LAT_UC_BASIC by @LAT_UCSUPS_BASIC;
lookup SUPERIOR_NUMERALS_SORTS {
sub @FIG_LINING_TAB by @FIG_SUPS;
sub @PUNCT_SMALL_FIG by @PUNCT_SUPS;
} SUPERIOR_NUMERALS_SORTS;
lookup SUPERIOR_SORTS {
sub [ colon hyphen endash emdash ] by [ colon.sups hyphen.sups endash.sups emdash.sups ];
} SUPERIOR_SORTS;
} sups;
#--------------------------------------
feature subs { # Subscript
lookup INFERIOR {
sub @FIG_LINING_TAB by @FIG_INF;
sub @PUNCT_SMALL_FIG by @PUNCT_SUBS;
} INFERIOR;
} subs;
#--------------------------------------
feature sinf { # Scientific Inferiors
lookup INFERIOR;
} sinf;
#--------------------------------------
feature c2sc { # caps to small caps
sub @LAT_UC_BASIC by @LAT_SC_BASIC;
sub @LAT_UC_ACCENTED by @LAT_SC_ACCENTED;
sub @LAT_UC_ADDL by @LAT_SC_ADDL;
sub Germandbls by Germandbls.sc;
sub @CYR_UC_BASIC by @CYR_SC_BASIC;
sub @CYR_UC_EXTENDED by @CYR_SC_EXTENDED;
sub @CYR_UC_BGR by @CYR_SC_BGR;
sub @GRK_UC_BASIC by @GRK_SC_BASIC;
sub @GRK_UC_ACCENTED by @GRK_SC_ACCENTED;
lookup NUMERALS_SC {
sub @FIG_LINING_TAB by @FIG_SC;
} NUMERALS_SC;
sub @PUNCT_SC_SRC by @PUNCT_SC;
} c2sc;
#--------------------------------------
feature smcp { # lowercase to small caps
sub @LAT_LC_BASIC by @LAT_SC_BASIC;
sub @LAT_LC_ACCENTED by @LAT_SC_ACCENTED;
sub @LAT_LC_ADDL by @LAT_SC_ADDL;
sub [ dotlessi dotlessj kgreenlandic germandbls longs tdieresis f_i f_l ]
by [ I.sc J.sc K.sc germandbls.sc S.sc tdieresis.sc f_i.sc f_l.sc ];
sub idieresis.narrow by Idieresis.sc;
# A substitution for napostrophe is missing - no obvious solution;
sub @CYR_LC_BASIC by @CYR_SC_BASIC;
sub @CYR_LC_EXTENDED by @CYR_SC_EXTENDED;
sub @CYR_LC_BGR by [ Ve.sc Ghe.sc De.sc Zhe.sc Ze.sc Icyr.scbgr Ishort.scbgr Ka.sc El.scbgr En.sc Pe.sc Te.sc Ef.scbgr Tse.sc Che.sc Sha.sc Shcha.sc Hard.sc Soft.sc Yu.sc Igravecyr.scbgr ];
sub be.srb by Be.sc;
sub yi.narrow by Yi.sc;
sub @GRK_LC_BASIC by @GRK_SC_BASIC;
sub @GRK_LC_ACCENTED by @GRK_SC_ACCENTED;
sub [ sigma.end iotadieresistonos upsilondieresistonos ]
by [ Sigma.sc Iotadieresis.sc Upsilondieresis.sc ];
lookup NUMERALS_SC;
} smcp;
#--------------------------------------
feature case { # case-sensitive forms
sub @CASE_SOURCE by @CASE_TARGET;
sub @FIG_LINING_TAB by @FIG_CASE;
sub anoteleia by anoteleia.cap;
} case;
#--------------------------------------
feature tnum { # Tabular Figures
sub @FIG_LINING by @FIG_LINING_TAB;
sub @FIG_OLDSTYLE by @FIG_OLDSTYLE_TAB;
} tnum;
#--------------------------------------
feature onum { # Oldstyle Figures
sub @FIG_LINING by @FIG_OLDSTYLE;
sub @FIG_LINING_TAB by @FIG_OLDSTYLE_TAB;
} onum;
#--------------------------------------
feature pnum { # Proportional Figures
sub @FIG_LINING_TAB by @FIG_LINING;
sub @FIG_OLDSTYLE_TAB by @FIG_OLDSTYLE;
} pnum;
#--------------------------------------
feature lnum { # Lining Figures
sub @FIG_OLDSTYLE by @FIG_LINING;
sub @FIG_OLDSTYLE_TAB by @FIG_LINING_TAB;
} lnum;
#--------------------------------------
feature zero { # Slashed Zero
sub zero by zero.slash;
sub zero.lf by zero.lfslash;
} zero;
#--------------------------------------
feature ss01 {
featureNames {
name "Cyrillic: Bulgarian alternates";
# Russian (0419)
# Кириллица: варианты для болгарского
name 3 1 0x0419 "\041A\0438\0440\0438\043B\043B\0438\0446\0430: \0432\0430\0440\0438\0430\043D\0442\044B \0434\043B\044F \0431\043E\043B\0433\0430\0440\0441\043A\043E\0433\043E";
# Bulgarian (0402)
# Кирилица: варианти за български
name 3 1 0x0402 "\041A\0438\0440\0438\043B\0438\0446\0430: \0432\0430\0440\0438\0430\043D\0442\0438 \0437\0430 \0431\044A\043B\0433\0430\0440\0441\043A\0438";
# Serbian (0C1A)
# Ћирилица: опције за бугарски
name 3 1 0x0C1A "\040B\0438\0440\0438\043B\0438\0446\0430: \043E\043F\0446\0438\0458\0435 \0437\0430 \0431\0443\0433\0430\0440\0441\043A\0438";
# Macedonian (042F)
# Кирилица: опции за бугарски
name 3 1 0x042F "\041A\0438\0440\0438\043B\0438\0446\0430: \043E\043F\0446\0438\0438 \0437\0430 \0431\0443\0433\0430\0440\0441\043A\0438";
};
lookup BULGARIAN_CYRILLIC;
} ss01;
#--------------------------------------
feature ss02 {
featureNames {
name "Cyrillic: Serbian and Macedonian alternates";
# Russian (0419)
# Кириллица: варианты для сербского и македонского
name 3 1 0x0419 "\041A\0438\0440\0438\043B\043B\0438\0446\0430: \0432\0430\0440\0438\0430\043D\0442\044B \0434\043B\044F \0441\0435\0440\0431\0441\043A\043E\0433\043E \0438 \043C\0430\043A\0435\0434\043E\043D\0441\043A\043E\0433\043E";
# Bulgarian (0402)
# Кирилица: варианти за сръбски и македонски
name 3 1 0x0402 "\041A\0438\0440\0438\043B\0438\0446\0430: \0432\0430\0440\0438\0430\043D\0442\0438 \0437\0430 \0441\0440\044A\0431\0441\043A\0438 \0438 \043C\0430\043A\0435\0434\043E\043D\0441\043A\0438";
# Serbian (0C1A)
# Ћирилица: опције за српски и македонски
name 3 1 0x0C1A "\040B\0438\0440\0438\043B\0438\0446\0430: \043E\043F\0446\0438\0458\0435 \0437\0430 \0441\0440\043F\0441\043A\0438 \0438 \043C\0430\043A\0435\0434\043E\043D\0441\043A\0438";
# Macedonian (042F)
# Кирилица: опции за српски и македонски
name 3 1 0x042F "\041A\0438\0440\0438\043B\0438\0446\0430: \043E\043F\0446\0438\0438 \0437\0430 \0441\0440\043F\0441\043A\0438 \0438 \043C\0430\043A\0435\0434\043E\043D\0441\043A\0438";
};
lookup SRB_MKD_CYRILLIC;
} ss02;
#--------------------------------------
feature liga {
sub f f i by f_f_i;
sub f f j by f_f_j;
sub f f l by f_f_l;
sub f f t by f_f_t;
sub f f by f_f;
sub f i by f_i;
sub f j by f_j;
sub f l by f_l;
sub f t by f_t;
} liga;