aboutsummaryrefslogtreecommitdiff
path: root/Tests/voltLib/data/NamdhinggoSIL1006.fea
blob: aa8ab1a5de353607d2b8e071816e73c52e226205 (plain)
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
# Glyph classes
@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];
@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];
@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];
@Ikar = [uni1921 uni1921193A];
@Vowels = [uni1920 uni1927 uni1928];
@YaWa = [uni1929 uni192B];
@AllCons = [@Cons @ConsU @ConsRaU];
@VowelsKem = [@Vowels uni193A];

# Mark classes
markClass uni1920 <anchor -500 1050> @Aabove;
markClass uni1922 <anchor -150 -15> @U;
markClass uni1927 <anchor -300 1050> @eo;
markClass uni1928 <anchor -190 1050> @eo;
markClass uni193A <anchor -260 1250> @K;
markClass uni193A <anchor -260 1250> @VK;

# Lookups
lookup EEAIDecomp {
    sub uni1925 by uni1920 uni1923;
    sub uni1926 by uni1920 uni1924;
} EEAIDecomp;

lookup OoAuKComp {
    sub uni1923 uni193A by uni1923193A;
    sub uni1924 uni193A by uni1924193A;
} OoAuKComp;

lookup OoAuKDecomp {
    # 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.
    sub uni1923193A by uni193A uni1923;
    sub uni1924193A by uni193A uni1924;
} OoAuKDecomp;

lookup GlideVowelComp {
    sub uni1929 uni1920 uni193A by uni19291920193A;
    sub uni1929 uni1922 uni193A by uni19291922193A;
    sub uni1929 uni1927 uni193A by uni19291927193A;
    sub uni1929 uni1928 uni193A by uni19291928193A;
    sub uni1929 uni193A by uni1929193A;
    sub uni1929 uni1920 by uni19291920;
    sub uni1929 uni1922 by uni19291922;
    sub uni1929 uni1927 by uni19291927;
    sub uni1929 uni1928 by uni19291928;
    sub uni192B uni1920 uni193A by uni192B1920193A;
    sub uni192B uni1922 uni193A by uni192B1922193A;
    sub uni192B uni1927 uni193A by uni192B1927193A;
    sub uni192B uni1928 uni193A by uni192B1928193A;
    sub uni192B uni193A by uni192B193A;
    sub uni192B uni1920 by uni192B1920;
    sub uni192B uni1922 by uni192B1922;
    sub uni192B uni1927 by uni192B1927;
    sub uni192B uni1928 by uni192B1928;
} GlideVowelComp;

lookup GlideVowelDecomp {
    sub uni19291920193A by uni1920 uni193A uni1929;
    sub uni19291922193A by uni1922 uni193A uni1929;
    sub uni19291927193A by uni1927 uni193A uni1929;
    sub uni19291928193A by uni1928 uni193A uni1929;
    sub uni1929193A by uni193A uni1929;
    sub uni19291920 by uni1920 uni1929;
    sub uni19291922 by uni1922 uni1929;
    sub uni19291927 by uni1927 uni1929;
    sub uni19291928 by uni1928 uni1929;
    sub uni192B1920193A by uni1920 uni193A uni192B;
    sub uni192B1922193A by uni1922 uni193A uni192B;
    sub uni192B1927193A by uni1927 uni193A uni192B;
    sub uni192B1928193A by uni1928 uni193A uni192B;
    sub uni192B193A by uni193A uni192B;
    sub uni192B1920 by uni1920 uni192B;
    sub uni192B1922 by uni1922 uni192B;
    sub uni192B1927 by uni1927 uni192B;
    sub uni192B1928 by uni1928 uni192B;
} GlideVowelDecomp;

lookup RaUkar {
    # The RaUkar substitution rule replaces Consonant, Ra, Ukar with a ligature.
    sub @Cons uni192A uni1922 by @ConsRaU;
} RaUkar;

lookup Ukar {
    # The Ukar substitution rule replaces Consonant + Ukar with a ligature. It also applies to the Vowel-Carrier, which has its own ligature with ukar.
    sub @Cons uni1922 by @ConsU;
    sub uni1900 uni1922 by uni19001922;
} Ukar;

lookup IkarK {
    # 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.
    sub uni1921 uni193A by uni1921193A;
} IkarK;

lookup GlideIkar_target {
    pos @YaWa -475;
} GlideIkar_target;

