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" 36static 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 45static 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 54static 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 63static 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 210static 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 220static 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 230static 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 239static 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 248static 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 257static const int myanmar_syllable_machine_start = 0; 258static const int myanmar_syllable_machine_first_final = 0; 259static const int myanmar_syllable_machine_error = -1; 260 261static 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 281static void 282find_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 */ 401