[use] Allow U+1A60 TAI THAM SIGN SAKOT after vowel

This commit is contained in:
David Corbett 2019-05-26 11:05:54 -04:00 committed by Behdad Esfahbod
parent 179570d4ca
commit d64fb9db52
9 changed files with 351 additions and 299 deletions

View File

@ -214,7 +214,9 @@ def is_CONS_SUB(U, UISC, UGC):
def is_CONS_WITH_STACKER(U, UISC, UGC):
return UISC == Consonant_With_Stacker
def is_HALANT(U, UISC, UGC):
return UISC in [Virama, Invisible_Stacker] and not is_HALANT_OR_VOWEL_MODIFIER(U, UISC, UGC)
return (UISC in [Virama, Invisible_Stacker]
and not is_HALANT_OR_VOWEL_MODIFIER(U, UISC, UGC)
and not is_SAKOT(U, UISC, UGC))
def is_HALANT_OR_VOWEL_MODIFIER(U, UISC, UGC):
# https://github.com/harfbuzz/harfbuzz/issues/1102
# https://github.com/harfbuzz/harfbuzz/issues/1379
@ -240,6 +242,8 @@ def is_Reserved(U, UISC, UGC):
return UGC == 'Cn'
def is_REPHA(U, UISC, UGC):
return UISC in [Consonant_Preceding_Repha, Consonant_Prefixed]
def is_SAKOT(U, UISC, UGC):
return U == 0x1A60
def is_SYM(U, UISC, UGC):
if U == 0x25CC: return False #SPEC-DRAFT
#SPEC-DRAFT return UGC in [So, Sc] or UISC == Symbol_Letter
@ -279,6 +283,7 @@ use_mapping = {
'Rsv': is_Reserved,
'R': is_REPHA,
'S': is_SYM,
'Sk': is_SAKOT,
'SM': is_SYM_MOD,
'VS': is_VARIATION_SELECTOR,
'V': is_VOWEL,

View File

@ -36,39 +36,42 @@
#line 38 "hb-ot-shape-complex-use-machine.hh"
static const unsigned char _use_syllable_machine_trans_keys[] = {
12u, 44u, 1u, 15u, 1u, 1u, 12u, 44u, 0u, 47u, 21u, 21u, 11u, 47u, 11u, 47u,
1u, 15u, 1u, 1u, 11u, 47u, 22u, 47u, 23u, 47u, 24u, 47u, 25u, 47u, 26u, 47u,
45u, 46u, 46u, 46u, 24u, 47u, 24u, 47u, 24u, 47u, 23u, 47u, 23u, 47u, 23u, 47u,
22u, 47u, 22u, 47u, 22u, 47u, 22u, 47u, 11u, 47u, 1u, 47u, 11u, 47u, 13u, 21u,
4u, 4u, 13u, 13u, 11u, 47u, 11u, 47u, 41u, 42u, 42u, 42u, 11u, 47u, 11u, 47u,
22u, 47u, 23u, 47u, 24u, 47u, 25u, 47u, 26u, 47u, 45u, 46u, 46u, 46u, 24u, 47u,
24u, 47u, 24u, 47u, 23u, 47u, 23u, 47u, 23u, 47u, 22u, 47u, 22u, 47u, 22u, 47u,
22u, 47u, 11u, 47u, 1u, 47u, 1u, 15u, 4u, 4u, 13u, 21u, 13u, 13u, 12u, 44u,
1u, 47u, 11u, 47u, 41u, 42u, 42u, 42u, 21u, 42u, 1u, 5u, 0
12u, 48u, 1u, 15u, 1u, 1u, 12u, 48u, 1u, 1u, 0u, 48u, 21u, 21u, 11u, 48u,
11u, 48u, 1u, 15u, 1u, 1u, 11u, 48u, 22u, 48u, 23u, 48u, 24u, 47u, 25u, 47u,
26u, 47u, 45u, 46u, 46u, 46u, 24u, 48u, 24u, 48u, 24u, 48u, 1u, 1u, 24u, 48u,
23u, 48u, 23u, 48u, 23u, 48u, 22u, 48u, 22u, 48u, 22u, 48u, 22u, 48u, 11u, 48u,
1u, 48u, 11u, 48u, 13u, 21u, 4u, 4u, 13u, 13u, 11u, 48u, 11u, 48u, 41u, 42u,
42u, 42u, 11u, 48u, 11u, 48u, 22u, 48u, 23u, 48u, 24u, 47u, 25u, 47u, 26u, 47u,
45u, 46u, 46u, 46u, 24u, 48u, 24u, 48u, 24u, 48u, 24u, 48u, 23u, 48u, 23u, 48u,
23u, 48u, 22u, 48u, 22u, 48u, 22u, 48u, 22u, 48u, 11u, 48u, 1u, 48u, 1u, 15u,
4u, 4u, 13u, 21u, 13u, 13u, 12u, 48u, 1u, 48u, 11u, 48u, 41u, 42u, 42u, 42u,
21u, 42u, 1u, 5u, 0
};
static const char _use_syllable_machine_key_spans[] = {
33, 15, 1, 33, 48, 1, 37, 37,
15, 1, 37, 26, 25, 24, 23, 22,
2, 1, 24, 24, 24, 25, 25, 25,
26, 26, 26, 26, 37, 47, 37, 9,
1, 1, 37, 37, 2, 1, 37, 37,
26, 25, 24, 23, 22, 2, 1, 24,
24, 24, 25, 25, 25, 26, 26, 26,
26, 37, 47, 15, 1, 9, 1, 33,
47, 37, 2, 1, 22, 5
37, 15, 1, 37, 1, 49, 1, 38,
38, 15, 1, 38, 27, 26, 24, 23,
22, 2, 1, 25, 25, 25, 1, 25,
26, 26, 26, 27, 27, 27, 27, 38,
48, 38, 9, 1, 1, 38, 38, 2,
1, 38, 38, 27, 26, 24, 23, 22,
2, 1, 25, 25, 25, 25, 26, 26,
26, 27, 27, 27, 27, 38, 48, 15,
1, 9, 1, 37, 48, 38, 2, 1,
22, 5
};
static const short _use_syllable_machine_index_offsets[] = {
0, 34, 50, 52, 86, 135, 137, 175,
213, 229, 231, 269, 296, 322, 347, 371,
394, 397, 399, 424, 449, 474, 500, 526,
552, 579, 606, 633, 660, 698, 746, 784,
794, 796, 798, 836, 874, 877, 879, 917,
955, 982, 1008, 1033, 1057, 1080, 1083, 1085,
1110, 1135, 1160, 1186, 1212, 1238, 1265, 1292,
1319, 1346, 1384, 1432, 1448, 1450, 1460, 1462,
1496, 1544, 1582, 1585, 1587, 1610
0, 38, 54, 56, 94, 96, 146, 148,
187, 226, 242, 244, 283, 311, 338, 363,
387, 410, 413, 415, 441, 467, 493, 495,
521, 548, 575, 602, 630, 658, 686, 714,
753, 802, 841, 851, 853, 855, 894, 933,
936, 938, 977, 1016, 1044, 1071, 1096, 1120,
1143, 1146, 1148, 1174, 1200, 1226, 1252, 1279,
1306, 1333, 1361, 1389, 1417, 1445, 1484, 1533,
1549, 1551, 1561, 1563, 1601, 1650, 1689, 1692,
1694, 1717
};
static const char _use_syllable_machine_indicies[] = {
@ -76,237 +79,252 @@ static const char _use_syllable_machine_indicies[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 3, 2, 2, 2, 2, 2,
1, 0, 0, 0, 1, 0, 3, 2,
2, 2, 2, 2, 2, 2, 2, 2,
4, 2, 3, 2, 6, 5, 5, 5,
2, 2, 2, 2, 4, 2, 3, 2,
6, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 6, 5, 7, 8,
9, 7, 10, 11, 9, 9, 9, 9,
9, 3, 12, 13, 9, 14, 7, 7,
15, 16, 9, 9, 17, 18, 19, 20,
21, 22, 23, 17, 24, 25, 26, 27,
28, 29, 9, 30, 31, 32, 9, 33,
34, 35, 36, 37, 38, 39, 9, 41,
40, 43, 1, 42, 42, 44, 42, 42,
42, 42, 42, 45, 46, 47, 48, 49,
50, 51, 52, 46, 53, 45, 54, 55,
56, 57, 42, 58, 59, 60, 42, 42,
42, 42, 61, 62, 63, 64, 42, 43,
1, 42, 42, 44, 42, 42, 42, 42,
42, 65, 46, 47, 48, 49, 50, 51,
52, 46, 53, 54, 54, 55, 56, 57,
42, 58, 59, 60, 42, 42, 42, 42,
61, 62, 63, 64, 42, 43, 66, 66,
66, 66, 66, 66, 66, 66, 66, 66,
66, 66, 66, 67, 66, 43, 66, 43,
1, 42, 42, 44, 42, 42, 42, 42,
42, 42, 46, 47, 48, 49, 50, 51,
52, 46, 53, 54, 54, 55, 56, 57,
42, 58, 59, 60, 42, 42, 42, 42,
61, 62, 63, 64, 42, 46, 47, 48,
49, 50, 42, 42, 42, 42, 42, 42,
55, 56, 57, 42, 58, 59, 60, 42,
42, 42, 42, 47, 62, 63, 64, 42,
47, 48, 49, 50, 42, 42, 42, 42,
42, 42, 42, 42, 42, 42, 58, 59,
60, 42, 42, 42, 42, 42, 62, 63,
64, 42, 48, 49, 50, 42, 42, 42,
42, 42, 42, 42, 42, 42, 42, 42,
42, 42, 42, 42, 42, 42, 42, 62,
63, 64, 42, 49, 50, 42, 42, 42,
42, 42, 42, 42, 42, 42, 42, 42,
42, 42, 42, 42, 42, 42, 42, 62,
63, 64, 42, 50, 42, 42, 42, 42,
42, 42, 42, 42, 42, 42, 42, 42,
42, 42, 42, 42, 42, 42, 62, 63,
64, 42, 62, 63, 42, 63, 42, 48,
49, 50, 42, 42, 42, 42, 42, 42,
42, 42, 42, 42, 58, 59, 60, 42,
42, 42, 42, 42, 62, 63, 64, 42,
48, 49, 50, 42, 42, 42, 42, 42,
42, 42, 42, 42, 42, 42, 59, 60,
42, 42, 42, 42, 42, 62, 63, 64,
42, 48, 49, 50, 42, 42, 42, 42,
42, 42, 42, 42, 42, 42, 42, 42,
60, 42, 42, 42, 42, 42, 62, 63,
64, 42, 47, 48, 49, 50, 42, 42,
42, 42, 42, 42, 55, 56, 57, 42,
58, 59, 60, 42, 42, 42, 42, 47,
62, 63, 64, 42, 47, 48, 49, 50,
42, 42, 42, 42, 42, 42, 42, 56,
57, 42, 58, 59, 60, 42, 42, 42,
42, 47, 62, 63, 64, 42, 47, 48,
49, 50, 42, 42, 42, 42, 42, 42,
42, 42, 57, 42, 58, 59, 60, 42,
42, 42, 42, 47, 62, 63, 64, 42,
46, 47, 48, 49, 50, 42, 52, 46,
42, 42, 42, 55, 56, 57, 42, 58,
59, 60, 42, 42, 42, 42, 47, 62,
63, 64, 42, 46, 47, 48, 49, 50,
42, 68, 46, 42, 42, 42, 55, 56,
57, 42, 58, 59, 60, 42, 42, 42,
42, 47, 62, 63, 64, 42, 46, 47,
48, 49, 50, 42, 42, 46, 42, 42,
42, 55, 56, 57, 42, 58, 59, 60,
42, 42, 42, 42, 47, 62, 63, 64,
42, 46, 47, 48, 49, 50, 51, 52,
46, 42, 42, 42, 55, 56, 57, 42,
58, 59, 60, 42, 42, 42, 42, 47,
62, 63, 64, 42, 43, 1, 42, 42,
44, 42, 42, 42, 42, 42, 42, 46,
47, 48, 49, 50, 51, 52, 46, 53,
42, 54, 55, 56, 57, 42, 58, 59,
60, 42, 42, 42, 42, 61, 62, 63,
64, 42, 43, 66, 66, 66, 66, 66,
66, 66, 66, 66, 66, 66, 66, 66,
67, 66, 66, 66, 66, 66, 66, 66,
47, 48, 49, 50, 66, 66, 66, 66,
66, 66, 66, 66, 66, 66, 58, 59,
60, 66, 66, 66, 66, 66, 62, 63,
64, 66, 43, 1, 42, 42, 44, 42,
42, 42, 42, 42, 42, 46, 47, 48,
49, 50, 51, 52, 46, 53, 45, 54,
55, 56, 57, 42, 58, 59, 60, 42,
42, 42, 42, 61, 62, 63, 64, 42,
70, 69, 69, 69, 69, 69, 69, 69,
71, 69, 10, 72, 70, 69, 43, 1,
42, 42, 44, 42, 42, 42, 42, 42,
73, 46, 47, 48, 49, 50, 51, 52,
46, 53, 45, 54, 55, 56, 57, 42,
58, 59, 60, 42, 74, 75, 42, 61,
62, 63, 64, 42, 43, 1, 42, 42,
44, 42, 42, 42, 42, 42, 42, 46,
47, 48, 49, 50, 51, 52, 46, 53,
45, 54, 55, 56, 57, 42, 58, 59,
60, 42, 74, 75, 42, 61, 62, 63,
64, 42, 74, 75, 76, 75, 76, 3,
6, 77, 77, 78, 77, 77, 77, 77,
77, 79, 17, 18, 19, 20, 21, 22,
23, 17, 24, 26, 26, 27, 28, 29,
77, 30, 31, 32, 77, 77, 77, 77,
36, 37, 38, 39, 77, 3, 6, 77,
77, 78, 77, 77, 77, 77, 77, 77,
17, 18, 19, 20, 21, 22, 23, 17,
24, 26, 26, 27, 28, 29, 77, 30,
31, 32, 77, 77, 77, 77, 36, 37,
38, 39, 77, 17, 18, 19, 20, 21,
77, 77, 77, 77, 77, 77, 27, 28,
29, 77, 30, 31, 32, 77, 77, 77,
77, 18, 37, 38, 39, 77, 18, 19,
20, 21, 77, 77, 77, 77, 77, 77,
77, 77, 77, 77, 30, 31, 32, 77,
77, 77, 77, 77, 37, 38, 39, 77,
19, 20, 21, 77, 77, 77, 77, 77,
77, 77, 77, 77, 77, 77, 77, 77,
77, 77, 77, 77, 77, 37, 38, 39,
77, 20, 21, 77, 77, 77, 77, 77,
77, 77, 77, 77, 77, 77, 77, 77,
77, 77, 77, 77, 77, 37, 38, 39,
77, 21, 77, 77, 77, 77, 77, 77,
77, 77, 77, 77, 77, 77, 77, 77,
77, 77, 77, 77, 37, 38, 39, 77,
37, 38, 77, 38, 77, 19, 20, 21,
77, 77, 77, 77, 77, 77, 77, 77,
77, 77, 30, 31, 32, 77, 77, 77,
77, 77, 37, 38, 39, 77, 19, 20,
21, 77, 77, 77, 77, 77, 77, 77,
77, 77, 77, 77, 31, 32, 77, 77,
77, 77, 77, 37, 38, 39, 77, 19,
20, 21, 77, 77, 77, 77, 77, 77,
77, 77, 77, 77, 77, 77, 32, 77,
77, 77, 77, 77, 37, 38, 39, 77,
18, 19, 20, 21, 77, 77, 77, 77,
77, 77, 27, 28, 29, 77, 30, 31,
32, 77, 77, 77, 77, 18, 37, 38,
39, 77, 18, 19, 20, 21, 77, 77,
77, 77, 77, 77, 77, 28, 29, 77,
30, 31, 32, 77, 77, 77, 77, 18,
37, 38, 39, 77, 18, 19, 20, 21,
77, 77, 77, 77, 77, 77, 77, 77,
29, 77, 30, 31, 32, 77, 77, 77,
77, 18, 37, 38, 39, 77, 17, 18,
19, 20, 21, 77, 23, 17, 77, 77,
77, 27, 28, 29, 77, 30, 31, 32,
77, 77, 77, 77, 18, 37, 38, 39,
77, 17, 18, 19, 20, 21, 77, 80,
17, 77, 77, 77, 27, 28, 29, 77,
30, 31, 32, 77, 77, 77, 77, 18,
37, 38, 39, 77, 17, 18, 19, 20,
21, 77, 77, 17, 77, 77, 77, 27,
28, 29, 77, 30, 31, 32, 77, 77,
77, 77, 18, 37, 38, 39, 77, 17,
18, 19, 20, 21, 22, 23, 17, 77,
77, 77, 27, 28, 29, 77, 30, 31,
32, 77, 77, 77, 77, 18, 37, 38,
39, 77, 3, 6, 77, 77, 78, 77,
77, 77, 77, 77, 77, 17, 18, 19,
20, 21, 22, 23, 17, 24, 77, 26,
27, 28, 29, 77, 30, 31, 32, 77,
77, 77, 77, 36, 37, 38, 39, 77,
3, 77, 77, 77, 77, 77, 77, 77,
77, 77, 77, 77, 77, 77, 4, 77,
77, 77, 77, 77, 77, 77, 18, 19,
20, 21, 77, 77, 77, 77, 77, 77,
77, 77, 77, 77, 30, 31, 32, 77,
77, 77, 77, 77, 37, 38, 39, 77,
3, 81, 81, 81, 81, 81, 81, 81,
81, 81, 81, 81, 81, 81, 4, 81,
82, 77, 13, 77, 77, 77, 77, 77,
77, 77, 83, 77, 13, 77, 6, 81,
6, 5, 5, 5, 6, 5, 7, 5,
8, 9, 10, 8, 11, 12, 10, 10,
10, 10, 10, 3, 13, 14, 10, 15,
8, 8, 16, 17, 10, 10, 18, 19,
20, 21, 22, 23, 24, 18, 25, 26,
27, 28, 29, 30, 10, 31, 32, 33,
10, 34, 35, 36, 37, 38, 39, 40,
13, 10, 42, 41, 44, 1, 43, 43,
45, 43, 43, 43, 43, 43, 46, 47,
48, 49, 50, 51, 52, 53, 47, 54,
46, 55, 56, 57, 58, 43, 59, 60,
61, 43, 43, 43, 43, 62, 63, 64,
65, 1, 43, 44, 1, 43, 43, 45,
43, 43, 43, 43, 43, 66, 47, 48,
49, 50, 51, 52, 53, 47, 54, 55,
55, 56, 57, 58, 43, 59, 60, 61,
43, 43, 43, 43, 62, 63, 64, 65,
1, 43, 44, 67, 67, 67, 67, 67,
67, 67, 67, 67, 67, 67, 67, 67,
68, 67, 44, 67, 44, 1, 43, 43,
45, 43, 43, 43, 43, 43, 43, 47,
48, 49, 50, 51, 52, 53, 47, 54,
55, 55, 56, 57, 58, 43, 59, 60,
61, 43, 43, 43, 43, 62, 63, 64,
65, 1, 43, 47, 48, 49, 50, 51,
43, 43, 43, 43, 43, 43, 56, 57,
58, 43, 59, 60, 61, 43, 43, 43,
43, 48, 63, 64, 65, 69, 43, 48,
49, 50, 51, 43, 43, 43, 43, 43,
43, 43, 43, 43, 43, 59, 60, 61,
43, 43, 43, 43, 43, 63, 64, 65,
69, 43, 49, 50, 51, 43, 43, 43,
43, 43, 43, 43, 43, 43, 43, 43,
43, 43, 43, 43, 43, 43, 43, 63,
64, 65, 43, 50, 51, 43, 43, 43,
43, 43, 43, 43, 43, 43, 43, 43,
43, 43, 43, 43, 43, 43, 43, 63,
64, 65, 43, 51, 43, 43, 43, 43,
43, 43, 43, 43, 43, 43, 43, 43,
43, 43, 43, 43, 43, 43, 63, 64,
65, 43, 63, 64, 43, 64, 43, 49,
50, 51, 43, 43, 43, 43, 43, 43,
43, 43, 43, 43, 59, 60, 61, 43,
43, 43, 43, 43, 63, 64, 65, 69,
43, 49, 50, 51, 43, 43, 43, 43,
43, 43, 43, 43, 43, 43, 43, 60,
61, 43, 43, 43, 43, 43, 63, 64,
65, 69, 43, 49, 50, 51, 43, 43,
43, 43, 43, 43, 43, 43, 43, 43,
43, 43, 61, 43, 43, 43, 43, 43,
63, 64, 65, 69, 43, 71, 70, 49,
50, 51, 43, 43, 43, 43, 43, 43,
43, 43, 43, 43, 43, 43, 43, 43,
43, 43, 43, 43, 63, 64, 65, 69,
43, 48, 49, 50, 51, 43, 43, 43,
43, 43, 43, 56, 57, 58, 43, 59,
60, 61, 43, 43, 43, 43, 48, 63,
64, 65, 69, 43, 48, 49, 50, 51,
43, 43, 43, 43, 43, 43, 43, 57,
58, 43, 59, 60, 61, 43, 43, 43,
43, 48, 63, 64, 65, 69, 43, 48,
49, 50, 51, 43, 43, 43, 43, 43,
43, 43, 43, 58, 43, 59, 60, 61,
43, 43, 43, 43, 48, 63, 64, 65,
69, 43, 47, 48, 49, 50, 51, 43,
53, 47, 43, 43, 43, 56, 57, 58,
43, 59, 60, 61, 43, 43, 43, 43,
48, 63, 64, 65, 69, 43, 47, 48,
49, 50, 51, 43, 72, 47, 43, 43,
43, 56, 57, 58, 43, 59, 60, 61,
43, 43, 43, 43, 48, 63, 64, 65,
69, 43, 47, 48, 49, 50, 51, 43,
43, 47, 43, 43, 43, 56, 57, 58,
43, 59, 60, 61, 43, 43, 43, 43,
48, 63, 64, 65, 69, 43, 47, 48,
49, 50, 51, 52, 53, 47, 43, 43,
43, 56, 57, 58, 43, 59, 60, 61,
43, 43, 43, 43, 48, 63, 64, 65,
69, 43, 44, 1, 43, 43, 45, 43,
43, 43, 43, 43, 43, 47, 48, 49,
50, 51, 52, 53, 47, 54, 43, 55,
56, 57, 58, 43, 59, 60, 61, 43,
43, 43, 43, 62, 63, 64, 65, 1,
43, 44, 67, 67, 67, 67, 67, 67,
67, 67, 67, 67, 67, 67, 67, 68,
67, 67, 67, 67, 67, 67, 67, 48,
49, 50, 51, 67, 67, 67, 67, 67,
67, 67, 67, 67, 67, 59, 60, 61,
67, 67, 67, 67, 67, 63, 64, 65,
69, 67, 44, 1, 43, 43, 45, 43,
43, 43, 43, 43, 43, 47, 48, 49,
50, 51, 52, 53, 47, 54, 46, 55,
56, 57, 58, 43, 59, 60, 61, 43,
43, 43, 43, 62, 63, 64, 65, 1,
43, 74, 73, 73, 73, 73, 73, 73,
73, 75, 73, 11, 76, 74, 73, 44,
1, 43, 43, 45, 43, 43, 43, 43,
43, 77, 47, 48, 49, 50, 51, 52,
53, 47, 54, 46, 55, 56, 57, 58,
43, 59, 60, 61, 43, 78, 79, 43,
62, 63, 64, 65, 1, 43, 44, 1,
43, 43, 45, 43, 43, 43, 43, 43,
43, 47, 48, 49, 50, 51, 52, 53,
47, 54, 46, 55, 56, 57, 58, 43,
59, 60, 61, 43, 78, 79, 43, 62,
63, 64, 65, 1, 43, 78, 79, 80,
79, 80, 3, 6, 81, 81, 82, 81,
81, 81, 81, 81, 83, 18, 19, 20,
21, 22, 23, 24, 18, 25, 27, 27,
28, 29, 30, 81, 31, 32, 33, 81,
81, 81, 81, 37, 38, 39, 40, 6,
81, 3, 6, 81, 81, 82, 81, 81,
81, 81, 81, 81, 18, 19, 20, 21,
22, 23, 24, 18, 25, 27, 27, 28,
29, 30, 81, 31, 32, 33, 81, 81,
81, 81, 37, 38, 39, 40, 6, 81,
18, 19, 20, 21, 22, 81, 81, 81,
81, 81, 81, 28, 29, 30, 81, 31,
32, 33, 81, 81, 81, 81, 19, 38,
39, 40, 84, 81, 19, 20, 21, 22,
81, 81, 81, 81, 81, 81, 81, 81,
81, 81, 31, 32, 33, 81, 81, 81,
81, 81, 38, 39, 40, 84, 81, 20,
21, 22, 81, 81, 81, 81, 81, 81,
81, 81, 81, 81, 81, 81, 81, 81,
81, 81, 81, 81, 38, 39, 40, 81,
21, 22, 81, 81, 81, 81, 81, 81,
81, 81, 81, 81, 81, 81, 81, 81,
81, 81, 81, 81, 81, 81, 6, 81,
8, 77, 77, 77, 8, 77, 77, 77,
77, 77, 3, 6, 13, 77, 78, 77,
77, 77, 77, 77, 77, 17, 18, 19,
20, 21, 22, 23, 17, 24, 25, 26,
27, 28, 29, 77, 30, 31, 32, 77,
33, 34, 77, 36, 37, 38, 39, 77,
3, 6, 77, 77, 78, 77, 77, 77,
77, 77, 77, 17, 18, 19, 20, 21,
22, 23, 17, 24, 25, 26, 27, 28,
29, 77, 30, 31, 32, 77, 77, 77,
77, 36, 37, 38, 39, 77, 33, 34,
77, 34, 77, 74, 76, 76, 76, 76,
76, 76, 76, 76, 76, 76, 76, 76,
76, 76, 76, 76, 76, 76, 76, 74,
75, 76, 8, 81, 81, 81, 8, 81,
0
81, 81, 81, 81, 38, 39, 40, 81,
22, 81, 81, 81, 81, 81, 81, 81,
81, 81, 81, 81, 81, 81, 81, 81,
81, 81, 81, 38, 39, 40, 81, 38,
39, 81, 39, 81, 20, 21, 22, 81,
81, 81, 81, 81, 81, 81, 81, 81,
81, 31, 32, 33, 81, 81, 81, 81,
81, 38, 39, 40, 84, 81, 20, 21,
22, 81, 81, 81, 81, 81, 81, 81,
81, 81, 81, 81, 32, 33, 81, 81,
81, 81, 81, 38, 39, 40, 84, 81,
20, 21, 22, 81, 81, 81, 81, 81,
81, 81, 81, 81, 81, 81, 81, 33,
81, 81, 81, 81, 81, 38, 39, 40,
84, 81, 20, 21, 22, 81, 81, 81,
81, 81, 81, 81, 81, 81, 81, 81,
81, 81, 81, 81, 81, 81, 81, 38,
39, 40, 84, 81, 19, 20, 21, 22,
81, 81, 81, 81, 81, 81, 28, 29,
30, 81, 31, 32, 33, 81, 81, 81,
81, 19, 38, 39, 40, 84, 81, 19,
20, 21, 22, 81, 81, 81, 81, 81,
81, 81, 29, 30, 81, 31, 32, 33,
81, 81, 81, 81, 19, 38, 39, 40,
84, 81, 19, 20, 21, 22, 81, 81,
81, 81, 81, 81, 81, 81, 30, 81,
31, 32, 33, 81, 81, 81, 81, 19,
38, 39, 40, 84, 81, 18, 19, 20,
21, 22, 81, 24, 18, 81, 81, 81,
28, 29, 30, 81, 31, 32, 33, 81,
81, 81, 81, 19, 38, 39, 40, 84,
81, 18, 19, 20, 21, 22, 81, 85,
18, 81, 81, 81, 28, 29, 30, 81,
31, 32, 33, 81, 81, 81, 81, 19,
38, 39, 40, 84, 81, 18, 19, 20,
21, 22, 81, 81, 18, 81, 81, 81,
28, 29, 30, 81, 31, 32, 33, 81,
81, 81, 81, 19, 38, 39, 40, 84,
81, 18, 19, 20, 21, 22, 23, 24,
18, 81, 81, 81, 28, 29, 30, 81,
31, 32, 33, 81, 81, 81, 81, 19,
38, 39, 40, 84, 81, 3, 6, 81,
81, 82, 81, 81, 81, 81, 81, 81,
18, 19, 20, 21, 22, 23, 24, 18,
25, 81, 27, 28, 29, 30, 81, 31,
32, 33, 81, 81, 81, 81, 37, 38,
39, 40, 6, 81, 3, 81, 81, 81,
81, 81, 81, 81, 81, 81, 81, 81,
81, 81, 4, 81, 81, 81, 81, 81,
81, 81, 19, 20, 21, 22, 81, 81,
81, 81, 81, 81, 81, 81, 81, 81,
31, 32, 33, 81, 81, 81, 81, 81,
38, 39, 40, 84, 81, 3, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 4, 86, 87, 81, 14,
81, 81, 81, 81, 81, 81, 81, 88,
81, 14, 81, 6, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86,
86, 86, 86, 6, 86, 86, 86, 6,
86, 9, 81, 81, 81, 9, 81, 81,
81, 81, 81, 3, 6, 14, 81, 82,
81, 81, 81, 81, 81, 81, 18, 19,
20, 21, 22, 23, 24, 18, 25, 26,
27, 28, 29, 30, 81, 31, 32, 33,
81, 34, 35, 81, 37, 38, 39, 40,
6, 81, 3, 6, 81, 81, 82, 81,
81, 81, 81, 81, 81, 18, 19, 20,
21, 22, 23, 24, 18, 25, 26, 27,
28, 29, 30, 81, 31, 32, 33, 81,
81, 81, 81, 37, 38, 39, 40, 6,
81, 34, 35, 81, 35, 81, 78, 80,
80, 80, 80, 80, 80, 80, 80, 80,
80, 80, 80, 80, 80, 80, 80, 80,
80, 80, 78, 79, 80, 9, 86, 86,
86, 9, 86, 0
};
static const char _use_syllable_machine_trans_targs[] = {
4, 8, 4, 38, 2, 4, 1, 5,
6, 4, 31, 34, 59, 60, 63, 64,
68, 40, 41, 42, 43, 44, 53, 54,
56, 65, 57, 50, 51, 52, 47, 48,
49, 66, 67, 69, 58, 45, 46, 4,
4, 4, 4, 7, 0, 30, 11, 12,
13, 14, 15, 24, 25, 27, 28, 21,
22, 23, 18, 19, 20, 29, 16, 17,
4, 10, 4, 9, 26, 4, 32, 33,
4, 35, 36, 37, 4, 4, 3, 39,
55, 4, 61, 62
5, 9, 5, 41, 2, 5, 1, 53,
6, 7, 5, 34, 37, 63, 64, 67,
68, 72, 43, 44, 45, 46, 47, 57,
58, 60, 69, 61, 54, 55, 56, 50,
51, 52, 70, 71, 73, 62, 48, 49,
5, 5, 5, 5, 8, 0, 33, 12,
13, 14, 15, 16, 27, 28, 30, 31,
24, 25, 26, 19, 20, 21, 32, 17,
18, 5, 11, 5, 10, 22, 5, 23,
29, 5, 35, 36, 5, 38, 39, 40,
5, 5, 3, 42, 4, 59, 5, 65,
66
};
static const char _use_syllable_machine_trans_actions[] = {
1, 0, 2, 3, 0, 4, 0, 0,
7, 8, 0, 7, 9, 0, 9, 3,
1, 0, 2, 3, 0, 4, 0, 5,
0, 5, 8, 0, 5, 9, 0, 9,
3, 0, 5, 5, 0, 0, 0, 5,
5, 5, 3, 3, 5, 5, 5, 5,
5, 5, 0, 0, 0, 3, 0, 0,
10, 11, 12, 13, 5, 0, 5, 0,
0, 0, 0, 0, 0, 0, 0, 5,
0, 0, 0, 0, 0, 0, 0, 0,
0, 3, 3, 0, 0, 0, 0, 0,
0, 0, 0, 0, 3, 0, 0, 10,
11, 12, 13, 7, 0, 7, 0, 0,
0, 0, 0, 0, 0, 0, 7, 0,
0, 0, 0, 0, 0, 0, 0, 0,
14, 7, 15, 0, 0, 16, 0, 0,
17, 7, 0, 0, 18, 19, 0, 3,
0, 20, 0, 0
0, 14, 5, 15, 0, 0, 16, 0,
0, 17, 0, 0, 18, 5, 0, 0,
19, 20, 0, 3, 0, 5, 21, 0,
0
};
static const char _use_syllable_machine_to_state_actions[] = {
0, 0, 0, 0, 5, 0, 0, 0,
0, 0, 0, 0, 0, 6, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@ -314,11 +332,12 @@ static const char _use_syllable_machine_to_state_actions[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0,
0, 0
};
static const char _use_syllable_machine_from_state_actions[] = {
0, 0, 0, 0, 6, 0, 0, 0,
0, 0, 0, 0, 0, 7, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@ -326,33 +345,35 @@ static const char _use_syllable_machine_from_state_actions[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0,
0, 0
};
static const short _use_syllable_machine_eof_trans[] = {
1, 3, 3, 6, 0, 41, 43, 43,
67, 67, 43, 43, 43, 43, 43, 43,
43, 43, 43, 43, 43, 43, 43, 43,
43, 43, 43, 43, 43, 67, 43, 70,
73, 70, 43, 43, 77, 77, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 82, 78, 78, 78, 82,
78, 78, 78, 78, 77, 82
1, 3, 3, 6, 6, 0, 42, 44,
44, 68, 68, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 71, 44,
44, 44, 44, 44, 44, 44, 44, 44,
68, 44, 74, 77, 74, 44, 44, 81,
81, 82, 82, 82, 82, 82, 82, 82,
82, 82, 82, 82, 82, 82, 82, 82,
82, 82, 82, 82, 82, 82, 82, 87,
82, 82, 82, 87, 82, 82, 82, 82,
81, 87
};
static const int use_syllable_machine_start = 4;
static const int use_syllable_machine_first_final = 4;
static const int use_syllable_machine_start = 5;
static const int use_syllable_machine_first_final = 5;
static const int use_syllable_machine_error = -1;
static const int use_syllable_machine_en_main = 4;
static const int use_syllable_machine_en_main = 5;
#line 38 "hb-ot-shape-complex-use-machine.rl"
#line 150 "hb-ot-shape-complex-use-machine.rl"
#line 162 "hb-ot-shape-complex-use-machine.rl"
#define found_syllable(syllable_type) \
@ -371,7 +392,7 @@ find_syllables (hb_buffer_t *buffer)
int cs;
hb_glyph_info_t *info = buffer->info;
#line 375 "hb-ot-shape-complex-use-machine.hh"
#line 396 "hb-ot-shape-complex-use-machine.hh"
{
cs = use_syllable_machine_start;
ts = 0;
@ -379,7 +400,7 @@ find_syllables (hb_buffer_t *buffer)
act = 0;
}
#line 170 "hb-ot-shape-complex-use-machine.rl"
#line 182 "hb-ot-shape-complex-use-machine.rl"
p = 0;
@ -387,7 +408,7 @@ find_syllables (hb_buffer_t *buffer)
unsigned int syllable_serial = 1;
#line 391 "hb-ot-shape-complex-use-machine.hh"
#line 412 "hb-ot-shape-complex-use-machine.hh"
{
int _slen;
int _trans;
@ -397,11 +418,11 @@ find_syllables (hb_buffer_t *buffer)
goto _test_eof;
_resume:
switch ( _use_syllable_machine_from_state_actions[cs] ) {
case 6:
case 7:
#line 1 "NONE"
{ts = p;}
break;
#line 405 "hb-ot-shape-complex-use-machine.hh"
#line 426 "hb-ot-shape-complex-use-machine.hh"
}
_keys = _use_syllable_machine_trans_keys + (cs<<1);
@ -419,73 +440,77 @@ _eof_trans:
goto _again;
switch ( _use_syllable_machine_trans_actions[_trans] ) {
case 7:
case 5:
#line 1 "NONE"
{te = p+1;}
break;
case 12:
#line 139 "hb-ot-shape-complex-use-machine.rl"
#line 150 "hb-ot-shape-complex-use-machine.rl"
{te = p+1;{ found_syllable (independent_cluster); }}
break;
case 14:
#line 141 "hb-ot-shape-complex-use-machine.rl"
#line 153 "hb-ot-shape-complex-use-machine.rl"
{te = p+1;{ found_syllable (standard_cluster); }}
break;
case 10:
#line 145 "hb-ot-shape-complex-use-machine.rl"
#line 157 "hb-ot-shape-complex-use-machine.rl"
{te = p+1;{ found_syllable (broken_cluster); }}
break;
case 8:
#line 146 "hb-ot-shape-complex-use-machine.rl"
#line 158 "hb-ot-shape-complex-use-machine.rl"
{te = p+1;{ found_syllable (non_cluster); }}
break;
case 11:
#line 139 "hb-ot-shape-complex-use-machine.rl"
#line 150 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (independent_cluster); }}
break;
case 15:
#line 140 "hb-ot-shape-complex-use-machine.rl"
#line 151 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (virama_terminated_cluster); }}
break;
case 16:
#line 152 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (sakot_terminated_cluster); }}
break;
case 13:
#line 141 "hb-ot-shape-complex-use-machine.rl"
#line 153 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (standard_cluster); }}
break;
case 17:
#line 142 "hb-ot-shape-complex-use-machine.rl"
case 18:
#line 154 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (number_joiner_terminated_cluster); }}
break;
case 16:
#line 143 "hb-ot-shape-complex-use-machine.rl"
case 17:
#line 155 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (numeral_cluster); }}
break;
case 18:
#line 144 "hb-ot-shape-complex-use-machine.rl"
case 19:
#line 156 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (symbol_cluster); }}
break;
case 19:
#line 145 "hb-ot-shape-complex-use-machine.rl"
case 20:
#line 157 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (broken_cluster); }}
break;
case 20:
#line 146 "hb-ot-shape-complex-use-machine.rl"
case 21:
#line 158 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (non_cluster); }}
break;
case 1:
#line 141 "hb-ot-shape-complex-use-machine.rl"
#line 153 "hb-ot-shape-complex-use-machine.rl"
{{p = ((te))-1;}{ found_syllable (standard_cluster); }}
break;
case 4:
#line 145 "hb-ot-shape-complex-use-machine.rl"
#line 157 "hb-ot-shape-complex-use-machine.rl"
{{p = ((te))-1;}{ found_syllable (broken_cluster); }}
break;
case 2:
#line 1 "NONE"
{ switch( act ) {
case 7:
case 8:
{{p = ((te))-1;} found_syllable (broken_cluster); }
break;
case 8:
case 9:
{{p = ((te))-1;} found_syllable (non_cluster); }
break;
}
@ -494,25 +519,25 @@ _eof_trans:
case 3:
#line 1 "NONE"
{te = p+1;}
#line 145 "hb-ot-shape-complex-use-machine.rl"
{act = 7;}
#line 157 "hb-ot-shape-complex-use-machine.rl"
{act = 8;}
break;
case 9:
#line 1 "NONE"
{te = p+1;}
#line 146 "hb-ot-shape-complex-use-machine.rl"
{act = 8;}
#line 158 "hb-ot-shape-complex-use-machine.rl"
{act = 9;}
break;
#line 507 "hb-ot-shape-complex-use-machine.hh"
#line 532 "hb-ot-shape-complex-use-machine.hh"
}
_again:
switch ( _use_syllable_machine_to_state_actions[cs] ) {
case 5:
case 6:
#line 1 "NONE"
{ts = 0;}
break;
#line 516 "hb-ot-shape-complex-use-machine.hh"
#line 541 "hb-ot-shape-complex-use-machine.hh"
}
if ( ++p != pe )
@ -528,7 +553,7 @@ _again:
}
#line 178 "hb-ot-shape-complex-use-machine.rl"
#line 190 "hb-ot-shape-complex-use-machine.rl"
}

View File

@ -68,6 +68,7 @@ VS = 21; # VARIATION_SELECTOR
#VM = 40; # VOWEL_MOD
CS = 43; # CONS_WITH_STACKER
HVM = 44; # HALANT_OR_VOWEL_MODIFIER
Sk = 48; # SAKOT
FAbv = 24; # CONS_FINAL_ABOVE
FBlw = 25; # CONS_FINAL_BELOW
@ -92,7 +93,7 @@ FMAbv = 45; # CONS_FINAL_MOD UIPC = Top
FMBlw = 46; # CONS_FINAL_MOD UIPC = Bottom
FMPst = 47; # CONS_FINAL_MOD UIPC = Not_Applicable
h = H | HVM; # https://github.com/harfbuzz/harfbuzz/issues/1102
h = H | HVM | Sk;
# Override: Adhoc ZWJ placement. https://github.com/harfbuzz/harfbuzz/issues/542#issuecomment-353169729
consonant_modifiers = CMAbv* CMBlw* ((ZWJ?.h.ZWJ? B | SUB) VS? CMAbv? CMBlw*)*;
@ -103,11 +104,16 @@ vowel_modifiers = HVM? VMPre* VMAbv* VMBlw* VMPst*;
final_consonants = FAbv* FBlw* FPst*;
final_modifiers = FMAbv* FMBlw* | FMPst?;
complex_syllable_tail =
complex_syllable_start = (R | CS)? (B | GB) VS?;
complex_syllable_middle =
consonant_modifiers
medial_consonants
dependent_vowels
vowel_modifiers
(Sk B)*
;
complex_syllable_tail =
complex_syllable_middle
final_consonants
final_modifiers
;
@ -116,12 +122,17 @@ numeral_cluster_tail = (HN N VS?)+;
symbol_cluster_tail = SMAbv+ SMBlw* | SMBlw+;
virama_terminated_cluster =
(R|CS)? (B | GB) VS?
complex_syllable_start
consonant_modifiers
ZWJ?.h.ZWJ?
;
sakot_terminated_cluster =
complex_syllable_start
complex_syllable_middle
Sk
;
standard_cluster =
(R|CS)? (B | GB) VS?
complex_syllable_start
complex_syllable_tail
;
broken_cluster =
@ -138,6 +149,7 @@ other = any;
main := |*
independent_cluster => { found_syllable (independent_cluster); };
virama_terminated_cluster => { found_syllable (virama_terminated_cluster); };
sakot_terminated_cluster => { found_syllable (sakot_terminated_cluster); };
standard_cluster => { found_syllable (standard_cluster); };
number_joiner_terminated_cluster => { found_syllable (number_joiner_terminated_cluster); };
numeral_cluster => { found_syllable (numeral_cluster); };

View File

@ -33,6 +33,7 @@
#define Rsv USE_Rsv /* Reserved */
#define S USE_S /* SYM */
#define SUB USE_SUB /* CONS_SUB */
#define Sk USE_Sk /* SAKOT */
#define VS USE_VS /* VARIATION_SELECTOR */
#define WJ USE_WJ /* Word_Joiner */
#define ZWJ USE_ZWJ /* ZWJ */
@ -305,7 +306,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 1A30 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 1A40 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 1A50 */ B, B, B, B, B, MPre, MBlw, SUB, FAbv, FAbv, MAbv, SUB, SUB, SUB, SUB, O,
/* 1A60 */ H, VPst, VAbv, VPst, VPst, VAbv, VAbv, VAbv, VAbv, VBlw, VBlw, VAbv, VBlw, VPst, VPre, VPre,
/* 1A60 */ Sk, VPst, VAbv, VPst, VPst, VAbv, VAbv, VAbv, VAbv, VBlw, VBlw, VAbv, VBlw, VPst, VPre, VPre,
/* 1A70 */ VPre, VPre, VPre, VAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VAbv, FMAbv, FMAbv, O, O, FMBlw,
/* 1A80 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
/* 1A90 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
@ -822,6 +823,7 @@ hb_use_get_category (hb_codepoint_t u)
#undef Rsv
#undef S
#undef SUB
#undef Sk
#undef VS
#undef WJ
#undef ZWJ

View File

@ -246,6 +246,7 @@ data_destroy_use (void *data)
enum syllable_type_t {
independent_cluster,
virama_terminated_cluster,
sakot_terminated_cluster,
standard_cluster,
number_joiner_terminated_cluster,
numeral_cluster,
@ -337,6 +338,7 @@ setup_topographical_masks (const hb_ot_shape_plan_t *plan,
break;
case virama_terminated_cluster:
case sakot_terminated_cluster:
case standard_cluster:
case number_joiner_terminated_cluster:
case numeral_cluster:
@ -443,6 +445,7 @@ reorder_syllable (hb_buffer_t *buffer, unsigned int start, unsigned int end)
/* Only a few syllable types need reordering. */
if (unlikely (!(FLAG_UNSAFE (syllable_type) &
(FLAG (virama_terminated_cluster) |
FLAG (sakot_terminated_cluster) |
FLAG (standard_cluster) |
FLAG (broken_cluster) |
0))))

View File

@ -73,6 +73,8 @@ enum use_category_t {
/* https://github.com/harfbuzz/harfbuzz/issues/1102 */
USE_HVM = 44, /* HALANT_OR_VOWEL_MODIFIER */
USE_Sk = 48, /* SAKOT */
USE_FAbv = 24, /* CONS_FINAL_ABOVE */
USE_FBlw = 25, /* CONS_FINAL_BELOW */
USE_FPst = 26, /* CONS_FINAL_POST */

View File

@ -10,4 +10,7 @@
../fonts/28f497629c04ceb15546c9a70e0730125ed6698d.ttf::U+11013,U+11044,U+11046:[brm_KA=0+754|brm_vowelOO=0@-647,0+0|brm_virama=0@-524,0+0]
../fonts/28f497629c04ceb15546c9a70e0730125ed6698d.ttf::U+11013,U+1103C:[brm_KA=0+754|brm_vowelU=0@-403,0+0]
../fonts/86cdd983c4e4c4d7f27dd405d6ceb7d4b9ed3d35.ttf::U+111C8,U+111C9,U+111C9:[u111C8=0+500|u111C9=0@-500,0+0|u111C9=0@-500,0+0]
../fonts/fd565cabd5208d345d0ed4fda7ae742917d846a5.ttf::U+1A3D,U+1A5A,U+1A63:[uni1A3D=0+250|uni1A5A=0+0|uni1A63=0+250]
../fonts/3cc01fede4debd4b7794ccb1b16cdb9987ea7571.ttf::U+1A3D,U+1A5A,U+1A63:[uni1A3D=0+250|uni1A5A=0+0|uni1A63=0+250]
../fonts/3cc01fede4debd4b7794ccb1b16cdb9987ea7571.ttf::U+1A3D,U+1A60,U+1A3D,U+1A63,U+1A60,U+1A3D,U+1A59:[uni1A3D=0+250|uni1A60=0+0|uni1A3D=2+250|uni1A63=2+250|uni1A60=2+0|uni1A3D=5+250|uni1A59=5+0]
../fonts/3cc01fede4debd4b7794ccb1b16cdb9987ea7571.ttf::U+1A3D,U+1A60,U+1A3D,U+1A63,U+1A60,U+1A3D,U+1A5A:[uni1A3D=0+250|uni1A60=0+0|uni1A3D=2+250|uni1A63=2+250|uni1A60=2+0|uni1A3D=5+250|uni25CC=5+250|uni1A5A=5+0]
../fonts/3cc01fede4debd4b7794ccb1b16cdb9987ea7571.ttf::U+1A3D,U+1A60,U+1A3D,U+1A63,U+1A60,U+1A3D,U+1A60:[uni1A3D=0+250|uni1A60=0+0|uni1A3D=2+250|uni1A63=2+250|uni1A60=2+0|uni1A3D=5+250|uni1A60=5+0]