diff --git a/src/gen-indic-table.py b/src/gen-indic-table.py index bbd3404fe..cec2993c8 100755 --- a/src/gen-indic-table.py +++ b/src/gen-indic-table.py @@ -245,6 +245,114 @@ category_overrides = { 0x17C8: 'Ygroup', 0x17DD: 'Ygroup', 0x17D3: 'Ygroup', # Just guessing. Uniscribe doesn't categorize it. + + + # Myanmar + + # https://docs.microsoft.com/en-us/typography/script-development/myanmar#analyze + + 0xFE00: 'VS', + 0xFE01: 'VS', + 0xFE02: 'VS', + 0xFE03: 'VS', + 0xFE04: 'VS', + 0xFE05: 'VS', + 0xFE06: 'VS', + 0xFE07: 'VS', + 0xFE08: 'VS', + 0xFE09: 'VS', + 0xFE0A: 'VS', + 0xFE0B: 'VS', + 0xFE0C: 'VS', + 0xFE0D: 'VS', + 0xFE0E: 'VS', + 0xFE0F: 'VS', + + 0x104E: 'C', # The spec says C, IndicSyllableCategory doesn't have. + + 0x002D: 'PLACEHOLDER', + 0x00A0: 'PLACEHOLDER', + 0x00D7: 'PLACEHOLDER', + 0x2012: 'PLACEHOLDER', + 0x2013: 'PLACEHOLDER', + 0x2014: 'PLACEHOLDER', + 0x2015: 'PLACEHOLDER', + 0x2022: 'PLACEHOLDER', + 0x25FB: 'PLACEHOLDER', + 0x25FC: 'PLACEHOLDER', + 0x25FD: 'PLACEHOLDER', + 0x25FE: 'PLACEHOLDER', + + 0x1004: 'Ra', + 0x101B: 'Ra', + 0x105A: 'Ra', + + 0x1032: 'A', + 0x1036: 'A', + + 0x1039: 'H', + + 0x103A: 'As', + + 0x1040: 'D', # XXX The spec says D0, but Uniscribe doesn't seem to do. + 0x1041: 'D', + 0x1042: 'D', + 0x1043: 'D', + 0x1044: 'D', + 0x1045: 'D', + 0x1046: 'D', + 0x1047: 'D', + 0x1048: 'D', + 0x1049: 'D', + 0x1090: 'D', + 0x1091: 'D', + 0x1092: 'D', + 0x1093: 'D', + 0x1094: 'D', + 0x1095: 'D', + 0x1096: 'D', + 0x1097: 'D', + 0x1098: 'D', + 0x1099: 'D', + + 0x103E: 'MH', + 0x1060: 'ML', + 0x103C: 'MR', + 0x103D: 'MW', + 0x1082: 'MW', + 0x103B: 'MY', + 0x105E: 'MY', + 0x105F: 'MY', + + 0x1063: 'PT', + 0x1064: 'PT', + 0x1069: 'PT', + 0x106A: 'PT', + 0x106B: 'PT', + 0x106C: 'PT', + 0x106D: 'PT', + 0xAA7B: 'PT', + + 0x1038: 'SM', + 0x1087: 'SM', + 0x1088: 'SM', + 0x1089: 'SM', + 0x108A: 'SM', + 0x108B: 'SM', + 0x108C: 'SM', + 0x108D: 'SM', + 0x108F: 'SM', + 0x109A: 'SM', + 0x109B: 'SM', + 0x109C: 'SM', + + 0x104A: 'P', + 0x104B: 'P', + + # https://github.com/harfbuzz/harfbuzz/issues/218 + 0xAA74: 'C', + 0xAA75: 'C', + 0xAA76: 'C', } position_overrides = { @@ -302,6 +410,7 @@ def position_to_category(pos): if pos == 'ABOVE_C': return 'VAbv' if pos == 'BELOW_C': return 'VBlw' if pos == 'POST_C': return 'VPst' + assert(False) defaults = (category_map[defaults[0]], position_map[defaults[1]], defaults[2]) @@ -391,6 +500,7 @@ short = [{ "Robatic": 'Rt', "Xgroup": 'Xg', "Ygroup": 'Yg', + "As": 'As', },{ "END": 'X', "BASE_C": 'C', diff --git a/src/hb-ot-shaper-indic-table.cc b/src/hb-ot-shaper-indic-table.cc index 18c4afe79..a9b710583 100644 --- a/src/hb-ot-shaper-indic-table.cc +++ b/src/hb-ot-shaper-indic-table.cc @@ -23,44 +23,54 @@ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-macros" -#define ISC_A OT_A /* 51 chars; A */ -#define ISC_C OT_C /* 520 chars; C */ -#define ISC_CM OT_CM /* 9 chars; CM */ +#define ISC_A OT_A /* 53 chars; A */ +#define ISC_As OT_As /* 1 chars; As */ +#define ISC_C OT_C /* 521 chars; C */ +#define ISC_CM OT_CM /* 1 chars; CM */ #define ISC_CS OT_CS /* 2 chars; CS */ -#define ISC_Co OT_Coeng /* 2 chars; Coeng */ +#define ISC_Co OT_Coeng /* 1 chars; Coeng */ +#define ISC_D OT_D /* 20 chars; D */ #define ISC_DC OT_DOTTEDCIRCLE /* 1 chars; DOTTEDCIRCLE */ -#define ISC_H OT_H /* 10 chars; H */ +#define ISC_H OT_H /* 11 chars; H */ #define ISC_M OT_M /* 160 chars; M */ -#define ISC_N OT_N /* 35 chars; N */ -#define ISC_GB OT_PLACEHOLDER /* 168 chars; PLACEHOLDER */ -#define ISC_R OT_Ra /* 12 chars; Ra */ +#define ISC_MH OT_MH /* 1 chars; MH */ +#define ISC_ML OT_ML /* 1 chars; ML */ +#define ISC_MR OT_MR /* 1 chars; MR */ +#define ISC_MW OT_MW /* 2 chars; MW */ +#define ISC_MY OT_MY /* 3 chars; MY */ +#define ISC_N OT_N /* 17 chars; N */ +#define ISC_P OT_P /* 2 chars; P */ +#define ISC_GB OT_PLACEHOLDER /* 149 chars; PLACEHOLDER */ +#define ISC_PT OT_PT /* 8 chars; PT */ +#define ISC_R OT_Ra /* 15 chars; Ra */ #define ISC_Rf OT_Repha /* 1 chars; Repha */ #define ISC_Rt OT_Robatic /* 3 chars; Robatic */ -#define ISC_SM OT_SM /* 48 chars; SM */ +#define ISC_SM OT_SM /* 58 chars; SM */ #define ISC_S OT_Symbol /* 22 chars; Symbol */ #define ISC_V OT_V /* 190 chars; V */ -#define ISC_VA OT_VAbv /* 20 chars; VAbv */ +#define ISC_VA OT_VAbv /* 18 chars; VAbv */ #define ISC_VB OT_VBlw /* 7 chars; VBlw */ #define ISC_VL OT_VPre /* 5 chars; VPre */ -#define ISC_VR OT_VPst /* 14 chars; VPst */ +#define ISC_VR OT_VPst /* 13 chars; VPst */ +#define ISC_VS OT_VS /* 16 chars; VS */ #define ISC_X OT_X /* 2 chars; X */ #define ISC_Xg OT_Xgroup /* 7 chars; Xgroup */ #define ISC_Yg OT_Ygroup /* 4 chars; Ygroup */ #define ISC_ZWJ OT_ZWJ /* 1 chars; ZWJ */ #define ISC_ZWNJ OT_ZWNJ /* 1 chars; ZWNJ */ -#define IMC_T POS_ABOVE_C /* 25 chars; ABOVE_C */ +#define IMC_T POS_ABOVE_C /* 23 chars; ABOVE_C */ #define IMC_A POS_AFTER_MAIN /* 3 chars; AFTER_MAIN */ #define IMC_AP POS_AFTER_POST /* 50 chars; AFTER_POST */ #define IMC_AS POS_AFTER_SUB /* 60 chars; AFTER_SUB */ -#define IMC_C POS_BASE_C /* 902 chars; BASE_C */ +#define IMC_C POS_BASE_C /* 879 chars; BASE_C */ #define IMC_BS POS_BEFORE_SUB /* 31 chars; BEFORE_SUB */ #define IMC_B POS_BELOW_C /* 13 chars; BELOW_C */ -#define IMC_X POS_END /* 56 chars; END */ -#define IMC_R POS_POST_C /* 14 chars; POST_C */ +#define IMC_X POS_END /* 93 chars; END */ +#define IMC_R POS_POST_C /* 13 chars; POST_C */ #define IMC_L POS_PRE_C /* 5 chars; PRE_C */ #define IMC_LM POS_PRE_M /* 16 chars; PRE_M */ -#define IMC_SM POS_SMVD /* 120 chars; SMVD */ +#define IMC_SM POS_SMVD /* 132 chars; SMVD */ #pragma GCC diagnostic pop @@ -287,26 +297,26 @@ static const uint16_t indic_table[] = { /* Myanmar */ - /* 1000 */ _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), + /* 1000 */ _(C,C), _(C,C), _(C,C), _(C,C), _(R,C), _(C,C), _(C,C), _(C,C), /* 1008 */ _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), /* 1010 */ _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), - /* 1018 */ _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), + /* 1018 */ _(C,C), _(C,C), _(C,C), _(R,C), _(C,C), _(C,C), _(C,C), _(C,C), /* 1020 */ _(C,C), _(V,C), _(V,C), _(V,C), _(V,C), _(V,C), _(V,C), _(V,C), /* 1028 */ _(V,C), _(V,C), _(V,C), _(VR,R), _(VR,R), _(VA,T), _(VA,T), _(VB,B), - /* 1030 */ _(VB,B), _(VL,L), _(VA,T), _(VA,T), _(VA,T), _(VA,T),_(SM,SM), _(N,X), - /* 1038 */_(SM,SM), _(Co,X), _(VA,T), _(CM,C), _(CM,C), _(CM,C), _(CM,C), _(C,C), - /* 1040 */ _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(GB,C), - /* 1048 */ _(GB,C), _(GB,C), _(X,X), _(GB,C), _(X,X), _(X,X), _(GB,C), _(X,X), + /* 1030 */ _(VB,B), _(VL,L), _(A,SM), _(VA,T), _(VA,T), _(VA,T), _(A,SM), _(N,X), + /* 1038 */_(SM,SM), _(H,X), _(As,X), _(MY,X), _(MR,X), _(MW,X), _(MH,X), _(C,C), + /* 1040 */ _(D,X), _(D,X), _(D,X), _(D,X), _(D,X), _(D,X), _(D,X), _(D,X), + /* 1048 */ _(D,X), _(D,X), _(P,X), _(P,X), _(X,X), _(X,X), _(C,C), _(X,X), /* 1050 */ _(C,C), _(C,C), _(V,C), _(V,C), _(V,C), _(V,C), _(VR,R), _(VR,R), - /* 1058 */ _(VB,B), _(VB,B), _(C,C), _(C,C), _(C,C), _(C,C), _(CM,C), _(CM,C), - /* 1060 */ _(CM,C), _(C,C), _(VR,R), _(N,X), _(N,X), _(C,C), _(C,C), _(VR,R), - /* 1068 */ _(VR,R), _(N,X), _(N,X), _(N,X), _(N,X), _(N,X), _(C,C), _(C,C), + /* 1058 */ _(VB,B), _(VB,B), _(R,C), _(C,C), _(C,C), _(C,C), _(MY,X), _(MY,X), + /* 1060 */ _(ML,X), _(C,C), _(VR,R), _(PT,X), _(PT,X), _(C,C), _(C,C), _(VR,R), + /* 1068 */ _(VR,R), _(PT,X), _(PT,X), _(PT,X), _(PT,X), _(PT,X), _(C,C), _(C,C), /* 1070 */ _(C,C), _(VA,T), _(VA,T), _(VA,T), _(VA,T), _(C,C), _(C,C), _(C,C), /* 1078 */ _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), - /* 1080 */ _(C,C), _(C,C), _(CM,C), _(VR,R), _(VL,L), _(VA,T), _(VA,T), _(N,X), - /* 1088 */ _(N,X), _(N,X), _(N,X), _(N,X), _(N,X), _(N,X), _(C,C), _(N,X), - /* 1090 */ _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(GB,C), - /* 1098 */ _(GB,C), _(GB,C), _(N,X), _(N,X), _(VR,R), _(VA,T), _(X,X), _(X,X), + /* 1080 */ _(C,C), _(C,C), _(MW,X), _(VR,R), _(VL,L), _(VA,T), _(VA,T),_(SM,SM), + /* 1088 */_(SM,SM),_(SM,SM),_(SM,SM),_(SM,SM),_(SM,SM),_(SM,SM), _(C,C),_(SM,SM), + /* 1090 */ _(D,X), _(D,X), _(D,X), _(D,X), _(D,X), _(D,X), _(D,X), _(D,X), + /* 1098 */ _(D,X), _(D,X),_(SM,SM),_(SM,SM),_(SM,SM), _(VA,T), _(X,X), _(X,X), #define indic_offset_0x1780u 1496 @@ -352,9 +362,14 @@ static const uint16_t indic_table[] = { /* General Punctuation */ /* 2008 */ _(X,X), _(X,X), _(X,X), _(X,X),_(ZWNJ,X),_(ZWJ,X), _(X,X), _(X,X), - /* 2010 */ _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(X,X), _(X,X), _(X,X), + /* 2010 */ _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(X,X), _(X,X), + /* 2018 */ _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), -#define indic_offset_0x2070u 1672 + /* No_Block */ + + /* 2020 */ _(X,X), _(X,X), _(GB,C), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), + +#define indic_offset_0x2070u 1688 /* Superscripts and Subscripts */ @@ -363,7 +378,14 @@ static const uint16_t indic_table[] = { /* 2078 */ _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), /* 2080 */ _(X,X), _(X,X),_(SM,SM),_(SM,SM),_(SM,SM), _(X,X), _(X,X), _(X,X), -#define indic_offset_0xa8e0u 1696 +#define indic_offset_0x25f8u 1712 + + + /* No_Block */ + + /* 25F8 */ _(X,X), _(X,X), _(X,X), _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(X,X), + +#define indic_offset_0xa8e0u 1720 /* Devanagari Extended */ @@ -373,7 +395,7 @@ static const uint16_t indic_table[] = { /* A8F0 */ _(A,SM), _(A,SM), _(S,SM), _(S,SM), _(S,SM), _(S,SM), _(S,SM), _(S,SM), /* A8F8 */ _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(V,C), _(M,AS), -#define indic_offset_0xa9e0u 1728 +#define indic_offset_0xa9e0u 1752 /* Myanmar Extended-B */ @@ -383,21 +405,26 @@ static const uint16_t indic_table[] = { /* A9F0 */ _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(GB,C), /* A9F8 */ _(GB,C), _(GB,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(X,X), -#define indic_offset_0xaa60u 1760 +#define indic_offset_0xaa60u 1784 /* Myanmar Extended-A */ /* AA60 */ _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), /* AA68 */ _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), - /* AA70 */ _(X,X), _(C,C), _(C,C), _(C,C), _(GB,C), _(GB,C), _(GB,C), _(X,X), - /* AA78 */ _(X,X), _(X,X), _(C,C), _(N,X), _(N,X), _(N,X), _(C,C), _(C,C), + /* AA70 */ _(X,X), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(X,X), + /* AA78 */ _(X,X), _(X,X), _(C,C), _(PT,X), _(N,X), _(N,X), _(C,C), _(C,C), -#define indic_offset_0x11300u 1792 +#define indic_offset_0xfe00u 1816 /* No_Block */ + /* FE00 */ _(VS,X), _(VS,X), _(VS,X), _(VS,X), _(VS,X), _(VS,X), _(VS,X), _(VS,X), + /* FE08 */ _(VS,X), _(VS,X), _(VS,X), _(VS,X), _(VS,X), _(VS,X), _(VS,X), _(VS,X), + +#define indic_offset_0x11300u 1832 + /* 11300 */ _(X,X),_(SM,SM),_(SM,SM),_(SM,SM), _(X,X), _(X,X), _(X,X), _(X,X), /* 11308 */ _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), /* 11310 */ _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), @@ -407,7 +434,7 @@ static const uint16_t indic_table[] = { /* 11330 */ _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), /* 11338 */ _(X,X), _(X,X), _(X,X), _(N,X), _(N,X), _(X,X), _(X,X), _(X,X), -}; /* Table items: 1856; occupancy: 69% */ +}; /* Table items: 1896; occupancy: 69% */ uint16_t hb_indic_get_categories (hb_codepoint_t u) @@ -429,8 +456,9 @@ hb_indic_get_categories (hb_codepoint_t u) case 0x2u: if (unlikely (u == 0x25CCu)) return _(DC,C); - if (hb_in_range (u, 0x2008u, 0x2017u)) return indic_table[u - 0x2008u + indic_offset_0x2008u]; + if (hb_in_range (u, 0x2008u, 0x2027u)) return indic_table[u - 0x2008u + indic_offset_0x2008u]; if (hb_in_range (u, 0x2070u, 0x2087u)) return indic_table[u - 0x2070u + indic_offset_0x2070u]; + if (hb_in_range (u, 0x25F8u, 0x25FFu)) return indic_table[u - 0x25F8u + indic_offset_0x25f8u]; break; case 0xAu: @@ -439,6 +467,10 @@ hb_indic_get_categories (hb_codepoint_t u) if (hb_in_range (u, 0xAA60u, 0xAA7Fu)) return indic_table[u - 0xAA60u + indic_offset_0xaa60u]; break; + case 0xFu: + if (hb_in_range (u, 0xFE00u, 0xFE0Fu)) return indic_table[u - 0xFE00u + indic_offset_0xfe00u]; + break; + case 0x11u: if (hb_in_range (u, 0x11300u, 0x1133Fu)) return indic_table[u - 0x11300u + indic_offset_0x11300u]; break; @@ -452,15 +484,24 @@ hb_indic_get_categories (hb_codepoint_t u) #undef _ #undef ISC_A +#undef ISC_As #undef ISC_C #undef ISC_CM #undef ISC_CS #undef ISC_Co +#undef ISC_D #undef ISC_DC #undef ISC_H #undef ISC_M +#undef ISC_MH +#undef ISC_ML +#undef ISC_MR +#undef ISC_MW +#undef ISC_MY #undef ISC_N +#undef ISC_P #undef ISC_GB +#undef ISC_PT #undef ISC_R #undef ISC_Rf #undef ISC_Rt @@ -471,6 +512,7 @@ hb_indic_get_categories (hb_codepoint_t u) #undef ISC_VB #undef ISC_VL #undef ISC_VR +#undef ISC_VS #undef ISC_X #undef ISC_Xg #undef ISC_Yg diff --git a/src/hb-ot-shaper-indic.hh b/src/hb-ot-shaper-indic.hh index 22f353969..0d6a946a0 100644 --- a/src/hb-ot-shaper-indic.hh +++ b/src/hb-ot-shaper-indic.hh @@ -77,15 +77,16 @@ enum indic_category_t { /* Myanmar */ OT_As = 32, // Asat - OT_D0 = 33, // Digit zero - OT_MH = 34, // Medial - OT_MR = 35, // Medial - OT_MW = 36, // Medial - OT_MY = 37, // Medial - OT_PT = 38, // Pwo and other tones - OT_VS = 39, // Variation selectors - OT_P = 40, // Punctuation - OT_ML = 41, // Consonant medials + OT_D = 33, // Digits except zero + OT_D0 = 34, // Digit zero + OT_MH = 35, // Medial + OT_MR = 36, // Medial + OT_MW = 37, // Medial + OT_MY = 38, // Medial + OT_PT = 39, // Pwo and other tones + OT_VS = 40, // Variation selectors + OT_P = 41, // Punctuation + OT_ML = 42, // Consonant medials }; #define MEDIAL_FLAGS (FLAG (OT_CM)) diff --git a/src/hb-ot-shaper-myanmar-machine.hh b/src/hb-ot-shaper-myanmar-machine.hh index f8fcfc502..d00a3e0ff 100644 --- a/src/hb-ot-shaper-myanmar-machine.hh +++ b/src/hb-ot-shaper-myanmar-machine.hh @@ -56,98 +56,100 @@ enum myanmar_syllable_type_t { #define myanmar_syllable_machine_ex_As 32u #define myanmar_syllable_machine_ex_C 1u #define myanmar_syllable_machine_ex_CS 18u -#define myanmar_syllable_machine_ex_D 10u -#define myanmar_syllable_machine_ex_D0 33u +#define myanmar_syllable_machine_ex_D 33u +#define myanmar_syllable_machine_ex_D0 34u #define myanmar_syllable_machine_ex_DB 3u +#define myanmar_syllable_machine_ex_DOTTEDCIRCLE 11u #define myanmar_syllable_machine_ex_GB 10u #define myanmar_syllable_machine_ex_H 4u #define myanmar_syllable_machine_ex_IV 2u -#define myanmar_syllable_machine_ex_MH 34u -#define myanmar_syllable_machine_ex_ML 41u -#define myanmar_syllable_machine_ex_MR 35u -#define myanmar_syllable_machine_ex_MW 36u -#define myanmar_syllable_machine_ex_MY 37u -#define myanmar_syllable_machine_ex_P 40u -#define myanmar_syllable_machine_ex_PT 38u +#define myanmar_syllable_machine_ex_MH 35u +#define myanmar_syllable_machine_ex_ML 42u +#define myanmar_syllable_machine_ex_MR 36u +#define myanmar_syllable_machine_ex_MW 37u +#define myanmar_syllable_machine_ex_MY 38u +#define myanmar_syllable_machine_ex_P 41u +#define myanmar_syllable_machine_ex_PT 39u #define myanmar_syllable_machine_ex_Ra 15u -#define myanmar_syllable_machine_ex_V 8u +#define myanmar_syllable_machine_ex_SM 8u #define myanmar_syllable_machine_ex_VAbv 20u #define myanmar_syllable_machine_ex_VBlw 21u #define myanmar_syllable_machine_ex_VPre 22u #define myanmar_syllable_machine_ex_VPst 23u -#define myanmar_syllable_machine_ex_VS 39u +#define myanmar_syllable_machine_ex_VS 40u #define myanmar_syllable_machine_ex_ZWJ 6u #define myanmar_syllable_machine_ex_ZWNJ 5u -#line 84 "hb-ot-shaper-myanmar-machine.hh" +#line 85 "hb-ot-shaper-myanmar-machine.hh" static const unsigned char _myanmar_syllable_machine_trans_keys[] = { - 1u, 41u, 3u, 41u, 5u, 38u, 5u, 8u, 3u, 41u, 3u, 38u, 3u, 38u, 5u, 38u, - 5u, 38u, 3u, 38u, 3u, 38u, 3u, 41u, 5u, 38u, 1u, 15u, 3u, 38u, 3u, 38u, - 3u, 39u, 3u, 38u, 3u, 41u, 3u, 41u, 3u, 38u, 3u, 41u, 3u, 41u, 3u, 41u, - 3u, 41u, 3u, 41u, 5u, 38u, 5u, 8u, 3u, 41u, 3u, 38u, 3u, 38u, 5u, 38u, - 5u, 38u, 3u, 38u, 3u, 38u, 3u, 41u, 5u, 38u, 1u, 15u, 3u, 41u, 3u, 38u, - 3u, 38u, 3u, 39u, 3u, 38u, 3u, 41u, 3u, 41u, 3u, 38u, 3u, 41u, 3u, 41u, - 3u, 41u, 3u, 41u, 3u, 41u, 3u, 41u, 3u, 41u, 1u, 41u, 1u, 15u, 8u, 8u, + 1u, 42u, 3u, 42u, 5u, 39u, 5u, 8u, 3u, 42u, 3u, 39u, 3u, 39u, 5u, 39u, + 5u, 39u, 3u, 39u, 3u, 39u, 3u, 42u, 5u, 39u, 1u, 15u, 3u, 39u, 3u, 39u, + 3u, 40u, 3u, 39u, 3u, 42u, 3u, 42u, 3u, 39u, 3u, 42u, 3u, 42u, 3u, 42u, + 3u, 42u, 3u, 42u, 5u, 39u, 5u, 8u, 3u, 42u, 3u, 39u, 3u, 39u, 5u, 39u, + 5u, 39u, 3u, 39u, 3u, 39u, 3u, 42u, 5u, 39u, 1u, 15u, 3u, 42u, 3u, 39u, + 3u, 39u, 3u, 40u, 3u, 39u, 3u, 42u, 3u, 42u, 3u, 39u, 3u, 42u, 3u, 42u, + 3u, 42u, 3u, 42u, 3u, 42u, 3u, 42u, 3u, 42u, 1u, 42u, 1u, 33u, 8u, 8u, 0 }; static const char _myanmar_syllable_machine_key_spans[] = { - 41, 39, 34, 4, 39, 36, 36, 34, - 34, 36, 36, 39, 34, 15, 36, 36, - 37, 36, 39, 39, 36, 39, 39, 39, - 39, 39, 34, 4, 39, 36, 36, 34, - 34, 36, 36, 39, 34, 15, 39, 36, - 36, 37, 36, 39, 39, 36, 39, 39, - 39, 39, 39, 39, 39, 41, 15, 1 + 42, 40, 35, 4, 40, 37, 37, 35, + 35, 37, 37, 40, 35, 15, 37, 37, + 38, 37, 40, 40, 37, 40, 40, 40, + 40, 40, 35, 4, 40, 37, 37, 35, + 35, 37, 37, 40, 35, 15, 40, 37, + 37, 38, 37, 40, 40, 37, 40, 40, + 40, 40, 40, 40, 40, 42, 33, 1 }; static const short _myanmar_syllable_machine_index_offsets[] = { - 0, 42, 82, 117, 122, 162, 199, 236, - 271, 306, 343, 380, 420, 455, 471, 508, - 545, 583, 620, 660, 700, 737, 777, 817, - 857, 897, 937, 972, 977, 1017, 1054, 1091, - 1126, 1161, 1198, 1235, 1275, 1310, 1326, 1366, - 1403, 1440, 1478, 1515, 1555, 1595, 1632, 1672, - 1712, 1752, 1792, 1832, 1872, 1912, 1954, 1970 + 0, 43, 84, 120, 125, 166, 204, 242, + 278, 314, 352, 390, 431, 467, 483, 521, + 559, 598, 636, 677, 718, 756, 797, 838, + 879, 920, 961, 997, 1002, 1043, 1081, 1119, + 1155, 1191, 1229, 1267, 1308, 1344, 1360, 1401, + 1439, 1477, 1516, 1554, 1595, 1636, 1674, 1715, + 1756, 1797, 1838, 1879, 1920, 1961, 2004, 2038 }; static const char _myanmar_syllable_machine_indicies[] = { 1, 1, 2, 3, 4, 4, 0, 5, - 6, 1, 0, 0, 0, 0, 7, 0, + 6, 1, 1, 0, 0, 0, 7, 0, 0, 8, 0, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, - 0, 14, 15, 16, 17, 18, 19, 20, - 21, 0, 23, 24, 25, 25, 22, 26, - 27, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 28, 29, 30, 31, 22, - 22, 22, 22, 22, 22, 22, 22, 32, - 22, 33, 34, 35, 36, 37, 38, 22, - 39, 22, 25, 25, 22, 26, 22, 22, + 1, 0, 14, 15, 16, 17, 18, 19, + 20, 21, 0, 23, 24, 25, 25, 22, + 26, 27, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 28, 29, 30, 31, + 22, 22, 22, 22, 22, 22, 22, 22, + 32, 22, 22, 33, 34, 35, 36, 37, + 38, 22, 39, 22, 25, 25, 22, 26, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 31, 22, 22, 22, - 22, 22, 22, 22, 22, 40, 22, 22, - 22, 22, 22, 37, 22, 25, 25, 22, - 26, 22, 23, 22, 25, 25, 22, 26, - 27, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 41, 22, 22, 31, 22, - 22, 22, 22, 22, 22, 22, 22, 42, - 22, 43, 22, 22, 22, 37, 22, 22, - 42, 22, 23, 22, 25, 25, 22, 26, - 27, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 31, 22, + 22, 22, 22, 22, 22, 22, 22, 40, + 22, 22, 22, 22, 22, 22, 37, 22, + 25, 25, 22, 26, 22, 23, 22, 25, + 25, 22, 26, 27, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 41, 22, + 22, 31, 22, 22, 22, 22, 22, 22, + 22, 22, 42, 22, 22, 43, 22, 22, + 22, 37, 22, 22, 42, 22, 23, 22, + 25, 25, 22, 26, 27, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 37, 22, 44, - 22, 25, 25, 22, 26, 37, 22, 22, + 22, 22, 31, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 37, 22, 44, 22, 25, 25, + 22, 26, 37, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 45, 22, 22, 22, - 22, 22, 37, 22, 25, 25, 22, 26, + 22, 45, 22, 22, 22, 22, 22, 22, + 37, 22, 25, 25, 22, 26, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 45, - 22, 22, 22, 22, 22, 37, 22, 25, - 25, 22, 26, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 45, 22, 22, + 22, 22, 22, 22, 37, 22, 25, 25, + 22, 26, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, @@ -155,211 +157,219 @@ static const char _myanmar_syllable_machine_indicies[] = { 27, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 41, 22, 22, 31, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 37, 22, 23, - 22, 25, 25, 22, 26, 27, 22, 22, + 22, 22, 22, 22, 22, 22, 37, 22, + 23, 22, 25, 25, 22, 26, 27, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 41, 22, 22, 31, 22, 22, 22, 22, - 22, 22, 22, 22, 42, 22, 22, 22, - 22, 22, 37, 22, 23, 22, 25, 25, - 22, 26, 27, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 41, 22, 22, - 31, 22, 22, 22, 22, 22, 22, 22, - 22, 42, 22, 22, 22, 22, 22, 37, - 22, 22, 42, 22, 25, 25, 22, 26, + 22, 41, 22, 22, 31, 22, 22, 22, + 22, 22, 22, 22, 22, 42, 22, 22, + 22, 22, 22, 22, 37, 22, 23, 22, + 25, 25, 22, 26, 27, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 41, + 22, 22, 31, 22, 22, 22, 22, 22, + 22, 22, 22, 42, 22, 22, 22, 22, + 22, 22, 37, 22, 22, 42, 22, 25, + 25, 22, 26, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 31, 22, + 22, 31, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 37, 22, 1, - 1, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 1, 22, 23, - 22, 25, 25, 22, 26, 27, 22, 22, + 22, 37, 22, 1, 1, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 28, 29, 22, 31, 22, 22, 22, 22, + 22, 1, 22, 23, 22, 25, 25, 22, + 26, 27, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 28, 29, 22, 31, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 37, 22, 23, 22, 25, 25, - 22, 26, 27, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 29, 22, - 31, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 37, 22, 23, 22, 25, 25, 22, 26, 27, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 28, 29, 30, 31, 22, 22, + 22, 22, 22, 29, 22, 31, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 37, 46, 22, 23, + 22, 22, 22, 22, 22, 37, 22, 23, 22, 25, 25, 22, 26, 27, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 28, 29, 30, 31, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 37, 46, 22, 23, 22, + 25, 25, 22, 26, 27, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 28, + 29, 30, 31, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 37, 22, 23, 22, 25, 25, 22, 26, 27, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 28, 29, 30, 31, 22, 22, 22, 22, 22, 22, 22, - 22, 32, 22, 33, 34, 35, 36, 37, - 22, 22, 39, 22, 23, 22, 25, 25, + 22, 32, 22, 22, 33, 34, 35, 36, + 37, 22, 22, 39, 22, 23, 22, 25, + 25, 22, 26, 27, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 28, 29, + 30, 31, 22, 22, 22, 22, 22, 22, + 22, 22, 46, 22, 22, 22, 22, 22, + 22, 37, 22, 22, 39, 22, 23, 22, + 25, 25, 22, 26, 27, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 28, + 29, 30, 31, 22, 22, 22, 22, 22, + 22, 22, 22, 46, 22, 22, 22, 22, + 22, 22, 37, 22, 23, 22, 25, 25, 22, 26, 27, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 28, 29, 30, 31, 22, 22, 22, 22, 22, 22, 22, - 22, 46, 22, 22, 22, 22, 22, 37, - 22, 22, 39, 22, 23, 22, 25, 25, - 22, 26, 27, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 28, 29, 30, - 31, 22, 22, 22, 22, 22, 22, 22, - 22, 46, 22, 22, 22, 22, 22, 37, - 22, 23, 22, 25, 25, 22, 26, 27, + 22, 22, 22, 22, 33, 22, 35, 22, + 37, 22, 22, 39, 22, 23, 22, 25, + 25, 22, 26, 27, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 28, 29, + 30, 31, 22, 22, 22, 22, 22, 22, + 22, 22, 46, 22, 22, 33, 22, 22, + 22, 37, 22, 22, 39, 22, 23, 22, + 25, 25, 22, 26, 27, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 28, + 29, 30, 31, 22, 22, 22, 22, 22, + 22, 22, 22, 47, 22, 22, 33, 34, + 35, 22, 37, 22, 22, 39, 22, 23, + 22, 25, 25, 22, 26, 27, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 28, 29, 30, 31, 22, 22, + 28, 29, 30, 31, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 33, + 34, 35, 22, 37, 22, 22, 39, 22, + 23, 24, 25, 25, 22, 26, 27, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 33, 22, 35, 22, 37, 22, 22, 39, - 22, 23, 22, 25, 25, 22, 26, 27, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 28, 29, 30, 31, 22, 22, - 22, 22, 22, 22, 22, 22, 46, 22, - 33, 22, 22, 22, 37, 22, 22, 39, - 22, 23, 22, 25, 25, 22, 26, 27, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 28, 29, 30, 31, 22, 22, - 22, 22, 22, 22, 22, 22, 47, 22, - 33, 34, 35, 22, 37, 22, 22, 39, - 22, 23, 22, 25, 25, 22, 26, 27, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 28, 29, 30, 31, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 33, 34, 35, 22, 37, 22, 22, 39, - 22, 23, 24, 25, 25, 22, 26, 27, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 28, 29, 30, 31, 22, 22, - 22, 22, 22, 22, 22, 22, 32, 22, + 22, 28, 29, 30, 31, 22, 22, 22, + 22, 22, 22, 22, 22, 32, 22, 22, 33, 34, 35, 36, 37, 22, 22, 39, 22, 49, 49, 48, 5, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 12, 48, 48, 48, 48, 48, 48, 48, 48, 50, 48, 48, 48, - 48, 48, 18, 48, 49, 49, 48, 5, - 48, 2, 48, 49, 49, 48, 5, 6, + 48, 48, 48, 18, 48, 49, 49, 48, + 5, 48, 2, 48, 49, 49, 48, 5, + 6, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 51, 48, 48, 12, 48, + 48, 48, 48, 48, 48, 48, 48, 52, + 48, 48, 53, 48, 48, 48, 18, 48, + 48, 52, 48, 2, 48, 49, 49, 48, + 5, 6, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 12, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 51, 48, 48, 12, 48, 48, - 48, 48, 48, 48, 48, 48, 52, 48, - 53, 48, 48, 48, 18, 48, 48, 52, - 48, 2, 48, 49, 49, 48, 5, 6, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 12, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 18, 48, 54, 48, - 49, 49, 48, 5, 18, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 55, 48, 48, 48, 48, - 48, 18, 48, 49, 49, 48, 5, 48, + 48, 48, 48, 48, 48, 48, 48, 18, + 48, 54, 48, 49, 49, 48, 5, 18, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 55, 48, - 48, 48, 48, 48, 18, 48, 49, 49, - 48, 5, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 18, 48, 49, + 49, 48, 5, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 18, - 48, 2, 48, 49, 49, 48, 5, 6, + 48, 48, 55, 48, 48, 48, 48, 48, + 48, 18, 48, 49, 49, 48, 5, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 51, 48, 48, 12, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 18, 48, 2, 48, - 49, 49, 48, 5, 6, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 51, - 48, 48, 12, 48, 48, 48, 48, 48, - 48, 48, 48, 52, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 18, 48, 2, + 48, 49, 49, 48, 5, 6, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 51, 48, 48, 12, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 18, 48, 2, 48, 49, + 49, 48, 5, 6, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 51, 48, + 48, 12, 48, 48, 48, 48, 48, 48, + 48, 48, 52, 48, 48, 48, 48, 48, 48, 18, 48, 2, 48, 49, 49, 48, 5, 6, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 51, 48, 48, 12, 48, 48, 48, 48, 48, 48, 48, 48, - 52, 48, 48, 48, 48, 48, 18, 48, - 48, 52, 48, 49, 49, 48, 5, 48, + 52, 48, 48, 48, 48, 48, 48, 18, + 48, 48, 52, 48, 49, 49, 48, 5, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 12, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 18, 48, 56, 56, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 56, 48, 2, 3, - 49, 49, 48, 5, 6, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 9, - 10, 11, 12, 48, 48, 48, 48, 48, - 48, 48, 48, 13, 48, 14, 15, 16, - 17, 18, 19, 48, 21, 48, 2, 48, - 49, 49, 48, 5, 6, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 9, - 10, 48, 12, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 18, 48, 2, 48, 49, 49, 48, - 5, 6, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 10, 48, 12, + 48, 48, 48, 48, 48, 48, 12, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 18, 48, - 2, 48, 49, 49, 48, 5, 6, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 9, 10, 11, 12, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 18, 57, 48, 2, 48, - 49, 49, 48, 5, 6, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 9, - 10, 11, 12, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 18, 48, 2, 48, 49, 49, 48, - 5, 6, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 9, 10, 11, 12, - 48, 48, 48, 48, 48, 48, 48, 48, - 13, 48, 14, 15, 16, 17, 18, 48, - 48, 21, 48, 2, 48, 49, 49, 48, - 5, 6, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 9, 10, 11, 12, - 48, 48, 48, 48, 48, 48, 48, 48, - 57, 48, 48, 48, 48, 48, 18, 48, - 48, 21, 48, 2, 48, 49, 49, 48, - 5, 6, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 9, 10, 11, 12, - 48, 48, 48, 48, 48, 48, 48, 48, - 57, 48, 48, 48, 48, 48, 18, 48, - 2, 48, 49, 49, 48, 5, 6, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 9, 10, 11, 12, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 14, - 48, 16, 48, 18, 48, 48, 21, 48, - 2, 48, 49, 49, 48, 5, 6, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 9, 10, 11, 12, 48, 48, 48, - 48, 48, 48, 48, 48, 57, 48, 14, - 48, 48, 48, 18, 48, 48, 21, 48, - 2, 48, 49, 49, 48, 5, 6, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 9, 10, 11, 12, 48, 48, 48, - 48, 48, 48, 48, 48, 58, 48, 14, - 15, 16, 48, 18, 48, 48, 21, 48, - 2, 48, 49, 49, 48, 5, 6, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 9, 10, 11, 12, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 14, - 15, 16, 48, 18, 48, 48, 21, 48, + 56, 56, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 56, 48, 2, 3, 49, 49, 48, 5, 6, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 9, 10, 11, 12, 48, 48, 48, - 48, 48, 48, 48, 48, 13, 48, 14, - 15, 16, 17, 18, 48, 48, 21, 48, - 23, 24, 25, 25, 22, 26, 27, 22, + 48, 48, 48, 48, 48, 13, 48, 48, + 14, 15, 16, 17, 18, 19, 48, 21, + 48, 2, 48, 49, 49, 48, 5, 6, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 9, 10, 48, 12, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 18, 48, 2, + 48, 49, 49, 48, 5, 6, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 10, 48, 12, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 18, 48, 2, 48, 49, + 49, 48, 5, 6, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 9, 10, + 11, 12, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 18, 57, 48, 2, 48, 49, 49, + 48, 5, 6, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 9, 10, 11, + 12, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 18, 48, 2, 48, 49, 49, 48, 5, + 6, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 9, 10, 11, 12, 48, + 48, 48, 48, 48, 48, 48, 48, 13, + 48, 48, 14, 15, 16, 17, 18, 48, + 48, 21, 48, 2, 48, 49, 49, 48, + 5, 6, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 9, 10, 11, 12, + 48, 48, 48, 48, 48, 48, 48, 48, + 57, 48, 48, 48, 48, 48, 48, 18, + 48, 48, 21, 48, 2, 48, 49, 49, + 48, 5, 6, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 9, 10, 11, + 12, 48, 48, 48, 48, 48, 48, 48, + 48, 57, 48, 48, 48, 48, 48, 48, + 18, 48, 2, 48, 49, 49, 48, 5, + 6, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 9, 10, 11, 12, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 14, 48, 16, 48, 18, 48, + 48, 21, 48, 2, 48, 49, 49, 48, + 5, 6, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 9, 10, 11, 12, + 48, 48, 48, 48, 48, 48, 48, 48, + 57, 48, 48, 14, 48, 48, 48, 18, + 48, 48, 21, 48, 2, 48, 49, 49, + 48, 5, 6, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 9, 10, 11, + 12, 48, 48, 48, 48, 48, 48, 48, + 48, 58, 48, 48, 14, 15, 16, 48, + 18, 48, 48, 21, 48, 2, 48, 49, + 49, 48, 5, 6, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 9, 10, + 11, 12, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 14, 15, 16, + 48, 18, 48, 48, 21, 48, 2, 3, + 49, 49, 48, 5, 6, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 9, + 10, 11, 12, 48, 48, 48, 48, 48, + 48, 48, 48, 13, 48, 48, 14, 15, + 16, 17, 18, 48, 48, 21, 48, 23, + 24, 25, 25, 22, 26, 27, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 28, 29, 30, 31, 22, 22, 22, - 22, 22, 22, 22, 22, 59, 22, 33, + 28, 29, 30, 31, 22, 22, 22, 22, + 22, 22, 22, 22, 59, 22, 22, 33, 34, 35, 36, 37, 38, 22, 39, 22, 23, 60, 25, 25, 22, 26, 27, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 28, 29, 30, 31, 22, 22, 22, - 22, 22, 22, 22, 22, 32, 22, 33, - 34, 35, 36, 37, 22, 22, 39, 22, - 1, 1, 2, 3, 49, 49, 48, 5, - 6, 1, 48, 48, 48, 48, 1, 48, - 48, 48, 48, 9, 10, 11, 12, 48, - 48, 48, 48, 48, 48, 48, 48, 13, - 48, 14, 15, 16, 17, 18, 19, 48, - 21, 48, 1, 1, 61, 61, 61, 61, - 61, 61, 61, 1, 61, 61, 61, 61, - 1, 61, 62, 61, 0 + 22, 22, 22, 22, 22, 32, 22, 22, + 33, 34, 35, 36, 37, 22, 22, 39, + 22, 1, 1, 2, 3, 49, 49, 48, + 5, 6, 1, 1, 48, 48, 48, 1, + 48, 48, 48, 48, 9, 10, 11, 12, + 48, 48, 48, 48, 48, 48, 48, 48, + 13, 1, 48, 14, 15, 16, 17, 18, + 19, 48, 21, 48, 1, 1, 61, 61, + 61, 61, 61, 61, 61, 1, 1, 61, + 61, 61, 1, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 1, 61, 62, 61, + 0 }; static const char _myanmar_syllable_machine_trans_targs[] = { @@ -425,7 +435,7 @@ static const int myanmar_syllable_machine_en_main = 0; -#line 117 "hb-ot-shaper-myanmar-machine.rl" +#line 118 "hb-ot-shaper-myanmar-machine.rl" #define found_syllable(syllable_type) \ @@ -444,7 +454,7 @@ find_syllables_myanmar (hb_buffer_t *buffer) int cs; hb_glyph_info_t *info = buffer->info; -#line 448 "hb-ot-shaper-myanmar-machine.hh" +#line 458 "hb-ot-shaper-myanmar-machine.hh" { cs = myanmar_syllable_machine_start; ts = 0; @@ -452,7 +462,7 @@ find_syllables_myanmar (hb_buffer_t *buffer) act = 0; } -#line 137 "hb-ot-shaper-myanmar-machine.rl" +#line 138 "hb-ot-shaper-myanmar-machine.rl" p = 0; @@ -460,7 +470,7 @@ find_syllables_myanmar (hb_buffer_t *buffer) unsigned int syllable_serial = 1; -#line 464 "hb-ot-shaper-myanmar-machine.hh" +#line 474 "hb-ot-shaper-myanmar-machine.hh" { int _slen; int _trans; @@ -474,7 +484,7 @@ _resume: #line 1 "NONE" {ts = p;} break; -#line 478 "hb-ot-shaper-myanmar-machine.hh" +#line 488 "hb-ot-shaper-myanmar-machine.hh" } _keys = _myanmar_syllable_machine_trans_keys + (cs<<1); @@ -493,38 +503,38 @@ _eof_trans: switch ( _myanmar_syllable_machine_trans_actions[_trans] ) { case 6: -#line 109 "hb-ot-shaper-myanmar-machine.rl" +#line 110 "hb-ot-shaper-myanmar-machine.rl" {te = p+1;{ found_syllable (myanmar_consonant_syllable); }} break; case 4: -#line 110 "hb-ot-shaper-myanmar-machine.rl" +#line 111 "hb-ot-shaper-myanmar-machine.rl" {te = p+1;{ found_syllable (myanmar_non_myanmar_cluster); }} break; case 10: -#line 111 "hb-ot-shaper-myanmar-machine.rl" +#line 112 "hb-ot-shaper-myanmar-machine.rl" {te = p+1;{ found_syllable (myanmar_punctuation_cluster); }} break; case 8: -#line 112 "hb-ot-shaper-myanmar-machine.rl" +#line 113 "hb-ot-shaper-myanmar-machine.rl" {te = p+1;{ found_syllable (myanmar_broken_cluster); }} break; case 3: -#line 113 "hb-ot-shaper-myanmar-machine.rl" +#line 114 "hb-ot-shaper-myanmar-machine.rl" {te = p+1;{ found_syllable (myanmar_non_myanmar_cluster); }} break; case 5: -#line 109 "hb-ot-shaper-myanmar-machine.rl" +#line 110 "hb-ot-shaper-myanmar-machine.rl" {te = p;p--;{ found_syllable (myanmar_consonant_syllable); }} break; case 7: -#line 112 "hb-ot-shaper-myanmar-machine.rl" +#line 113 "hb-ot-shaper-myanmar-machine.rl" {te = p;p--;{ found_syllable (myanmar_broken_cluster); }} break; case 9: -#line 113 "hb-ot-shaper-myanmar-machine.rl" +#line 114 "hb-ot-shaper-myanmar-machine.rl" {te = p;p--;{ found_syllable (myanmar_non_myanmar_cluster); }} break; -#line 528 "hb-ot-shaper-myanmar-machine.hh" +#line 538 "hb-ot-shaper-myanmar-machine.hh" } _again: @@ -533,7 +543,7 @@ _again: #line 1 "NONE" {ts = 0;} break; -#line 537 "hb-ot-shaper-myanmar-machine.hh" +#line 547 "hb-ot-shaper-myanmar-machine.hh" } if ( ++p != pe ) @@ -549,7 +559,7 @@ _again: } -#line 145 "hb-ot-shaper-myanmar-machine.rl" +#line 146 "hb-ot-shaper-myanmar-machine.rl" } diff --git a/src/hb-ot-shaper-myanmar-machine.rl b/src/hb-ot-shaper-myanmar-machine.rl index 93448d211..74cd42974 100644 --- a/src/hb-ot-shaper-myanmar-machine.rl +++ b/src/hb-ot-shaper-myanmar-machine.rl @@ -63,9 +63,9 @@ export DB = 3; # Dot below = OT_N export H = 4; export ZWNJ = 5; export ZWJ = 6; -export V = 8; # Visarga and Shan tones +export SM = 8; # Visarga and Shan tones export GB = 10; # = OT_PLACEHOLDER -export D = 10; # Digits except zero = GB +export DOTTEDCIRCLE = 11; export A = 9; export Ra = 15; export CS = 18; @@ -76,15 +76,16 @@ export VPre = 22; export VPst = 23; export As = 32; # Asat -export D0 = 33; # Digit zero -export MH = 34; # Medial -export MR = 35; # Medial -export MW = 36; # Medial -export MY = 37; # Medial -export PT = 38; # Pwo and other tones -export VS = 39; # Variation selectors -export P = 40; # Punctuation -export ML = 41; # Consonant medials +export D = 33; # Digits except zero +export D0 = 34; # Digit zero +export MH = 35; # Medial +export MR = 36; # Medial +export MW = 37; # Medial +export MY = 38; # Medial +export PT = 39; # Pwo and other tones +export VS = 40; # Variation selectors +export P = 41; # Punctuation +export ML = 42; # Consonant medials j = ZWJ|ZWNJ; # Joiners @@ -97,11 +98,11 @@ main_vowel_group = (VPre.VS?)* VAbv* VBlw* A* (DB As?)?; post_vowel_group = VPst MH? ML? As* VAbv* A* (DB As?)?; pwo_tone_group = PT A* DB? As?; -complex_syllable_tail = As* medial_group main_vowel_group post_vowel_group* pwo_tone_group* V* j?; +complex_syllable_tail = As* medial_group main_vowel_group post_vowel_group* pwo_tone_group* SM* j?; syllable_tail = (H (c|IV).VS?)* (H | complex_syllable_tail); -consonant_syllable = (k|CS)? (c|IV|D|GB).VS? syllable_tail; -punctuation_cluster = P V; +consonant_syllable = (k|CS)? (c|IV|D|GB|DOTTEDCIRCLE).VS? syllable_tail; +punctuation_cluster = P SM; broken_cluster = k? VS? syllable_tail; other = any; diff --git a/src/hb-ot-shaper-myanmar.cc b/src/hb-ot-shaper-myanmar.cc index 8d3360ab1..4ab0a5d64 100644 --- a/src/hb-ot-shaper-myanmar.cc +++ b/src/hb-ot-shaper-myanmar.cc @@ -68,98 +68,8 @@ set_myanmar_properties (hb_glyph_info_t &info) { hb_codepoint_t u = info.codepoint; unsigned int type = hb_indic_get_categories (u); - unsigned int cat = type & 0xFFu; - /* Myanmar - * https://docs.microsoft.com/en-us/typography/script-development/myanmar#analyze - */ - if (unlikely (hb_in_range (u, 0xFE00u, 0xFE0Fu))) - cat = M_Cat(VS); - - switch (u) - { - case 0x104Eu: - cat = M_Cat(C); /* The spec says C, IndicSyllableCategory doesn't have. */ - break; - - case 0x002Du: case 0x00A0u: case 0x00D7u: case 0x2012u: - case 0x2013u: case 0x2014u: case 0x2015u: case 0x2022u: - case 0x25CCu: case 0x25FBu: case 0x25FCu: case 0x25FDu: - case 0x25FEu: - cat = M_Cat(GB); - break; - - case 0x1004u: case 0x101Bu: case 0x105Au: - cat = M_Cat(Ra); - break; - - case 0x1032u: case 0x1036u: - cat = M_Cat(A); - break; - - case 0x1039u: - cat = M_Cat(H); - break; - - case 0x103Au: - cat = M_Cat(As); - break; - - case 0x1041u: case 0x1042u: case 0x1043u: case 0x1044u: - case 0x1045u: case 0x1046u: case 0x1047u: case 0x1048u: - case 0x1049u: case 0x1090u: case 0x1091u: case 0x1092u: - case 0x1093u: case 0x1094u: case 0x1095u: case 0x1096u: - case 0x1097u: case 0x1098u: case 0x1099u: - cat = M_Cat(D); - break; - - case 0x1040u: - cat = M_Cat(D); /* XXX The spec says D0, but Uniscribe doesn't seem to do. */ - break; - - case 0x103Eu: - cat = M_Cat(MH); - break; - - case 0x1060u: - cat = M_Cat(ML); - break; - - case 0x103Cu: - cat = M_Cat(MR); - break; - - case 0x103Du: case 0x1082u: - cat = M_Cat(MW); - break; - - case 0x103Bu: case 0x105Eu: case 0x105Fu: - cat = M_Cat(MY); - break; - - case 0x1063u: case 0x1064u: case 0x1069u: case 0x106Au: - case 0x106Bu: case 0x106Cu: case 0x106Du: case 0xAA7Bu: - cat = M_Cat(PT); - break; - - case 0x1038u: case 0x1087u: case 0x1088u: case 0x1089u: - case 0x108Au: case 0x108Bu: case 0x108Cu: case 0x108Du: - case 0x108Fu: case 0x109Au: case 0x109Bu: case 0x109Cu: - cat = M_Cat(V); - break; - - case 0x104Au: case 0x104Bu: - cat = M_Cat(P); - break; - - case 0xAA74u: case 0xAA75u: case 0xAA76u: - /* https://github.com/harfbuzz/harfbuzz/issues/218 */ - cat = M_Cat(C); - break; - } - - info.myanmar_category() = cat; - info.myanmar_position() = 0; /* Doesn't use the existing position info. */ + info.myanmar_category() = (myanmar_category_t) (type & 0xFFu); } static void @@ -365,7 +275,7 @@ reorder_myanmar (const hb_ot_shape_plan_t *plan, { hb_syllabic_insert_dotted_circles (font, buffer, myanmar_broken_cluster, - M_Cat(GB)); + M_Cat(DOTTEDCIRCLE)); foreach_syllable (buffer, start, end) reorder_syllable_myanmar (plan, font->face, buffer, start, end);