From faf09f5466370a45e1a9d7c07968af517d680d78 Mon Sep 17 00:00:00 2001 From: David Corbett Date: Fri, 14 Aug 2020 18:30:20 -0400 Subject: [PATCH] [USE] Support hieroglyph clusters --- src/gen-use-table.py | 24 ++ src/hb-ot-shape-complex-use-machine.hh | 465 +++++++++++++------------ src/hb-ot-shape-complex-use-machine.rl | 6 + src/hb-ot-shape-complex-use-table.cc | 102 +++++- src/hb-ot-shape-complex-use.cc | 2 + src/hb-ot-shape-complex-use.hh | 4 + 6 files changed, 365 insertions(+), 238 deletions(-) diff --git a/src/gen-use-table.py b/src/gen-use-table.py index 6594d0346..0e2d57b3e 100755 --- a/src/gen-use-table.py +++ b/src/gen-use-table.py @@ -38,8 +38,16 @@ headers.append (["UnicodeData.txt does not have a header."]) data = [{} for _ in files] values = [{} for _ in files] for i, f in enumerate (files): + extended = False + 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 ('#') if j >= 0: line = line[:j] @@ -176,6 +184,10 @@ property_names = [ 'Number_Joiner', 'Number', 'Brahmi_Joining_Number', + 'Hieroglyph', + 'Hieroglyph_Joiner', + 'Hieroglyph_Segment_Begin', + 'Hieroglyph_Segment_End', # Indic_Positional_Category 'Not_Applicable', 'Right', @@ -268,6 +280,14 @@ def is_HALANT_OR_VOWEL_MODIFIER(U, UISC, UGC, AJT): return U in [0x11046, 0x1134D] def is_HALANT_NUM(U, UISC, UGC, AJT): 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): return UISC == Non_Joiner def is_ZWJ(U, UISC, UGC, AJT): @@ -316,6 +336,10 @@ use_mapping = { 'H': is_HALANT, 'HVM': is_HALANT_OR_VOWEL_MODIFIER, 'HN': is_HALANT_NUM, + 'G': is_HIEROGLYPH, + 'J': is_HIEROGLYPH_JOINER, + 'SB': is_HIEROGLYPH_SEGMENT_BEGIN, + 'SE': is_HIEROGLYPH_SEGMENT_END, 'ZWNJ': is_ZWNJ, 'ZWJ': is_ZWJ, 'WJ': is_Word_Joiner, diff --git a/src/hb-ot-shape-complex-use-machine.hh b/src/hb-ot-shape-complex-use-machine.hh index 5f0f424a3..6e2abde7c 100644 --- a/src/hb-ot-shape-complex-use-machine.hh +++ b/src/hb-ot-shape-complex-use-machine.hh @@ -37,7 +37,7 @@ #line 39 "hb-ot-shape-complex-use-machine.hh" 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, 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, @@ -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, 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, - 0 + 50u, 52u, 49u, 52u, 49u, 51u, 0 }; 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, 1, 25, 25, 25, 1, 25, 26, 26, 26, 27, 27, 27, 38, 48, 1, 1, 38, 2, 1, 38, 27, 26, 24, 23, 22, 2, 1, 25, 25, 25, 25, 26, 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[] = { - 0, 38, 54, 56, 94, 96, 146, 185, - 224, 240, 242, 270, 297, 322, 346, 369, - 372, 374, 400, 426, 452, 454, 480, 507, - 534, 561, 589, 617, 645, 684, 733, 735, - 737, 776, 779, 781, 820, 848, 875, 900, - 924, 947, 950, 952, 978, 1004, 1030, 1056, - 1083, 1110, 1137, 1165, 1193, 1221, 1260, 1309, - 1325, 1327, 1329, 1367, 1416, 1455, 1458, 1460 + 0, 38, 54, 56, 94, 96, 149, 188, + 227, 243, 245, 273, 300, 325, 349, 372, + 375, 377, 403, 429, 455, 457, 483, 510, + 537, 564, 592, 620, 648, 687, 736, 738, + 740, 779, 782, 784, 823, 851, 878, 903, + 927, 950, 953, 955, 981, 1007, 1033, 1059, + 1086, 1113, 1140, 1168, 1196, 1224, 1263, 1312, + 1328, 1330, 1332, 1370, 1419, 1458, 1461, 1463, + 1469, 1473, 1478 }; 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, 27, 28, 29, 30, 10, 31, 32, 33, 10, 34, 35, 36, 37, 38, 39, 40, - 13, 10, 42, 1, 41, 41, 43, 41, - 41, 41, 41, 41, 41, 44, 45, 46, - 47, 48, 49, 50, 44, 51, 9, 52, - 53, 54, 55, 41, 56, 57, 58, 41, - 41, 41, 41, 59, 60, 61, 62, 1, - 41, 42, 1, 41, 41, 43, 41, 41, - 41, 41, 41, 41, 44, 45, 46, 47, - 48, 49, 50, 44, 51, 52, 52, 53, - 54, 55, 41, 56, 57, 58, 41, 41, - 41, 41, 59, 60, 61, 62, 1, 41, - 42, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 64, 63, - 42, 63, 44, 45, 46, 47, 48, 41, - 41, 41, 41, 41, 41, 53, 54, 55, - 41, 56, 57, 58, 41, 41, 41, 41, - 45, 60, 61, 62, 65, 41, 45, 46, - 47, 48, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 56, 57, 58, 41, - 41, 41, 41, 41, 60, 61, 62, 65, - 41, 46, 47, 48, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 60, 61, - 62, 41, 47, 48, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 60, 61, - 62, 41, 48, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 60, 61, 62, - 41, 60, 61, 41, 61, 41, 46, 47, - 48, 41, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 56, 57, 58, 41, 41, - 41, 41, 41, 60, 61, 62, 65, 41, - 46, 47, 48, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 57, 58, - 41, 41, 41, 41, 41, 60, 61, 62, - 65, 41, 46, 47, 48, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 41, 41, - 41, 58, 41, 41, 41, 41, 41, 60, - 61, 62, 65, 41, 67, 66, 46, 47, - 48, 41, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 60, 61, 62, 65, 41, - 45, 46, 47, 48, 41, 41, 41, 41, - 41, 41, 53, 54, 55, 41, 56, 57, - 58, 41, 41, 41, 41, 45, 60, 61, - 62, 65, 41, 45, 46, 47, 48, 41, - 41, 41, 41, 41, 41, 41, 54, 55, - 41, 56, 57, 58, 41, 41, 41, 41, - 45, 60, 61, 62, 65, 41, 45, 46, - 47, 48, 41, 41, 41, 41, 41, 41, - 41, 41, 55, 41, 56, 57, 58, 41, - 41, 41, 41, 45, 60, 61, 62, 65, - 41, 44, 45, 46, 47, 48, 41, 50, - 44, 41, 41, 41, 53, 54, 55, 41, - 56, 57, 58, 41, 41, 41, 41, 45, - 60, 61, 62, 65, 41, 44, 45, 46, - 47, 48, 41, 41, 44, 41, 41, 41, - 53, 54, 55, 41, 56, 57, 58, 41, - 41, 41, 41, 45, 60, 61, 62, 65, - 41, 44, 45, 46, 47, 48, 49, 50, - 44, 41, 41, 41, 53, 54, 55, 41, - 56, 57, 58, 41, 41, 41, 41, 45, - 60, 61, 62, 65, 41, 42, 1, 41, - 41, 43, 41, 41, 41, 41, 41, 41, - 44, 45, 46, 47, 48, 49, 50, 44, - 51, 41, 52, 53, 54, 55, 41, 56, - 57, 58, 41, 41, 41, 41, 59, 60, - 61, 62, 1, 41, 42, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 64, 63, 63, 63, 63, 63, - 63, 63, 45, 46, 47, 48, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 56, 57, 58, 63, 63, 63, 63, 63, - 60, 61, 62, 65, 63, 69, 68, 11, - 70, 42, 1, 41, 41, 43, 41, 41, - 41, 41, 41, 41, 44, 45, 46, 47, - 48, 49, 50, 44, 51, 9, 52, 53, - 54, 55, 41, 56, 57, 58, 41, 17, - 71, 41, 59, 60, 61, 62, 1, 41, - 17, 71, 72, 71, 72, 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, 38, - 39, 40, 6, 73, 18, 19, 20, 21, - 22, 73, 73, 73, 73, 73, 73, 28, - 29, 30, 73, 31, 32, 33, 73, 73, - 73, 73, 19, 38, 39, 40, 75, 73, - 19, 20, 21, 22, 73, 73, 73, 73, - 73, 73, 73, 73, 73, 73, 31, 32, - 33, 73, 73, 73, 73, 73, 38, 39, - 40, 75, 73, 20, 21, 22, 73, 73, - 73, 73, 73, 73, 73, 73, 73, 73, - 73, 73, 73, 73, 73, 73, 73, 73, - 38, 39, 40, 73, 21, 22, 73, 73, - 73, 73, 73, 73, 73, 73, 73, 73, - 73, 73, 73, 73, 73, 73, 73, 73, - 38, 39, 40, 73, 22, 73, 73, 73, - 73, 73, 73, 73, 73, 73, 73, 73, - 73, 73, 73, 73, 73, 73, 73, 38, - 39, 40, 73, 38, 39, 73, 39, 73, - 20, 21, 22, 73, 73, 73, 73, 73, - 73, 73, 73, 73, 73, 31, 32, 33, - 73, 73, 73, 73, 73, 38, 39, 40, - 75, 73, 20, 21, 22, 73, 73, 73, - 73, 73, 73, 73, 73, 73, 73, 73, - 32, 33, 73, 73, 73, 73, 73, 38, - 39, 40, 75, 73, 20, 21, 22, 73, - 73, 73, 73, 73, 73, 73, 73, 73, - 73, 73, 73, 33, 73, 73, 73, 73, - 73, 38, 39, 40, 75, 73, 20, 21, - 22, 73, 73, 73, 73, 73, 73, 73, - 73, 73, 73, 73, 73, 73, 73, 73, - 73, 73, 73, 38, 39, 40, 75, 73, - 19, 20, 21, 22, 73, 73, 73, 73, - 73, 73, 28, 29, 30, 73, 31, 32, - 33, 73, 73, 73, 73, 19, 38, 39, - 40, 75, 73, 19, 20, 21, 22, 73, - 73, 73, 73, 73, 73, 73, 29, 30, - 73, 31, 32, 33, 73, 73, 73, 73, - 19, 38, 39, 40, 75, 73, 19, 20, - 21, 22, 73, 73, 73, 73, 73, 73, - 73, 73, 30, 73, 31, 32, 33, 73, - 73, 73, 73, 19, 38, 39, 40, 75, - 73, 18, 19, 20, 21, 22, 73, 24, - 18, 73, 73, 73, 28, 29, 30, 73, - 31, 32, 33, 73, 73, 73, 73, 19, - 38, 39, 40, 75, 73, 18, 19, 20, - 21, 22, 73, 73, 18, 73, 73, 73, - 28, 29, 30, 73, 31, 32, 33, 73, - 73, 73, 73, 19, 38, 39, 40, 75, - 73, 18, 19, 20, 21, 22, 23, 24, - 18, 73, 73, 73, 28, 29, 30, 73, - 31, 32, 33, 73, 73, 73, 73, 19, - 38, 39, 40, 75, 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, 38, - 39, 40, 6, 73, 3, 73, 73, 73, - 73, 73, 73, 73, 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, 73, 73, 73, 73, - 38, 39, 40, 75, 73, 3, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 4, 76, 77, 73, 14, - 73, 6, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 6, 76, 76, 76, 6, 76, 9, - 73, 73, 73, 9, 73, 73, 73, 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, 38, 39, 40, 6, 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, 38, 39, 40, 6, 73, 34, - 35, 73, 35, 73, 9, 76, 76, 76, - 9, 76, 0 + 13, 41, 10, 42, 10, 44, 1, 43, + 43, 45, 43, 43, 43, 43, 43, 43, + 46, 47, 48, 49, 50, 51, 52, 46, + 53, 9, 54, 55, 56, 57, 43, 58, + 59, 60, 43, 43, 43, 43, 61, 62, + 63, 64, 1, 43, 44, 1, 43, 43, + 45, 43, 43, 43, 43, 43, 43, 46, + 47, 48, 49, 50, 51, 52, 46, 53, + 54, 54, 55, 56, 57, 43, 58, 59, + 60, 43, 43, 43, 43, 61, 62, 63, + 64, 1, 43, 44, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 66, 65, 44, 65, 46, 47, 48, + 49, 50, 43, 43, 43, 43, 43, 43, + 55, 56, 57, 43, 58, 59, 60, 43, + 43, 43, 43, 47, 62, 63, 64, 67, + 43, 47, 48, 49, 50, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 58, + 59, 60, 43, 43, 43, 43, 43, 62, + 63, 64, 67, 43, 48, 49, 50, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 62, 63, 64, 43, 49, 50, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 62, 63, 64, 43, 50, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 62, 63, 64, 43, 62, 63, 43, 63, + 43, 48, 49, 50, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 58, 59, + 60, 43, 43, 43, 43, 43, 62, 63, + 64, 67, 43, 48, 49, 50, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 59, 60, 43, 43, 43, 43, 43, + 62, 63, 64, 67, 43, 48, 49, 50, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 60, 43, 43, 43, + 43, 43, 62, 63, 64, 67, 43, 69, + 68, 48, 49, 50, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 62, 63, + 64, 67, 43, 47, 48, 49, 50, 43, + 43, 43, 43, 43, 43, 55, 56, 57, + 43, 58, 59, 60, 43, 43, 43, 43, + 47, 62, 63, 64, 67, 43, 47, 48, + 49, 50, 43, 43, 43, 43, 43, 43, + 43, 56, 57, 43, 58, 59, 60, 43, + 43, 43, 43, 47, 62, 63, 64, 67, + 43, 47, 48, 49, 50, 43, 43, 43, + 43, 43, 43, 43, 43, 57, 43, 58, + 59, 60, 43, 43, 43, 43, 47, 62, + 63, 64, 67, 43, 46, 47, 48, 49, + 50, 43, 52, 46, 43, 43, 43, 55, + 56, 57, 43, 58, 59, 60, 43, 43, + 43, 43, 47, 62, 63, 64, 67, 43, + 46, 47, 48, 49, 50, 43, 43, 46, + 43, 43, 43, 55, 56, 57, 43, 58, + 59, 60, 43, 43, 43, 43, 47, 62, + 63, 64, 67, 43, 46, 47, 48, 49, + 50, 51, 52, 46, 43, 43, 43, 55, + 56, 57, 43, 58, 59, 60, 43, 43, + 43, 43, 47, 62, 63, 64, 67, 43, + 44, 1, 43, 43, 45, 43, 43, 43, + 43, 43, 43, 46, 47, 48, 49, 50, + 51, 52, 46, 53, 43, 54, 55, 56, + 57, 43, 58, 59, 60, 43, 43, 43, + 43, 61, 62, 63, 64, 1, 43, 44, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 66, 65, 65, + 65, 65, 65, 65, 65, 47, 48, 49, + 50, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 58, 59, 60, 65, 65, + 65, 65, 65, 62, 63, 64, 67, 65, + 71, 70, 11, 72, 44, 1, 43, 43, + 45, 43, 43, 43, 43, 43, 43, 46, + 47, 48, 49, 50, 51, 52, 46, 53, + 9, 54, 55, 56, 57, 43, 58, 59, + 60, 43, 17, 73, 43, 61, 62, 63, + 64, 1, 43, 17, 73, 74, 73, 74, + 3, 6, 75, 75, 76, 75, 75, 75, + 75, 75, 75, 18, 19, 20, 21, 22, + 23, 24, 18, 25, 27, 27, 28, 29, + 30, 75, 31, 32, 33, 75, 75, 75, + 75, 37, 38, 39, 40, 6, 75, 18, + 19, 20, 21, 22, 75, 75, 75, 75, + 75, 75, 28, 29, 30, 75, 31, 32, + 33, 75, 75, 75, 75, 19, 38, 39, + 40, 77, 75, 19, 20, 21, 22, 75, + 75, 75, 75, 75, 75, 75, 75, 75, + 75, 31, 32, 33, 75, 75, 75, 75, + 75, 38, 39, 40, 77, 75, 20, 21, + 22, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 38, 39, 40, 75, 21, + 22, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 38, 39, 40, 75, 22, + 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 38, 39, 40, 75, 38, 39, + 75, 39, 75, 20, 21, 22, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, + 31, 32, 33, 75, 75, 75, 75, 75, + 38, 39, 40, 77, 75, 20, 21, 22, + 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 32, 33, 75, 75, 75, + 75, 75, 38, 39, 40, 77, 75, 20, + 21, 22, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 33, 75, + 75, 75, 75, 75, 38, 39, 40, 77, + 75, 20, 21, 22, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 38, 39, + 40, 77, 75, 19, 20, 21, 22, 75, + 75, 75, 75, 75, 75, 28, 29, 30, + 75, 31, 32, 33, 75, 75, 75, 75, + 19, 38, 39, 40, 77, 75, 19, 20, + 21, 22, 75, 75, 75, 75, 75, 75, + 75, 29, 30, 75, 31, 32, 33, 75, + 75, 75, 75, 19, 38, 39, 40, 77, + 75, 19, 20, 21, 22, 75, 75, 75, + 75, 75, 75, 75, 75, 30, 75, 31, + 32, 33, 75, 75, 75, 75, 19, 38, + 39, 40, 77, 75, 18, 19, 20, 21, + 22, 75, 24, 18, 75, 75, 75, 28, + 29, 30, 75, 31, 32, 33, 75, 75, + 75, 75, 19, 38, 39, 40, 77, 75, + 18, 19, 20, 21, 22, 75, 75, 18, + 75, 75, 75, 28, 29, 30, 75, 31, + 32, 33, 75, 75, 75, 75, 19, 38, + 39, 40, 77, 75, 18, 19, 20, 21, + 22, 23, 24, 18, 75, 75, 75, 28, + 29, 30, 75, 31, 32, 33, 75, 75, + 75, 75, 19, 38, 39, 40, 77, 75, + 3, 6, 75, 75, 76, 75, 75, 75, + 75, 75, 75, 18, 19, 20, 21, 22, + 23, 24, 18, 25, 75, 27, 28, 29, + 30, 75, 31, 32, 33, 75, 75, 75, + 75, 37, 38, 39, 40, 6, 75, 3, + 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 4, 75, 75, + 75, 75, 75, 75, 75, 19, 20, 21, + 22, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 31, 32, 33, 75, 75, + 75, 75, 75, 38, 39, 40, 77, 75, + 3, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 4, 78, + 79, 75, 14, 75, 6, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 6, 78, 78, 78, + 6, 78, 9, 75, 75, 75, 9, 75, + 75, 75, 75, 75, 3, 6, 14, 75, + 76, 75, 75, 75, 75, 75, 75, 18, + 19, 20, 21, 22, 23, 24, 18, 25, + 26, 27, 28, 29, 30, 75, 31, 32, + 33, 75, 34, 35, 75, 37, 38, 39, + 40, 6, 75, 3, 6, 75, 75, 76, + 75, 75, 75, 75, 75, 75, 18, 19, + 20, 21, 22, 23, 24, 18, 25, 26, + 27, 28, 29, 30, 75, 31, 32, 33, + 75, 75, 75, 75, 37, 38, 39, 40, + 6, 75, 34, 35, 75, 35, 75, 9, + 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[] = { @@ -263,11 +267,12 @@ static const char _use_syllable_machine_trans_targs[] = { 59, 33, 36, 37, 38, 39, 40, 50, 51, 52, 60, 53, 47, 48, 49, 43, 44, 45, 61, 62, 63, 54, 41, 42, - 5, 5, 7, 0, 10, 11, 12, 13, - 14, 25, 26, 27, 28, 22, 23, 24, - 17, 18, 19, 29, 15, 16, 5, 5, - 9, 20, 5, 21, 5, 31, 5, 34, - 5, 5, 3, 4, 5, 57 + 5, 64, 66, 5, 7, 0, 10, 11, + 12, 13, 14, 25, 26, 27, 28, 22, + 23, 24, 17, 18, 19, 29, 15, 16, + 5, 5, 9, 20, 5, 21, 5, 31, + 5, 34, 5, 5, 3, 4, 5, 57, + 5, 65 }; 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, 5, 5, 3, 3, 5, 5, 5, 5, 5, 5, 0, 0, 0, 3, 0, 0, - 11, 12, 5, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 14, - 0, 0, 15, 0, 16, 0, 17, 0, - 18, 19, 0, 0, 20, 0 + 11, 0, 0, 12, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 13, 14, 0, 0, 15, 0, 16, 0, + 17, 0, 18, 19, 0, 0, 20, 0, + 21, 0 }; 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 }; 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 }; static const short _use_syllable_machine_eof_trans[] = { - 1, 3, 3, 6, 6, 0, 42, 42, - 64, 64, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 67, 42, 42, 42, - 42, 42, 42, 42, 42, 64, 69, 71, - 42, 73, 73, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 77, - 74, 74, 77, 74, 74, 74, 74, 77 + 1, 3, 3, 6, 6, 0, 44, 44, + 66, 66, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 69, 44, 44, 44, + 44, 44, 44, 44, 44, 66, 71, 73, + 44, 75, 75, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 79, + 76, 76, 79, 76, 76, 76, 76, 79, + 81, 81, 81 }; 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) \ @@ -369,7 +378,7 @@ find_syllables_use (hb_buffer_t *buffer) unsigned int act; 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; ts = 0; @@ -377,12 +386,12 @@ find_syllables_use (hb_buffer_t *buffer) 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; -#line 386 "hb-ot-shape-complex-use-machine.hh" +#line 395 "hb-ot-shape-complex-use-machine.hh" { int _slen; int _trans; @@ -396,7 +405,7 @@ _resume: #line 1 "NONE" {ts = p;} 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); @@ -419,68 +428,72 @@ _eof_trans: {te = p+1;} break; 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); }} break; 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); }} break; 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); }} break; 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); }} break; 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); }} break; 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); }} break; 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); }} break; 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); }} break; 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); }} break; 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); }} break; + case 21: +#line 160 "hb-ot-shape-complex-use-machine.rl" + {te = p;p--;{ found_syllable (hieroglyph_cluster); }} + break; 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); }} break; 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); }} break; 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); }} break; 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); }} break; case 2: #line 1 "NONE" { switch( act ) { - case 8: + case 9: {{p = ((te))-1;} found_syllable (broken_cluster); } break; - case 9: + case 10: {{p = ((te))-1;} found_syllable (non_cluster); } break; } @@ -489,16 +502,16 @@ _eof_trans: case 3: #line 1 "NONE" {te = p+1;} -#line 155 "hb-ot-shape-complex-use-machine.rl" - {act = 8;} +#line 161 "hb-ot-shape-complex-use-machine.rl" + {act = 9;} break; case 10: #line 1 "NONE" {te = p+1;} -#line 156 "hb-ot-shape-complex-use-machine.rl" - {act = 9;} +#line 162 "hb-ot-shape-complex-use-machine.rl" + {act = 10;} break; -#line 502 "hb-ot-shape-complex-use-machine.hh" +#line 515 "hb-ot-shape-complex-use-machine.hh" } _again: @@ -507,7 +520,7 @@ _again: #line 1 "NONE" {ts = 0;} break; -#line 511 "hb-ot-shape-complex-use-machine.hh" +#line 524 "hb-ot-shape-complex-use-machine.hh" } 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" } diff --git a/src/hb-ot-shape-complex-use-machine.rl b/src/hb-ot-shape-complex-use-machine.rl index effe6cc8f..62997c94c 100644 --- a/src/hb-ot-shape-complex-use-machine.rl +++ b/src/hb-ot-shape-complex-use-machine.rl @@ -68,6 +68,10 @@ S = 19; # SYM CS = 43; # CONS_WITH_STACKER HVM = 44; # HALANT_OR_VOWEL_MODIFIER 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 FBlw = 25; # CONS_FINAL_BELOW @@ -141,6 +145,7 @@ broken_cluster = number_joiner_terminated_cluster = N number_joiner_terminated_cluster_tail; numeral_cluster = N numeral_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); other = any; @@ -152,6 +157,7 @@ main := |* number_joiner_terminated_cluster => { found_syllable (number_joiner_terminated_cluster); }; numeral_cluster => { found_syllable (numeral_cluster); }; symbol_cluster => { found_syllable (symbol_cluster); }; + hieroglyph_cluster => { found_syllable (hieroglyph_cluster); }; broken_cluster => { found_syllable (broken_cluster); }; other => { found_syllable (non_cluster); }; *|; diff --git a/src/hb-ot-shape-complex-use-table.cc b/src/hb-ot-shape-complex-use-table.cc index 00957f970..1e05f9a51 100644 --- a/src/hb-ot-shape-complex-use-table.cc +++ b/src/hb-ot-shape-complex-use-table.cc @@ -41,16 +41,20 @@ #pragma GCC diagnostic ignored "-Wunused-macros" #define B USE_B /* BASE */ #define CS USE_CS /* CONS_WITH_STACKER */ +#define G USE_G /* HIEROGLYPH */ #define GB USE_GB /* BASE_OTHER */ #define H USE_H /* HALANT */ #define HN USE_HN /* HALANT_NUM */ #define HVM USE_HVM /* HALANT_OR_VOWEL_MODIFIER */ #define IND USE_IND /* BASE_IND */ +#define J USE_J /* HIEROGLYPH_JOINER */ #define N USE_N /* BASE_NUM */ #define O USE_O /* OTHER */ #define R USE_R /* REPHA */ #define Rsv USE_Rsv /* Reserved */ #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 Sk USE_Sk /* SAKOT */ #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, /* 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 */ - /* 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 */ @@ -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, /* 16B30 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O, -#define use_offset_0x16f00u 6728 +#define use_offset_0x16f00u 7808 /* 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, /* 16F90 */ VMBlw, VMBlw, VMBlw, O, O, O, O, O, -#define use_offset_0x16fe0u 6880 +#define use_offset_0x16fe0u 7960 /* Ideographic Symbols and Punctuation */ /* 16FE0 */ O, O, O, O, B, O, O, O, -#define use_offset_0x18b00u 6888 +#define use_offset_0x18b00u 7968 /* 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, /* 18CD0 */ B, B, B, B, B, B, O, O, -#define use_offset_0x1bc00u 7360 +#define use_offset_0x1bc00u 8440 /* 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, /* 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 */ @@ -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, /* 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 */ @@ -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, /* 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 */ @@ -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, /* 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 hb_use_get_category (hb_codepoint_t u) @@ -1059,7 +1133,7 @@ hb_use_get_category (hb_codepoint_t u) break; case 0x13u: - if (hb_in_range (u, 0x13430u, 0x13437u)) return use_table[u - 0x13430u + use_offset_0x13430u]; + if (hb_in_range (u, 0x13000u, 0x1343Fu)) return use_table[u - 0x13000u + use_offset_0x13000u]; break; case 0x16u: @@ -1090,16 +1164,20 @@ hb_use_get_category (hb_codepoint_t u) #undef B #undef CS +#undef G #undef GB #undef H #undef HN #undef HVM #undef IND +#undef J #undef N #undef O #undef R #undef Rsv #undef S +#undef SB +#undef SE #undef SUB #undef Sk #undef WJ diff --git a/src/hb-ot-shape-complex-use.cc b/src/hb-ot-shape-complex-use.cc index a1e25bdd8..d789b9df0 100644 --- a/src/hb-ot-shape-complex-use.cc +++ b/src/hb-ot-shape-complex-use.cc @@ -194,6 +194,7 @@ enum use_syllable_type_t { use_number_joiner_terminated_cluster, use_numeral_cluster, use_symbol_cluster, + use_hieroglyph_cluster, use_broken_cluster, use_non_cluster, }; @@ -275,6 +276,7 @@ setup_topographical_masks (const hb_ot_shape_plan_t *plan, { case use_independent_cluster: case use_symbol_cluster: + case use_hieroglyph_cluster: case use_non_cluster: /* These don't join. Nothing to do. */ last_form = _USE_NONE; diff --git a/src/hb-ot-shape-complex-use.hh b/src/hb-ot-shape-complex-use.hh index f88997f87..1ed3b5a85 100644 --- a/src/hb-ot-shape-complex-use.hh +++ b/src/hb-ot-shape-complex-use.hh @@ -72,6 +72,10 @@ enum use_category_t { USE_HVM = 44, /* HALANT_OR_VOWEL_MODIFIER */ 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_FBlw = 25, /* CONS_FINAL_BELOW */