Add dotted circles to more broken clusters
authorDavid Corbett <corbett.dav@husky.neu.edu>
Wed, 1 May 2019 20:15:58 +0000 (16:15 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Wed, 1 May 2019 20:59:34 +0000 (13:59 -0700)
src/gen-use-table.py
src/hb-ot-shape-complex-myanmar-machine.hh
src/hb-ot-shape-complex-myanmar-machine.rl
src/hb-ot-shape-complex-use-machine.hh
src/hb-ot-shape-complex-use-machine.rl
src/hb-ot-shape-complex-use-table.cc

index 0060e10..9b1a00a 100755 (executable)
@@ -47,6 +47,14 @@ defaults = ('Other', 'Not_Applicable', 'Cn', 'No_Block')
 
 # TODO Characters that are not in Unicode Indic files, but used in USE
 data[0][0x034F] = defaults[0]
+data[0][0x1B61] = defaults[0]
+data[0][0x1B63] = defaults[0]
+data[0][0x1B64] = defaults[0]
+data[0][0x1B65] = defaults[0]
+data[0][0x1B66] = defaults[0]
+data[0][0x1B67] = defaults[0]
+data[0][0x1B69] = defaults[0]
+data[0][0x1B6A] = defaults[0]
 data[0][0x2060] = defaults[0]
 # TODO https://github.com/harfbuzz/harfbuzz/pull/1685
 data[0][0x1B5B] = 'Consonant_Placeholder'
@@ -222,6 +230,7 @@ def is_Word_Joiner(U, UISC, UGC):
 def is_OTHER(U, UISC, UGC):
        #SPEC-OUTDATED return UGC == Zs # or any other SCRIPT_COMMON characters
        return (UISC == Other
+               and not is_SYM(U, UISC, UGC)
                and not is_SYM_MOD(U, UISC, UGC)
                and not is_CGJ(U, UISC, UGC)
                and not is_Word_Joiner(U, UISC, UGC)
index 0c19e4f..d03832f 100644 (file)
@@ -38,9 +38,9 @@ static const unsigned char _myanmar_syllable_machine_trans_keys[] = {
        3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 16u, 3u, 29u, 3u, 29u, 3u, 29u, 
        3u, 29u, 3u, 29u, 3u, 30u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 5u, 29u, 
        5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u, 3u, 29u, 3u, 29u, 3u, 29u, 
-       3u, 29u, 3u, 30u, 3u, 29u, 1u, 32u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 
-       3u, 29u, 3u, 30u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 32u, 8u, 8u, 
-       0
+       3u, 29u, 1u, 16u, 3u, 30u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 
+       3u, 30u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 30u, 3u, 29u, 1u, 32u, 
+       1u, 32u, 8u, 8u, 0
 };
 
 static const char _myanmar_syllable_machine_key_spans[] = {
@@ -48,8 +48,9 @@ static const char _myanmar_syllable_machine_key_spans[] = {
        27, 27, 27, 27, 16, 27, 27, 27, 
        27, 27, 28, 27, 27, 27, 27, 25, 
        4, 25, 23, 21, 21, 27, 27, 27, 
-       27, 28, 27, 32, 27, 27, 27, 27, 
-       27, 28, 27, 27, 27, 27, 32, 1
+       27, 16, 28, 27, 27, 27, 27, 27, 
+       28, 27, 27, 27, 27, 28, 27, 32, 
+       32, 1
 };
 
 static const short _myanmar_syllable_machine_index_offsets[] = {
@@ -57,8 +58,9 @@ static const short _myanmar_syllable_machine_index_offsets[] = {
        187, 215, 243, 271, 299, 316, 344, 372, 
        400, 428, 456, 485, 513, 541, 569, 597, 
        623, 628, 654, 678, 700, 722, 750, 778, 
-       806, 834, 863, 891, 924, 952, 980, 1008, 
-       1036, 1064, 1093, 1121, 1149, 1177, 1205, 1238
+       806, 834, 851, 880, 908, 936, 964, 992, 
+       1020, 1049, 1077, 1105, 1133, 1161, 1190, 1218, 
+       1251, 1284
 };
 
 static const char _myanmar_syllable_machine_indicies[] = {
@@ -136,108 +138,115 @@ static const char _myanmar_syllable_machine_indicies[] = {
        21, 22, 23, 24, 24, 21, 25, 21, 
        26, 21, 21, 21, 21, 21, 21, 21, 
        27, 21, 21, 28, 29, 30, 31, 32, 
-       33, 34, 35, 36, 21, 3, 3, 44, 
+       33, 34, 35, 36, 21, 45, 45, 44, 
        5, 44, 44, 44, 44, 44, 44, 44, 
-       44, 44, 45, 44, 44, 44, 44, 44, 
-       44, 14, 44, 44, 44, 18, 44, 3
-       3, 44, 5, 44, 3, 3, 44, 5, 
+       44, 44, 46, 44, 44, 44, 44, 44, 
+       44, 14, 44, 44, 44, 18, 44, 45
+       45, 44, 5, 44, 45, 45, 44, 5, 
        44, 44, 44, 44, 44, 44, 44, 44, 
        44, 44, 44, 44, 44, 44, 44, 44, 
-       14, 44, 44, 44, 18, 44, 46, 44, 
-       3, 3, 44, 5, 44, 14, 44, 44, 
-       44, 44, 44, 44, 44, 47, 44, 44, 
-       44, 44, 44, 44, 14, 44, 3, 3
+       14, 44, 44, 44, 18, 44, 47, 44, 
+       45, 45, 44, 5, 44, 14, 44, 44, 
+       44, 44, 44, 44, 44, 48, 44, 44, 
+       44, 44, 44, 44, 14, 44, 45, 45
        44, 5, 44, 44, 44, 44, 44, 44, 
-       44, 44, 44, 47, 44, 44, 44, 44, 
-       44, 44, 14, 44, 3, 3, 44, 5, 
+       44, 44, 44, 48, 44, 44, 44, 44, 
+       44, 44, 14, 44, 45, 45, 44, 5, 
        44, 44, 44, 44, 44, 44, 44, 44, 
        44, 44, 44, 44, 44, 44, 44, 44, 
-       14, 44, 2, 44, 3, 3, 44, 5, 
+       14, 44, 2, 44, 45, 45, 44, 5, 
        44, 6, 44, 44, 44, 44, 44, 44, 
-       44, 48, 44, 44, 48, 44, 44, 44, 
-       14, 49, 44, 44, 18, 44, 2, 44, 
-       3, 3, 44, 5, 44, 6, 44, 44, 
+       44, 49, 44, 44, 49, 44, 44, 44, 
+       14, 50, 44, 44, 18, 44, 2, 44, 
+       45, 45, 44, 5, 44, 6, 44, 44, 
        44, 44, 44, 44, 44, 44, 44, 44, 
        44, 44, 44, 44, 14, 44, 44, 44, 
-       18, 44, 2, 44, 3, 3, 44, 5, 
+       18, 44, 2, 44, 45, 45, 44, 5, 
        44, 6, 44, 44, 44, 44, 44, 44, 
-       44, 48, 44, 44, 44, 44, 44, 44, 
-       14, 49, 44, 44, 18, 44, 2, 44, 
-       3, 3, 44, 5, 44, 6, 44, 44, 
+       44, 49, 44, 44, 44, 44, 44, 44, 
+       14, 50, 44, 44, 18, 44, 2, 44, 
+       45, 45, 44, 5, 44, 6, 44, 44, 
        44, 44, 44, 44, 44, 44, 44, 44, 
-       44, 44, 44, 44, 14, 49, 44, 44, 
-       18, 44, 22, 23, 24, 24, 21, 25, 
-       21, 26, 21, 21, 21, 21, 21, 21, 
-       21, 50, 21, 21, 28, 29, 30, 31, 
-       32, 33, 34, 35, 36, 37, 21, 22, 
-       51, 24, 24, 21, 25, 21, 26, 21, 
-       21, 21, 21, 21, 21, 21, 27, 21, 
-       21, 28, 29, 30, 31, 32, 33, 34, 
-       35, 36, 21, 1, 1, 2, 3, 3, 
-       3, 44, 5, 44, 6, 1, 44, 44, 
-       44, 44, 1, 44, 8, 44, 44, 10, 
-       11, 12, 13, 14, 15, 16, 17, 18, 
-       19, 44, 1, 44, 2, 44, 3, 3, 
-       44, 5, 44, 6, 44, 44, 44, 44, 
-       44, 44, 44, 8, 44, 44, 10, 11, 
-       12, 13, 14, 15, 16, 17, 18, 44, 
-       2, 44, 3, 3, 44, 5, 44, 6, 
-       44, 44, 44, 44, 44, 44, 44, 52, 
-       44, 44, 44, 44, 44, 44, 14, 15, 
-       16, 17, 18, 44, 2, 44, 3, 3, 
-       44, 5, 44, 6, 44, 44, 44, 44, 
+       44, 44, 44, 44, 14, 50, 44, 44, 
+       18, 44, 51, 51, 44, 44, 44, 44, 
        44, 44, 44, 44, 44, 44, 44, 44, 
+       44, 51, 44, 2, 3, 45, 45, 44, 
+       5, 44, 6, 44, 44, 44, 44, 44, 
+       44, 44, 8, 44, 44, 10, 11, 12, 
+       13, 14, 15, 16, 17, 18, 19, 44, 
+       2, 44, 45, 45, 44, 5, 44, 6, 
+       44, 44, 44, 44, 44, 44, 44, 8, 
+       44, 44, 10, 11, 12, 13, 14, 15, 
+       16, 17, 18, 44, 2, 44, 45, 45, 
+       44, 5, 44, 6, 44, 44, 44, 44, 
+       44, 44, 44, 52, 44, 44, 44, 44, 
        44, 44, 14, 15, 16, 17, 18, 44, 
-       2, 44, 3, 3, 44, 5, 44, 6, 
+       2, 44, 45, 45, 44, 5, 44, 6, 
        44, 44, 44, 44, 44, 44, 44, 44, 
        44, 44, 44, 44, 44, 44, 14, 15, 
-       16, 44, 18, 44, 2, 44, 3, 3
+       16, 17, 18, 44, 2, 44, 45, 45
        44, 5, 44, 6, 44, 44, 44, 44, 
        44, 44, 44, 44, 44, 44, 44, 44, 
-       44, 44, 14, 44, 16, 44, 18, 44, 
-       2, 44, 3, 3, 44, 5, 44, 6, 
+       44, 44, 14, 15, 16, 44, 18, 44, 
+       2, 44, 45, 45, 44, 5, 44, 6, 
        44, 44, 44, 44, 44, 44, 44, 44, 
-       44, 44, 44, 44, 44, 44, 14, 15
-       16, 17, 18, 52, 44, 2, 44, 3
-       3, 44, 5, 44, 6, 44, 44, 44, 
-       44, 44, 44, 44, 52, 44, 44, 10
-       44, 12, 44, 14, 15, 16, 17, 18
-       44, 2, 44, 3, 3, 44, 5, 44, 
+       44, 44, 44, 44, 44, 44, 14, 44
+       16, 44, 18, 44, 2, 44, 45, 45
+       44, 5, 44, 6, 44, 44, 44, 44, 
+       44, 44, 44, 44, 44, 44, 44, 44
+       44, 44, 14, 15, 16, 17, 18, 52
+       44, 2, 44, 45, 45, 44, 5, 44, 
        6, 44, 44, 44, 44, 44, 44, 44, 
-       52, 44, 44, 10, 44, 44, 44, 14, 
-       15, 16, 17, 18, 44, 2, 44, 3
-       3, 44, 5, 44, 6, 44, 44, 44, 
+       52, 44, 44, 10, 44, 12, 44, 14, 
+       15, 16, 17, 18, 44, 2, 44, 45
+       45, 44, 5, 44, 6, 44, 44, 44, 
        44, 44, 44, 44, 52, 44, 44, 10, 
-       11, 12, 44, 14, 15, 16, 17, 18, 
-       44, 2, 3, 3, 3, 44, 5, 44, 
+       44, 44, 44, 14, 15, 16, 17, 18, 
+       44, 2, 44, 45, 45, 44, 5, 44, 
        6, 44, 44, 44, 44, 44, 44, 44, 
-       8, 44, 44, 10, 11, 12, 13, 14, 
-       15, 16, 17, 18, 44, 1, 1, 53, 
-       53, 53, 53, 53, 53, 53, 53, 1, 
-       53, 53, 53, 53, 1, 53, 53, 53, 
-       53, 53, 53, 53, 53, 53, 53, 53, 
-       53, 53, 53, 53, 1, 53, 54, 53, 
-       0
+       52, 44, 44, 10, 11, 12, 44, 14, 
+       15, 16, 17, 18, 44, 2, 3, 45, 
+       45, 44, 5, 44, 6, 44, 44, 44, 
+       44, 44, 44, 44, 8, 44, 44, 10, 
+       11, 12, 13, 14, 15, 16, 17, 18, 
+       44, 22, 23, 24, 24, 21, 25, 21, 
+       26, 21, 21, 21, 21, 21, 21, 21, 
+       53, 21, 21, 28, 29, 30, 31, 32, 
+       33, 34, 35, 36, 37, 21, 22, 54, 
+       24, 24, 21, 25, 21, 26, 21, 21, 
+       21, 21, 21, 21, 21, 27, 21, 21, 
+       28, 29, 30, 31, 32, 33, 34, 35, 
+       36, 21, 1, 1, 2, 3, 45, 45, 
+       44, 5, 44, 6, 1, 44, 44, 44, 
+       44, 1, 44, 8, 44, 44, 10, 11, 
+       12, 13, 14, 15, 16, 17, 18, 19, 
+       44, 1, 44, 1, 1, 55, 55, 55, 
+       55, 55, 55, 55, 55, 1, 55, 55, 
+       55, 55, 1, 55, 55, 55, 55, 55, 
+       55, 55, 55, 55, 55, 55, 55, 55, 
+       55, 55, 1, 55, 56, 55, 0
 };
 
 static const char _myanmar_syllable_machine_trans_targs[] = {
-       0, 1, 23, 0, 0, 24, 30, 33
-       36, 46, 37, 42, 43, 44, 26, 39
-       40, 41, 29, 45, 47, 0, 2, 12, 
+       0, 1, 23, 33, 0, 24, 30, 45
+       35, 48, 36, 41, 42, 43, 26, 38
+       39, 40, 29, 44, 49, 0, 2, 12, 
        0, 3, 9, 13, 14, 19, 20, 21, 
        5, 16, 17, 18, 8, 22, 4, 6, 
-       7, 10, 11, 15, 0, 25, 27, 28, 
-       31, 32, 34, 35, 38, 0, 0
+       7, 10, 11, 15, 0, 0, 25, 27, 
+       28, 31, 32, 34, 37, 46, 47, 0, 
+       0
 };
 
 static const char _myanmar_syllable_machine_trans_actions[] = {
-       3, 0, 0, 4, 5, 0, 0, 0, 
+       3, 0, 0, 0, 4, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 6, 0, 0, 
-       7, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 5, 0, 0, 
+       6, 0, 0, 0, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 8, 0, 0, 0, 
-       0, 0, 0, 0, 0, 9, 10
+       0, 0, 0, 0, 7, 8, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 9, 
+       10
 };
 
 static const char _myanmar_syllable_machine_to_state_actions[] = {
@@ -246,7 +255,8 @@ static const char _myanmar_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
 };
 
 static const char _myanmar_syllable_machine_from_state_actions[] = {
@@ -255,7 +265,8 @@ static const char _myanmar_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
 };
 
 static const short _myanmar_syllable_machine_eof_trans[] = {
@@ -263,8 +274,9 @@ static const short _myanmar_syllable_machine_eof_trans[] = {
        22, 22, 22, 22, 22, 22, 22, 22, 
        22, 22, 22, 22, 22, 22, 22, 45, 
        45, 45, 45, 45, 45, 45, 45, 45, 
-       45, 22, 22, 45, 45, 45, 45, 45, 
-       45, 45, 45, 45, 45, 45, 54, 54
+       45, 45, 45, 45, 45, 45, 45, 45, 
+       45, 45, 45, 45, 45, 22, 22, 45, 
+       56, 56
 };
 
 static const int myanmar_syllable_machine_start = 0;
@@ -297,7 +309,7 @@ find_syllables (hb_buffer_t *buffer)
   int cs;
   hb_glyph_info_t *info = buffer->info;
   
-#line 301 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 313 "hb-ot-shape-complex-myanmar-machine.hh"
        {
        cs = myanmar_syllable_machine_start;
        ts = 0;
@@ -313,7 +325,7 @@ find_syllables (hb_buffer_t *buffer)
 
   unsigned int syllable_serial = 1;
   
-#line 317 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 329 "hb-ot-shape-complex-myanmar-machine.hh"
        {
        int _slen;
        int _trans;
@@ -327,7 +339,7 @@ _resume:
 #line 1 "NONE"
        {ts = p;}
        break;
-#line 331 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 343 "hb-ot-shape-complex-myanmar-machine.hh"
        }
 
        _keys = _myanmar_syllable_machine_trans_keys + (cs<<1);
@@ -345,11 +357,11 @@ _eof_trans:
                goto _again;
 
        switch ( _myanmar_syllable_machine_trans_actions[_trans] ) {
-       case 7:
+       case 6:
 #line 86 "hb-ot-shape-complex-myanmar-machine.rl"
        {te = p+1;{ found_syllable (consonant_syllable); }}
        break;
-       case 5:
+       case 4:
 #line 87 "hb-ot-shape-complex-myanmar-machine.rl"
        {te = p+1;{ found_syllable (non_myanmar_cluster); }}
        break;
@@ -357,7 +369,7 @@ _eof_trans:
 #line 88 "hb-ot-shape-complex-myanmar-machine.rl"
        {te = p+1;{ found_syllable (punctuation_cluster); }}
        break;
-       case 4:
+       case 8:
 #line 89 "hb-ot-shape-complex-myanmar-machine.rl"
        {te = p+1;{ found_syllable (broken_cluster); }}
        break;
@@ -365,11 +377,11 @@ _eof_trans:
 #line 90 "hb-ot-shape-complex-myanmar-machine.rl"
        {te = p+1;{ found_syllable (non_myanmar_cluster); }}
        break;
-       case 6:
+       case 5:
 #line 86 "hb-ot-shape-complex-myanmar-machine.rl"
        {te = p;p--;{ found_syllable (consonant_syllable); }}
        break;
-       case 8:
+       case 7:
 #line 89 "hb-ot-shape-complex-myanmar-machine.rl"
        {te = p;p--;{ found_syllable (broken_cluster); }}
        break;
@@ -377,7 +389,7 @@ _eof_trans:
 #line 90 "hb-ot-shape-complex-myanmar-machine.rl"
        {te = p;p--;{ found_syllable (non_myanmar_cluster); }}
        break;
-#line 381 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 393 "hb-ot-shape-complex-myanmar-machine.hh"
        }
 
 _again:
@@ -386,7 +398,7 @@ _again:
 #line 1 "NONE"
        {ts = 0;}
        break;
-#line 390 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 402 "hb-ot-shape-complex-myanmar-machine.hh"
        }
 
        if ( ++p != pe )
index 7845a86..c4e300f 100644 (file)
@@ -75,9 +75,9 @@ post_vowel_group = VPst MH? 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?;
-syllable_tail = (H | complex_syllable_tail);
+syllable_tail = (H (c|IV).VS?)* (H | complex_syllable_tail);
 
-consonant_syllable =   (k|CS)? (c|IV|D|GB).VS? (H (c|IV).VS?)* syllable_tail;
+consonant_syllable =   (k|CS)? (c|IV|D|GB).VS? syllable_tail;
 punctuation_cluster =  P V;
 broken_cluster =       k? VS? syllable_tail;
 other =                        any;
index c9410e4..f83e09f 100644 (file)
 
 #line 38 "hb-ot-shape-complex-use-machine.hh"
 static const unsigned char _use_syllable_machine_trans_keys[] = {
-       12u, 44u, 1u, 15u, 1u, 1u, 12u, 44u, 0u, 44u, 21u, 21u, 8u, 44u, 8u, 44u,
-       1u, 15u, 1u, 1u, 8u, 44u, 8u, 44u, 8u, 39u, 8u, 26u, 8u, 26u, 8u, 26u,
-       8u, 39u, 8u, 39u, 8u, 39u, 8u, 44u, 8u, 44u, 8u, 44u, 8u, 44u, 8u, 44u,
-       8u, 44u, 8u, 44u, 8u, 44u, 1u, 39u, 8u, 44u, 13u, 21u, 4u, 4u, 13u, 13u,
-       8u, 44u, 8u, 44u, 8u, 44u, 8u, 39u, 8u, 26u, 8u, 26u, 8u, 26u, 8u, 39u,
-       8u, 39u, 8u, 39u, 8u, 44u, 8u, 44u, 8u, 44u, 8u, 44u, 8u, 44u, 8u, 44u,
-       8u, 44u, 8u, 44u, 1u, 39u, 1u, 15u, 12u, 44u, 1u, 44u, 8u, 44u, 21u, 42u,
-       41u, 42u, 42u, 42u, 1u, 5u, 0
+       12u, 44u, 1u, 15u, 1u, 1u, 12u, 44u, 0u, 44u, 21u, 21u, 8u, 44u, 8u, 44u, 
+       1u, 15u, 1u, 1u, 8u, 44u, 8u, 44u, 8u, 39u, 8u, 26u, 8u, 26u, 8u, 26u, 
+       8u, 39u, 8u, 39u, 8u, 39u, 8u, 44u, 8u, 44u, 8u, 44u, 8u, 44u, 8u, 44u, 
+       8u, 44u, 8u, 44u, 8u, 44u, 1u, 39u, 8u, 44u, 13u, 21u, 4u, 4u, 13u, 13u, 
+       8u, 44u, 8u, 44u, 41u, 42u, 42u, 42u, 8u, 44u, 8u, 44u, 8u, 44u, 8u, 39u, 
+       8u, 26u, 8u, 26u, 8u, 26u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 44u, 8u, 44u, 
+       8u, 44u, 8u, 44u, 8u, 44u, 8u, 44u, 8u, 44u, 8u, 44u, 1u, 39u, 1u, 15u, 
+       4u, 4u, 13u, 21u, 13u, 13u, 12u, 44u, 1u, 44u, 8u, 44u, 41u, 42u, 42u, 42u, 
+       21u, 42u, 1u, 5u, 0
 };
 
 static const char _use_syllable_machine_key_spans[] = {
-       33, 15, 1, 33, 45, 1, 37, 37,
-       15, 1, 37, 37, 32, 19, 19, 19,
-       32, 32, 32, 37, 37, 37, 37, 37,
-       37, 37, 37, 39, 37, 9, 1, 1,
-       37, 37, 37, 32, 19, 19, 19, 32,
-       32, 32, 37, 37, 37, 37, 37, 37,
-       37, 37, 39, 15, 33, 44, 37, 22,
-       2, 1, 5
+       33, 15, 1, 33, 45, 1, 37, 37, 
+       15, 1, 37, 37, 32, 19, 19, 19, 
+       32, 32, 32, 37, 37, 37, 37, 37, 
+       37, 37, 37, 39, 37, 9, 1, 1, 
+       37, 37, 2, 1, 37, 37, 37, 32, 
+       19, 19, 19, 32, 32, 32, 37, 37, 
+       37, 37, 37, 37, 37, 37, 39, 15, 
+       1, 9, 1, 33, 44, 37, 2, 1, 
+       22, 5
 };
 
 static const short _use_syllable_machine_index_offsets[] = {
-       0, 34, 50, 52, 86, 132, 134, 172,
-       210, 226, 228, 266, 304, 337, 357, 377,
-       397, 430, 463, 496, 534, 572, 610, 648,
-       686, 724, 762, 800, 840, 878, 888, 890,
-       892, 930, 968, 1006, 1039, 1059, 1079, 1099,
-       1132, 1165, 1198, 1236, 1274, 1312, 1350, 1388,
-       1426, 1464, 1502, 1542, 1558, 1592, 1637, 1675,
-       1698, 1701, 1703
+       0, 34, 50, 52, 86, 132, 134, 172, 
+       210, 226, 228, 266, 304, 337, 357, 377, 
+       397, 430, 463, 496, 534, 572, 610, 648, 
+       686, 724, 762, 800, 840, 878, 888, 890, 
+       892, 930, 968, 971, 973, 1011, 1049, 1087, 
+       1120, 1140, 1160, 1180, 1213, 1246, 1279, 1317, 
+       1355, 1393, 1431, 1469, 1507, 1545, 1583, 1623, 
+       1639, 1641, 1651, 1653, 1687, 1732, 1770, 1773, 
+       1775, 1798
 };
 
 static const char _use_syllable_machine_indicies[] = {
-       1, 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,
+       1, 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, 
        1, 0, 3, 2, 2, 2, 2, 2, 
        2, 2, 2, 2, 2, 2, 2, 2, 
-       4, 2, 3, 2, 6, 5, 5, 5,
-       5, 5, 5, 5, 5, 5, 5, 5,
-       5, 5, 5, 5, 5, 5, 5, 5,
-       5, 5, 5, 5, 5, 5, 5, 5,
-       5, 5, 5, 5, 6, 5, 7, 8,
-       9, 7, 10, 8, 9, 9, 11, 9, 
-       9, 3, 12, 9, 9, 13, 7, 7, 
-       14, 15, 9, 9, 16, 17, 18, 19, 
-       20, 21, 22, 16, 23, 24, 25, 26, 
-       27, 28, 9, 29, 30, 31, 9, 9, 
-       9, 32, 33, 9, 35, 34, 37, 36,
-       36, 38, 1, 36, 36, 39, 36, 36,
-       36, 36, 36, 40, 41, 42, 43, 44,
-       45, 46, 47, 41, 48, 40, 49, 50,
-       51, 52, 36, 53, 54, 55, 36, 36,
-       36, 36, 56, 36, 37, 36, 36, 38,
-       1, 36, 36, 39, 36, 36, 36, 36,
-       36, 57, 41, 42, 43, 44, 45, 46,
-       47, 41, 48, 49, 49, 50, 51, 52,
-       36, 53, 54, 55, 36, 36, 36, 36,
-       56, 36, 38, 58, 58, 58, 58, 58,
-       58, 58, 58, 58, 58, 58, 58, 58,
-       59, 58, 38, 58, 37, 36, 36, 38,
-       1, 36, 36, 39, 36, 36, 36, 36,
-       36, 36, 41, 42, 43, 44, 45, 46,
-       47, 41, 48, 49, 49, 50, 51, 52,
-       36, 53, 54, 55, 36, 36, 36, 36,
-       56, 36, 37, 36, 36, 36, 36, 36,
-       36, 36, 36, 36, 36, 36, 36, 36,
-       41, 42, 43, 44, 45, 36, 36, 36,
-       36, 36, 36, 50, 51, 52, 36, 53,
-       54, 55, 36, 36, 36, 36, 42, 36,
-       37, 36, 36, 36, 36, 36, 36, 36,
-       36, 36, 36, 36, 36, 36, 36, 42,
-       43, 44, 45, 36, 36, 36, 36, 36,
-       36, 36, 36, 36, 36, 53, 54, 55,
-       36, 37, 36, 36, 36, 36, 36, 36,
-       36, 36, 36, 36, 36, 36, 36, 36,
-       36, 43, 44, 45, 36, 37, 36, 36,
-       36, 36, 36, 36, 36, 36, 36, 36,
-       36, 36, 36, 36, 36, 36, 44, 45,
-       36, 37, 36, 36, 36, 36, 36, 36,
-       36, 36, 36, 36, 36, 36, 36, 36,
-       36, 36, 36, 45, 36, 37, 36, 36,
-       36, 36, 36, 36, 36, 36, 36, 36,
-       36, 36, 36, 36, 36, 43, 44, 45,
-       36, 36, 36, 36, 36, 36, 36, 36,
-       36, 36, 53, 54, 55, 36, 37, 36,
-       36, 36, 36, 36, 36, 36, 36, 36,
-       36, 36, 36, 36, 36, 36, 43, 44,
-       45, 36, 36, 36, 36, 36, 36, 36,
-       36, 36, 36, 36, 54, 55, 36, 37,
-       36, 36, 36, 36, 36, 36, 36, 36,
-       36, 36, 36, 36, 36, 36, 36, 43,
-       44, 45, 36, 36, 36, 36, 36, 36,
-       36, 36, 36, 36, 36, 36, 55, 36,
-       37, 36, 36, 36, 36, 36, 36, 36,
-       36, 36, 36, 36, 36, 36, 36, 42,
-       43, 44, 45, 36, 36, 36, 36, 36,
-       36, 50, 51, 52, 36, 53, 54, 55,
-       36, 36, 36, 36, 42, 36, 37, 36,
-       36, 36, 36, 36, 36, 36, 36, 36,
-       36, 36, 36, 36, 36, 42, 43, 44,
-       45, 36, 36, 36, 36, 36, 36, 36,
-       51, 52, 36, 53, 54, 55, 36, 36,
-       36, 36, 42, 36, 37, 36, 36, 36,
-       36, 36, 36, 36, 36, 36, 36, 36,
-       36, 36, 36, 42, 43, 44, 45, 36,
-       36, 36, 36, 36, 36, 36, 36, 52,
-       36, 53, 54, 55, 36, 36, 36, 36,
-       42, 36, 37, 36, 36, 36, 36, 36,
-       36, 36, 36, 36, 36, 36, 36, 36,
-       41, 42, 43, 44, 45, 36, 47, 41,
-       36, 36, 36, 50, 51, 52, 36, 53,
-       54, 55, 36, 36, 36, 36, 42, 36,
-       37, 36, 36, 36, 36, 36, 36, 36,
-       36, 36, 36, 36, 36, 36, 41, 42,
-       43, 44, 45, 36, 60, 41, 36, 36,
-       36, 50, 51, 52, 36, 53, 54, 55,
-       36, 36, 36, 36, 42, 36, 37, 36,
-       36, 36, 36, 36, 36, 36, 36, 36,
-       36, 36, 36, 36, 41, 42, 43, 44,
-       45, 36, 36, 41, 36, 36, 36, 50,
-       51, 52, 36, 53, 54, 55, 36, 36,
-       36, 36, 42, 36, 37, 36, 36, 36,
-       36, 36, 36, 36, 36, 36, 36, 36,
-       36, 36, 41, 42, 43, 44, 45, 46,
-       47, 41, 36, 36, 36, 50, 51, 52,
-       36, 53, 54, 55, 36, 36, 36, 36,
-       42, 36, 37, 36, 36, 38, 1, 36,
-       36, 39, 36, 36, 36, 36, 36, 36,
-       41, 42, 43, 44, 45, 46, 47, 41,
-       48, 36, 49, 50, 51, 52, 36, 53,
-       54, 55, 36, 36, 36, 36, 56, 36,
-       38, 58, 58, 58, 58, 58, 58, 37,
-       58, 58, 58, 58, 58, 58, 59, 58,
-       58, 58, 58, 58, 58, 58, 42, 43,
-       44, 45, 58, 58, 58, 58, 58, 58,
-       58, 58, 58, 58, 53, 54, 55, 58,
-       37, 36, 36, 38, 1, 36, 36, 39,
-       36, 36, 36, 36, 36, 36, 41, 42,
-       43, 44, 45, 46, 47, 41, 48, 40,
-       49, 50, 51, 52, 36, 53, 54, 55,
-       36, 36, 36, 36, 56, 36, 62, 61,
-       61, 61, 61, 61, 61, 61, 63, 61,
-       10, 64, 62, 61, 11, 65, 65, 3,
-       6, 65, 65, 66, 65, 65, 65, 65,
-       65, 67, 16, 17, 18, 19, 20, 21,
-       22, 16, 23, 25, 25, 26, 27, 28,
-       65, 29, 30, 31, 65, 65, 65, 65,
-       33, 65, 11, 65, 65, 3, 6, 65,
-       65, 66, 65, 65, 65, 65, 65, 65,
-       16, 17, 18, 19, 20, 21, 22, 16, 
-       23, 25, 25, 26, 27, 28, 65, 29,
-       30, 31, 65, 65, 65, 65, 33, 65,
-       11, 65, 65, 65, 65, 65, 65, 65,
-       65, 65, 65, 65, 65, 65, 16, 17,
-       18, 19, 20, 65, 65, 65, 65, 65,
-       65, 26, 27, 28, 65, 29, 30, 31,
-       65, 65, 65, 65, 17, 65, 11, 65,
-       65, 65, 65, 65, 65, 65, 65, 65,
-       65, 65, 65, 65, 65, 17, 18, 19,
-       20, 65, 65, 65, 65, 65, 65, 65,
-       65, 65, 65, 29, 30, 31, 65, 11,
-       65, 65, 65, 65, 65, 65, 65, 65,
-       65, 65, 65, 65, 65, 65, 65, 18,
-       19, 20, 65, 11, 65, 65, 65, 65,
-       65, 65, 65, 65, 65, 65, 65, 65,
-       65, 65, 65, 65, 19, 20, 65, 11,
-       65, 65, 65, 65, 65, 65, 65, 65,
-       65, 65, 65, 65, 65, 65, 65, 65,
-       65, 20, 65, 11, 65, 65, 65, 65,
-       65, 65, 65, 65, 65, 65, 65, 65,
-       65, 65, 65, 18, 19, 20, 65, 65,
-       65, 65, 65, 65, 65, 65, 65, 65,
-       29, 30, 31, 65, 11, 65, 65, 65,
-       65, 65, 65, 65, 65, 65, 65, 65,
-       65, 65, 65, 65, 18, 19, 20, 65,
-       65, 65, 65, 65, 65, 65, 65, 65,
-       65, 65, 30, 31, 65, 11, 65, 65,
-       65, 65, 65, 65, 65, 65, 65, 65,
-       65, 65, 65, 65, 65, 18, 19, 20,
-       65, 65, 65, 65, 65, 65, 65, 65,
-       65, 65, 65, 65, 31, 65, 11, 65,
-       65, 65, 65, 65, 65, 65, 65, 65,
-       65, 65, 65, 65, 65, 17, 18, 19,
-       20, 65, 65, 65, 65, 65, 65, 26,
-       27, 28, 65, 29, 30, 31, 65, 65,
-       65, 65, 17, 65, 11, 65, 65, 65,
-       65, 65, 65, 65, 65, 65, 65, 65,
-       65, 65, 65, 17, 18, 19, 20, 65,
-       65, 65, 65, 65, 65, 65, 27, 28,
-       65, 29, 30, 31, 65, 65, 65, 65,
-       17, 65, 11, 65, 65, 65, 65, 65,
-       65, 65, 65, 65, 65, 65, 65, 65,
-       65, 17, 18, 19, 20, 65, 65, 65,
-       65, 65, 65, 65, 65, 28, 65, 29,
-       30, 31, 65, 65, 65, 65, 17, 65,
-       11, 65, 65, 65, 65, 65, 65, 65,
-       65, 65, 65, 65, 65, 65, 16, 17,
-       18, 19, 20, 65, 22, 16, 65, 65,
-       65, 26, 27, 28, 65, 29, 30, 31,
-       65, 65, 65, 65, 17, 65, 11, 65,
-       65, 65, 65, 65, 65, 65, 65, 65,
-       65, 65, 65, 65, 16, 17, 18, 19,
-       20, 65, 68, 16, 65, 65, 65, 26,
-       27, 28, 65, 29, 30, 31, 65, 65,
-       65, 65, 17, 65, 11, 65, 65, 65,
-       65, 65, 65, 65, 65, 65, 65, 65,
-       65, 65, 16, 17, 18, 19, 20, 65,
-       65, 16, 65, 65, 65, 26, 27, 28,
-       65, 29, 30, 31, 65, 65, 65, 65,
-       17, 65, 11, 65, 65, 65, 65, 65,
-       65, 65, 65, 65, 65, 65, 65, 65,
-       16, 17, 18, 19, 20, 21, 22, 16,
-       65, 65, 65, 26, 27, 28, 65, 29,
-       30, 31, 65, 65, 65, 65, 17, 65,
-       11, 65, 65, 3, 6, 65, 65, 66,
-       65, 65, 65, 65, 65, 65, 16, 17,
-       18, 19, 20, 21, 22, 16, 23, 65,
-       25, 26, 27, 28, 65, 29, 30, 31,
-       65, 65, 65, 65, 33, 65, 3, 65,
-       65, 65, 65, 65, 65, 11, 65, 65,
-       65, 65, 65, 65, 4, 65, 65, 65,
-       65, 65, 65, 65, 17, 18, 19, 20,
-       65, 65, 65, 65, 65, 65, 65, 65,
-       65, 65, 29, 30, 31, 65, 3, 69,
-       69, 69, 69, 69, 69, 69, 69, 69,
-       69, 69, 69, 69, 4, 69, 6, 69,
-       69, 69, 69, 69, 69, 69, 69, 69,
-       69, 69, 69, 69, 69, 69, 69, 69,
-       69, 69, 69, 69, 69, 69, 69, 69,
-       69, 69, 69, 69, 69, 69, 6, 69,
-       8, 65, 65, 65, 8, 65, 65, 11,
-       65, 65, 3, 6, 65, 65, 66, 65,
-       65, 65, 65, 65, 65, 16, 17, 18,
-       19, 20, 21, 22, 16, 23, 24, 25, 
-       26, 27, 28, 65, 29, 30, 31, 65,
-       65, 65, 65, 33, 65, 11, 65, 65,
-       3, 6, 65, 65, 66, 65, 65, 65,
-       65, 65, 65, 16, 17, 18, 19, 20,
-       21, 22, 16, 23, 24, 25, 26, 27,
-       28, 65, 29, 30, 31, 65, 65, 65,
-       65, 33, 65, 71, 70, 70, 70, 70,
-       70, 70, 70, 70, 70, 70, 70, 70,
-       70, 70, 70, 70, 70, 70, 70, 71,
-       72, 70, 71, 72, 70, 72, 70, 8,
-       69, 69, 69, 8, 69, 0
+       4, 2, 3, 2, 6, 5, 5, 5, 
+       5, 5, 5, 5, 5, 5, 5, 5, 
+       5, 5, 5, 5, 5, 5, 5, 5, 
+       5, 5, 5, 5, 5, 5, 5, 5, 
+       5, 5, 5, 5, 6, 5, 7, 8, 
+       9, 7, 10, 11, 9, 9, 12, 9, 
+       9, 3, 13, 14, 9, 15, 7, 7, 
+       16, 17, 9, 9, 18, 19, 20, 21, 
+       22, 23, 24, 18, 25, 26, 27, 28, 
+       29, 30, 9, 31, 32, 33, 9, 34, 
+       35, 36, 37, 9, 39, 38, 41, 40, 
+       40, 42, 1, 40, 40, 43, 40, 40, 
+       40, 40, 40, 44, 45, 46, 47, 48, 
+       49, 50, 51, 45, 52, 44, 53, 54, 
+       55, 56, 40, 57, 58, 59, 40, 40, 
+       40, 40, 60, 40, 41, 40, 40, 42, 
+       1, 40, 40, 43, 40, 40, 40, 40, 
+       40, 61, 45, 46, 47, 48, 49, 50, 
+       51, 45, 52, 53, 53, 54, 55, 56, 
+       40, 57, 58, 59, 40, 40, 40, 40, 
+       60, 40, 42, 62, 62, 62, 62, 62, 
+       62, 62, 62, 62, 62, 62, 62, 62, 
+       63, 62, 42, 62, 41, 40, 40, 42, 
+       1, 40, 40, 43, 40, 40, 40, 40, 
+       40, 40, 45, 46, 47, 48, 49, 50, 
+       51, 45, 52, 53, 53, 54, 55, 56, 
+       40, 57, 58, 59, 40, 40, 40, 40, 
+       60, 40, 41, 40, 40, 40, 40, 40, 
+       40, 40, 40, 40, 40, 40, 40, 40, 
+       45, 46, 47, 48, 49, 40, 40, 40, 
+       40, 40, 40, 54, 55, 56, 40, 57, 
+       58, 59, 40, 40, 40, 40, 46, 40, 
+       41, 40, 40, 40, 40, 40, 40, 40, 
+       40, 40, 40, 40, 40, 40, 40, 46, 
+       47, 48, 49, 40, 40, 40, 40, 40, 
+       40, 40, 40, 40, 40, 57, 58, 59, 
+       40, 41, 40, 40, 40, 40, 40, 40, 
+       40, 40, 40, 40, 40, 40, 40, 40, 
+       40, 47, 48, 49, 40, 41, 40, 40, 
+       40, 40, 40, 40, 40, 40, 40, 40, 
+       40, 40, 40, 40, 40, 40, 48, 49, 
+       40, 41, 40, 40, 40, 40, 40, 40, 
+       40, 40, 40, 40, 40, 40, 40, 40, 
+       40, 40, 40, 49, 40, 41, 40, 40, 
+       40, 40, 40, 40, 40, 40, 40, 40, 
+       40, 40, 40, 40, 40, 47, 48, 49, 
+       40, 40, 40, 40, 40, 40, 40, 40, 
+       40, 40, 57, 58, 59, 40, 41, 40, 
+       40, 40, 40, 40, 40, 40, 40, 40, 
+       40, 40, 40, 40, 40, 40, 47, 48, 
+       49, 40, 40, 40, 40, 40, 40, 40, 
+       40, 40, 40, 40, 58, 59, 40, 41, 
+       40, 40, 40, 40, 40, 40, 40, 40, 
+       40, 40, 40, 40, 40, 40, 40, 47, 
+       48, 49, 40, 40, 40, 40, 40, 40, 
+       40, 40, 40, 40, 40, 40, 59, 40, 
+       41, 40, 40, 40, 40, 40, 40, 40, 
+       40, 40, 40, 40, 40, 40, 40, 46, 
+       47, 48, 49, 40, 40, 40, 40, 40, 
+       40, 54, 55, 56, 40, 57, 58, 59, 
+       40, 40, 40, 40, 46, 40, 41, 40, 
+       40, 40, 40, 40, 40, 40, 40, 40, 
+       40, 40, 40, 40, 40, 46, 47, 48, 
+       49, 40, 40, 40, 40, 40, 40, 40, 
+       55, 56, 40, 57, 58, 59, 40, 40, 
+       40, 40, 46, 40, 41, 40, 40, 40, 
+       40, 40, 40, 40, 40, 40, 40, 40, 
+       40, 40, 40, 46, 47, 48, 49, 40, 
+       40, 40, 40, 40, 40, 40, 40, 56, 
+       40, 57, 58, 59, 40, 40, 40, 40, 
+       46, 40, 41, 40, 40, 40, 40, 40, 
+       40, 40, 40, 40, 40, 40, 40, 40, 
+       45, 46, 47, 48, 49, 40, 51, 45, 
+       40, 40, 40, 54, 55, 56, 40, 57, 
+       58, 59, 40, 40, 40, 40, 46, 40, 
+       41, 40, 40, 40, 40, 40, 40, 40, 
+       40, 40, 40, 40, 40, 40, 45, 46, 
+       47, 48, 49, 40, 64, 45, 40, 40, 
+       40, 54, 55, 56, 40, 57, 58, 59, 
+       40, 40, 40, 40, 46, 40, 41, 40, 
+       40, 40, 40, 40, 40, 40, 40, 40, 
+       40, 40, 40, 40, 45, 46, 47, 48, 
+       49, 40, 40, 45, 40, 40, 40, 54, 
+       55, 56, 40, 57, 58, 59, 40, 40, 
+       40, 40, 46, 40, 41, 40, 40, 40, 
+       40, 40, 40, 40, 40, 40, 40, 40, 
+       40, 40, 45, 46, 47, 48, 49, 50, 
+       51, 45, 40, 40, 40, 54, 55, 56, 
+       40, 57, 58, 59, 40, 40, 40, 40, 
+       46, 40, 41, 40, 40, 42, 1, 40, 
+       40, 43, 40, 40, 40, 40, 40, 40, 
+       45, 46, 47, 48, 49, 50, 51, 45, 
+       52, 40, 53, 54, 55, 56, 40, 57, 
+       58, 59, 40, 40, 40, 40, 60, 40, 
+       42, 62, 62, 62, 62, 62, 62, 41, 
+       62, 62, 62, 62, 62, 62, 63, 62, 
+       62, 62, 62, 62, 62, 62, 46, 47, 
+       48, 49, 62, 62, 62, 62, 62, 62, 
+       62, 62, 62, 62, 57, 58, 59, 62, 
+       41, 40, 40, 42, 1, 40, 40, 43, 
+       40, 40, 40, 40, 40, 40, 45, 46, 
+       47, 48, 49, 50, 51, 45, 52, 44, 
+       53, 54, 55, 56, 40, 57, 58, 59, 
+       40, 40, 40, 40, 60, 40, 66, 65, 
+       65, 65, 65, 65, 65, 65, 67, 65, 
+       10, 68, 66, 65, 41, 40, 40, 42, 
+       1, 40, 40, 43, 40, 40, 40, 40, 
+       40, 69, 45, 46, 47, 48, 49, 50, 
+       51, 45, 52, 44, 53, 54, 55, 56, 
+       40, 57, 58, 59, 40, 70, 71, 40, 
+       60, 40, 41, 40, 40, 42, 1, 40, 
+       40, 43, 40, 40, 40, 40, 40, 40, 
+       45, 46, 47, 48, 49, 50, 51, 45, 
+       52, 44, 53, 54, 55, 56, 40, 57, 
+       58, 59, 40, 70, 71, 40, 60, 40, 
+       70, 71, 72, 71, 72, 12, 73, 73, 
+       3, 6, 73, 73, 74, 73, 73, 73, 
+       73, 73, 75, 18, 19, 20, 21, 22, 
+       23, 24, 18, 25, 27, 27, 28, 29, 
+       30, 73, 31, 32, 33, 73, 73, 73, 
+       73, 37, 73, 12, 73, 73, 3, 6, 
+       73, 73, 74, 73, 73, 73, 73, 73, 
+       73, 18, 19, 20, 21, 22, 23, 24, 
+       18, 25, 27, 27, 28, 29, 30, 73, 
+       31, 32, 33, 73, 73, 73, 73, 37, 
+       73, 12, 73, 73, 73, 73, 73, 73, 
+       73, 73, 73, 73, 73, 73, 73, 18, 
+       19, 20, 21, 22, 73, 73, 73, 73, 
+       73, 73, 28, 29, 30, 73, 31, 32, 
+       33, 73, 73, 73, 73, 19, 73, 12, 
+       73, 73, 73, 73, 73, 73, 73, 73, 
+       73, 73, 73, 73, 73, 73, 19, 20, 
+       21, 22, 73, 73, 73, 73, 73, 73, 
+       73, 73, 73, 73, 31, 32, 33, 73, 
+       12, 73, 73, 73, 73, 73, 73, 73, 
+       73, 73, 73, 73, 73, 73, 73, 73, 
+       20, 21, 22, 73, 12, 73, 73, 73, 
+       73, 73, 73, 73, 73, 73, 73, 73, 
+       73, 73, 73, 73, 73, 21, 22, 73, 
+       12, 73, 73, 73, 73, 73, 73, 73, 
+       73, 73, 73, 73, 73, 73, 73, 73, 
+       73, 73, 22, 73, 12, 73, 73, 73, 
+       73, 73, 73, 73, 73, 73, 73, 73, 
+       73, 73, 73, 73, 20, 21, 22, 73, 
+       73, 73, 73, 73, 73, 73, 73, 73, 
+       73, 31, 32, 33, 73, 12, 73, 73, 
+       73, 73, 73, 73, 73, 73, 73, 73, 
+       73, 73, 73, 73, 73, 20, 21, 22, 
+       73, 73, 73, 73, 73, 73, 73, 73, 
+       73, 73, 73, 32, 33, 73, 12, 73, 
+       73, 73, 73, 73, 73, 73, 73, 73, 
+       73, 73, 73, 73, 73, 73, 20, 21, 
+       22, 73, 73, 73, 73, 73, 73, 73, 
+       73, 73, 73, 73, 73, 33, 73, 12, 
+       73, 73, 73, 73, 73, 73, 73, 73, 
+       73, 73, 73, 73, 73, 73, 19, 20, 
+       21, 22, 73, 73, 73, 73, 73, 73, 
+       28, 29, 30, 73, 31, 32, 33, 73, 
+       73, 73, 73, 19, 73, 12, 73, 73, 
+       73, 73, 73, 73, 73, 73, 73, 73, 
+       73, 73, 73, 73, 19, 20, 21, 22, 
+       73, 73, 73, 73, 73, 73, 73, 29, 
+       30, 73, 31, 32, 33, 73, 73, 73, 
+       73, 19, 73, 12, 73, 73, 73, 73, 
+       73, 73, 73, 73, 73, 73, 73, 73, 
+       73, 73, 19, 20, 21, 22, 73, 73, 
+       73, 73, 73, 73, 73, 73, 30, 73, 
+       31, 32, 33, 73, 73, 73, 73, 19, 
+       73, 12, 73, 73, 73, 73, 73, 73, 
+       73, 73, 73, 73, 73, 73, 73, 18, 
+       19, 20, 21, 22, 73, 24, 18, 73, 
+       73, 73, 28, 29, 30, 73, 31, 32, 
+       33, 73, 73, 73, 73, 19, 73, 12, 
+       73, 73, 73, 73, 73, 73, 73, 73, 
+       73, 73, 73, 73, 73, 18, 19, 20, 
+       21, 22, 73, 76, 18, 73, 73, 73, 
+       28, 29, 30, 73, 31, 32, 33, 73, 
+       73, 73, 73, 19, 73, 12, 73, 73, 
+       73, 73, 73, 73, 73, 73, 73, 73, 
+       73, 73, 73, 18, 19, 20, 21, 22, 
+       73, 73, 18, 73, 73, 73, 28, 29, 
+       30, 73, 31, 32, 33, 73, 73, 73, 
+       73, 19, 73, 12, 73, 73, 73, 73, 
+       73, 73, 73, 73, 73, 73, 73, 73, 
+       73, 18, 19, 20, 21, 22, 23, 24, 
+       18, 73, 73, 73, 28, 29, 30, 73, 
+       31, 32, 33, 73, 73, 73, 73, 19, 
+       73, 12, 73, 73, 3, 6, 73, 73, 
+       74, 73, 73, 73, 73, 73, 73, 18, 
+       19, 20, 21, 22, 23, 24, 18, 25, 
+       73, 27, 28, 29, 30, 73, 31, 32, 
+       33, 73, 73, 73, 73, 37, 73, 3, 
+       73, 73, 73, 73, 73, 73, 12, 73, 
+       73, 73, 73, 73, 73, 4, 73, 73, 
+       73, 73, 73, 73, 73, 19, 20, 21, 
+       22, 73, 73, 73, 73, 73, 73, 73, 
+       73, 73, 73, 31, 32, 33, 73, 3, 
+       77, 77, 77, 77, 77, 77, 77, 77, 
+       77, 77, 77, 77, 77, 4, 77, 78, 
+       73, 14, 73, 73, 73, 73, 73, 73, 
+       73, 79, 73, 14, 73, 6, 77, 77, 
+       77, 77, 77, 77, 77, 77, 77, 77, 
+       77, 77, 77, 77, 77, 77, 77, 77, 
+       77, 77, 77, 77, 77, 77, 77, 77, 
+       77, 77, 77, 77, 77, 6, 77, 8, 
+       73, 73, 73, 8, 73, 73, 12, 73, 
+       73, 3, 6, 14, 73, 74, 73, 73, 
+       73, 73, 73, 73, 18, 19, 20, 21, 
+       22, 23, 24, 18, 25, 26, 27, 28, 
+       29, 30, 73, 31, 32, 33, 73, 34, 
+       35, 73, 37, 73, 12, 73, 73, 3, 
+       6, 73, 73, 74, 73, 73, 73, 73, 
+       73, 73, 18, 19, 20, 21, 22, 23, 
+       24, 18, 25, 26, 27, 28, 29, 30, 
+       73, 31, 32, 33, 73, 73, 73, 73, 
+       37, 73, 34, 35, 73, 35, 73, 70, 
+       72, 72, 72, 72, 72, 72, 72, 72, 
+       72, 72, 72, 72, 72, 72, 72, 72, 
+       72, 72, 72, 70, 71, 72, 8, 77, 
+       77, 77, 8, 77, 0
 };
 
 static const char _use_syllable_machine_trans_targs[] = {
-       4, 8, 4, 32, 2, 4, 1, 5,
-       6, 4, 29, 4, 51, 52, 53, 55,
-       34, 35, 36, 37, 38, 45, 46, 48,
-       54, 49, 42, 43, 44, 39, 40, 41,
-       58, 50, 4, 4, 4, 4, 7, 0,
-       28, 11, 12, 13, 14, 15, 22, 23,
-       25, 26, 19, 20, 21, 16, 17, 18,
-       27, 10, 4, 9, 24, 4, 30, 31,
-       4, 4, 3, 33, 47, 4, 4, 56,
-       57
+       4, 8, 4, 36, 2, 4, 1, 5, 
+       6, 4, 29, 32, 4, 55, 56, 59, 
+       60, 64, 38, 39, 40, 41, 42, 49, 
+       50, 52, 61, 53, 46, 47, 48, 43, 
+       44, 45, 62, 63, 65, 54, 4, 4, 
+       4, 4, 7, 0, 28, 11, 12, 13, 
+       14, 15, 22, 23, 25, 26, 19, 20, 
+       21, 16, 17, 18, 27, 10, 4, 9, 
+       24, 4, 30, 31, 4, 33, 34, 35, 
+       4, 4, 3, 37, 51, 4, 57, 58
 };
 
 static const char _use_syllable_machine_trans_actions[] = {
        1, 0, 2, 3, 0, 4, 0, 0, 
-       7, 8, 0, 9, 10, 10, 3, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       3, 3, 0, 0, 0, 0, 0, 0, 
-       0, 3, 11, 12, 13, 14, 7, 0,
-       7, 0, 0, 0, 0, 0, 0, 0,
-       0, 7, 0, 0, 0, 0, 0, 0,
-       0, 7, 15, 0, 0, 16, 0, 0,
-       17, 18, 0, 3, 0, 19, 20, 0,
-       0
+       7, 8, 0, 7, 9, 10, 0, 10, 
+       3, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 3, 3, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 3, 11, 12, 
+       13, 14, 7, 0, 7, 0, 0, 0, 
+       0, 0, 0, 0, 0, 7, 0, 0, 
+       0, 0, 0, 0, 0, 7, 15, 0, 
+       0, 16, 0, 0, 17, 7, 0, 0, 
+       18, 19, 0, 3, 0, 20, 0, 0
 };
 
 static const char _use_syllable_machine_to_state_actions[] = {
@@ -319,7 +334,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
 };
 
 static const char _use_syllable_machine_from_state_actions[] = {
@@ -330,18 +346,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
 };
 
 static const short _use_syllable_machine_eof_trans[] = {
-       1, 3, 3, 6, 0, 35, 37, 37,
-       59, 59, 37, 37, 37, 37, 37, 37,
-       37, 37, 37, 37, 37, 37, 37, 37,
-       37, 37, 37, 59, 37, 62, 65, 62,
-       66, 66, 66, 66, 66, 66, 66, 66,
-       66, 66, 66, 66, 66, 66, 66, 66,
-       66, 66, 66, 70, 70, 66, 66, 71,
-       71, 71, 70
+       1, 3, 3, 6, 0, 39, 41, 41, 
+       63, 63, 41, 41, 41, 41, 41, 41, 
+       41, 41, 41, 41, 41, 41, 41, 41, 
+       41, 41, 41, 63, 41, 66, 69, 66, 
+       41, 41, 73, 73, 74, 74, 74, 74, 
+       74, 74, 74, 74, 74, 74, 74, 74, 
+       74, 74, 74, 74, 74, 74, 74, 78, 
+       74, 74, 74, 78, 74, 74, 74, 74, 
+       73, 78
 };
 
 static const int use_syllable_machine_start = 4;
@@ -355,7 +373,7 @@ static const int use_syllable_machine_en_main = 4;
 
 
 
-#line 143 "hb-ot-shape-complex-use-machine.rl"
+#line 146 "hb-ot-shape-complex-use-machine.rl"
 
 
 #define found_syllable(syllable_type) \
@@ -374,7 +392,7 @@ find_syllables (hb_buffer_t *buffer)
   int cs;
   hb_glyph_info_t *info = buffer->info;
   
-#line 378 "hb-ot-shape-complex-use-machine.hh"
+#line 396 "hb-ot-shape-complex-use-machine.hh"
        {
        cs = use_syllable_machine_start;
        ts = 0;
@@ -382,7 +400,7 @@ find_syllables (hb_buffer_t *buffer)
        act = 0;
        }
 
-#line 163 "hb-ot-shape-complex-use-machine.rl"
+#line 166 "hb-ot-shape-complex-use-machine.rl"
 
 
   p = 0;
@@ -390,7 +408,7 @@ find_syllables (hb_buffer_t *buffer)
 
   unsigned int syllable_serial = 1;
   
-#line 394 "hb-ot-shape-complex-use-machine.hh"
+#line 412 "hb-ot-shape-complex-use-machine.hh"
        {
        int _slen;
        int _trans;
@@ -404,7 +422,7 @@ _resume:
 #line 1 "NONE"
        {ts = p;}
        break;
-#line 408 "hb-ot-shape-complex-use-machine.hh"
+#line 426 "hb-ot-shape-complex-use-machine.hh"
        }
 
        _keys = _use_syllable_machine_trans_keys + (cs<<1);
@@ -427,59 +445,59 @@ _eof_trans:
        {te = p+1;}
        break;
        case 12:
-#line 132 "hb-ot-shape-complex-use-machine.rl"
+#line 135 "hb-ot-shape-complex-use-machine.rl"
        {te = p+1;{ found_syllable (independent_cluster); }}
        break;
        case 14:
-#line 134 "hb-ot-shape-complex-use-machine.rl"
+#line 137 "hb-ot-shape-complex-use-machine.rl"
        {te = p+1;{ found_syllable (standard_cluster); }}
        break;
        case 9:
-#line 138 "hb-ot-shape-complex-use-machine.rl"
+#line 141 "hb-ot-shape-complex-use-machine.rl"
        {te = p+1;{ found_syllable (broken_cluster); }}
        break;
        case 8:
-#line 139 "hb-ot-shape-complex-use-machine.rl"
+#line 142 "hb-ot-shape-complex-use-machine.rl"
        {te = p+1;{ found_syllable (non_cluster); }}
        break;
        case 11:
-#line 132 "hb-ot-shape-complex-use-machine.rl"
+#line 135 "hb-ot-shape-complex-use-machine.rl"
        {te = p;p--;{ found_syllable (independent_cluster); }}
        break;
        case 15:
-#line 133 "hb-ot-shape-complex-use-machine.rl"
+#line 136 "hb-ot-shape-complex-use-machine.rl"
        {te = p;p--;{ found_syllable (virama_terminated_cluster); }}
        break;
        case 13:
-#line 134 "hb-ot-shape-complex-use-machine.rl"
+#line 137 "hb-ot-shape-complex-use-machine.rl"
        {te = p;p--;{ found_syllable (standard_cluster); }}
        break;
        case 17:
-#line 135 "hb-ot-shape-complex-use-machine.rl"
+#line 138 "hb-ot-shape-complex-use-machine.rl"
        {te = p;p--;{ found_syllable (number_joiner_terminated_cluster); }}
        break;
        case 16:
-#line 136 "hb-ot-shape-complex-use-machine.rl"
+#line 139 "hb-ot-shape-complex-use-machine.rl"
        {te = p;p--;{ found_syllable (numeral_cluster); }}
        break;
-       case 20:
-#line 137 "hb-ot-shape-complex-use-machine.rl"
+       case 18:
+#line 140 "hb-ot-shape-complex-use-machine.rl"
        {te = p;p--;{ found_syllable (symbol_cluster); }}
        break;
-       case 18:
-#line 138 "hb-ot-shape-complex-use-machine.rl"
+       case 19:
+#line 141 "hb-ot-shape-complex-use-machine.rl"
        {te = p;p--;{ found_syllable (broken_cluster); }}
        break;
-       case 19:
-#line 139 "hb-ot-shape-complex-use-machine.rl"
+       case 20:
+#line 142 "hb-ot-shape-complex-use-machine.rl"
        {te = p;p--;{ found_syllable (non_cluster); }}
        break;
        case 1:
-#line 134 "hb-ot-shape-complex-use-machine.rl"
+#line 137 "hb-ot-shape-complex-use-machine.rl"
        {{p = ((te))-1;}{ found_syllable (standard_cluster); }}
        break;
        case 4:
-#line 138 "hb-ot-shape-complex-use-machine.rl"
+#line 141 "hb-ot-shape-complex-use-machine.rl"
        {{p = ((te))-1;}{ found_syllable (broken_cluster); }}
        break;
        case 2:
@@ -497,16 +515,16 @@ _eof_trans:
        case 3:
 #line 1 "NONE"
        {te = p+1;}
-#line 138 "hb-ot-shape-complex-use-machine.rl"
+#line 141 "hb-ot-shape-complex-use-machine.rl"
        {act = 7;}
        break;
        case 10:
 #line 1 "NONE"
        {te = p+1;}
-#line 139 "hb-ot-shape-complex-use-machine.rl"
+#line 142 "hb-ot-shape-complex-use-machine.rl"
        {act = 8;}
        break;
-#line 510 "hb-ot-shape-complex-use-machine.hh"
+#line 528 "hb-ot-shape-complex-use-machine.hh"
        }
 
 _again:
@@ -515,7 +533,7 @@ _again:
 #line 1 "NONE"
        {ts = 0;}
        break;
-#line 519 "hb-ot-shape-complex-use-machine.hh"
+#line 537 "hb-ot-shape-complex-use-machine.hh"
        }
 
        if ( ++p != pe )
@@ -531,7 +549,7 @@ _again:
 
        }
 
-#line 171 "hb-ot-shape-complex-use-machine.rl"
+#line 174 "hb-ot-shape-complex-use-machine.rl"
 
 }
 
index 7702cd9..82803da 100644 (file)
@@ -107,6 +107,9 @@ complex_syllable_tail =
        vowel_modifiers
        final_consonants
 ;
+number_joiner_terminated_cluster_tail = (HN N VS?)* HN;
+numeral_cluster_tail = (HN N VS?)+;
+symbol_cluster_tail = SMAbv+ SMBlw* | SMBlw+;
 
 virama_terminated_cluster =
        (R|CS)? (B | GB) VS?
@@ -119,12 +122,12 @@ standard_cluster =
 ;
 broken_cluster =
        R?
-       complex_syllable_tail
+       (complex_syllable_tail | number_joiner_terminated_cluster_tail | numeral_cluster_tail | symbol_cluster_tail)
 ;
 
-number_joiner_terminated_cluster = N VS? (HN N VS?)* HN;
-numeral_cluster = N VS? (HN N VS?)*;
-symbol_cluster = S VS? SMAbv* SMBlw*;
+number_joiner_terminated_cluster = N VS? number_joiner_terminated_cluster_tail;
+numeral_cluster = N VS? numeral_cluster_tail?;
+symbol_cluster = (S | GB) VS? symbol_cluster_tail?;
 independent_cluster = (IND | O | Rsv | WJ) VS?;
 other = any;
 
index ddf7053..f47d5e8 100644 (file)
@@ -319,7 +319,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
   /* 1B30 */     B,     B,     B,     B, CMAbv,  VPst,  VAbv,  VAbv,  VBlw,  VBlw,  VBlw,  VBlw,  VAbv,  VAbv,  VPre,  VPre,
   /* 1B40 */  VPst,  VPst,  VAbv,  VAbv,     H,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,
   /* 1B50 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,    GB,    GB,     O,     O,    GB,
-  /* 1B60 */     O,     O,    GB,     O,     O,     O,     O,     O,    GB,     O,     O, SMAbv, SMBlw, SMAbv, SMAbv, SMAbv,
+  /* 1B60 */     O,     S,    GB,     S,     S,     S,     S,     S,    GB,     S,     S, SMAbv, SMBlw, SMAbv, SMAbv, SMAbv,
   /* 1B70 */ SMAbv, SMAbv, SMAbv, SMAbv,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
 
   /* Sundanese */