lookup GlideIkar {
    pos [@YaWa]' lookup GlideIkar_target @Ikar;
} GlideIkar;

lookup IkarKWid_target {
    pos uni1921193A 110;
} IkarKWid_target;

lookup IkarKWid {
    # 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).
    pos [uni1921193A]' lookup IkarKWid_target @Cons uni1920;
} IkarKWid;

lookup Akar {
    # The Akar positioning rule positions the Akar on all consonants.
    pos base uni1901
        <anchor 487 1050> mark @Aabove;
    pos base uni1902
        <anchor 622 1050> mark @Aabove;
    pos base uni1903
        <anchor 475 1050> mark @Aabove;
    pos base uni1904
        <anchor 460 1050> mark @Aabove;
    pos base uni1905
        <anchor 590 1050> mark @Aabove;
    pos base uni1906
        <anchor 519 1050> mark @Aabove;
    pos base uni1907
        <anchor 570 1050> mark @Aabove;
    pos base uni1908
        <anchor 564 1050> mark @Aabove;
    pos base uni1909
        <anchor 430 1050> mark @Aabove;
    pos base uni190A
        <anchor 575 1050> mark @Aabove;
    pos base uni190B
        <anchor 450 1050> mark @Aabove;
    pos base uni190C
        <anchor 556 1050> mark @Aabove;
    pos base uni190D
        <anchor 515 1050> mark @Aabove;
    pos base uni190E
        <anchor 510 1050> mark @Aabove;
    pos base uni190F
        <anchor 497 1050> mark @Aabove;
    pos base uni1910
        <anchor 657 1050> mark @Aabove;
    pos base uni1911
        <anchor 690 1050> mark @Aabove;
    pos base uni1912
        <anchor 538 1050> mark @Aabove;
    pos base uni1913
        <anchor 571 1050> mark @Aabove;
    pos base uni1914
        <anchor 538 1050> mark @Aabove;
    pos base uni1915
        <anchor 470 1050> mark @Aabove;
    pos base uni1916
        <anchor 503 1050> mark @Aabove;
    pos base uni1917
        <anchor 548 1050> mark @Aabove;
    pos base uni1918
        <anchor 511 1050> mark @Aabove;
    pos base uni1919
        <anchor 560 1050> mark @Aabove;
    pos base uni191A
        <anchor 420 1050> mark @Aabove;
    pos base uni191B
        <anchor 580 1050> mark @Aabove;
    pos base uni191C
        <anchor 540 1050> mark @Aabove;
    pos base uni1940
        <anchor 480 1050> mark @Aabove;
} Akar;

