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.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", ts, te, #syllable_type); \
 287     for (unsigned int i = ts; i < te; i++) \
 288       info[i].syllable() = (syllable_serial << 4) | syllable_type; \
 289     syllable_serial++; \
 290     if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
 291   } HB_STMT_END
 292 
 293 static void
 294 find_syllables (hb_buffer_t *buffer)
 295 {
 296   unsigned int p, pe, eof, ts, te, act HB_UNUSED;
 297   int cs;
 298   hb_glyph_info_t *info = buffer->info;
 299 
 300 #line 301 "hb-ot-shape-complex-myanmar-machine.hh"
 301         {
 302         cs = myanmar_syllable_machine_start;
 303         ts = 0;
 304         te = 0;
 305         act = 0;
 306         }
 307 
 308 #line 114 "hb-ot-shape-complex-myanmar-machine.rl"
 309 
 310 
 311   p = 0;
 312   pe = eof = buffer->len;
 313 
 314   unsigned int syllable_serial = 1;
 315 
 316 #line 317 "hb-ot-shape-complex-myanmar-machine.hh"
 317         {
 318         int _slen;
 319         int _trans;
 320         const unsigned char *_keys;
 321         const char *_inds;
 322         if ( p == pe )
 323                 goto _test_eof;
 324 _resume:
 325         switch ( _myanmar_syllable_machine_from_state_actions[cs] ) {
 326         case 2:
 327 #line 1 "NONE"
 328         {ts = p;}
 329         break;
 330 #line 331 "hb-ot-shape-complex-myanmar-machine.hh"
 331         }
 332 
 333         _keys = _myanmar_syllable_machine_trans_keys + (cs<<1);
 334         _inds = _myanmar_syllable_machine_indicies + _myanmar_syllable_machine_index_offsets[cs];
 335 
 336         _slen = _myanmar_syllable_machine_key_spans[cs];
 337         _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].myanmar_category()) &&
 338                 ( info[p].myanmar_category()) <= _keys[1] ?
 339                 ( info[p].myanmar_category()) - _keys[0] : _slen ];
 340 
 341 _eof_trans:
 342         cs = _myanmar_syllable_machine_trans_targs[_trans];
 343 
 344         if ( _myanmar_syllable_machine_trans_actions[_trans] == 0 )
 345                 goto _again;
 346 
 347         switch ( _myanmar_syllable_machine_trans_actions[_trans] ) {
 348         case 7:
 349 #line 86 "hb-ot-shape-complex-myanmar-machine.rl"
 350         {te = p+1;{ found_syllable (consonant_syllable); }}
 351         break;
 352         case 5:
 353 #line 87 "hb-ot-shape-complex-myanmar-machine.rl"
 354         {te = p+1;{ found_syllable (non_myanmar_cluster); }}
 355         break;
 356         case 10:
 357 #line 88 "hb-ot-shape-complex-myanmar-machine.rl"
 358         {te = p+1;{ found_syllable (punctuation_cluster); }}
 359         break;
 360         case 4:
 361 #line 89 "hb-ot-shape-complex-myanmar-machine.rl"
 362         {te = p+1;{ found_syllable (broken_cluster); }}
 363         break;
 364         case 3:
 365 #line 90 "hb-ot-shape-complex-myanmar-machine.rl"
 366         {te = p+1;{ found_syllable (non_myanmar_cluster); }}
 367         break;
 368         case 6:
 369 #line 86 "hb-ot-shape-complex-myanmar-machine.rl"
 370         {te = p;p--;{ found_syllable (consonant_syllable); }}
 371         break;
 372         case 8:
 373 #line 89 "hb-ot-shape-complex-myanmar-machine.rl"
 374         {te = p;p--;{ found_syllable (broken_cluster); }}
 375         break;
 376         case 9:
 377 #line 90 "hb-ot-shape-complex-myanmar-machine.rl"
 378         {te = p;p--;{ found_syllable (non_myanmar_cluster); }}
 379         break;
 380 #line 381 "hb-ot-shape-complex-myanmar-machine.hh"
 381         }
 382 
 383 _again:
 384         switch ( _myanmar_syllable_machine_to_state_actions[cs] ) {
 385         case 1:
 386 #line 1 "NONE"
 387         {ts = 0;}
 388         break;
 389 #line 390 "hb-ot-shape-complex-myanmar-machine.hh"
 390         }
 391 
 392         if ( ++p != pe )
 393                 goto _resume;
 394         _test_eof: {}
 395         if ( p == eof )
 396         {
 397         if ( _myanmar_syllable_machine_eof_trans[cs] > 0 ) {
 398                 _trans = _myanmar_syllable_machine_eof_trans[cs] - 1;
 399                 goto _eof_trans;
 400         }
 401         }
 402 
 403         }
 404 
 405 #line 122 "hb-ot-shape-complex-myanmar-machine.rl"
 406 
 407 }
 408 
 409 #undef found_syllable
 410 
 411 #endif /* HB_OT_SHAPE_COMPLEX_MYANMAR_MACHINE_HH */