[USE] Support hieroglyph clusters

This commit is contained in:
David Corbett 2020-08-14 18:30:20 -04:00
parent 06f49fc8ae
commit faf09f5466
6 changed files with 365 additions and 238 deletions

View File

@ -38,8 +38,16 @@ headers.append (["UnicodeData.txt does not have a header."])
data = [{} for _ in files] data = [{} for _ in files]
values = [{} for _ in files] values = [{} for _ in files]
for i, f in enumerate (files): for i, f in enumerate (files):
extended = False
for line in f: for line in f:
# TODO: https://github.com/MicrosoftDocs/typography-issues/issues/522
if extended and line.startswith ('# ') and line.find (';'):
line = line[2:]
elif 'USE_Syllabic_Category' in line:
extended = True
j = line.find ('#') j = line.find ('#')
if j >= 0: if j >= 0:
line = line[:j] line = line[:j]
@ -176,6 +184,10 @@ property_names = [
'Number_Joiner', 'Number_Joiner',
'Number', 'Number',
'Brahmi_Joining_Number', 'Brahmi_Joining_Number',
'Hieroglyph',
'Hieroglyph_Joiner',
'Hieroglyph_Segment_Begin',
'Hieroglyph_Segment_End',
# Indic_Positional_Category # Indic_Positional_Category
'Not_Applicable', 'Not_Applicable',
'Right', 'Right',
@ -268,6 +280,14 @@ def is_HALANT_OR_VOWEL_MODIFIER(U, UISC, UGC, AJT):
return U in [0x11046, 0x1134D] return U in [0x11046, 0x1134D]
def is_HALANT_NUM(U, UISC, UGC, AJT): def is_HALANT_NUM(U, UISC, UGC, AJT):
return UISC == Number_Joiner return UISC == Number_Joiner
def is_HIEROGLYPH(U, UISC, UGC, AJT):
return UISC == Hieroglyph
def is_HIEROGLYPH_JOINER(U, UISC, UGC, AJT):
return UISC == Hieroglyph_Joiner
def is_HIEROGLYPH_SEGMENT_BEGIN(U, UISC, UGC, AJT):
return UISC == Hieroglyph_Segment_Begin
def is_HIEROGLYPH_SEGMENT_END(U, UISC, UGC, AJT):
return UISC == Hieroglyph_Segment_End
def is_ZWNJ(U, UISC, UGC, AJT): def is_ZWNJ(U, UISC, UGC, AJT):
return UISC == Non_Joiner return UISC == Non_Joiner
def is_ZWJ(U, UISC, UGC, AJT): def is_ZWJ(U, UISC, UGC, AJT):
@ -316,6 +336,10 @@ use_mapping = {
'H': is_HALANT, 'H': is_HALANT,
'HVM': is_HALANT_OR_VOWEL_MODIFIER, 'HVM': is_HALANT_OR_VOWEL_MODIFIER,
'HN': is_HALANT_NUM, 'HN': is_HALANT_NUM,
'G': is_HIEROGLYPH,
'J': is_HIEROGLYPH_JOINER,
'SB': is_HIEROGLYPH_SEGMENT_BEGIN,
'SE': is_HIEROGLYPH_SEGMENT_END,
'ZWNJ': is_ZWNJ, 'ZWNJ': is_ZWNJ,
'ZWJ': is_ZWJ, 'ZWJ': is_ZWJ,
'WJ': is_Word_Joiner, 'WJ': is_Word_Joiner,

View File

@ -37,7 +37,7 @@
#line 39 "hb-ot-shape-complex-use-machine.hh" #line 39 "hb-ot-shape-complex-use-machine.hh"
static const unsigned char _use_syllable_machine_trans_keys[] = { static const unsigned char _use_syllable_machine_trans_keys[] = {
12u, 48u, 1u, 15u, 1u, 1u, 12u, 48u, 1u, 1u, 0u, 48u, 11u, 48u, 11u, 48u, 12u, 48u, 1u, 15u, 1u, 1u, 12u, 48u, 1u, 1u, 0u, 51u, 11u, 48u, 11u, 48u,
1u, 15u, 1u, 1u, 22u, 48u, 23u, 48u, 24u, 47u, 25u, 47u, 26u, 47u, 45u, 46u, 1u, 15u, 1u, 1u, 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, 46u, 46u, 24u, 48u, 24u, 48u, 24u, 48u, 1u, 1u, 24u, 48u, 23u, 48u, 23u, 48u,
23u, 48u, 22u, 48u, 22u, 48u, 22u, 48u, 11u, 48u, 1u, 48u, 13u, 13u, 4u, 4u, 23u, 48u, 22u, 48u, 22u, 48u, 22u, 48u, 11u, 48u, 1u, 48u, 13u, 13u, 4u, 4u,
@ -45,29 +45,31 @@ static const unsigned char _use_syllable_machine_trans_keys[] = {
26u, 47u, 45u, 46u, 46u, 46u, 24u, 48u, 24u, 48u, 24u, 48u, 24u, 48u, 23u, 48u, 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, 11u, 48u, 1u, 48u, 1u, 15u, 23u, 48u, 23u, 48u, 22u, 48u, 22u, 48u, 22u, 48u, 11u, 48u, 1u, 48u, 1u, 15u,
4u, 4u, 13u, 13u, 12u, 48u, 1u, 48u, 11u, 48u, 41u, 42u, 42u, 42u, 1u, 5u, 4u, 4u, 13u, 13u, 12u, 48u, 1u, 48u, 11u, 48u, 41u, 42u, 42u, 42u, 1u, 5u,
0 50u, 52u, 49u, 52u, 49u, 51u, 0
}; };
static const char _use_syllable_machine_key_spans[] = { static const char _use_syllable_machine_key_spans[] = {
37, 15, 1, 37, 1, 49, 38, 38, 37, 15, 1, 37, 1, 52, 38, 38,
15, 1, 27, 26, 24, 23, 22, 2, 15, 1, 27, 26, 24, 23, 22, 2,
1, 25, 25, 25, 1, 25, 26, 26, 1, 25, 25, 25, 1, 25, 26, 26,
26, 27, 27, 27, 38, 48, 1, 1, 26, 27, 27, 27, 38, 48, 1, 1,
38, 2, 1, 38, 27, 26, 24, 23, 38, 2, 1, 38, 27, 26, 24, 23,
22, 2, 1, 25, 25, 25, 25, 26, 22, 2, 1, 25, 25, 25, 25, 26,
26, 26, 27, 27, 27, 38, 48, 15, 26, 26, 27, 27, 27, 38, 48, 15,
1, 1, 37, 48, 38, 2, 1, 5 1, 1, 37, 48, 38, 2, 1, 5,
3, 4, 3
}; };
static const short _use_syllable_machine_index_offsets[] = { static const short _use_syllable_machine_index_offsets[] = {
0, 38, 54, 56, 94, 96, 146, 185, 0, 38, 54, 56, 94, 96, 149, 188,
224, 240, 242, 270, 297, 322, 346, 369, 227, 243, 245, 273, 300, 325, 349, 372,
372, 374, 400, 426, 452, 454, 480, 507, 375, 377, 403, 429, 455, 457, 483, 510,
534, 561, 589, 617, 645, 684, 733, 735, 537, 564, 592, 620, 648, 687, 736, 738,
737, 776, 779, 781, 820, 848, 875, 900, 740, 779, 782, 784, 823, 851, 878, 903,
924, 947, 950, 952, 978, 1004, 1030, 1056, 927, 950, 953, 955, 981, 1007, 1033, 1059,
1083, 1110, 1137, 1165, 1193, 1221, 1260, 1309, 1086, 1113, 1140, 1168, 1196, 1224, 1263, 1312,
1325, 1327, 1329, 1367, 1416, 1455, 1458, 1460 1328, 1330, 1332, 1370, 1419, 1458, 1461, 1463,
1469, 1473, 1478
}; };
static const char _use_syllable_machine_indicies[] = { static const char _use_syllable_machine_indicies[] = {
@ -89,172 +91,174 @@ static const char _use_syllable_machine_indicies[] = {
20, 21, 22, 23, 24, 18, 25, 26, 20, 21, 22, 23, 24, 18, 25, 26,
27, 28, 29, 30, 10, 31, 32, 33, 27, 28, 29, 30, 10, 31, 32, 33,
10, 34, 35, 36, 37, 38, 39, 40, 10, 34, 35, 36, 37, 38, 39, 40,
13, 10, 42, 1, 41, 41, 43, 41, 13, 41, 10, 42, 10, 44, 1, 43,
41, 41, 41, 41, 41, 44, 45, 46, 43, 45, 43, 43, 43, 43, 43, 43,
47, 48, 49, 50, 44, 51, 9, 52, 46, 47, 48, 49, 50, 51, 52, 46,
53, 54, 55, 41, 56, 57, 58, 41, 53, 9, 54, 55, 56, 57, 43, 58,
41, 41, 41, 59, 60, 61, 62, 1, 59, 60, 43, 43, 43, 43, 61, 62,
41, 42, 1, 41, 41, 43, 41, 41, 63, 64, 1, 43, 44, 1, 43, 43,
41, 41, 41, 41, 44, 45, 46, 47, 45, 43, 43, 43, 43, 43, 43, 46,
48, 49, 50, 44, 51, 52, 52, 53, 47, 48, 49, 50, 51, 52, 46, 53,
54, 55, 41, 56, 57, 58, 41, 41, 54, 54, 55, 56, 57, 43, 58, 59,
41, 41, 59, 60, 61, 62, 1, 41, 60, 43, 43, 43, 43, 61, 62, 63,
42, 63, 63, 63, 63, 63, 63, 63, 64, 1, 43, 44, 65, 65, 65, 65,
63, 63, 63, 63, 63, 63, 64, 63, 65, 65, 65, 65, 65, 65, 65, 65,
42, 63, 44, 45, 46, 47, 48, 41, 65, 66, 65, 44, 65, 46, 47, 48,
41, 41, 41, 41, 41, 53, 54, 55, 49, 50, 43, 43, 43, 43, 43, 43,
41, 56, 57, 58, 41, 41, 41, 41, 55, 56, 57, 43, 58, 59, 60, 43,
45, 60, 61, 62, 65, 41, 45, 46, 43, 43, 43, 47, 62, 63, 64, 67,
47, 48, 41, 41, 41, 41, 41, 41, 43, 47, 48, 49, 50, 43, 43, 43,
41, 41, 41, 41, 56, 57, 58, 41, 43, 43, 43, 43, 43, 43, 43, 58,
41, 41, 41, 41, 60, 61, 62, 65, 59, 60, 43, 43, 43, 43, 43, 62,
41, 46, 47, 48, 41, 41, 41, 41, 63, 64, 67, 43, 48, 49, 50, 43,
41, 41, 41, 41, 41, 41, 41, 41, 43, 43, 43, 43, 43, 43, 43, 43,
41, 41, 41, 41, 41, 41, 60, 61, 43, 43, 43, 43, 43, 43, 43, 43,
62, 41, 47, 48, 41, 41, 41, 41, 43, 62, 63, 64, 43, 49, 50, 43,
41, 41, 41, 41, 41, 41, 41, 41, 43, 43, 43, 43, 43, 43, 43, 43,
41, 41, 41, 41, 41, 41, 60, 61, 43, 43, 43, 43, 43, 43, 43, 43,
62, 41, 48, 41, 41, 41, 41, 41, 43, 62, 63, 64, 43, 50, 43, 43,
41, 41, 41, 41, 41, 41, 41, 41, 43, 43, 43, 43, 43, 43, 43, 43,
41, 41, 41, 41, 41, 60, 61, 62, 43, 43, 43, 43, 43, 43, 43, 43,
41, 60, 61, 41, 61, 41, 46, 47, 62, 63, 64, 43, 62, 63, 43, 63,
48, 41, 41, 41, 41, 41, 41, 41, 43, 48, 49, 50, 43, 43, 43, 43,
41, 41, 41, 56, 57, 58, 41, 41, 43, 43, 43, 43, 43, 43, 58, 59,
41, 41, 41, 60, 61, 62, 65, 41, 60, 43, 43, 43, 43, 43, 62, 63,
46, 47, 48, 41, 41, 41, 41, 41, 64, 67, 43, 48, 49, 50, 43, 43,
41, 41, 41, 41, 41, 41, 57, 58, 43, 43, 43, 43, 43, 43, 43, 43,
41, 41, 41, 41, 41, 60, 61, 62, 43, 59, 60, 43, 43, 43, 43, 43,
65, 41, 46, 47, 48, 41, 41, 41, 62, 63, 64, 67, 43, 48, 49, 50,
41, 41, 41, 41, 41, 41, 41, 41, 43, 43, 43, 43, 43, 43, 43, 43,
41, 58, 41, 41, 41, 41, 41, 60, 43, 43, 43, 43, 60, 43, 43, 43,
61, 62, 65, 41, 67, 66, 46, 47, 43, 43, 62, 63, 64, 67, 43, 69,
48, 41, 41, 41, 41, 41, 41, 41, 68, 48, 49, 50, 43, 43, 43, 43,
41, 41, 41, 41, 41, 41, 41, 41, 43, 43, 43, 43, 43, 43, 43, 43,
41, 41, 41, 60, 61, 62, 65, 41, 43, 43, 43, 43, 43, 43, 62, 63,
45, 46, 47, 48, 41, 41, 41, 41, 64, 67, 43, 47, 48, 49, 50, 43,
41, 41, 53, 54, 55, 41, 56, 57, 43, 43, 43, 43, 43, 55, 56, 57,
58, 41, 41, 41, 41, 45, 60, 61, 43, 58, 59, 60, 43, 43, 43, 43,
62, 65, 41, 45, 46, 47, 48, 41, 47, 62, 63, 64, 67, 43, 47, 48,
41, 41, 41, 41, 41, 41, 54, 55, 49, 50, 43, 43, 43, 43, 43, 43,
41, 56, 57, 58, 41, 41, 41, 41, 43, 56, 57, 43, 58, 59, 60, 43,
45, 60, 61, 62, 65, 41, 45, 46, 43, 43, 43, 47, 62, 63, 64, 67,
47, 48, 41, 41, 41, 41, 41, 41, 43, 47, 48, 49, 50, 43, 43, 43,
41, 41, 55, 41, 56, 57, 58, 41, 43, 43, 43, 43, 43, 57, 43, 58,
41, 41, 41, 45, 60, 61, 62, 65, 59, 60, 43, 43, 43, 43, 47, 62,
41, 44, 45, 46, 47, 48, 41, 50, 63, 64, 67, 43, 46, 47, 48, 49,
44, 41, 41, 41, 53, 54, 55, 41, 50, 43, 52, 46, 43, 43, 43, 55,
56, 57, 58, 41, 41, 41, 41, 45, 56, 57, 43, 58, 59, 60, 43, 43,
60, 61, 62, 65, 41, 44, 45, 46, 43, 43, 47, 62, 63, 64, 67, 43,
47, 48, 41, 41, 44, 41, 41, 41, 46, 47, 48, 49, 50, 43, 43, 46,
53, 54, 55, 41, 56, 57, 58, 41, 43, 43, 43, 55, 56, 57, 43, 58,
41, 41, 41, 45, 60, 61, 62, 65, 59, 60, 43, 43, 43, 43, 47, 62,
41, 44, 45, 46, 47, 48, 49, 50, 63, 64, 67, 43, 46, 47, 48, 49,
44, 41, 41, 41, 53, 54, 55, 41, 50, 51, 52, 46, 43, 43, 43, 55,
56, 57, 58, 41, 41, 41, 41, 45, 56, 57, 43, 58, 59, 60, 43, 43,
60, 61, 62, 65, 41, 42, 1, 41, 43, 43, 47, 62, 63, 64, 67, 43,
41, 43, 41, 41, 41, 41, 41, 41, 44, 1, 43, 43, 45, 43, 43, 43,
44, 45, 46, 47, 48, 49, 50, 44, 43, 43, 43, 46, 47, 48, 49, 50,
51, 41, 52, 53, 54, 55, 41, 56, 51, 52, 46, 53, 43, 54, 55, 56,
57, 58, 41, 41, 41, 41, 59, 60, 57, 43, 58, 59, 60, 43, 43, 43,
61, 62, 1, 41, 42, 63, 63, 63, 43, 61, 62, 63, 64, 1, 43, 44,
63, 63, 63, 63, 63, 63, 63, 63, 65, 65, 65, 65, 65, 65, 65, 65,
63, 63, 64, 63, 63, 63, 63, 63, 65, 65, 65, 65, 65, 66, 65, 65,
63, 63, 45, 46, 47, 48, 63, 63, 65, 65, 65, 65, 65, 47, 48, 49,
63, 63, 63, 63, 63, 63, 63, 63, 50, 65, 65, 65, 65, 65, 65, 65,
56, 57, 58, 63, 63, 63, 63, 63, 65, 65, 65, 58, 59, 60, 65, 65,
60, 61, 62, 65, 63, 69, 68, 11, 65, 65, 65, 62, 63, 64, 67, 65,
70, 42, 1, 41, 41, 43, 41, 41, 71, 70, 11, 72, 44, 1, 43, 43,
41, 41, 41, 41, 44, 45, 46, 47, 45, 43, 43, 43, 43, 43, 43, 46,
48, 49, 50, 44, 51, 9, 52, 53, 47, 48, 49, 50, 51, 52, 46, 53,
54, 55, 41, 56, 57, 58, 41, 17, 9, 54, 55, 56, 57, 43, 58, 59,
71, 41, 59, 60, 61, 62, 1, 41, 60, 43, 17, 73, 43, 61, 62, 63,
17, 71, 72, 71, 72, 3, 6, 73, 64, 1, 43, 17, 73, 74, 73, 74,
73, 74, 73, 73, 73, 73, 73, 73, 3, 6, 75, 75, 76, 75, 75, 75,
18, 19, 20, 21, 22, 23, 24, 18, 75, 75, 75, 18, 19, 20, 21, 22,
25, 27, 27, 28, 29, 30, 73, 31, 23, 24, 18, 25, 27, 27, 28, 29,
32, 33, 73, 73, 73, 73, 37, 38, 30, 75, 31, 32, 33, 75, 75, 75,
39, 40, 6, 73, 18, 19, 20, 21, 75, 37, 38, 39, 40, 6, 75, 18,
22, 73, 73, 73, 73, 73, 73, 28, 19, 20, 21, 22, 75, 75, 75, 75,
29, 30, 73, 31, 32, 33, 73, 73, 75, 75, 28, 29, 30, 75, 31, 32,
73, 73, 19, 38, 39, 40, 75, 73, 33, 75, 75, 75, 75, 19, 38, 39,
19, 20, 21, 22, 73, 73, 73, 73, 40, 77, 75, 19, 20, 21, 22, 75,
73, 73, 73, 73, 73, 73, 31, 32, 75, 75, 75, 75, 75, 75, 75, 75,
33, 73, 73, 73, 73, 73, 38, 39, 75, 31, 32, 33, 75, 75, 75, 75,
40, 75, 73, 20, 21, 22, 73, 73, 75, 38, 39, 40, 77, 75, 20, 21,
73, 73, 73, 73, 73, 73, 73, 73, 22, 75, 75, 75, 75, 75, 75, 75,
73, 73, 73, 73, 73, 73, 73, 73, 75, 75, 75, 75, 75, 75, 75, 75,
38, 39, 40, 73, 21, 22, 73, 73, 75, 75, 75, 38, 39, 40, 75, 21,
73, 73, 73, 73, 73, 73, 73, 73, 22, 75, 75, 75, 75, 75, 75, 75,
73, 73, 73, 73, 73, 73, 73, 73, 75, 75, 75, 75, 75, 75, 75, 75,
38, 39, 40, 73, 22, 73, 73, 73, 75, 75, 75, 38, 39, 40, 75, 22,
73, 73, 73, 73, 73, 73, 73, 73, 75, 75, 75, 75, 75, 75, 75, 75,
73, 73, 73, 73, 73, 73, 73, 38, 75, 75, 75, 75, 75, 75, 75, 75,
39, 40, 73, 38, 39, 73, 39, 73, 75, 75, 38, 39, 40, 75, 38, 39,
20, 21, 22, 73, 73, 73, 73, 73, 75, 39, 75, 20, 21, 22, 75, 75,
73, 73, 73, 73, 73, 31, 32, 33, 75, 75, 75, 75, 75, 75, 75, 75,
73, 73, 73, 73, 73, 38, 39, 40, 31, 32, 33, 75, 75, 75, 75, 75,
75, 73, 20, 21, 22, 73, 73, 73, 38, 39, 40, 77, 75, 20, 21, 22,
73, 73, 73, 73, 73, 73, 73, 73, 75, 75, 75, 75, 75, 75, 75, 75,
32, 33, 73, 73, 73, 73, 73, 38, 75, 75, 75, 32, 33, 75, 75, 75,
39, 40, 75, 73, 20, 21, 22, 73, 75, 75, 38, 39, 40, 77, 75, 20,
73, 73, 73, 73, 73, 73, 73, 73, 21, 22, 75, 75, 75, 75, 75, 75,
73, 73, 73, 33, 73, 73, 73, 73, 75, 75, 75, 75, 75, 75, 33, 75,
73, 38, 39, 40, 75, 73, 20, 21, 75, 75, 75, 75, 38, 39, 40, 77,
22, 73, 73, 73, 73, 73, 73, 73, 75, 20, 21, 22, 75, 75, 75, 75,
73, 73, 73, 73, 73, 73, 73, 73, 75, 75, 75, 75, 75, 75, 75, 75,
73, 73, 73, 38, 39, 40, 75, 73, 75, 75, 75, 75, 75, 75, 38, 39,
19, 20, 21, 22, 73, 73, 73, 73, 40, 77, 75, 19, 20, 21, 22, 75,
73, 73, 28, 29, 30, 73, 31, 32, 75, 75, 75, 75, 75, 28, 29, 30,
33, 73, 73, 73, 73, 19, 38, 39, 75, 31, 32, 33, 75, 75, 75, 75,
40, 75, 73, 19, 20, 21, 22, 73, 19, 38, 39, 40, 77, 75, 19, 20,
73, 73, 73, 73, 73, 73, 29, 30, 21, 22, 75, 75, 75, 75, 75, 75,
73, 31, 32, 33, 73, 73, 73, 73, 75, 29, 30, 75, 31, 32, 33, 75,
19, 38, 39, 40, 75, 73, 19, 20, 75, 75, 75, 19, 38, 39, 40, 77,
21, 22, 73, 73, 73, 73, 73, 73, 75, 19, 20, 21, 22, 75, 75, 75,
73, 73, 30, 73, 31, 32, 33, 73, 75, 75, 75, 75, 75, 30, 75, 31,
73, 73, 73, 19, 38, 39, 40, 75, 32, 33, 75, 75, 75, 75, 19, 38,
73, 18, 19, 20, 21, 22, 73, 24, 39, 40, 77, 75, 18, 19, 20, 21,
18, 73, 73, 73, 28, 29, 30, 73, 22, 75, 24, 18, 75, 75, 75, 28,
31, 32, 33, 73, 73, 73, 73, 19, 29, 30, 75, 31, 32, 33, 75, 75,
38, 39, 40, 75, 73, 18, 19, 20, 75, 75, 19, 38, 39, 40, 77, 75,
21, 22, 73, 73, 18, 73, 73, 73, 18, 19, 20, 21, 22, 75, 75, 18,
28, 29, 30, 73, 31, 32, 33, 73, 75, 75, 75, 28, 29, 30, 75, 31,
73, 73, 73, 19, 38, 39, 40, 75, 32, 33, 75, 75, 75, 75, 19, 38,
73, 18, 19, 20, 21, 22, 23, 24, 39, 40, 77, 75, 18, 19, 20, 21,
18, 73, 73, 73, 28, 29, 30, 73, 22, 23, 24, 18, 75, 75, 75, 28,
31, 32, 33, 73, 73, 73, 73, 19, 29, 30, 75, 31, 32, 33, 75, 75,
38, 39, 40, 75, 73, 3, 6, 73, 75, 75, 19, 38, 39, 40, 77, 75,
73, 74, 73, 73, 73, 73, 73, 73, 3, 6, 75, 75, 76, 75, 75, 75,
18, 19, 20, 21, 22, 23, 24, 18, 75, 75, 75, 18, 19, 20, 21, 22,
25, 73, 27, 28, 29, 30, 73, 31, 23, 24, 18, 25, 75, 27, 28, 29,
32, 33, 73, 73, 73, 73, 37, 38, 30, 75, 31, 32, 33, 75, 75, 75,
39, 40, 6, 73, 3, 73, 73, 73, 75, 37, 38, 39, 40, 6, 75, 3,
73, 73, 73, 73, 73, 73, 73, 73, 75, 75, 75, 75, 75, 75, 75, 75,
73, 73, 4, 73, 73, 73, 73, 73, 75, 75, 75, 75, 75, 4, 75, 75,
73, 73, 19, 20, 21, 22, 73, 73, 75, 75, 75, 75, 75, 19, 20, 21,
73, 73, 73, 73, 73, 73, 73, 73, 22, 75, 75, 75, 75, 75, 75, 75,
31, 32, 33, 73, 73, 73, 73, 73, 75, 75, 75, 31, 32, 33, 75, 75,
38, 39, 40, 75, 73, 3, 76, 76, 75, 75, 75, 38, 39, 40, 77, 75,
76, 76, 76, 76, 76, 76, 76, 76, 3, 78, 78, 78, 78, 78, 78, 78,
76, 76, 76, 4, 76, 77, 73, 14, 78, 78, 78, 78, 78, 78, 4, 78,
73, 6, 76, 76, 76, 76, 76, 76, 79, 75, 14, 75, 6, 78, 78, 78,
76, 76, 76, 76, 76, 76, 76, 76, 78, 78, 78, 78, 78, 78, 78, 78,
76, 76, 76, 76, 76, 76, 76, 76, 78, 78, 78, 78, 78, 78, 78, 78,
76, 76, 76, 76, 76, 76, 76, 76, 78, 78, 78, 78, 78, 78, 78, 78,
76, 6, 76, 76, 76, 6, 76, 9, 78, 78, 78, 78, 6, 78, 78, 78,
73, 73, 73, 9, 73, 73, 73, 73, 6, 78, 9, 75, 75, 75, 9, 75,
73, 3, 6, 14, 73, 74, 73, 73, 75, 75, 75, 75, 3, 6, 14, 75,
73, 73, 73, 73, 18, 19, 20, 21, 76, 75, 75, 75, 75, 75, 75, 18,
22, 23, 24, 18, 25, 26, 27, 28, 19, 20, 21, 22, 23, 24, 18, 25,
29, 30, 73, 31, 32, 33, 73, 34, 26, 27, 28, 29, 30, 75, 31, 32,
35, 73, 37, 38, 39, 40, 6, 73, 33, 75, 34, 35, 75, 37, 38, 39,
3, 6, 73, 73, 74, 73, 73, 73, 40, 6, 75, 3, 6, 75, 75, 76,
73, 73, 73, 18, 19, 20, 21, 22, 75, 75, 75, 75, 75, 75, 18, 19,
23, 24, 18, 25, 26, 27, 28, 29, 20, 21, 22, 23, 24, 18, 25, 26,
30, 73, 31, 32, 33, 73, 73, 73, 27, 28, 29, 30, 75, 31, 32, 33,
73, 37, 38, 39, 40, 6, 73, 34, 75, 75, 75, 75, 37, 38, 39, 40,
35, 73, 35, 73, 9, 76, 76, 76, 6, 75, 34, 35, 75, 35, 75, 9,
9, 76, 0 78, 78, 78, 9, 78, 81, 80, 41,
80, 41, 81, 80, 81, 80, 41, 80,
42, 80, 0
}; };
static const char _use_syllable_machine_trans_targs[] = { static const char _use_syllable_machine_trans_targs[] = {
@ -263,11 +267,12 @@ static const char _use_syllable_machine_trans_targs[] = {
59, 33, 36, 37, 38, 39, 40, 50, 59, 33, 36, 37, 38, 39, 40, 50,
51, 52, 60, 53, 47, 48, 49, 43, 51, 52, 60, 53, 47, 48, 49, 43,
44, 45, 61, 62, 63, 54, 41, 42, 44, 45, 61, 62, 63, 54, 41, 42,
5, 5, 7, 0, 10, 11, 12, 13, 5, 64, 66, 5, 7, 0, 10, 11,
14, 25, 26, 27, 28, 22, 23, 24, 12, 13, 14, 25, 26, 27, 28, 22,
17, 18, 19, 29, 15, 16, 5, 5, 23, 24, 17, 18, 19, 29, 15, 16,
9, 20, 5, 21, 5, 31, 5, 34, 5, 5, 9, 20, 5, 21, 5, 31,
5, 5, 3, 4, 5, 57 5, 34, 5, 5, 3, 4, 5, 57,
5, 65
}; };
static const char _use_syllable_machine_trans_actions[] = { static const char _use_syllable_machine_trans_actions[] = {
@ -276,11 +281,12 @@ static const char _use_syllable_machine_trans_actions[] = {
3, 0, 5, 5, 0, 0, 0, 5, 3, 0, 5, 5, 0, 0, 0, 5,
5, 5, 3, 3, 5, 5, 5, 5, 5, 5, 3, 3, 5, 5, 5, 5,
5, 5, 0, 0, 0, 3, 0, 0, 5, 5, 0, 0, 0, 3, 0, 0,
11, 12, 5, 0, 0, 0, 0, 0, 11, 0, 0, 12, 5, 0, 0, 0,
0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0,
0, 0, 0, 0, 0, 0, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 15, 0, 16, 0, 17, 0, 13, 14, 0, 0, 15, 0, 16, 0,
18, 19, 0, 0, 20, 0 17, 0, 18, 19, 0, 0, 20, 0,
21, 0
}; };
static const char _use_syllable_machine_to_state_actions[] = { static const char _use_syllable_machine_to_state_actions[] = {
@ -291,7 +297,8 @@ 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, 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[] = { static const char _use_syllable_machine_from_state_actions[] = {
@ -302,18 +309,20 @@ 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, 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[] = { static const short _use_syllable_machine_eof_trans[] = {
1, 3, 3, 6, 6, 0, 42, 42, 1, 3, 3, 6, 6, 0, 44, 44,
64, 64, 42, 42, 42, 42, 42, 42, 66, 66, 44, 44, 44, 44, 44, 44,
42, 42, 42, 42, 67, 42, 42, 42, 44, 44, 44, 44, 69, 44, 44, 44,
42, 42, 42, 42, 42, 64, 69, 71, 44, 44, 44, 44, 44, 66, 71, 73,
42, 73, 73, 74, 74, 74, 74, 74, 44, 75, 75, 76, 76, 76, 76, 76,
74, 74, 74, 74, 74, 74, 74, 74, 76, 76, 76, 76, 76, 76, 76, 76,
74, 74, 74, 74, 74, 74, 74, 77, 76, 76, 76, 76, 76, 76, 76, 79,
74, 74, 77, 74, 74, 74, 74, 77 76, 76, 79, 76, 76, 76, 76, 79,
81, 81, 81
}; };
static const int use_syllable_machine_start = 5; static const int use_syllable_machine_start = 5;
@ -327,7 +336,7 @@ static const int use_syllable_machine_en_main = 5;
#line 160 "hb-ot-shape-complex-use-machine.rl" #line 166 "hb-ot-shape-complex-use-machine.rl"
#define found_syllable(syllable_type) \ #define found_syllable(syllable_type) \
@ -369,7 +378,7 @@ find_syllables_use (hb_buffer_t *buffer)
unsigned int act; unsigned int act;
int cs; int cs;
#line 373 "hb-ot-shape-complex-use-machine.hh" #line 382 "hb-ot-shape-complex-use-machine.hh"
{ {
cs = use_syllable_machine_start; cs = use_syllable_machine_start;
ts = 0; ts = 0;
@ -377,12 +386,12 @@ find_syllables_use (hb_buffer_t *buffer)
act = 0; act = 0;
} }
#line 203 "hb-ot-shape-complex-use-machine.rl" #line 209 "hb-ot-shape-complex-use-machine.rl"
unsigned int syllable_serial = 1; unsigned int syllable_serial = 1;
#line 386 "hb-ot-shape-complex-use-machine.hh" #line 395 "hb-ot-shape-complex-use-machine.hh"
{ {
int _slen; int _slen;
int _trans; int _trans;
@ -396,7 +405,7 @@ _resume:
#line 1 "NONE" #line 1 "NONE"
{ts = p;} {ts = p;}
break; break;
#line 400 "hb-ot-shape-complex-use-machine.hh" #line 409 "hb-ot-shape-complex-use-machine.hh"
} }
_keys = _use_syllable_machine_trans_keys + (cs<<1); _keys = _use_syllable_machine_trans_keys + (cs<<1);
@ -419,68 +428,72 @@ _eof_trans:
{te = p+1;} {te = p+1;}
break; break;
case 8: case 8:
#line 148 "hb-ot-shape-complex-use-machine.rl" #line 153 "hb-ot-shape-complex-use-machine.rl"
{te = p+1;{ found_syllable (independent_cluster); }} {te = p+1;{ found_syllable (independent_cluster); }}
break; break;
case 13: case 13:
#line 151 "hb-ot-shape-complex-use-machine.rl" #line 156 "hb-ot-shape-complex-use-machine.rl"
{te = p+1;{ found_syllable (standard_cluster); }} {te = p+1;{ found_syllable (standard_cluster); }}
break; break;
case 11: case 11:
#line 155 "hb-ot-shape-complex-use-machine.rl" #line 161 "hb-ot-shape-complex-use-machine.rl"
{te = p+1;{ found_syllable (broken_cluster); }} {te = p+1;{ found_syllable (broken_cluster); }}
break; break;
case 9: case 9:
#line 156 "hb-ot-shape-complex-use-machine.rl" #line 162 "hb-ot-shape-complex-use-machine.rl"
{te = p+1;{ found_syllable (non_cluster); }} {te = p+1;{ found_syllable (non_cluster); }}
break; break;
case 14: case 14:
#line 149 "hb-ot-shape-complex-use-machine.rl" #line 154 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (virama_terminated_cluster); }} {te = p;p--;{ found_syllable (virama_terminated_cluster); }}
break; break;
case 15: case 15:
#line 150 "hb-ot-shape-complex-use-machine.rl" #line 155 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (sakot_terminated_cluster); }} {te = p;p--;{ found_syllable (sakot_terminated_cluster); }}
break; break;
case 12: case 12:
#line 151 "hb-ot-shape-complex-use-machine.rl" #line 156 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (standard_cluster); }} {te = p;p--;{ found_syllable (standard_cluster); }}
break; break;
case 17: case 17:
#line 152 "hb-ot-shape-complex-use-machine.rl" #line 157 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (number_joiner_terminated_cluster); }} {te = p;p--;{ found_syllable (number_joiner_terminated_cluster); }}
break; break;
case 16: case 16:
#line 153 "hb-ot-shape-complex-use-machine.rl" #line 158 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (numeral_cluster); }} {te = p;p--;{ found_syllable (numeral_cluster); }}
break; break;
case 18: case 18:
#line 154 "hb-ot-shape-complex-use-machine.rl" #line 159 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (symbol_cluster); }} {te = p;p--;{ found_syllable (symbol_cluster); }}
break; break;
case 21:
#line 160 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (hieroglyph_cluster); }}
break;
case 19: case 19:
#line 155 "hb-ot-shape-complex-use-machine.rl" #line 161 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (broken_cluster); }} {te = p;p--;{ found_syllable (broken_cluster); }}
break; break;
case 20: case 20:
#line 156 "hb-ot-shape-complex-use-machine.rl" #line 162 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (non_cluster); }} {te = p;p--;{ found_syllable (non_cluster); }}
break; break;
case 1: case 1:
#line 151 "hb-ot-shape-complex-use-machine.rl" #line 156 "hb-ot-shape-complex-use-machine.rl"
{{p = ((te))-1;}{ found_syllable (standard_cluster); }} {{p = ((te))-1;}{ found_syllable (standard_cluster); }}
break; break;
case 4: case 4:
#line 155 "hb-ot-shape-complex-use-machine.rl" #line 161 "hb-ot-shape-complex-use-machine.rl"
{{p = ((te))-1;}{ found_syllable (broken_cluster); }} {{p = ((te))-1;}{ found_syllable (broken_cluster); }}
break; break;
case 2: case 2:
#line 1 "NONE" #line 1 "NONE"
{ switch( act ) { { switch( act ) {
case 8: case 9:
{{p = ((te))-1;} found_syllable (broken_cluster); } {{p = ((te))-1;} found_syllable (broken_cluster); }
break; break;
case 9: case 10:
{{p = ((te))-1;} found_syllable (non_cluster); } {{p = ((te))-1;} found_syllable (non_cluster); }
break; break;
} }
@ -489,16 +502,16 @@ _eof_trans:
case 3: case 3:
#line 1 "NONE" #line 1 "NONE"
{te = p+1;} {te = p+1;}
#line 155 "hb-ot-shape-complex-use-machine.rl" #line 161 "hb-ot-shape-complex-use-machine.rl"
{act = 8;} {act = 9;}
break; break;
case 10: case 10:
#line 1 "NONE" #line 1 "NONE"
{te = p+1;} {te = p+1;}
#line 156 "hb-ot-shape-complex-use-machine.rl" #line 162 "hb-ot-shape-complex-use-machine.rl"
{act = 9;} {act = 10;}
break; break;
#line 502 "hb-ot-shape-complex-use-machine.hh" #line 515 "hb-ot-shape-complex-use-machine.hh"
} }
_again: _again:
@ -507,7 +520,7 @@ _again:
#line 1 "NONE" #line 1 "NONE"
{ts = 0;} {ts = 0;}
break; break;
#line 511 "hb-ot-shape-complex-use-machine.hh" #line 524 "hb-ot-shape-complex-use-machine.hh"
} }
if ( ++p != pe ) if ( ++p != pe )
@ -523,7 +536,7 @@ _again:
} }
#line 208 "hb-ot-shape-complex-use-machine.rl" #line 214 "hb-ot-shape-complex-use-machine.rl"
} }

View File

@ -68,6 +68,10 @@ S = 19; # SYM
CS = 43; # CONS_WITH_STACKER CS = 43; # CONS_WITH_STACKER
HVM = 44; # HALANT_OR_VOWEL_MODIFIER HVM = 44; # HALANT_OR_VOWEL_MODIFIER
Sk = 48; # SAKOT Sk = 48; # SAKOT
G = 49; # HIEROGLYPH
J = 50; # HIEROGLYPH_JOINER
SB = 51; # HIEROGLYPH_SEGMENT_BEGIN
SE = 52; # HIEROGLYPH_SEGMENT_END
FAbv = 24; # CONS_FINAL_ABOVE FAbv = 24; # CONS_FINAL_ABOVE
FBlw = 25; # CONS_FINAL_BELOW FBlw = 25; # CONS_FINAL_BELOW
@ -141,6 +145,7 @@ broken_cluster =
number_joiner_terminated_cluster = N number_joiner_terminated_cluster_tail; number_joiner_terminated_cluster = N number_joiner_terminated_cluster_tail;
numeral_cluster = N numeral_cluster_tail?; numeral_cluster = N numeral_cluster_tail?;
symbol_cluster = (S | GB) symbol_cluster_tail?; symbol_cluster = (S | GB) symbol_cluster_tail?;
hieroglyph_cluster = SB+ | SB* G SE* (J SE* (G SE*)?)*;
independent_cluster = (IND | O | Rsv | WJ); independent_cluster = (IND | O | Rsv | WJ);
other = any; other = any;
@ -152,6 +157,7 @@ main := |*
number_joiner_terminated_cluster => { found_syllable (number_joiner_terminated_cluster); }; number_joiner_terminated_cluster => { found_syllable (number_joiner_terminated_cluster); };
numeral_cluster => { found_syllable (numeral_cluster); }; numeral_cluster => { found_syllable (numeral_cluster); };
symbol_cluster => { found_syllable (symbol_cluster); }; symbol_cluster => { found_syllable (symbol_cluster); };
hieroglyph_cluster => { found_syllable (hieroglyph_cluster); };
broken_cluster => { found_syllable (broken_cluster); }; broken_cluster => { found_syllable (broken_cluster); };
other => { found_syllable (non_cluster); }; other => { found_syllable (non_cluster); };
*|; *|;

View File

@ -41,16 +41,20 @@
#pragma GCC diagnostic ignored "-Wunused-macros" #pragma GCC diagnostic ignored "-Wunused-macros"
#define B USE_B /* BASE */ #define B USE_B /* BASE */
#define CS USE_CS /* CONS_WITH_STACKER */ #define CS USE_CS /* CONS_WITH_STACKER */
#define G USE_G /* HIEROGLYPH */
#define GB USE_GB /* BASE_OTHER */ #define GB USE_GB /* BASE_OTHER */
#define H USE_H /* HALANT */ #define H USE_H /* HALANT */
#define HN USE_HN /* HALANT_NUM */ #define HN USE_HN /* HALANT_NUM */
#define HVM USE_HVM /* HALANT_OR_VOWEL_MODIFIER */ #define HVM USE_HVM /* HALANT_OR_VOWEL_MODIFIER */
#define IND USE_IND /* BASE_IND */ #define IND USE_IND /* BASE_IND */
#define J USE_J /* HIEROGLYPH_JOINER */
#define N USE_N /* BASE_NUM */ #define N USE_N /* BASE_NUM */
#define O USE_O /* OTHER */ #define O USE_O /* OTHER */
#define R USE_R /* REPHA */ #define R USE_R /* REPHA */
#define Rsv USE_Rsv /* Reserved */ #define Rsv USE_Rsv /* Reserved */
#define S USE_S /* SYM */ #define S USE_S /* SYM */
#define SB USE_SB /* HIEROGLYPH_SEGMENT_BEGIN */
#define SE USE_SE /* HIEROGLYPH_SEGMENT_END */
#define SUB USE_SUB /* CONS_SUB */ #define SUB USE_SUB /* CONS_SUB */
#define Sk USE_Sk /* SAKOT */ #define Sk USE_Sk /* SAKOT */
#define WJ USE_WJ /* Word_Joiner */ #define WJ USE_WJ /* Word_Joiner */
@ -870,14 +874,84 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 11EE0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11EE0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 11EF0 */ B, B, GB, VAbv, VBlw, VPre, VPst, O, /* 11EF0 */ B, B, GB, VAbv, VBlw, VPre, VPst, O,
#define use_offset_0x13430u 6664 #define use_offset_0x13000u 6664
/* Egyptian Hieroglyphs */
/* 13000 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13010 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13020 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13030 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13040 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13050 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13060 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13070 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13080 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13090 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 130A0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 130B0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 130C0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 130D0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 130E0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 130F0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13100 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13110 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13120 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13130 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13140 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13150 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13160 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13170 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13180 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13190 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 131A0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 131B0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 131C0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 131D0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 131E0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 131F0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13200 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13210 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13220 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13230 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13240 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13250 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13260 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13270 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13280 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13290 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 132A0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 132B0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 132C0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 132D0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 132E0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 132F0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13300 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13310 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13320 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13330 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13340 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13350 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13360 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13370 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13380 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13390 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 133A0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 133B0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 133C0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 133D0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 133E0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 133F0 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13400 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13410 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G,
/* 13420 */ G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, O,
/* Egyptian Hieroglyph Format Controls */ /* Egyptian Hieroglyph Format Controls */
/* 13430 */ H, H, H, H, H, H, H, O, /* 13430 */ J, J, J, J, J, J, J, SB, SE, O, O, O, O, O, O, O,
#define use_offset_0x16b00u 6672 #define use_offset_0x16b00u 7752
/* Pahawh Hmong */ /* Pahawh Hmong */
@ -887,7 +961,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 16B20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 16B20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 16B30 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O, /* 16B30 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O,
#define use_offset_0x16f00u 6728 #define use_offset_0x16f00u 7808
/* Miao */ /* Miao */
@ -903,14 +977,14 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 16F80 */ VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, O, O, O, O, O, O, O, VMBlw, /* 16F80 */ VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, O, O, O, O, O, O, O, VMBlw,
/* 16F90 */ VMBlw, VMBlw, VMBlw, O, O, O, O, O, /* 16F90 */ VMBlw, VMBlw, VMBlw, O, O, O, O, O,
#define use_offset_0x16fe0u 6880 #define use_offset_0x16fe0u 7960
/* Ideographic Symbols and Punctuation */ /* Ideographic Symbols and Punctuation */
/* 16FE0 */ O, O, O, O, B, O, O, O, /* 16FE0 */ O, O, O, O, B, O, O, O,
#define use_offset_0x18b00u 6888 #define use_offset_0x18b00u 7968
/* Khitan Small Script */ /* Khitan Small Script */
@ -946,7 +1020,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 18CC0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 18CC0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 18CD0 */ B, B, B, B, B, B, O, O, /* 18CD0 */ B, B, B, B, B, B, O, O,
#define use_offset_0x1bc00u 7360 #define use_offset_0x1bc00u 8440
/* Duployan */ /* Duployan */
@ -962,7 +1036,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 1BC80 */ B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, O, /* 1BC80 */ B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, O,
/* 1BC90 */ B, B, B, B, B, B, B, B, B, B, O, O, O, CMBlw, CMBlw, O, /* 1BC90 */ B, B, B, B, B, B, B, B, B, B, O, O, O, CMBlw, CMBlw, O,
#define use_offset_0x1e100u 7520 #define use_offset_0x1e100u 8600
/* Nyiakeng Puachue Hmong */ /* Nyiakeng Puachue Hmong */
@ -973,7 +1047,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 1E130 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, B, B, B, B, B, B, B, O, O, /* 1E130 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, B, B, B, B, B, B, B, O, O,
/* 1E140 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, B, B, /* 1E140 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, B, B,
#define use_offset_0x1e2c0u 7600 #define use_offset_0x1e2c0u 8680
/* Wancho */ /* Wancho */
@ -983,7 +1057,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 1E2E0 */ B, B, B, B, B, B, B, B, B, B, B, B, VMAbv, VMAbv, VMAbv, VMAbv, /* 1E2E0 */ B, B, B, B, B, B, B, B, B, B, B, B, VMAbv, VMAbv, VMAbv, VMAbv,
/* 1E2F0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, /* 1E2F0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
#define use_offset_0x1e900u 7664 #define use_offset_0x1e900u 8744
/* Adlam */ /* Adlam */
@ -995,7 +1069,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 1E940 */ B, B, B, B, CMAbv, CMAbv, CMAbv, CMAbv, CMAbv, CMAbv, CMAbv, B, O, O, O, O, /* 1E940 */ B, B, B, B, CMAbv, CMAbv, CMAbv, CMAbv, CMAbv, CMAbv, CMAbv, B, O, O, O, O,
/* 1E950 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, /* 1E950 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
}; /* Table items: 7760; occupancy: 76% */ }; /* Table items: 8840; occupancy: 79% */
USE_TABLE_ELEMENT_TYPE USE_TABLE_ELEMENT_TYPE
hb_use_get_category (hb_codepoint_t u) hb_use_get_category (hb_codepoint_t u)
@ -1059,7 +1133,7 @@ hb_use_get_category (hb_codepoint_t u)
break; break;
case 0x13u: case 0x13u:
if (hb_in_range<hb_codepoint_t> (u, 0x13430u, 0x13437u)) return use_table[u - 0x13430u + use_offset_0x13430u]; if (hb_in_range<hb_codepoint_t> (u, 0x13000u, 0x1343Fu)) return use_table[u - 0x13000u + use_offset_0x13000u];
break; break;
case 0x16u: case 0x16u:
@ -1090,16 +1164,20 @@ hb_use_get_category (hb_codepoint_t u)
#undef B #undef B
#undef CS #undef CS
#undef G
#undef GB #undef GB
#undef H #undef H
#undef HN #undef HN
#undef HVM #undef HVM
#undef IND #undef IND
#undef J
#undef N #undef N
#undef O #undef O
#undef R #undef R
#undef Rsv #undef Rsv
#undef S #undef S
#undef SB
#undef SE
#undef SUB #undef SUB
#undef Sk #undef Sk
#undef WJ #undef WJ

View File

@ -194,6 +194,7 @@ enum use_syllable_type_t {
use_number_joiner_terminated_cluster, use_number_joiner_terminated_cluster,
use_numeral_cluster, use_numeral_cluster,
use_symbol_cluster, use_symbol_cluster,
use_hieroglyph_cluster,
use_broken_cluster, use_broken_cluster,
use_non_cluster, use_non_cluster,
}; };
@ -275,6 +276,7 @@ setup_topographical_masks (const hb_ot_shape_plan_t *plan,
{ {
case use_independent_cluster: case use_independent_cluster:
case use_symbol_cluster: case use_symbol_cluster:
case use_hieroglyph_cluster:
case use_non_cluster: case use_non_cluster:
/* These don't join. Nothing to do. */ /* These don't join. Nothing to do. */
last_form = _USE_NONE; last_form = _USE_NONE;

View File

@ -72,6 +72,10 @@ enum use_category_t {
USE_HVM = 44, /* HALANT_OR_VOWEL_MODIFIER */ USE_HVM = 44, /* HALANT_OR_VOWEL_MODIFIER */
USE_Sk = 48, /* SAKOT */ USE_Sk = 48, /* SAKOT */
USE_G = 49, /* HIEROGLYPH */
USE_J = 50, /* HIEROGLYPH_JOINER */
USE_SB = 51, /* HIEROGLYPH_SEGMENT_BEGIN */
USE_SE = 52, /* HIEROGLYPH_SEGMENT_END */
USE_FAbv = 24, /* CONS_FINAL_ABOVE */ USE_FAbv = 24, /* CONS_FINAL_ABOVE */
USE_FBlw = 25, /* CONS_FINAL_BELOW */ USE_FBlw = 25, /* CONS_FINAL_BELOW */