lookup Kemphreng {
    # The Kemphreng positioning rule positions the Kemphreng on all consonants, including the vowel carrier.
    pos base uni1901
        <anchor 500 1050> mark @K;
    pos base uni1902
        <anchor 680 1050> mark @K;
    pos base uni1903
        <anchor 540 1050> mark @K;
    pos base uni1904
        <anchor 500 1050> mark @K;
    pos base uni1905
        <anchor 590 1050> mark @K;
    pos base uni1906
        <anchor 540 1050> mark @K;
    pos base uni1907
        <anchor 620 1050> mark @K;
    pos base uni1908
        <anchor 580 1050> mark @K;
    pos base uni1909
        <anchor 450 1050> mark @K;
    pos base uni190A
        <anchor 580 1050> mark @K;
    pos base uni190B
        <anchor 450 1050> mark @K;
    pos base uni190C
        <anchor 656 1050> mark @K;
    pos base uni190D
        <anchor 570 1050> mark @K;
    pos base uni190E
        <anchor 530 1050> mark @K;
    pos base uni190F
        <anchor 515 1050> mark @K;
    pos base uni1910
        <anchor 680 1050> mark @K;
    pos base uni1911
        <anchor 720 1050> mark @K;
    pos base uni1912
        <anchor 580 1050> mark @K;
    pos base uni1913
        <anchor 600 1050> mark @K;
    pos base uni1914
        <anchor 560 1050> mark @K;
    pos base uni1915
        <anchor 480 1050> mark @K;
    pos base uni1916
        <anchor 520 1050> mark @K;
    pos base uni1917
        <anchor 585 1050> mark @K;
    pos base uni1918
        <anchor 610 1050> mark @K;
    pos base uni1919
        <anchor 520 1050> mark @K;
    pos base uni191A
        <anchor 440 1050> mark @K;
    pos base uni191B
        <anchor 600 1050> mark @K;
    pos base uni191C
        <anchor 600 1050> mark @K;
    pos base uni1940
        <anchor 490 1050> mark @K;
    pos base uni19011922
        <anchor 500 1050> mark @K;
    pos base uni19021922
        <anchor 680 1050> mark @K;
    pos base uni19031922
        <anchor 540 1050> mark @K;
    pos base uni19041922
        <anchor 500 1050> mark @K;
    pos base uni19051922
        <anchor 590 1050> mark @K;
    pos base uni19061922
        <anchor 540 1050> mark @K;
    pos base uni19071922
        <anchor 620 1050> mark @K;
    pos base uni19081922
        <anchor 580 1050> mark @K;
    pos base uni19091922
        <anchor 450 1050> mark @K;
    pos base uni190A1922
        <anchor 580 1050> mark @K;
    pos base uni190B1922
        <anchor 450 1050> mark @K;
    pos base uni190C1922
        <anchor 656 1050> mark @K;
    pos base uni190D1922
        <anchor 570 1050> mark @K;
    pos base uni190E1922
        <anchor 530 1050> mark @K;
    pos base uni190F1922
        <anchor 515 1050> mark @K;
    pos base uni19101922
        <anchor 680 1050> mark @K;
    pos base uni19111922
        <anchor 720 1050> mark @K;
    pos base uni19121922
        <anchor 580 1050> mark @K;
    pos base uni19131922
        <anchor 600 1050> mark @K;
    pos base uni19141922
        <anchor 560 1050> mark @K;
    pos base uni19151922
        <anchor 480 1050> mark @K;
    pos base uni19161922
        <anchor 520 1050> mark @K;
    pos base uni19171922
        <anchor 585 1050> mark @K;
    pos base uni19181922
        <anchor 610 1050> mark @K;
    pos base uni19191922
        <anchor 520 1050> mark @K;
    pos base uni191A1922
        <anchor 440 1050> mark @K;
    pos base uni191B1922
        <anchor 600 1050> mark @K;
    pos base uni191C1922
        <anchor 600 1050> mark @K;
    pos base uni19401922
        <anchor 490 1050> mark @K;
    pos base uni1901192A1922
        <anchor 500 1050> mark @K;
    pos base uni1902192A1922
        <anchor 680 1050> mark @K;
    pos base uni1903192A1922
        <anchor 540 1050> mark @K;
    pos base uni1904192A1922
        <anchor 500 1050> mark @K;
    pos base uni1905192A1922
        <anchor 590 1050> mark @K;
    pos base uni1906192A1922
        <anchor 540 1050> mark @K;
    pos base uni1907192A1922
        <anchor 620 1050> mark @K;
    pos base uni1908192A1922
        <anchor 580 1050> mark @K;
    pos base uni1909192A1922
        <anchor 450 1050> mark @K;
    pos base uni190A192A1922
        <anchor 580 1050> mark @K;
    pos base uni190B192A1922
        <anchor 450 1050> mark @K;
    pos base uni190C192A1922
        <anchor 656 1050> mark @K;
    pos base uni190D192A1922
        <anchor 570 1050> mark @K;
    pos base uni190192AE1922
        <anchor 530 1050> mark @K;
    pos base uni190F192A1922
        <anchor 515 1050> mark @K;
    pos base uni1910192A1922
        <anchor 680 1050> mark @K;
    pos base uni1911192A1922
        <anchor 720 1050> mark @K;
    pos base uni1912192A1922
        <anchor 580 1050> mark @K;
    pos base uni1913192A1922
        <anchor 600 1050> mark @K;
    pos base uni1914192A1922
        <anchor 560 1050> mark @K;
    pos base uni1915192A1922
        <anchor 480 1050> mark @K;
    pos base uni1916192A1922
        <anchor 520 1050> mark @K;
    pos base uni1917192A1922
        <anchor 585 1050> mark @K;
    pos base uni1918192A1922
        <anchor 610 1050> mark @K;
    pos base uni1919192A1922
        <anchor 520 1050> mark @K;
    pos base uni191A192A1922
        <anchor 440 1050> mark @K;
    pos base uni191B192A1922
        <anchor 600 1050> mark @K;
    pos base uni191C192A1922
        <anchor 600 1050> mark @K;
    pos base uni1940192A1922
        <anchor 490 1050> mark @K;
    pos base uni1900
        <anchor 525 1050> mark @K;
} Kemphreng;

