[use] Allow multiple FMs in a cluster

This commit is contained in:
David Corbett 2019-05-19 10:01:20 -04:00 committed by Behdad Esfahbod
parent 487879e013
commit d100ccad02
5 changed files with 315 additions and 327 deletions

View File

@ -320,7 +320,11 @@ use_positions = {
'H': None,
'HVM': None,
'B': None,
'FM': None,
'FM': {
'Abv': [Top],
'Blw': [Bottom],
'Pst': [Not_Applicable],
},
'SUB': None,
}
@ -359,15 +363,9 @@ def map_to_use(data):
# the nasalization marks, maybe only for U+1CE9..U+1CF1.
if U == 0x1CED: UISC = Tone_Mark
# TODO: https://github.com/harfbuzz/harfbuzz/issues/525
if U == 0x1A7F: UISC = Consonant_Final
# TODO: https://github.com/harfbuzz/harfbuzz/issues/1105
if U == 0x11134: UISC = Gemination_Mark
# TODO: https://github.com/harfbuzz/harfbuzz/pull/1399
if U == 0x111C9: UISC = Consonant_Final
values = [k for k,v in items if v(U,UISC,UGC)]
assert len(values) == 1, "%s %s %s %s" % (hex(U), UISC, UGC, values)
USE = values[0]

View File

