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