lookup EO {
    # The IEO positioning rule positions ikar (including the ligature with kemphreng), e and o on all consonants plus the vowel carrier.
    pos base uni1901
        <anchor 755 1050> mark @eo;
    pos base uni1902
        <anchor 943 1050> mark @eo;
    pos base uni1903
        <anchor 790 1050> mark @eo;
    pos base uni1904
        <anchor 780 1050> mark @eo;
    pos base uni1905
        <anchor 790 1050> mark @eo;
    pos base uni1906
        <anchor 878 1050> mark @eo;
    pos base uni1907
        <anchor 825 1050> mark @eo;
    pos base uni1908
        <anchor 968 1050> mark @eo;
    pos base uni1909
        <anchor 660 1050> mark @eo;
    pos base uni190A
        <anchor 569 1050> mark @eo;
    pos base uni190B
        <anchor 690 1050> mark @eo;
    pos base uni190C
        <anchor 649 1050> mark @eo;
    pos base uni190D
        <anchor 682 1050> mark @eo;
    pos base uni190E
        <anchor 680 1050> mark @eo;
    pos base uni190F
        <anchor 778 1050> mark @eo;
    pos base uni1910
        <anchor 920 1050> mark @eo;
    pos base uni1911
        <anchor 894 1050> mark @eo;
    pos base uni1912
        <anchor 782 1050> mark @eo;
    pos base uni1913
        <anchor 982 1050> mark @eo;
    pos base uni1914
        <anchor 917 1050> mark @eo;
    pos base uni1915
        <anchor 730 1050> mark @eo;
    pos base uni1916
        <anchor 767 1050> mark @eo;
    pos base uni1917
        <anchor 937 1050> mark @eo;
    pos base uni1918
        <anchor 862 1050> mark @eo;
    pos base uni1919
        <anchor 670 1050> mark @eo;
    pos base uni191A
        <anchor 682 1050> mark @eo;
    pos base uni191B
        <anchor 921 1050> mark @eo;
    pos base uni191C
        <anchor 870 1050> mark @eo;
    pos base uni1940
        <anchor 650 1050> mark @eo;
    pos base uni1900
        <anchor 810 1050> mark @eo;
} EO;

lookup VKem {
    lookupflag MarkAttachmentType @VowelsKem;
    # 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.
    pos mark uni1920
        <anchor -260 1250> mark @VK;
    pos mark uni1927
        <anchor -300 1250> mark @VK;
    pos mark uni1928
        <anchor -150 1455> mark @VK;
} VKem;

lookup GlideU {
    # 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).
    pos base uni1929
        <anchor -135 -40> mark @U;
    pos base uni192B
        <anchor -135 -40> mark @U;
} GlideU;

# Features
feature ccmp {
    script latn;
    language dflt;
    lookup EEAIDecomp;
    lookup OoAuKComp;
    lookup OoAuKDecomp;
    lookup GlideVowelComp;
    lookup GlideVowelDecomp;
    script limb;
    language dflt;
    lookup EEAIDecomp;
    lookup OoAuKComp;
    lookup OoAuKDecomp;
    lookup GlideVowelComp;
    lookup GlideVowelDecomp;
} ccmp;

feature kern {
    script latn;
    language dflt;
    lookup GlideIkar;
    lookup IkarKWid;
    script limb;
    language dflt;
    lookup GlideIkar;
    lookup IkarKWid;
} kern;

feature mark {
    script latn;
    language dflt;
    lookup Akar;
    lookup Kemphreng;
    lookup EO;
    script limb;
    language dflt;
    lookup Akar;
    lookup Kemphreng;
    lookup EO;
} mark;

feature mkmk {
    script latn;
    language dflt;
    lookup VKem;
    lookup GlideU;
    script limb;
    language dflt;
    lookup VKem;
    lookup GlideU;
} mkmk;

feature liga {
    script latn;
    language dflt;
    lookup RaUkar;
    lookup Ukar;
    lookup IkarK;
    script limb;
    language dflt;
    lookup RaUkar;
    lookup Ukar;
    lookup IkarK;
} liga;

@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];
@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];
table GDEF {
    GlyphClassDef @GDEF_base, , @GDEF_mark, ;
} GDEF;