@ -36,39 +36,39 @@
#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, 44u, 21u, 21u, 8u, 44u, 8u, 44u,
1u, 15u, 1u, 1u, 8u, 44u, 8u, 44u, 8u, 39u, 8u, 26u, 8u, 26u, 8u, 26u,
8u, 39u, 8u, 39u, 8u, 39u, 8u, 44u, 8u, 44u, 8u, 44u, 8u, 44u, 8u, 44u,
8u, 44u, 8u, 44u, 8u, 44u, 1u, 39u, 8u, 44u, 13u, 21u, 4u, 4u, 13u, 13u,
8u, 44u, 8u, 44u, 41u, 42u, 42u, 42u, 8u, 44u, 8u, 44u, 8u, 44u, 8u, 39u,
8u, 26u, 8u, 26u, 8u, 26u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 44u, 8u, 44u,
8u, 44u, 8u, 44u, 8u, 44u, 8u, 44u, 8u, 44u, 8u, 44u, 1u, 39u, 1u, 15u,
4u, 4u, 13u, 21u, 13u, 13u, 12u, 44u, 1u, 44u, 8u, 44u, 41u, 42u, 42u, 42u,
21u, 42u, 1u, 5u, 0
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
};
static const char _use_syllable_machine_key_spans[] = {
33, 15, 1, 33, 45, 1, 37, 37,
15, 1, 37, 37, 32, 19, 19, 19,
32, 32, 32, 37, 37, 37, 37, 37,
37, 37, 37, 39, 37, 9, 1, 1,
37, 37, 2, 1, 37, 37, 37, 32,
19, 19, 19, 32, 32, 32, 37, 37,
37, 37, 37, 37, 37, 37, 39, 15,
1, 9, 1, 33, 44, 37, 2, 1,
22, 5
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
};
static const short _use_syllable_machine_index_offsets[] = {
0, 34, 50, 52, 86, 132, 134, 172,
210, 226, 228, 266, 304, 337, 357, 377,
397, 430, 463, 496, 534, 572, 610, 648,
686, 724, 762, 800, 840, 878, 888, 890,
892, 930, 968, 971, 973, 1011, 1049, 1087,
1120, 1140, 1160, 1180, 1213, 1246, 1279, 1317,
1355, 1393, 1431, 1469, 1507, 1545, 1583, 1623,
1639, 1641, 1651, 1653, 1687, 1732, 1770, 1773,
1775, 1798
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
};
static const char _use_syllable_machine_indicies[] = {
@ -83,247 +83,226 @@ static const char _use_syllable_machine_indicies[] = {
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, 12, 9,
9, 3, 13, 14, 9, 15, 7, 7,
16, 17, 9, 9, 18, 19, 20, 21,
22, 23, 24, 18, 25, 26, 27, 28,
29, 30, 9, 31, 32, 33, 9, 34,
35, 36, 37, 9, 39, 38, 41, 40,
40, 42, 1, 40, 40, 43, 40, 40,
40, 40, 40, 44, 45, 46, 47, 48,
49, 50, 51, 45, 52, 44, 53, 54,
55, 56, 40, 57, 58, 59, 40, 40,
40, 40, 60, 40, 41, 40, 40, 42,
1, 40, 40, 43, 40, 40, 40, 40,
40, 61, 45, 46, 47, 48, 49, 50,
51, 45, 52, 53, 53, 54, 55, 56,
40, 57, 58, 59, 40, 40, 40, 40,
60, 40, 42, 62, 62, 62, 62, 62,
62, 62, 62, 62, 62, 62, 62, 62,
63, 62, 42, 62, 41, 40, 40, 42,
1, 40, 40, 43, 40, 40, 40, 40,
40, 40, 45, 46, 47, 48, 49, 50,
51, 45, 52, 53, 53, 54, 55, 56,
40, 57, 58, 59, 40, 40, 40, 40,
60, 40, 41, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 40,
45, 46, 47, 48, 49, 40, 40, 40,
40, 40, 40, 54, 55, 56, 40, 57,
58, 59, 40, 40, 40, 40, 46, 40,
41, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 46,
47, 48, 49, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 57, 58, 59,
40, 41, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 40,
40, 47, 48, 49, 40, 41, 40, 40,
40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 48, 49,
40, 41, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 49, 40, 41, 40, 40,
40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 47, 48, 49,
40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 57, 58, 59, 40, 41, 40,
40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 47, 48,
49, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 58, 59, 40, 41,
40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 47,
48, 49, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 59, 40,
41, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 46,
47, 48, 49, 40, 40, 40, 40, 40,
40, 54, 55, 56, 40, 57, 58, 59,
40, 40, 40, 40, 46, 40, 41, 40,
40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 46, 47, 48,
49, 40, 40, 40, 40, 40, 40, 40,
55, 56, 40, 57, 58, 59, 40, 40,
40, 40, 46, 40, 41, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 46, 47, 48, 49, 40,
40, 40, 40, 40, 40, 40, 40, 56,
40, 57, 58, 59, 40, 40, 40, 40,
46, 40, 41, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 40,
45, 46, 47, 48, 49, 40, 51, 45,
40, 40, 40, 54, 55, 56, 40, 57,
58, 59, 40, 40, 40, 40, 46, 40,
41, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 45, 46,
47, 48, 49, 40, 64, 45, 40, 40,
40, 54, 55, 56, 40, 57, 58, 59,
40, 40, 40, 40, 46, 40, 41, 40,
40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 45, 46, 47, 48,
49, 40, 40, 45, 40, 40, 40, 54,
55, 56, 40, 57, 58, 59, 40, 40,
40, 40, 46, 40, 41, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 45, 46, 47, 48, 49, 50,
51, 45, 40, 40, 40, 54, 55, 56,
40, 57, 58, 59, 40, 40, 40, 40,
46, 40, 41, 40, 40, 42, 1, 40,
40, 43, 40, 40, 40, 40, 40, 40,
45, 46, 47, 48, 49, 50, 51, 45,
52, 40, 53, 54, 55, 56, 40, 57,
58, 59, 40, 40, 40, 40, 60, 40,
42, 62, 62, 62, 62, 62, 62, 41,
62, 62, 62, 62, 62, 62, 63, 62,
62, 62, 62, 62, 62, 62, 46, 47,
48, 49, 62, 62, 62, 62, 62, 62,
62, 62, 62, 62, 57, 58, 59, 62,
41, 40, 40, 42, 1, 40, 40, 43,
40, 40, 40, 40, 40, 40, 45, 46,
47, 48, 49, 50, 51, 45, 52, 44,
53, 54, 55, 56, 40, 57, 58, 59,
40, 40, 40, 40, 60, 40, 66, 65,
65, 65, 65, 65, 65, 65, 67, 65,
10, 68, 66, 65, 41, 40, 40, 42,
1, 40, 40, 43, 40, 40, 40, 40,
40, 69, 45, 46, 47, 48, 49, 50,
51, 45, 52, 44, 53, 54, 55, 56,
40, 57, 58, 59, 40, 70, 71, 40,
60, 40, 41, 40, 40, 42, 1, 40,
40, 43, 40, 40, 40, 40, 40, 40,
45, 46, 47, 48, 49, 50, 51, 45,
52, 44, 53, 54, 55, 56, 40, 57,
58, 59, 40, 70, 71, 40, 60, 40,
70, 71, 72, 71, 72, 12, 73, 73,
3, 6, 73, 73, 74, 73, 73, 73,
73, 73, 75, 18, 19, 20, 21, 22,
23, 24, 18, 25, 27, 27, 28, 29,
30, 73, 31, 32, 33, 73, 73, 73,
73, 37, 73, 12, 73, 73, 3, 6,
73, 73, 74, 73, 73, 73, 73, 73,
73, 18, 19, 20, 21, 22, 23, 24,
18, 25, 27, 27, 28, 29, 30, 73,
31, 32, 33, 73, 73, 73, 73, 37,
73, 12, 73, 73, 73, 73, 73, 73,
73, 73, 73, 73, 73, 73, 73, 18,
19, 20, 21, 22, 73, 73, 73, 73,
73, 73, 28, 29, 30, 73, 31, 32,
33, 73, 73, 73, 73, 19, 73, 12,
73, 73, 73, 73, 73, 73, 73, 73,
73, 73, 73, 73, 73, 73, 19, 20,
21, 22, 73, 73, 73, 73, 73, 73,
73, 73, 73, 73, 31, 32, 33, 73,
12, 73, 73, 73, 73, 73, 73, 73,
73, 73, 73, 73, 73, 73, 73, 73,
20, 21, 22, 73, 12, 73, 73, 73,
73, 73, 73, 73, 73, 73, 73, 73,
73, 73, 73, 73, 73, 21, 22, 73,
12, 73, 73, 73, 73, 73, 73, 73,
73, 73, 73, 73, 73, 73, 73, 73,
73, 73, 22, 73, 12, 73, 73, 73,
73, 73, 73, 73, 73, 73, 73, 73,
73, 73, 73, 73, 20, 21, 22, 73,
73, 73, 73, 73, 73, 73, 73, 73,
73, 31, 32, 33, 73, 12, 73, 73,
73, 73, 73, 73, 73, 73, 73, 73,
73, 73, 73, 73, 73, 20, 21, 22,
73, 73, 73, 73, 73, 73, 73, 73,
73, 73, 73, 32, 33, 73, 12, 73,
73, 73, 73, 73, 73, 73, 73, 73,
73, 73, 73, 73, 73, 73, 20, 21,
22, 73, 73, 73, 73, 73, 73, 73,
73, 73, 73, 73, 73, 33, 73, 12,
73, 73, 73, 73, 73, 73, 73, 73,
73, 73, 73, 73, 73, 73, 19, 20,
21, 22, 73, 73, 73, 73, 73, 73,
28, 29, 30, 73, 31, 32, 33, 73,
73, 73, 73, 19, 73, 12, 73, 73,
73, 73, 73, 73, 73, 73, 73, 73,
73, 73, 73, 73, 19, 20, 21, 22,
73, 73, 73, 73, 73, 73, 73, 29,
30, 73, 31, 32, 33, 73, 73, 73,
73, 19, 73, 12, 73, 73, 73, 73,
73, 73, 73, 73, 73, 73, 73, 73,
73, 73, 19, 20, 21, 22, 73, 73,
73, 73, 73, 73, 73, 73, 30, 73,
31, 32, 33, 73, 73, 73, 73, 19,
73, 12, 73, 73, 73, 73, 73, 73,
73, 73, 73, 73, 73, 73, 73, 18,
19, 20, 21, 22, 73, 24, 18, 73,
73, 73, 28, 29, 30, 73, 31, 32,
33, 73, 73, 73, 73, 19, 73, 12,
73, 73, 73, 73, 73, 73, 73, 73,
73, 73, 73, 73, 73, 18, 19, 20,
21, 22, 73, 76, 18, 73, 73, 73,
28, 29, 30, 73, 31, 32, 33, 73,
73, 73, 73, 19, 73, 12, 73, 73,
73, 73, 73, 73, 73, 73, 73, 73,
73, 73, 73, 18, 19, 20, 21, 22,
73, 73, 18, 73, 73, 73, 28, 29,
30, 73, 31, 32, 33, 73, 73, 73,
73, 19, 73, 12, 73, 73, 73, 73,
73, 73, 73, 73, 73, 73, 73, 73,
73, 18, 19, 20, 21, 22, 23, 24,
18, 73, 73, 73, 28, 29, 30, 73,
31, 32, 33, 73, 73, 73, 73, 19,
73, 12, 73, 73, 3, 6, 73, 73,
74, 73, 73, 73, 73, 73, 73, 18,
19, 20, 21, 22, 23, 24, 18, 25,
73, 27, 28, 29, 30, 73, 31, 32,
33, 73, 73, 73, 73, 37, 73, 3,
73, 73, 73, 73, 73, 73, 12, 73,
73, 73, 73, 73, 73, 4, 73, 73,
73, 73, 73, 73, 73, 19, 20, 21,
22, 73, 73, 73, 73, 73, 73, 73,
73, 73, 73, 31, 32, 33, 73, 3,
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, 4, 77, 78,
73, 14, 73, 73, 73, 73, 73, 73,
73, 79, 73, 14, 73, 6, 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, 77, 77, 77, 6, 77, 8,
73, 73, 73, 8, 73, 73, 12, 73,
73, 3, 6, 14, 73, 74, 73, 73,
73, 73, 73, 73, 18, 19, 20, 21,
22, 23, 24, 18, 25, 26, 27, 28,
29, 30, 73, 31, 32, 33, 73, 34,
35, 73, 37, 73, 12, 73, 73, 3,
6, 73, 73, 74, 73, 73, 73, 73,
73, 73, 18, 19, 20, 21, 22, 23,
24, 18, 25, 26, 27, 28, 29, 30,
73, 31, 32, 33, 73, 73, 73, 73,
37, 73, 34, 35, 73, 35, 73, 70,
72, 72, 72, 72, 72, 72, 72, 72,
72, 72, 72, 72, 72, 72, 72, 72,
72, 72, 72, 70, 71, 72, 8, 77,
77, 77, 8, 77, 0
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,
81, 81, 81, 81, 81, 81, 81, 81,
81, 81, 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
};
static const char _use_syllable_machine_trans_targs[] = {
4, 8, 4, 36, 2, 4, 1, 5,
6, 4, 29, 32, 4, 55, 56, 59,
60, 64, 38, 39, 40, 41, 42, 49,
50, 52, 61, 53, 46, 47, 48, 43,
44, 45, 62, 63, 65, 54, 4, 4,
4, 4, 7, 0, 28, 11, 12, 13,
14, 15, 22, 23, 25, 26, 19, 20,
21, 16, 17, 18, 27, 10, 4, 9,
24, 4, 30, 31, 4, 33, 34, 35,
4, 4, 3, 37, 51, 4, 57, 58
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
};
static const char _use_syllable_machine_trans_actions[] = {
1, 0, 2, 3, 0, 4, 0, 0,
7, 8, 0, 7, 9, 10, 0, 10,
3, 0, 0, 0, 0, 0, 0, 0,
0, 0, 3, 3, 0, 0, 0, 0,
0, 0, 0, 0, 0, 3, 11, 12,
13, 14, 7, 0, 7, 0, 0, 0,
0, 0, 0, 0, 0, 7, 0, 0,
0, 0, 0, 0, 0, 7, 15, 0,
0, 16, 0, 0, 17, 7, 0, 0,
18, 19, 0, 3, 0, 20, 0, 0
7, 8, 0, 7, 9, 0, 9, 3,
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
};
static const char _use_syllable_machine_to_state_actions[] = {
@ -335,7 +314,7 @@ 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
};
static const char _use_syllable_machine_from_state_actions[] = {
@ -347,19 +326,19 @@ 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
};
static const short _use_syllable_machine_eof_trans[] = {
1, 3, 3, 6, 0, 39, 41, 41,
63, 63, 41, 41, 41, 41, 41, 41,
41, 41, 41, 41, 41, 41, 41, 41,
41, 41, 41, 63, 41, 66, 69, 66,
41, 41, 73, 73, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 78,
74, 74, 74, 78, 74, 74, 74, 74,
73, 78
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
};
static const int use_syllable_machine_start = 4;
@ -373,7 +352,7 @@ static const int use_syllable_machine_en_main = 4;
#line 146 "hb-ot-shape-complex-use-machine.rl"
#line 150 "hb-ot-shape-complex-use-machine.rl"
#define found_syllable(syllable_type) \
@ -392,7 +371,7 @@ find_syllables (hb_buffer_t *buffer)
int cs;
hb_glyph_info_t *info = buffer->info;
#line 396 "hb-ot-shape-complex-use-machine.hh"
#line 375 "hb-ot-shape-complex-use-machine.hh"
{
cs = use_syllable_machine_start;
ts = 0;
@ -400,7 +379,7 @@ find_syllables (hb_buffer_t *buffer)
act = 0;
}
#line 166 "hb-ot-shape-complex-use-machine.rl"
#line 170 "hb-ot-shape-complex-use-machine.rl"
p = 0;
@ -408,7 +387,7 @@ find_syllables (hb_buffer_t *buffer)
unsigned int syllable_serial = 1;
#line 412 "hb-ot-shape-complex-use-machine.hh"
#line 391 "hb-ot-shape-complex-use-machine.hh"
{
int _slen;
int _trans;
@ -422,7 +401,7 @@ _resume:
#line 1 "NONE"
{ts = p;}
break;
#line 426 "hb-ot-shape-complex-use-machine.hh"
#line 405 "hb-ot-shape-complex-use-machine.hh"
}
_keys = _use_syllable_machine_trans_keys + (cs<<1);
@ -445,59 +424,59 @@ _eof_trans:
{te = p+1;}
break;
case 12:
#line 135 "hb-ot-shape-complex-use-machine.rl"
#line 139 "hb-ot-shape-complex-use-machine.rl"
{te = p+1;{ found_syllable (independent_cluster); }}
break;
case 14:
#line 137 "hb-ot-shape-complex-use-machine.rl"
#line 141 "hb-ot-shape-complex-use-machine.rl"
{te = p+1;{ found_syllable (standard_cluster); }}
break;
case 9:
#line 141 "hb-ot-shape-complex-use-machine.rl"
case 10:
#line 145 "hb-ot-shape-complex-use-machine.rl"
{te = p+1;{ found_syllable (broken_cluster); }}
break;
case 8:
#line 142 "hb-ot-shape-complex-use-machine.rl"
#line 146 "hb-ot-shape-complex-use-machine.rl"
{te = p+1;{ found_syllable (non_cluster); }}
break;
case 11:
#line 135 "hb-ot-shape-complex-use-machine.rl"
#line 139 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (independent_cluster); }}
break;
case 15:
#line 136 "hb-ot-shape-complex-use-machine.rl"
#line 140 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (virama_terminated_cluster); }}
break;
case 13:
#line 137 "hb-ot-shape-complex-use-machine.rl"
#line 141 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (standard_cluster); }}
break;
case 17:
#line 138 "hb-ot-shape-complex-use-machine.rl"
#line 142 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (number_joiner_terminated_cluster); }}
break;
case 16:
#line 139 "hb-ot-shape-complex-use-machine.rl"
#line 143 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (numeral_cluster); }}
break;
case 18:
#line 140 "hb-ot-shape-complex-use-machine.rl"
#line 144 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (symbol_cluster); }}
break;
case 19:
#line 141 "hb-ot-shape-complex-use-machine.rl"
#line 145 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (broken_cluster); }}
break;
case 20:
#line 142 "hb-ot-shape-complex-use-machine.rl"
#line 146 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (non_cluster); }}
break;
case 1:
#line 137 "hb-ot-shape-complex-use-machine.rl"
#line 141 "hb-ot-shape-complex-use-machine.rl"
{{p = ((te))-1;}{ found_syllable (standard_cluster); }}
break;
case 4:
#line 141 "hb-ot-shape-complex-use-machine.rl"
#line 145 "hb-ot-shape-complex-use-machine.rl"
{{p = ((te))-1;}{ found_syllable (broken_cluster); }}
break;
case 2:
@ -515,16 +494,16 @@ _eof_trans:
case 3:
#line 1 "NONE"
{te = p+1;}
#line 141 "hb-ot-shape-complex-use-machine.rl"
#line 145 "hb-ot-shape-complex-use-machine.rl"
{act = 7;}
break;
case 10:
case 9:
#line 1 "NONE"
{te = p+1;}
#line 142 "hb-ot-shape-complex-use-machine.rl"
#line 146 "hb-ot-shape-complex-use-machine.rl"
{act = 8;}
break;
#line 528 "hb-ot-shape-complex-use-machine.hh"
#line 507 "hb-ot-shape-complex-use-machine.hh"
}
_again:
@ -533,7 +512,7 @@ _again:
#line 1 "NONE"
{ts = 0;}
break;
#line 537 "hb-ot-shape-complex-use-machine.hh"
#line 516 "hb-ot-shape-complex-use-machine.hh"
}
if ( ++p != pe )
@ -549,7 +528,7 @@ _again:
}
#line 174 "hb-ot-shape-complex-use-machine.rl"
#line 178 "hb-ot-shape-complex-use-machine.rl"
}

