1 
   2 #line 1 "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 "hb-ot-shape-complex-myanmar-machine.hh"
  36 static const unsigned char _myanmar_syllable_machine_trans_keys[] = {
  37         1u, 32u, 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, 30u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 5u, 29u,
  40         5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u, 3u, 29u, 3u, 29u, 3u, 29u,
  41         3u, 29u, 3u, 30u, 3u, 29u, 1u, 32u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u,
  42         3u, 29u, 3u, 30u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 32u, 8u, 8u,
  43         0
  44 };
  45 
  46 static const char _myanmar_syllable_machine_key_spans[] = {
  47         32, 28, 25, 4, 25, 23, 21, 21,
  48         27, 27, 27, 27, 16, 27, 27, 27,
  49         27, 27, 28, 27, 27, 27, 27, 25,
  50         4, 25, 23, 21, 21, 27, 27, 27,
  51         27, 28, 27, 32, 27, 27, 27, 27,
  52         27, 28, 27, 27, 27, 27, 32, 1
  53 };
  54 
  55 static const short _myanmar_syllable_machine_index_offsets[] = {
  56         0, 33, 62, 88, 93, 119, 143, 165,
  57         187, 215, 243, 271, 299, 316, 344, 372,
  58         400, 428, 456, 485, 513, 541, 569, 597,
  59         623, 628, 654, 678, 700, 722, 750, 778,
  60         806, 834, 863, 891, 924, 952, 980, 1008,
  61         1036, 1064, 1093, 1121, 1149, 1177, 1205, 1238
  62 };
  63 
  64 static const char _myanmar_syllable_machine_indicies[] = {
  65         1, 1, 2, 3, 4, 4, 0, 5,
  66         0, 6, 1, 0, 0, 0, 0, 7,
  67         0, 8, 9, 0, 10, 11, 12, 13,
  68         14, 15, 16, 17, 18, 19, 20, 1,
  69         0, 22, 23, 24, 24, 21, 25, 21,
  70         26, 21, 21, 21, 21, 21, 21, 21,
  71         27, 21, 21, 28, 29, 30, 31, 32,
  72         33, 34, 35, 36, 37, 21, 24, 24,
  73         21, 25, 21, 21, 21, 21, 21, 21,
  74         21, 21, 21, 38, 21, 21, 21, 21,
  75         21, 21, 32, 21, 21, 21, 36, 21,
  76         24, 24, 21, 25, 21, 24, 24, 21,
  77         25, 21, 21, 21, 21, 21, 21, 21,
  78         21, 21, 21, 21, 21, 21, 21, 21,
  79         21, 32, 21, 21, 21, 36, 21, 39,
  80         21, 24, 24, 21, 25, 21, 32, 21,
  81         21, 21, 21, 21, 21, 21, 40, 21,
  82         21, 21, 21, 21, 21, 32, 21, 24,
  83         24, 21, 25, 21, 21, 21, 21, 21,
  84         21, 21, 21, 21, 40, 21, 21, 21,
  85         21, 21, 21, 32, 21, 24, 24, 21,
  86         25, 21, 21, 21, 21, 21, 21, 21,
  87         21, 21, 21, 21, 21, 21, 21, 21,
  88         21, 32, 21, 22, 21, 24, 24, 21,
  89         25, 21, 26, 21, 21, 21, 21, 21,
  90         21, 21, 41, 21, 21, 41, 21, 21,
  91         21, 32, 42, 21, 21, 36, 21, 22,
  92         21, 24, 24, 21, 25, 21, 26, 21,
  93         21, 21, 21, 21, 21, 21, 21, 21,
  94         21, 21, 21, 21, 21, 32, 21, 21,
  95         21, 36, 21, 22, 21, 24, 24, 21,
  96         25, 21, 26, 21, 21, 21, 21, 21,
  97         21, 21, 41, 21, 21, 21, 21, 21,
  98         21, 32, 42, 21, 21, 36, 21, 22,
  99         21, 24, 24, 21, 25, 21, 26, 21,
 100         21, 21, 21, 21, 21, 21, 21, 21,
 101         21, 21, 21, 21, 21, 32, 42, 21,
 102         21, 36, 21, 1, 1, 21, 21, 21,
 103         21, 21, 21, 21, 21, 21, 21, 21,
 104         21, 21, 1, 21, 22, 21, 24, 24,
 105         21, 25, 21, 26, 21, 21, 21, 21,
 106         21, 21, 21, 27, 21, 21, 28, 29,
 107         30, 31, 32, 33, 34, 35, 36, 21,
 108         22, 21, 24, 24, 21, 25, 21, 26,
 109         21, 21, 21, 21, 21, 21, 21, 43,
 110         21, 21, 21, 21, 21, 21, 32, 33,
 111         34, 35, 36, 21, 22, 21, 24, 24,
 112         21, 25, 21, 26, 21, 21, 21, 21,
 113         21, 21, 21, 21, 21, 21, 21, 21,
 114         21, 21, 32, 33, 34, 35, 36, 21,
 115         22, 21, 24, 24, 21, 25, 21, 26,
 116         21, 21, 21, 21, 21, 21, 21, 21,
 117         21, 21, 21, 21, 21, 21, 32, 33,
 118         34, 21, 36, 21, 22, 21, 24, 24,
 119         21, 25, 21, 26, 21, 21, 21, 21,
 120         21, 21, 21, 21, 21, 21, 21, 21,
 121         21, 21, 32, 21, 34, 21, 36, 21,
 122         22, 21, 24, 24, 21, 25, 21, 26,
 123         21, 21, 21, 21, 21, 21, 21, 21,
 124         21, 21, 21, 21, 21, 21, 32, 33,
 125         34, 35, 36, 43, 21, 22, 21, 24,
 126         24, 21, 25, 21, 26, 21, 21, 21,
 127         21, 21, 21, 21, 43, 21, 21, 28,
 128         21, 30, 21, 32, 33, 34, 35, 36,
 129         21, 22, 21, 24, 24, 21, 25, 21,
 130         26, 21, 21, 21, 21, 21, 21, 21,
 131         43, 21, 21, 28, 21, 21, 21, 32,
 132         33, 34, 35, 36, 21, 22, 21, 24,
 133         24, 21, 25, 21, 26, 21, 21, 21,
 134         21, 21, 21, 21, 43, 21, 21, 28,
 135         29, 30, 21, 32, 33, 34, 35, 36,
 136         21, 22, 23, 24, 24, 21, 25, 21,
 137         26, 21, 21, 21, 21, 21, 21, 21,
 138         27, 21, 21, 28, 29, 30, 31, 32,
 139         33, 34, 35, 36, 21, 3, 3, 44,
 140         5, 44, 44, 44, 44, 44, 44, 44,
 141         44, 44, 45, 44, 44, 44, 44, 44,
 142         44, 14, 44, 44, 44, 18, 44, 3,
 143         3, 44, 5, 44, 3, 3, 44, 5,
 144         44, 44, 44, 44, 44, 44, 44, 44,
 145         44, 44, 44, 44, 44, 44, 44, 44,
 146         14, 44, 44, 44, 18, 44, 46, 44,
 147         3, 3, 44, 5, 44, 14, 44, 44,
 148         44, 44, 44, 44, 44, 47, 44, 44,
 149         44, 44, 44, 44, 14, 44, 3, 3,
 150         44, 5, 44, 44, 44, 44, 44, 44,
 151         44, 44, 44, 47, 44, 44, 44, 44,
 152         44, 44, 14, 44, 3, 3, 44, 5,
 153         44, 44, 44, 44, 44, 44, 44, 44,
 154         44, 44, 44, 44, 44, 44, 44, 44,
 155         14, 44, 2, 44, 3, 3, 44, 5,
 156         44, 6, 44, 44, 44, 44, 44, 44,
 157         44, 48, 44, 44, 48, 44, 44, 44,
 158         14, 49, 44, 44, 18, 44, 2, 44,
 159         3, 3, 44, 5, 44, 6, 44, 44,
 160         44, 44, 44, 44, 44, 44, 44, 44,
 161         44, 44, 44, 44, 14, 44, 44, 44,
 162         18, 44, 2, 44, 3, 3, 44, 5,
 163         44, 6, 44, 44, 44, 44, 44, 44,
 164         44, 48, 44, 44, 44, 44, 44, 44,
 165         14, 49, 44, 44, 18, 44, 2, 44,
 166         3, 3, 44, 5, 44, 6, 44, 44,
 167         44, 44, 44, 44, 44, 44, 44, 44,
 168         44, 44, 44, 44, 14, 49, 44, 44,
 169         18, 44, 22, 23, 24, 24, 21, 25,
 170         21, 26, 21, 21, 21, 21, 21, 21,
 171         21, 50, 21, 21, 28, 29, 30, 31,
 172         32, 33, 34, 35, 36, 37, 21, 22,
 173         51, 24, 24, 21, 25, 21, 26, 21,
 174         21, 21, 21, 21, 21, 21, 27, 21,
 175         21, 28, 29, 30, 31, 32, 33, 34,
 176         35, 36, 21, 1, 1, 2, 3, 3,
 177         3, 44, 5, 44, 6, 1, 44, 44,
 178         44, 44, 1, 44, 8, 44, 44, 10,
 179         11, 12, 13, 14, 15, 16, 17, 18,
 180         19, 44, 1, 44, 2, 44, 3, 3,
 181         44, 5, 44, 6, 44, 44, 44, 44,
 182         44, 44, 44, 8, 44, 44, 10, 11,
 183         12, 13, 14, 15, 16, 17, 18, 44,
 184         2, 44, 3, 3, 44, 5, 44, 6,
 185         44, 44, 44, 44, 44, 44, 44, 52,
 186         44, 44, 44, 44, 44, 44, 14, 15,
 187         16, 17, 18, 44, 2, 44, 3, 3,
 188         44, 5, 44, 6, 44, 44, 44, 44,
 189         44, 44, 44, 44, 44, 44, 44, 44,
 190         44, 44, 14, 15, 16, 17, 18, 44,
 191         2, 44, 3, 3, 44, 5, 44, 6,
 192         44, 44, 44, 44, 44, 44, 44, 44,
 193         44, 44, 44, 44, 44, 44, 14, 15,
 194         16, 44, 18, 44, 2, 44, 3, 3,
 195         44, 5, 44, 6, 44, 44, 44, 44,
 196         44, 44, 44, 44, 44, 44, 44, 44,
 197         44, 44, 14, 44, 16, 44, 18, 44,
 198         2, 44, 3, 3, 44, 5, 44, 6,
 199         44, 44, 44, 44, 44, 44, 44, 44,
 200         44, 44, 44, 44, 44, 44, 14, 15,
 201         16, 17, 18, 52, 44, 2, 44, 3,
 202         3, 44, 5, 44, 6, 44, 44, 44,
 203         44, 44, 44, 44, 52, 44, 44, 10,
 204         44, 12, 44, 14, 15, 16, 17, 18,
 205         44, 2, 44, 3, 3, 44, 5, 44,
 206         6, 44, 44, 44, 44, 44, 44, 44,
 207         52, 44, 44, 10, 44, 44, 44, 14,
 208         15, 16, 17, 18, 44, 2, 44, 3,
 209         3, 44, 5, 44, 6, 44, 44, 44,
 210         44, 44, 44, 44, 52, 44, 44, 10,
 211         11, 12, 44, 14, 15, 16, 17, 18,
 212         44, 2, 3, 3, 3, 44, 5, 44,
 213         6, 44, 44, 44, 44, 44, 44, 44,
 214         8, 44, 44, 10, 11, 12, 13, 14,
 215         15, 16, 17, 18, 44, 1, 1, 53,
 216         53, 53, 53, 53, 53, 53, 53, 1,
 217         53, 53, 53, 53, 1, 53, 53, 53,
 218         53, 53, 53, 53, 53, 53, 53, 53,
 219         53, 53, 53, 53, 1, 53, 54, 53,
 220         0
 221 };
 222 
 223 static const char _myanmar_syllable_machine_trans_targs[] = {
 224         0, 1, 23, 0, 0, 24, 30, 33,
 225         36, 46, 37, 42, 43, 44, 26, 39,
 226         40, 41, 29, 45, 47, 0, 2, 12,
 227         0, 3, 9, 13, 14, 19, 20, 21,
 228         5, 16, 17, 18, 8, 22, 4, 6,
 229         7, 10, 11, 15, 0, 25, 27, 28,
 230         31, 32, 34, 35, 38, 0, 0
 231 };
 232 
 233 static const char _myanmar_syllable_machine_trans_actions[] = {
 234         3, 0, 0, 4, 5, 0, 0, 0,
 235         0, 0, 0, 0, 0, 0, 0, 0,
 236         0, 0, 0, 0, 0, 6, 0, 0,
 237         7, 0, 0, 0, 0, 0, 0, 0,
 238         0, 0, 0, 0, 0, 0, 0, 0,
 239         0, 0, 0, 0, 8, 0, 0, 0,
 240         0, 0, 0, 0, 0, 9, 10
 241 };
 242 
 243 static const char _myanmar_syllable_machine_to_state_actions[] = {
 244         1, 0, 0, 0, 0, 0, 0, 0,
 245         0, 0, 0, 0, 0, 0, 0, 0,
 246         0, 0, 0, 0, 0, 0, 0, 0,
 247         0, 0, 0, 0, 0, 0, 0, 0,
 248         0, 0, 0, 0, 0, 0, 0, 0,
 249         0, 0, 0, 0, 0, 0, 0, 0
 250 };
 251 
 252 static const char _myanmar_syllable_machine_from_state_actions[] = {
 253         2, 0, 0, 0, 0, 0, 0, 0,
 254         0, 0, 0, 0, 0, 0, 0, 0,
 255         0, 0, 0, 0, 0, 0, 0, 0,
 256         0, 0, 0, 0, 0, 0, 0, 0,
 257         0, 0, 0, 0, 0, 0, 0, 0,
 258         0, 0, 0, 0, 0, 0, 0, 0
 259 };
 260 
 261 static const short _myanmar_syllable_machine_eof_trans[] = {
 262         0, 22, 22, 22, 22, 22, 22, 22,
 263         22, 22, 22, 22, 22, 22, 22, 22,
 264         22, 22, 22, 22, 22, 22, 22, 45,
 265         45, 45, 45, 45, 45, 45, 45, 45,
 266         45, 22, 22, 45, 45, 45, 45, 45,
 267         45, 45, 45, 45, 45, 45, 54, 54
 268 };
 269 
 270 static const int myanmar_syllable_machine_start = 0;
 271 static const int myanmar_syllable_machine_first_final = 0;
 272 static const int myanmar_syllable_machine_error = -1;
 273 
 274 static const int myanmar_syllable_machine_en_main = 0;
 275 
 276 
 277 #line 36 "hb-ot-shape-complex-myanmar-machine.rl"
 278 
 279 
 280 
 281 #line 94 "hb-ot-shape-complex-myanmar-machine.rl"
 282 
 283 
 284 #define found_syllable(syllable_type) \
 285   HB_STMT_START { \
 286     if (0) fprintf (stderr, "syllable %d..%d %s\n", last, p+1, #syllable_type); \
 287     for (unsigned int i = last; i < p+1; i++) \
 288       info[i].syllable() = (syllable_serial << 4) | syllable_type; \
 289     last = p+1; \
 290     syllable_serial++; \
 291     if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
 292   } HB_STMT_END
 293 
 294 static void
 295 find_syllables (hb_buffer_t *buffer)
 296 {
 297   unsigned int p, pe, eof, ts HB_UNUSED, te HB_UNUSED, act HB_UNUSED;
 298   int cs;
 299   hb_glyph_info_t *info = buffer->info;
 300 
 301 #line 302 "hb-ot-shape-complex-myanmar-machine.hh"
 302         {
 303         cs = myanmar_syllable_machine_start;
 304         ts = 0;
 305         te = 0;
 306         act = 0;
 307         }
 308 
 309 #line 115 "hb-ot-shape-complex-myanmar-machine.rl"
 310 
 311 
 312   p = 0;
 313   pe = eof = buffer->len;
 314 
 315   unsigned int last = 0;
 316   unsigned int syllable_serial = 1;
 317 
 318 #line 319 "hb-ot-shape-complex-myanmar-machine.hh"
 319         {
 320         int _slen;
 321         int _trans;
 322         const unsigned char *_keys;
 323         const char *_inds;
 324         if ( p == pe )
 325                 goto _test_eof;
 326 _resume:
 327         switch ( _myanmar_syllable_machine_from_state_actions[cs] ) {
 328         case 2:
 329 #line 1 "NONE"
 330         {ts = p;}
 331         break;
 332 #line 333 "hb-ot-shape-complex-myanmar-machine.hh"
 333         }
 334 
 335         _keys = _myanmar_syllable_machine_trans_keys + (cs<<1);
 336         _inds = _myanmar_syllable_machine_indicies + _myanmar_syllable_machine_index_offsets[cs];
 337 
 338         _slen = _myanmar_syllable_machine_key_spans[cs];
 339         _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].myanmar_category()) &&
 340                 ( info[p].myanmar_category()) <= _keys[1] ?
 341                 ( info[p].myanmar_category()) - _keys[0] : _slen ];
 342 
 343 _eof_trans:
 344         cs = _myanmar_syllable_machine_trans_targs[_trans];
 345 
 346         if ( _myanmar_syllable_machine_trans_actions[_trans] == 0 )
 347                 goto _again;
 348 
 349         switch ( _myanmar_syllable_machine_trans_actions[_trans] ) {
 350         case 7:
 351 #line 86 "hb-ot-shape-complex-myanmar-machine.rl"
 352         {te = p+1;{ found_syllable (consonant_syllable); }}
 353         break;
 354         case 5:
 355 #line 87 "hb-ot-shape-complex-myanmar-machine.rl"
 356         {te = p+1;{ found_syllable (non_myanmar_cluster); }}
 357         break;
 358         case 10:
 359 #line 88 "hb-ot-shape-complex-myanmar-machine.rl"
 360         {te = p+1;{ found_syllable (punctuation_cluster); }}
 361         break;
 362         case 4:
 363 #line 89 "hb-ot-shape-complex-myanmar-machine.rl"
 364         {te = p+1;{ found_syllable (broken_cluster); }}
 365         break;
 366         case 3:
 367 #line 90 "hb-ot-shape-complex-myanmar-machine.rl"
 368         {te = p+1;{ found_syllable (non_myanmar_cluster); }}
 369         break;
 370         case 6:
 371 #line 86 "hb-ot-shape-complex-myanmar-machine.rl"
 372         {te = p;p--;{ found_syllable (consonant_syllable); }}
 373         break;
 374         case 8:
 375 #line 89 "hb-ot-shape-complex-myanmar-machine.rl"
 376         {te = p;p--;{ found_syllable (broken_cluster); }}
 377         break;
 378         case 9:
 379 #line 90 "hb-ot-shape-complex-myanmar-machine.rl"
 380         {te = p;p--;{ found_syllable (non_myanmar_cluster); }}
 381         break;
 382 #line 383 "hb-ot-shape-complex-myanmar-machine.hh"
 383         }
 384 
 385 _again:
 386         switch ( _myanmar_syllable_machine_to_state_actions[cs] ) {
 387         case 1:
 388 #line 1 "NONE"
 389         {ts = 0;}
 390         break;
 391 #line 392 "hb-ot-shape-complex-myanmar-machine.hh"
 392         }
 393 
 394         if ( ++p != pe )
 395                 goto _resume;
 396         _test_eof: {}
 397         if ( p == eof )
 398         {
 399         if ( _myanmar_syllable_machine_eof_trans[cs] > 0 ) {
 400                 _trans = _myanmar_syllable_machine_eof_trans[cs] - 1;
 401                 goto _eof_trans;
 402         }
 403         }
 404 
 405         }
 406 
 407 #line 124 "hb-ot-shape-complex-myanmar-machine.rl"
 408 
 409 }
 410 
 411 #undef found_syllable
 412 
 413 #endif /* HB_OT_SHAPE_COMPLEX_MYANMAR_MACHINE_HH */