1 
   2 #line 1 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
   3 /*
   4  * Copyright © 2011,2012  Google, Inc.
   5  *
   6  *  This is part of HarfBuzz, a text shaping library.
   7  *
   8  * Permission is hereby granted, without written agreement and without
   9  * license or royalty fees, to use, copy, modify, and distribute this
  10  * software and its documentation for any purpose, provided that the
  11  * above copyright notice and the following two paragraphs appear in
  12  * all copies of this software.
  13  *
  14  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
  15  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
  16  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
  17  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
  18  * DAMAGE.
  19  *
  20  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
  21  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  22  * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  23  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
  24  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  25  *
  26  * Google Author(s): Behdad Esfahbod
  27  */
  28 
  29 #ifndef HB_OT_SHAPE_COMPLEX_MYANMAR_MACHINE_HH
  30 #define HB_OT_SHAPE_COMPLEX_MYANMAR_MACHINE_HH
  31 
  32 #include "hb-private.hh"
  33 
  34 
  35 #line 36 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp"
  36 static const unsigned char _myanmar_syllable_machine_trans_keys[] = {
  37         1u, 31u, 3u, 30u, 5u, 29u, 5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u,
  38         3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 16u, 3u, 29u, 3u, 29u, 3u, 29u,
  39         3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 5u, 29u, 5u, 8u,
  40         5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u,
  41         3u, 30u, 3u, 29u, 1u, 30u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u,
  42         3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 8u, 8u, 0
  43 };
  44 
  45 static const char _myanmar_syllable_machine_key_spans[] = {
  46         31, 28, 25, 4, 25, 23, 21, 21,
  47         27, 27, 27, 27, 16, 27, 27, 27,
  48         27, 27, 27, 27, 27, 27, 25, 4,
  49         25, 23, 21, 21, 27, 27, 27, 27,
  50         28, 27, 30, 27, 27, 27, 27, 27,
  51         27, 27, 27, 27, 1
  52 };
  53 
  54 static const short _myanmar_syllable_machine_index_offsets[] = {
  55         0, 32, 61, 87, 92, 118, 142, 164,
  56         186, 214, 242, 270, 298, 315, 343, 371,
  57         399, 427, 455, 483, 511, 539, 567, 593,
  58         598, 624, 648, 670, 692, 720, 748, 776,
  59         804, 833, 861, 892, 920, 948, 976, 1004,
  60         1032, 1060, 1088, 1116, 1144
  61 };
  62 
  63 static const char _myanmar_syllable_machine_indicies[] = {
  64         1, 1, 2, 3, 4, 4, 0, 5,
  65         0, 6, 1, 0, 0, 0, 0, 7,
  66         0, 8, 1, 0, 9, 10, 11, 12,
  67         13, 14, 15, 16, 17, 18, 19, 0,
  68         21, 22, 23, 23, 20, 24, 20, 25,
  69         20, 20, 20, 20, 20, 20, 20, 26,
  70         20, 20, 27, 28, 29, 30, 31, 32,
  71         33, 34, 35, 36, 20, 23, 23, 20,
  72         24, 20, 20, 20, 20, 20, 20, 20,
  73         20, 20, 37, 20, 20, 20, 20, 20,
  74         20, 31, 20, 20, 20, 35, 20, 23,
  75         23, 20, 24, 20, 23, 23, 20, 24,
  76         20, 20, 20, 20, 20, 20, 20, 20,
  77         20, 20, 20, 20, 20, 20, 20, 20,
  78         31, 20, 20, 20, 35, 20, 38, 20,
  79         23, 23, 20, 24, 20, 31, 20, 20,
  80         20, 20, 20, 20, 20, 39, 20, 20,
  81         20, 20, 20, 20, 31, 20, 23, 23,
  82         20, 24, 20, 20, 20, 20, 20, 20,
  83         20, 20, 20, 39, 20, 20, 20, 20,
  84         20, 20, 31, 20, 23, 23, 20, 24,
  85         20, 20, 20, 20, 20, 20, 20, 20,
  86         20, 20, 20, 20, 20, 20, 20, 20,
  87         31, 20, 21, 20, 23, 23, 20, 24,
  88         20, 25, 20, 20, 20, 20, 20, 20,
  89         20, 40, 20, 20, 40, 20, 20, 20,
  90         31, 41, 20, 20, 35, 20, 21, 20,
  91         23, 23, 20, 24, 20, 25, 20, 20,
  92         20, 20, 20, 20, 20, 20, 20, 20,
  93         20, 20, 20, 20, 31, 20, 20, 20,
  94         35, 20, 21, 20, 23, 23, 20, 24,
  95         20, 25, 20, 20, 20, 20, 20, 20,
  96         20, 40, 20, 20, 20, 20, 20, 20,
  97         31, 41, 20, 20, 35, 20, 21, 20,
  98         23, 23, 20, 24, 20, 25, 20, 20,
  99         20, 20, 20, 20, 20, 20, 20, 20,
 100         20, 20, 20, 20, 31, 41, 20, 20,
 101         35, 20, 1, 1, 20, 20, 20, 20,
 102         20, 20, 20, 20, 20, 20, 20, 20,
 103         20, 1, 20, 21, 20, 23, 23, 20,
 104         24, 20, 25, 20, 20, 20, 20, 20,
 105         20, 20, 26, 20, 20, 27, 28, 29,
 106         30, 31, 32, 33, 34, 35, 20, 21,
 107         20, 23, 23, 20, 24, 20, 25, 20,
 108         20, 20, 20, 20, 20, 20, 34, 20,
 109         20, 20, 20, 20, 20, 31, 32, 33,
 110         34, 35, 20, 21, 20, 23, 23, 20,
 111         24, 20, 25, 20, 20, 20, 20, 20,
 112         20, 20, 20, 20, 20, 20, 20, 20,
 113         20, 31, 32, 33, 34, 35, 20, 21,
 114         20, 23, 23, 20, 24, 20, 25, 20,
 115         20, 20, 20, 20, 20, 20, 20, 20,
 116         20, 20, 20, 20, 20, 31, 32, 33,
 117         20, 35, 20, 21, 20, 23, 23, 20,
 118         24, 20, 25, 20, 20, 20, 20, 20,
 119         20, 20, 20, 20, 20, 20, 20, 20,
 120         20, 31, 20, 33, 20, 35, 20, 21,
 121         20, 23, 23, 20, 24, 20, 25, 20,
 122         20, 20, 20, 20, 20, 20, 34, 20,
 123         20, 27, 20, 29, 20, 31, 32, 33,
 124         34, 35, 20, 21, 20, 23, 23, 20,
 125         24, 20, 25, 20, 20, 20, 20, 20,
 126         20, 20, 34, 20, 20, 27, 20, 20,
 127         20, 31, 32, 33, 34, 35, 20, 21,
 128         20, 23, 23, 20, 24, 20, 25, 20,
 129         20, 20, 20, 20, 20, 20, 34, 20,
 130         20, 27, 28, 29, 20, 31, 32, 33,
 131         34, 35, 20, 21, 22, 23, 23, 20,
 132         24, 20, 25, 20, 20, 20, 20, 20,
 133         20, 20, 26, 20, 20, 27, 28, 29,
 134         30, 31, 32, 33, 34, 35, 20, 3,
 135         3, 42, 5, 42, 42, 42, 42, 42,
 136         42, 42, 42, 42, 43, 42, 42, 42,
 137         42, 42, 42, 13, 42, 42, 42, 17,
 138         42, 3, 3, 42, 5, 42, 3, 3,
 139         42, 5, 42, 42, 42, 42, 42, 42,
 140         42, 42, 42, 42, 42, 42, 42, 42,
 141         42, 42, 13, 42, 42, 42, 17, 42,
 142         44, 42, 3, 3, 42, 5, 42, 13,
 143         42, 42, 42, 42, 42, 42, 42, 45,
 144         42, 42, 42, 42, 42, 42, 13, 42,
 145         3, 3, 42, 5, 42, 42, 42, 42,
 146         42, 42, 42, 42, 42, 45, 42, 42,
 147         42, 42, 42, 42, 13, 42, 3, 3,
 148         42, 5, 42, 42, 42, 42, 42, 42,
 149         42, 42, 42, 42, 42, 42, 42, 42,
 150         42, 42, 13, 42, 2, 42, 3, 3,
 151         42, 5, 42, 6, 42, 42, 42, 42,
 152         42, 42, 42, 46, 42, 42, 46, 42,
 153         42, 42, 13, 47, 42, 42, 17, 42,
 154         2, 42, 3, 3, 42, 5, 42, 6,
 155         42, 42, 42, 42, 42, 42, 42, 42,
 156         42, 42, 42, 42, 42, 42, 13, 42,
 157         42, 42, 17, 42, 2, 42, 3, 3,
 158         42, 5, 42, 6, 42, 42, 42, 42,
 159         42, 42, 42, 46, 42, 42, 42, 42,
 160         42, 42, 13, 47, 42, 42, 17, 42,
 161         2, 42, 3, 3, 42, 5, 42, 6,
 162         42, 42, 42, 42, 42, 42, 42, 42,
 163         42, 42, 42, 42, 42, 42, 13, 47,
 164         42, 42, 17, 42, 21, 22, 23, 23,
 165         20, 24, 20, 25, 20, 20, 20, 20,
 166         20, 20, 20, 48, 20, 20, 27, 28,
 167         29, 30, 31, 32, 33, 34, 35, 36,
 168         20, 21, 49, 23, 23, 20, 24, 20,
 169         25, 20, 20, 20, 20, 20, 20, 20,
 170         26, 20, 20, 27, 28, 29, 30, 31,
 171         32, 33, 34, 35, 20, 1, 1, 2,
 172         3, 3, 3, 42, 5, 42, 6, 1,
 173         42, 42, 42, 42, 1, 42, 8, 1,
 174         42, 9, 10, 11, 12, 13, 14, 15,
 175         16, 17, 18, 42, 2, 42, 3, 3,
 176         42, 5, 42, 6, 42, 42, 42, 42,
 177         42, 42, 42, 8, 42, 42, 9, 10,
 178         11, 12, 13, 14, 15, 16, 17, 42,
 179         2, 42, 3, 3, 42, 5, 42, 6,
 180         42, 42, 42, 42, 42, 42, 42, 16,
 181         42, 42, 42, 42, 42, 42, 13, 14,
 182         15, 16, 17, 42, 2, 42, 3, 3,
 183         42, 5, 42, 6, 42, 42, 42, 42,
 184         42, 42, 42, 42, 42, 42, 42, 42,
 185         42, 42, 13, 14, 15, 16, 17, 42,
 186         2, 42, 3, 3, 42, 5, 42, 6,
 187         42, 42, 42, 42, 42, 42, 42, 42,
 188         42, 42, 42, 42, 42, 42, 13, 14,
 189         15, 42, 17, 42, 2, 42, 3, 3,
 190         42, 5, 42, 6, 42, 42, 42, 42,
 191         42, 42, 42, 42, 42, 42, 42, 42,
 192         42, 42, 13, 42, 15, 42, 17, 42,
 193         2, 42, 3, 3, 42, 5, 42, 6,
 194         42, 42, 42, 42, 42, 42, 42, 16,
 195         42, 42, 9, 42, 11, 42, 13, 14,
 196         15, 16, 17, 42, 2, 42, 3, 3,
 197         42, 5, 42, 6, 42, 42, 42, 42,
 198         42, 42, 42, 16, 42, 42, 9, 42,
 199         42, 42, 13, 14, 15, 16, 17, 42,
 200         2, 42, 3, 3, 42, 5, 42, 6,
 201         42, 42, 42, 42, 42, 42, 42, 16,
 202         42, 42, 9, 10, 11, 42, 13, 14,
 203         15, 16, 17, 42, 2, 3, 3, 3,
 204         42, 5, 42, 6, 42, 42, 42, 42,
 205         42, 42, 42, 8, 42, 42, 9, 10,
 206         11, 12, 13, 14, 15, 16, 17, 42,
 207         51, 50, 0
 208 };
 209 
 210 static const char _myanmar_syllable_machine_trans_targs[] = {
 211         0, 1, 22, 0, 0, 23, 29, 32,
 212         35, 36, 40, 41, 42, 25, 38, 39,
 213         37, 28, 43, 44, 0, 2, 12, 0,
 214         3, 9, 13, 14, 18, 19, 20, 5,
 215         16, 17, 15, 8, 21, 4, 6, 7,
 216         10, 11, 0, 24, 26, 27, 30, 31,
 217         33, 34, 0, 0
 218 };
 219 
 220 static const char _myanmar_syllable_machine_trans_actions[] = {
 221         3, 0, 0, 4, 5, 0, 0, 0,
 222         0, 0, 0, 0, 0, 0, 0, 0,
 223         0, 0, 0, 0, 6, 0, 0, 7,
 224         0, 0, 0, 0, 0, 0, 0, 0,
 225         0, 0, 0, 0, 0, 0, 0, 0,
 226         0, 0, 8, 0, 0, 0, 0, 0,
 227         0, 0, 9, 10
 228 };
 229 
 230 static const char _myanmar_syllable_machine_to_state_actions[] = {
 231         1, 0, 0, 0, 0, 0, 0, 0,
 232         0, 0, 0, 0, 0, 0, 0, 0,
 233         0, 0, 0, 0, 0, 0, 0, 0,
 234         0, 0, 0, 0, 0, 0, 0, 0,
 235         0, 0, 0, 0, 0, 0, 0, 0,
 236         0, 0, 0, 0, 0
 237 };
 238 
 239 static const char _myanmar_syllable_machine_from_state_actions[] = {
 240         2, 0, 0, 0, 0, 0, 0, 0,
 241         0, 0, 0, 0, 0, 0, 0, 0,
 242         0, 0, 0, 0, 0, 0, 0, 0,
 243         0, 0, 0, 0, 0, 0, 0, 0,
 244         0, 0, 0, 0, 0, 0, 0, 0,
 245         0, 0, 0, 0, 0
 246 };
 247 
 248 static const short _myanmar_syllable_machine_eof_trans[] = {
 249         0, 21, 21, 21, 21, 21, 21, 21,
 250         21, 21, 21, 21, 21, 21, 21, 21,
 251         21, 21, 21, 21, 21, 21, 43, 43,
 252         43, 43, 43, 43, 43, 43, 43, 43,
 253         21, 21, 43, 43, 43, 43, 43, 43,
 254         43, 43, 43, 43, 51
 255 };
 256 
 257 static const int myanmar_syllable_machine_start = 0;
 258 static const int myanmar_syllable_machine_first_final = 0;
 259 static const int myanmar_syllable_machine_error = -1;
 260 
 261 static const int myanmar_syllable_machine_en_main = 0;
 262 
 263 
 264 #line 36 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 265 
 266 
 267 
 268 #line 93 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 269 
 270 
 271 #define found_syllable(syllable_type) \
 272   HB_STMT_START { \
 273     if (0) fprintf (stderr, "syllable %d..%d %s\n", last, p+1, #syllable_type); \
 274     for (unsigned int i = last; i < p+1; i++) \
 275       info[i].syllable() = (syllable_serial << 4) | syllable_type; \
 276     last = p+1; \
 277     syllable_serial++; \
 278     if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
 279   } HB_STMT_END
 280 
 281 static void
 282 find_syllables (hb_buffer_t *buffer)
 283 {
 284   unsigned int p, pe, eof, ts HB_UNUSED, te HB_UNUSED, act HB_UNUSED;
 285   int cs;
 286   hb_glyph_info_t *info = buffer->info;
 287 
 288 #line 289 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp"
 289         {
 290         cs = myanmar_syllable_machine_start;
 291         ts = 0;
 292         te = 0;
 293         act = 0;
 294         }
 295 
 296 #line 114 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 297 
 298 
 299   p = 0;
 300   pe = eof = buffer->len;
 301 
 302   unsigned int last = 0;
 303   unsigned int syllable_serial = 1;
 304 
 305 #line 306 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp"
 306         {
 307         int _slen;
 308         int _trans;
 309         const unsigned char *_keys;
 310         const char *_inds;
 311         if ( p == pe )
 312                 goto _test_eof;
 313 _resume:
 314         switch ( _myanmar_syllable_machine_from_state_actions[cs] ) {
 315         case 2:
 316 #line 1 "NONE"
 317         {ts = p;}
 318         break;
 319 #line 320 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp"
 320         }
 321 
 322         _keys = _myanmar_syllable_machine_trans_keys + (cs<<1);
 323         _inds = _myanmar_syllable_machine_indicies + _myanmar_syllable_machine_index_offsets[cs];
 324 
 325         _slen = _myanmar_syllable_machine_key_spans[cs];
 326         _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].myanmar_category()) &&
 327                 ( info[p].myanmar_category()) <= _keys[1] ?
 328                 ( info[p].myanmar_category()) - _keys[0] : _slen ];
 329 
 330 _eof_trans:
 331         cs = _myanmar_syllable_machine_trans_targs[_trans];
 332 
 333         if ( _myanmar_syllable_machine_trans_actions[_trans] == 0 )
 334                 goto _again;
 335 
 336         switch ( _myanmar_syllable_machine_trans_actions[_trans] ) {
 337         case 7:
 338 #line 85 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 339         {te = p+1;{ found_syllable (consonant_syllable); }}
 340         break;
 341         case 5:
 342 #line 86 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 343         {te = p+1;{ found_syllable (non_myanmar_cluster); }}
 344         break;
 345         case 10:
 346 #line 87 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 347         {te = p+1;{ found_syllable (punctuation_cluster); }}
 348         break;
 349         case 4:
 350 #line 88 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 351         {te = p+1;{ found_syllable (broken_cluster); }}
 352         break;
 353         case 3:
 354 #line 89 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 355         {te = p+1;{ found_syllable (non_myanmar_cluster); }}
 356         break;
 357         case 6:
 358 #line 85 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 359         {te = p;p--;{ found_syllable (consonant_syllable); }}
 360         break;
 361         case 8:
 362 #line 88 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 363         {te = p;p--;{ found_syllable (broken_cluster); }}
 364         break;
 365         case 9:
 366 #line 89 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 367         {te = p;p--;{ found_syllable (non_myanmar_cluster); }}
 368         break;
 369 #line 370 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp"
 370         }
 371 
 372 _again:
 373         switch ( _myanmar_syllable_machine_to_state_actions[cs] ) {
 374         case 1:
 375 #line 1 "NONE"
 376         {ts = 0;}
 377         break;
 378 #line 379 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp"
 379         }
 380 
 381         if ( ++p != pe )
 382                 goto _resume;
 383         _test_eof: {}
 384         if ( p == eof )
 385         {
 386         if ( _myanmar_syllable_machine_eof_trans[cs] > 0 ) {
 387                 _trans = _myanmar_syllable_machine_eof_trans[cs] - 1;
 388                 goto _eof_trans;
 389         }
 390         }
 391 
 392         }
 393 
 394 #line 123 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
 395 
 396 }
 397 
 398 #undef found_syllable
 399 
 400 #endif /* HB_OT_SHAPE_COMPLEX_MYANMAR_MACHINE_HH */