View File

@ -49,7 +49,7 @@ N = 4; # BASE_NUM
GB = 5; # BASE_OTHER
CGJ = 6; # CGJ
#F = 7; # CONS_FINAL
FM = 8; # CONS_FINAL_MOD
#FM = 8; # CONS_FINAL_MOD
#M = 9; # CONS_MED
#CM = 10; # CONS_MOD
SUB = 11; # CONS_SUB
@ -66,6 +66,8 @@ S = 19; # SYM
VS = 21; # VARIATION_SELECTOR
#V = 36; # VOWEL
#VM = 40; # VOWEL_MOD
CS = 43; # CONS_WITH_STACKER
HVM = 44; # HALANT_OR_VOWEL_MODIFIER
FAbv = 24; # CONS_FINAL_ABOVE
FBlw = 25; # CONS_FINAL_BELOW
@ -86,9 +88,9 @@ VMPst = 39; # VOWEL_MOD_POST
VMPre = 23; # VOWEL_MOD_PRE
SMAbv = 41; # SYM_MOD_ABOVE
SMBlw = 42; # SYM_MOD_BELOW
CS = 43; # CONS_WITH_STACKER
HVM = 44; # HALANT_OR_VOWEL_MODIFIER
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
@ -98,7 +100,8 @@ consonant_modifiers = CMAbv* CMBlw* ((ZWJ?.h.ZWJ? B | SUB) VS? CMAbv? CMBlw*)*;
medial_consonants = MPre? MAbv? MBlw?.MBlw? MPst?;
dependent_vowels = VPre* VAbv* VBlw* VPst*;
vowel_modifiers = HVM? VMPre* VMAbv* VMBlw* VMPst*;
final_consonants = FAbv* FBlw* FPst* FM?;
final_consonants = FAbv* FBlw* FPst*;
final_modifiers = FMAbv* FMBlw* | FMPst?;
complex_syllable_tail =
consonant_modifiers
@ -106,6 +109,7 @@ complex_syllable_tail =
dependent_vowels
vowel_modifiers
final_consonants
final_modifiers
;
number_joiner_terminated_cluster_tail = (HN N VS?)* HN;
numeral_cluster_tail = (HN N VS?)+;

