xref: /aosp_15_r20/external/fonttools/Tests/voltLib/data/NamdhinggoSIL1006.fea (revision e1fe3e4ad2793916b15cccdc4a7da52a7e1dd0e9)
1# Glyph classes
2@Cons = [uni1901 uni1902 uni1903 uni1904 uni1905 uni1906 uni1907 uni1908 uni1909 uni190A uni190B uni190C uni190D uni190E uni190F uni1910 uni1911 uni1912 uni1913 uni1914 uni1915 uni1916 uni1917 uni1918 uni1919 uni191A uni191B uni191C uni1940];
3@ConsRaU = [uni1901192A1922 uni1902192A1922 uni1903192A1922 uni1904192A1922 uni1905192A1922 uni1906192A1922 uni1907192A1922 uni1908192A1922 uni1909192A1922 uni190A192A1922 uni190B192A1922 uni190C192A1922 uni190D192A1922 uni190192AE1922 uni190F192A1922 uni1910192A1922 uni1911192A1922 uni1912192A1922 uni1913192A1922 uni1914192A1922 uni1915192A1922 uni1916192A1922 uni1917192A1922 uni1918192A1922 uni1919192A1922 uni1919192A1922 uni191A192A1922 uni191B192A1922 uni191C192A1922 uni1940192A1922];
4@ConsU = [uni19011922 uni19021922 uni19031922 uni19041922 uni19051922 uni19061922 uni19071922 uni19081922 uni19091922 uni190A1922 uni190B1922 uni190C1922 uni190D1922 uni190E1922 uni190F1922 uni19101922 uni19111922 uni19121922 uni19131922 uni19141922 uni19151922 uni19161922 uni19171922 uni19181922 uni19191922 uni191A1922 uni191B1922 uni191C1922 uni19401922];
5@Ikar = [uni1921 uni1921193A];
6@Vowels = [uni1920 uni1927 uni1928];
7@YaWa = [uni1929 uni192B];
8@AllCons = [@Cons @ConsU @ConsRaU];
9@VowelsKem = [@Vowels uni193A];
10
11# Mark classes
12markClass uni1920 <anchor -500 1050> @Aabove;
13markClass uni1922 <anchor -150 -15> @U;
14markClass uni1927 <anchor -300 1050> @eo;
15markClass uni1928 <anchor -190 1050> @eo;
16markClass uni193A <anchor -260 1250> @K;
17markClass uni193A <anchor -260 1250> @VK;
18
19# Lookups
20lookup EEAIDecomp {
21    sub uni1925 by uni1920 uni1923;
22    sub uni1926 by uni1920 uni1924;
23} EEAIDecomp;
24
25lookup OoAuKComp {
26    sub uni1923 uni193A by uni1923193A;
27    sub uni1924 uni193A by uni1924193A;
28} OoAuKComp;
29
30lookup OoAuKDecomp {
31    # The OoAuDecomp substitution rule replaces the OO and AU vowels with their visually constitutent components A plus EE or AI respectively. This is so that the 'A' portion can be positioned independently over the consonant when a Glide occurs between the consonant and the vowel.
32    sub uni1923193A by uni193A uni1923;
33    sub uni1924193A by uni193A uni1924;
34} OoAuKDecomp;
35
36lookup GlideVowelComp {
37    sub uni1929 uni1920 uni193A by uni19291920193A;
38    sub uni1929 uni1922 uni193A by uni19291922193A;
39    sub uni1929 uni1927 uni193A by uni19291927193A;
40    sub uni1929 uni1928 uni193A by uni19291928193A;
41    sub uni1929 uni193A by uni1929193A;
42    sub uni1929 uni1920 by uni19291920;
43    sub uni1929 uni1922 by uni19291922;
44    sub uni1929 uni1927 by uni19291927;
45    sub uni1929 uni1928 by uni19291928;
46    sub uni192B uni1920 uni193A by uni192B1920193A;
47    sub uni192B uni1922 uni193A by uni192B1922193A;
48    sub uni192B uni1927 uni193A by uni192B1927193A;
49    sub uni192B uni1928 uni193A by uni192B1928193A;
50    sub uni192B uni193A by uni192B193A;
51    sub uni192B uni1920 by uni192B1920;
52    sub uni192B uni1922 by uni192B1922;
53    sub uni192B uni1927 by uni192B1927;
54    sub uni192B uni1928 by uni192B1928;
55} GlideVowelComp;
56
57lookup GlideVowelDecomp {
58    sub uni19291920193A by uni1920 uni193A uni1929;
59    sub uni19291922193A by uni1922 uni193A uni1929;
60    sub uni19291927193A by uni1927 uni193A uni1929;
61    sub uni19291928193A by uni1928 uni193A uni1929;
62    sub uni1929193A by uni193A uni1929;
63    sub uni19291920 by uni1920 uni1929;
64    sub uni19291922 by uni1922 uni1929;
65    sub uni19291927 by uni1927 uni1929;
66    sub uni19291928 by uni1928 uni1929;
67    sub uni192B1920193A by uni1920 uni193A uni192B;
68    sub uni192B1922193A by uni1922 uni193A uni192B;
69    sub uni192B1927193A by uni1927 uni193A uni192B;
70    sub uni192B1928193A by uni1928 uni193A uni192B;
71    sub uni192B193A by uni193A uni192B;
72    sub uni192B1920 by uni1920 uni192B;
73    sub uni192B1922 by uni1922 uni192B;
74    sub uni192B1927 by uni1927 uni192B;
75    sub uni192B1928 by uni1928 uni192B;
76} GlideVowelDecomp;
77
78lookup RaUkar {
79    # The RaUkar substitution rule replaces Consonant, Ra, Ukar with a ligature.
80    sub @Cons uni192A uni1922 by @ConsRaU;
81} RaUkar;
82
83lookup Ukar {
84    # The Ukar substitution rule replaces Consonant + Ukar with a ligature. It also applies to the Vowel-Carrier, which has its own ligature with ukar.
85    sub @Cons uni1922 by @ConsU;
86    sub uni1900 uni1922 by uni19001922;
87} Ukar;
88
89lookup IkarK {
90    # The IkarK substitution rule replaces Ikar + Kemphreng with a ligature. The ligature is then positioned properly on the base consonant via the positioning rule IEO.
91    sub uni1921 uni193A by uni1921193A;
92} IkarK;
93
94lookup GlideIkar_target {
95    pos @YaWa -475;
96} GlideIkar_target;
97
98lookup GlideIkar {
99    pos [@YaWa]' lookup GlideIkar_target @Ikar;
100} GlideIkar;
101
102lookup IkarKWid_target {
103    pos uni1921193A 110;
104} IkarKWid_target;
105
106lookup IkarKWid {
107    # The IkarKWid lookup, applied to the Kern feature, adds 110 units of width to the IkarKemphreng ligature when followed by a consonant with akar on it. This prevents the akar from overprinting the rightmost dot of the kemphreng. (The dot overhangs to the right slightly, which is OK unless the following character has akar on it).
108    pos [uni1921193A]' lookup IkarKWid_target @Cons uni1920;
109} IkarKWid;
110
111lookup Akar {
112    # The Akar positioning rule positions the Akar on all consonants.
113    pos base uni1901
114        <anchor 487 1050> mark @Aabove;
115    pos base uni1902
116        <anchor 622 1050> mark @Aabove;
117    pos base uni1903
118        <anchor 475 1050> mark @Aabove;
119    pos base uni1904
120        <anchor 460 1050> mark @Aabove;
121    pos base uni1905
122        <anchor 590 1050> mark @Aabove;
123    pos base uni1906
124        <anchor 519 1050> mark @Aabove;
125    pos base uni1907
126        <anchor 570 1050> mark @Aabove;
127    pos base uni1908
128        <anchor 564 1050> mark @Aabove;
129    pos base uni1909
130        <anchor 430 1050> mark @Aabove;
131    pos base uni190A
132        <anchor 575 1050> mark @Aabove;
133    pos base uni190B
134        <anchor 450 1050> mark @Aabove;
135    pos base uni190C
136        <anchor 556 1050> mark @Aabove;
137    pos base uni190D
138        <anchor 515 1050> mark @Aabove;
139    pos base uni190E
140        <anchor 510 1050> mark @Aabove;
141    pos base uni190F
142        <anchor 497 1050> mark @Aabove;
143    pos base uni1910
144        <anchor 657 1050> mark @Aabove;
145    pos base uni1911
146        <anchor 690 1050> mark @Aabove;
147    pos base uni1912
148        <anchor 538 1050> mark @Aabove;
149    pos base uni1913
150        <anchor 571 1050> mark @Aabove;
151    pos base uni1914
152        <anchor 538 1050> mark @Aabove;
153    pos base uni1915
154        <anchor 470 1050> mark @Aabove;
155    pos base uni1916
156        <anchor 503 1050> mark @Aabove;
157    pos base uni1917
158        <anchor 548 1050> mark @Aabove;
159    pos base uni1918
160        <anchor 511 1050> mark @Aabove;
161    pos base uni1919
162        <anchor 560 1050> mark @Aabove;
163    pos base uni191A
164        <anchor 420 1050> mark @Aabove;
165    pos base uni191B
166        <anchor 580 1050> mark @Aabove;
167    pos base uni191C
168        <anchor 540 1050> mark @Aabove;
169    pos base uni1940
170        <anchor 480 1050> mark @Aabove;
171} Akar;
172
173lookup Kemphreng {
174    # The Kemphreng positioning rule positions the Kemphreng on all consonants, including the vowel carrier.
175    pos base uni1901
176        <anchor 500 1050> mark @K;
177    pos base uni1902
178        <anchor 680 1050> mark @K;
179    pos base uni1903
180        <anchor 540 1050> mark @K;
181    pos base uni1904
182        <anchor 500 1050> mark @K;
183    pos base uni1905
184        <anchor 590 1050> mark @K;
185    pos base uni1906
186        <anchor 540 1050> mark @K;
187    pos base uni1907
188        <anchor 620 1050> mark @K;
189    pos base uni1908
190        <anchor 580 1050> mark @K;
191    pos base uni1909
192        <anchor 450 1050> mark @K;
193    pos base uni190A
194        <anchor 580 1050> mark @K;
195    pos base uni190B
196        <anchor 450 1050> mark @K;
197    pos base uni190C
198        <anchor 656 1050> mark @K;
199    pos base uni190D
200        <anchor 570 1050> mark @K;
201    pos base uni190E
202        <anchor 530 1050> mark @K;
203    pos base uni190F
204        <anchor 515 1050> mark @K;
205    pos base uni1910
206        <anchor 680 1050> mark @K;
207    pos base uni1911
208        <anchor 720 1050> mark @K;
209    pos base uni1912
210        <anchor 580 1050> mark @K;
211    pos base uni1913
212        <anchor 600 1050> mark @K;
213    pos base uni1914
214        <anchor 560 1050> mark @K;
215    pos base uni1915
216        <anchor 480 1050> mark @K;
217    pos base uni1916
218        <anchor 520 1050> mark @K;
219    pos base uni1917
220        <anchor 585 1050> mark @K;
221    pos base uni1918
222        <anchor 610 1050> mark @K;
223    pos base uni1919
224        <anchor 520 1050> mark @K;
225    pos base uni191A
226        <anchor 440 1050> mark @K;
227    pos base uni191B
228        <anchor 600 1050> mark @K;
229    pos base uni191C
230        <anchor 600 1050> mark @K;
231    pos base uni1940
232        <anchor 490 1050> mark @K;
233    pos base uni19011922
234        <anchor 500 1050> mark @K;
235    pos base uni19021922
236        <anchor 680 1050> mark @K;
237    pos base uni19031922
238        <anchor 540 1050> mark @K;
239    pos base uni19041922
240        <anchor 500 1050> mark @K;
241    pos base uni19051922
242        <anchor 590 1050> mark @K;
243    pos base uni19061922
244        <anchor 540 1050> mark @K;
245    pos base uni19071922
246        <anchor 620 1050> mark @K;
247    pos base uni19081922
248        <anchor 580 1050> mark @K;
249    pos base uni19091922
250        <anchor 450 1050> mark @K;
251    pos base uni190A1922
252        <anchor 580 1050> mark @K;
253    pos base uni190B1922
254        <anchor 450 1050> mark @K;
255    pos base uni190C1922
256        <anchor 656 1050> mark @K;
257    pos base uni190D1922
258        <anchor 570 1050> mark @K;
259    pos base uni190E1922
260        <anchor 530 1050> mark @K;
261    pos base uni190F1922
262        <anchor 515 1050> mark @K;
263    pos base uni19101922
264        <anchor 680 1050> mark @K;
265    pos base uni19111922
266        <anchor 720 1050> mark @K;
267    pos base uni19121922
268        <anchor 580 1050> mark @K;
269    pos base uni19131922
270        <anchor 600 1050> mark @K;
271    pos base uni19141922
272        <anchor 560 1050> mark @K;
273    pos base uni19151922
274        <anchor 480 1050> mark @K;
275    pos base uni19161922
276        <anchor 520 1050> mark @K;
277    pos base uni19171922
278        <anchor 585 1050> mark @K;
279    pos base uni19181922
280        <anchor 610 1050> mark @K;
281    pos base uni19191922
282        <anchor 520 1050> mark @K;
283    pos base uni191A1922
284        <anchor 440 1050> mark @K;
285    pos base uni191B1922
286        <anchor 600 1050> mark @K;
287    pos base uni191C1922
288        <anchor 600 1050> mark @K;
289    pos base uni19401922
290        <anchor 490 1050> mark @K;
291    pos base uni1901192A1922
292        <anchor 500 1050> mark @K;
293    pos base uni1902192A1922
294        <anchor 680 1050> mark @K;
295    pos base uni1903192A1922
296        <anchor 540 1050> mark @K;
297    pos base uni1904192A1922
298        <anchor 500 1050> mark @K;
299    pos base uni1905192A1922
300        <anchor 590 1050> mark @K;
301    pos base uni1906192A1922
302        <anchor 540 1050> mark @K;
303    pos base uni1907192A1922
304        <anchor 620 1050> mark @K;
305    pos base uni1908192A1922
306        <anchor 580 1050> mark @K;
307    pos base uni1909192A1922
308        <anchor 450 1050> mark @K;
309    pos base uni190A192A1922
310        <anchor 580 1050> mark @K;
311    pos base uni190B192A1922
312        <anchor 450 1050> mark @K;
313    pos base uni190C192A1922
314        <anchor 656 1050> mark @K;
315    pos base uni190D192A1922
316        <anchor 570 1050> mark @K;
317    pos base uni190192AE1922
318        <anchor 530 1050> mark @K;
319    pos base uni190F192A1922
320        <anchor 515 1050> mark @K;
321    pos base uni1910192A1922
322        <anchor 680 1050> mark @K;
323    pos base uni1911192A1922
324        <anchor 720 1050> mark @K;
325    pos base uni1912192A1922
326        <anchor 580 1050> mark @K;
327    pos base uni1913192A1922
328        <anchor 600 1050> mark @K;
329    pos base uni1914192A1922
330        <anchor 560 1050> mark @K;
331    pos base uni1915192A1922
332        <anchor 480 1050> mark @K;
333    pos base uni1916192A1922
334        <anchor 520 1050> mark @K;
335    pos base uni1917192A1922
336        <anchor 585 1050> mark @K;
337    pos base uni1918192A1922
338        <anchor 610 1050> mark @K;
339    pos base uni1919192A1922
340        <anchor 520 1050> mark @K;
341    pos base uni191A192A1922
342        <anchor 440 1050> mark @K;
343    pos base uni191B192A1922
344        <anchor 600 1050> mark @K;
345    pos base uni191C192A1922
346        <anchor 600 1050> mark @K;
347    pos base uni1940192A1922
348        <anchor 490 1050> mark @K;
349    pos base uni1900
350        <anchor 525 1050> mark @K;
351} Kemphreng;
352
353lookup EO {
354    # The IEO positioning rule positions ikar (including the ligature with kemphreng), e and o on all consonants plus the vowel carrier.
355    pos base uni1901
356        <anchor 755 1050> mark @eo;
357    pos base uni1902
358        <anchor 943 1050> mark @eo;
359    pos base uni1903
360        <anchor 790 1050> mark @eo;
361    pos base uni1904
362        <anchor 780 1050> mark @eo;
363    pos base uni1905
364        <anchor 790 1050> mark @eo;
365    pos base uni1906
366        <anchor 878 1050> mark @eo;
367    pos base uni1907
368        <anchor 825 1050> mark @eo;
369    pos base uni1908
370        <anchor 968 1050> mark @eo;
371    pos base uni1909
372        <anchor 660 1050> mark @eo;
373    pos base uni190A
374        <anchor 569 1050> mark @eo;
375    pos base uni190B
376        <anchor 690 1050> mark @eo;
377    pos base uni190C
378        <anchor 649 1050> mark @eo;
379    pos base uni190D
380        <anchor 682 1050> mark @eo;
381    pos base uni190E
382        <anchor 680 1050> mark @eo;
383    pos base uni190F
384        <anchor 778 1050> mark @eo;
385    pos base uni1910
386        <anchor 920 1050> mark @eo;
387    pos base uni1911
388        <anchor 894 1050> mark @eo;
389    pos base uni1912
390        <anchor 782 1050> mark @eo;
391    pos base uni1913
392        <anchor 982 1050> mark @eo;
393    pos base uni1914
394        <anchor 917 1050> mark @eo;
395    pos base uni1915
396        <anchor 730 1050> mark @eo;
397    pos base uni1916
398        <anchor 767 1050> mark @eo;
399    pos base uni1917
400        <anchor 937 1050> mark @eo;
401    pos base uni1918
402        <anchor 862 1050> mark @eo;
403    pos base uni1919
404        <anchor 670 1050> mark @eo;
405    pos base uni191A
406        <anchor 682 1050> mark @eo;
407    pos base uni191B
408        <anchor 921 1050> mark @eo;
409    pos base uni191C
410        <anchor 870 1050> mark @eo;
411    pos base uni1940
412        <anchor 650 1050> mark @eo;
413    pos base uni1900
414        <anchor 810 1050> mark @eo;
415} EO;
416
417lookup VKem {
418    lookupflag MarkAttachmentType @VowelsKem;
419    # The VKem positioning rule positions the kemphreng on all upper vowels (except ikar, which has its own ligature). The vowel itself is positioned on the consonant with the Akar or IEO positioning rule.
420    pos mark uni1920
421        <anchor -260 1250> mark @VK;
422    pos mark uni1927
423        <anchor -300 1250> mark @VK;
424    pos mark uni1928
425        <anchor -150 1455> mark @VK;
426} VKem;
427
428lookup GlideU {
429    # The GlideU positioning rule positions the ukar on the glides Ya and Wa. (There is already a ligature for each consonant with the Ra+Ukar combination).
430    pos base uni1929
431        <anchor -135 -40> mark @U;
432    pos base uni192B
433        <anchor -135 -40> mark @U;
434} GlideU;
435
436# Features
437feature ccmp {
438    script latn;
439    language dflt;
440    lookup EEAIDecomp;
441    lookup OoAuKComp;
442    lookup OoAuKDecomp;
443    lookup GlideVowelComp;
444    lookup GlideVowelDecomp;
445    script limb;
446    language dflt;
447    lookup EEAIDecomp;
448    lookup OoAuKComp;
449    lookup OoAuKDecomp;
450    lookup GlideVowelComp;
451    lookup GlideVowelDecomp;
452} ccmp;
453
454feature kern {
455    script latn;
456    language dflt;
457    lookup GlideIkar;
458    lookup IkarKWid;
459    script limb;
460    language dflt;
461    lookup GlideIkar;
462    lookup IkarKWid;
463} kern;
464
465feature mark {
466    script latn;
467    language dflt;
468    lookup Akar;
469    lookup Kemphreng;
470    lookup EO;
471    script limb;
472    language dflt;
473    lookup Akar;
474    lookup Kemphreng;
475    lookup EO;
476} mark;
477
478feature mkmk {
479    script latn;
480    language dflt;
481    lookup VKem;
482    lookup GlideU;
483    script limb;
484    language dflt;
485    lookup VKem;
486    lookup GlideU;
487} mkmk;
488
489feature liga {
490    script latn;
491    language dflt;
492    lookup RaUkar;
493    lookup Ukar;
494    lookup IkarK;
495    script limb;
496    language dflt;
497    lookup RaUkar;
498    lookup Ukar;
499    lookup IkarK;
500} liga;
501
502@GDEF_base = [glyph0 .null CR space exclam quotedbl numbersign dollar percent quotesingle parenleft parenright asterisk plus comma hyphen period slash zero one two three four five six seven eight nine colon semicolon less equal greater question at 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 bracketleft backslash bracketright asciicircum underscore grave 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 braceleft bar braceright asciitilde uni0965 uni1900 uni19001922 uni1901 uni19011922 uni1901192A1922 uni1902 uni19021922 uni1902192A1922 uni1903 uni19031922 uni1903192A1922 uni1904 uni19041922 uni1904192A1922 uni1905 uni19051922 uni1905192A1922 uni1906 uni19061922 uni1906192A1922 uni1907 uni19071922 uni1907192A1922 uni1908 uni19081922 uni1908192A1922 uni1909 uni19091922 uni1909192A1922 uni190A uni190A1922 uni190A192A1922 uni190B uni190B1922 uni190B192A1922 uni190C uni190C1922 uni190C192A1922 uni190D uni190D1922 uni190D192A1922 uni190E uni190E1922 uni190192AE1922 uni190F uni190F1922 uni190F192A1922 uni1910 uni19101922 uni1910192A1922 uni1911 uni19111922 uni1911192A1922 uni1912 uni19121922 uni1912192A1922 uni1913 uni19131922 uni1913192A1922 uni1914 uni19141922 uni1914192A1922 uni1915 uni19151922 uni1915192A1922 uni1916 uni19161922 uni1916192A1922 uni1917 uni19171922 uni1917192A1922 uni1918 uni19181922 uni1918192A1922 uni1919 uni19191922 uni1919192A1922 uni191A uni191A1922 uni191A192A1922 uni191B uni191B1922 uni191B192A1922 uni191C uni191C1922 uni191C192A1922 uni1921 uni1923 uni1924 uni1929 uni192B uni1930 uni1931 uni1932 uni1933 uni1934 uni1935 uni1936 uni1937 uni1938 uni1939 uni1940 uni19401922 uni1940192A1922 uni1944 uni1945 uni1946 uni1947 uni1948 uni1949 uni194A uni194B uni194C uni194D uni194E uni194F quoteleft quoteright quotedblleft quotedblright uni1921193A ampersand uni2009 endash emdash uni202F uni1923193A uni1924193A uni19291920 uni19291922 uni19291927 uni19291928 uni1929193A uni19291920193A uni19291922193A uni19291927193A uni19291928193A uni192B1920 uni192B1922 uni192B1927 uni192B1928 uni192B193A uni192B1920193A uni192B1922193A uni192B1927193A uni192B1928193A uni25CC uni191E uni191E1922 uni191E192A1922 uni191D uni191D1922 uni191D192A1922];
503@GDEF_mark = [uni1920 uni1920.widC uni1920.widD uni1922 uni1922.altA uni1922.altB uni1922.altC uni1925 uni1926 uni1927 uni1928 uni192A uni193A uni193A.widC uni193B uni193B.widA uni193B.widB uni193B.widC uni192A1922];
504table GDEF {
505    GlyphClassDef @GDEF_base, , @GDEF_mark, ;
506} GDEF;
507