View File

@ -22,7 +22,6 @@
#define B USE_B /* BASE */
#define CGJ USE_CGJ /* CGJ */
#define CS USE_CS /* CONS_WITH_STACKER */
#define FM USE_FM /* CONS_FINAL_MOD */
#define GB USE_GB /* BASE_OTHER */
#define H USE_H /* HALANT */
#define HN USE_HN /* HALANT_NUM */
@ -43,6 +42,9 @@
#define FBlw USE_FBlw
#define FPst USE_FPst
#define FAbv USE_FAbv
#define FMBlw USE_FMBlw
#define FMPst USE_FMPst
#define FMAbv USE_FMAbv
#define MPre USE_MPre
#define MBlw USE_MBlw
#define MPst USE_MPst
@ -75,7 +77,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* Latin-1 Supplement */
/* 00A0 */ GB, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O,
/* 00B0 */ O, O, FM, FM, O, O, O, O, O, O, O, O, O, O, O, O,
/* 00B0 */ O, O, FMPst, FMPst, O, O, O, O, O, O, O, O, O, O, O, O,
/* 00C0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O,
/* 00D0 */ O, O, O, O, O, O, O, GB,
@ -108,7 +110,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 09C0 */ VPst, VBlw, VBlw, VBlw, VBlw, O, O, VPre, VPre, O, O, VPst, VPst, H, IND, O,
/* 09D0 */ O, O, O, O, O, O, O, VPst, O, O, O, O, B, B, O, B,
/* 09E0 */ B, B, VBlw, VBlw, O, O, B, B, B, B, B, B, B, B, B, B,
/* 09F0 */ B, B, O, O, O, O, O, O, O, O, O, O, B, O, FM, O,
/* 09F0 */ B, B, O, O, O, O, O, O, O, O, O, O, B, O, FMAbv, O,
/* Gurmukhi */
@ -204,7 +206,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* Tibetan */
VBlw, VBlw, O, O, O, O, O, O,
/* 0F20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 0F30 */ B, B, B, B, O, FM, O, FM, O, CMAbv, O, O, O, O, VPst, VPre,
/* 0F30 */ B, B, B, B, O, FMBlw, O, FMBlw, O, CMAbv, O, O, O, O, VPst, VPre,
/* 0F40 */ B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, B,
/* 0F50 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 0F60 */ B, B, B, B, B, B, B, B, B, B, B, B, B, O, O, O,
@ -213,7 +215,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 0F90 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, O, SUB, SUB, SUB, SUB, SUB, SUB, SUB,
/* 0FA0 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB,
/* 0FB0 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, O, O, O,
/* 0FC0 */ O, O, O, O, O, O, FM, O,
/* 0FC0 */ O, O, O, O, O, O, FMBlw, O,
#define use_offset_0x1000u 1536
@ -260,8 +262,8 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 1790 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 17A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 17B0 */ B, B, B, B, O, O, VPst, VAbv, VAbv, VAbv, VAbv, VBlw, VBlw, VBlw, VPst, VPst,
/* 17C0 */ VPst, VPre, VPre, VPre, VPst, VPst, VMAbv, VMPst, VPst, VMAbv, VMAbv, FM, FAbv, CMAbv, FM, FM,
/* 17D0 */ FM, VAbv, H, FM, O, O, O, O, O, O, O, O, B, FM, O, O,
/* 17C0 */ VPst, VPre, VPre, VPre, VPst, VPst, VMAbv, VMPst, VPst, VMAbv, VMAbv, FMAbv, FAbv, CMAbv, FMAbv, FMAbv,
/* 17D0 */ FMAbv, VAbv, H, FMAbv, O, O, O, O, O, O, O, O, B, FMAbv, O, O,
/* 17E0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
#define use_offset_0x1900u 1936
@ -272,7 +274,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 1900 */ GB, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 1910 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, O,
/* 1920 */ VAbv, VAbv, VBlw, VPst, VPst, VAbv, VAbv, VAbv, VAbv, SUB, SUB, SUB, O, O, O, O,
/* 1930 */ FPst, FPst, VMBlw, FPst, FPst, FPst, FPst, FPst, FPst, FBlw, VAbv, FM, O, O, O, O,
/* 1930 */ FPst, FPst, VMBlw, FPst, FPst, FPst, FPst, FPst, FPst, FBlw, VAbv, FMBlw, O, O, O, O,
/* 1940 */ O, O, O, O, O, O, B, B, B, B, B, B, B, B, B, B,
/* Tai Le */
@ -304,7 +306,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 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,
/* 1A70 */ VPre, VPre, VPre, VAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VAbv, FM, FM, O, O, FBlw,
/* 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,
@ -341,7 +343,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 1C00 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 1C10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 1C20 */ B, B, B, B, SUB, SUB, VPst, VPre, VPre, VPst, VPst, VPst, VBlw, FAbv, FAbv, FAbv,
/* 1C30 */ FAbv, FAbv, FAbv, FAbv, VMPre, VMPre, FM, CMBlw, O, O, O, O, O, O, O, O,
/* 1C30 */ FAbv, FAbv, FAbv, FAbv, VMPre, VMPre, FMAbv, CMBlw, O, O, O, O, O, O, O, O,
/* 1C40 */ B, B, B, B, B, B, B, B, B, B, O, O, O, B, B, B,
#define use_offset_0x1cd0u 2688
@ -357,7 +359,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* Combining Diacritical Marks Supplement */
O, O, O, FM, O, O, O, O,
O, O, O, FMAbv, O, O, O, O,
#define use_offset_0x2008u 2744
@ -372,8 +374,8 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* Superscripts and Subscripts */
/* 2070 */ O, O, O, O, FM, O, O, O, O, O, O, O, O, O, O, O,
/* 2080 */ O, O, FM, FM, FM, O, O, O,
/* 2070 */ O, O, O, O, FMPst, O, O, O, O, O, O, O, O, O, O, O,
/* 2080 */ O, O, FMPst, FMPst, FMPst, O, O, O,
#define use_offset_0x20f0u 2800
@ -547,7 +549,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 11190 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 111A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 111B0 */ B, B, B, VPst, VPre, VPst, VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, VAbv, VAbv, VAbv, VAbv,
/* 111C0 */ H, B, R, R, O, O, O, O, GB, FBlw, CMBlw, VAbv, VBlw, O, O, O,
/* 111C0 */ H, B, R, R, O, O, O, O, GB, FMBlw, CMBlw, VAbv, VBlw, O, O, O,
/* 111D0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
/* Sinhala Archaic Numbers */
@ -600,7 +602,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 11420 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 11430 */ B, B, B, B, B, VPst, VPre, VPst, VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, VAbv, VAbv,
/* 11440 */ VPst, VPst, H, VMAbv, VMAbv, VMPst, CMBlw, B, O, O, O, O, O, O, O, O,
/* 11450 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, FM, B,
/* 11450 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, FMAbv, B,
/* 11460 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O,
/* 11470 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O,
@ -683,7 +685,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 11A00 */ B, VAbv, VBlw, VBlw, VAbv, VAbv, VAbv, VAbv, VAbv, VAbv, VBlw, B, B, B, B, B,
/* 11A10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 11A20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 11A30 */ B, B, B, FM, VBlw, VMAbv, VMAbv, VMAbv, VMAbv, VMPst, R, MBlw, MBlw, MBlw, MBlw, GB,
/* 11A30 */ B, B, B, FMBlw, VBlw, VMAbv, VMAbv, VMAbv, VMAbv, VMPst, R, MBlw, MBlw, MBlw, MBlw, GB,
/* 11A40 */ O, O, O, O, O, GB, O, H, O, O, O, O, O, O, O, O,
/* Soyombo */
@ -809,7 +811,6 @@ hb_use_get_category (hb_codepoint_t u)
#undef B
#undef CGJ
#undef CS
#undef FM
#undef GB
#undef H
#undef HN
@ -830,6 +831,9 @@ hb_use_get_category (hb_codepoint_t u)
#undef FBlw
#undef FPst
#undef FAbv
#undef FMBlw
#undef FMPst
#undef FMAbv
#undef MPre
#undef MBlw
#undef MPst

View File

@ -68,6 +68,10 @@ enum use_category_t {
USE_VS = 21, /* VARIATION_SELECTOR */
// USE_V = 36, /* VOWEL */
// USE_VM = 40, /* VOWEL_MOD */
USE_CS = 43, /* CONS_WITH_STACKER */
/* https://github.com/harfbuzz/harfbuzz/issues/1102 */
USE_HVM = 44, /* HALANT_OR_VOWEL_MODIFIER */
USE_FAbv = 24, /* CONS_FINAL_ABOVE */
USE_FBlw = 25, /* CONS_FINAL_BELOW */
@ -88,10 +92,9 @@ enum use_category_t {
USE_VMPre = 23, /* VOWEL_MOD_PRE */
USE_SMAbv = 41, /* SYM_MOD_ABOVE */
USE_SMBlw = 42, /* SYM_MOD_BELOW */
USE_CS = 43, /* CONS_WITH_STACKER */
/* https://github.com/harfbuzz/harfbuzz/issues/1102 */
USE_HVM = 44, /* HALANT_OR_VOWEL_MODIFIER */
USE_FMAbv = 45, /* CONS_FINAL_MOD UIPC = Top */
USE_FMBlw = 46, /* CONS_FINAL_MOD UIPC = Bottom */
USE_FMPst = 47, /* CONS_FINAL_MOD UIPC = Not_Applicable */
};
HB_INTERNAL USE_TABLE_ELEMENT_TYPE