10ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 29fe80482a1adfd555ec60b563cd9b6641528d2e2Behdad Esfahbod#line 1 "../../src/hb-ot-shape-complex-sea-machine.rl" 30ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien/* 40ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * Copyright © 2011,2012,2013 Google, Inc. 50ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * 60ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * This is part of HarfBuzz, a text shaping library. 70ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * 80ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * Permission is hereby granted, without written agreement and without 90ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * license or royalty fees, to use, copy, modify, and distribute this 100ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * software and its documentation for any purpose, provided that the 110ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * above copyright notice and the following two paragraphs appear in 120ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * all copies of this software. 130ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * 140ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 150ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 160ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 170ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 180ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * DAMAGE. 190ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * 200ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 210ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 220ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 230ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 240ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 250ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * 260ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien * Google Author(s): Behdad Esfahbod 270ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien */ 280ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 290ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien#ifndef HB_OT_SHAPE_COMPLEX_SEA_MACHINE_HH 300ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien#define HB_OT_SHAPE_COMPLEX_SEA_MACHINE_HH 310ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 320ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien#include "hb-private.hh" 330ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 340ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 350ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien#line 36 "hb-ot-shape-complex-sea-machine.hh.tmp" 360ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levienstatic const unsigned char _sea_syllable_machine_trans_keys[] = { 370ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 1u, 1u, 1u, 1u, 1u, 29u, 3u, 29u, 3u, 29u, 1u, 1u, 0 380ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien}; 390ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 400ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levienstatic const char _sea_syllable_machine_key_spans[] = { 410ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 1, 1, 29, 27, 27, 1 420ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien}; 430ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 440ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levienstatic const char _sea_syllable_machine_index_offsets[] = { 450ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 0, 2, 4, 34, 62, 90 460ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien}; 470ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 480ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levienstatic const char _sea_syllable_machine_indicies[] = { 490ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 1, 0, 3, 2, 1, 1, 3, 5, 500ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 4, 4, 4, 4, 4, 3, 4, 1, 510ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 4, 4, 4, 4, 3, 4, 4, 4, 520ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 4, 3, 4, 4, 4, 3, 3, 3, 530ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 3, 4, 1, 7, 6, 6, 6, 6, 540ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 6, 1, 6, 6, 6, 6, 6, 6, 550ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 1, 6, 6, 6, 6, 1, 6, 6, 560ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 6, 1, 1, 1, 1, 6, 3, 9, 570ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 8, 8, 8, 8, 8, 3, 8, 8, 580ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 8, 8, 8, 8, 3, 8, 8, 8, 590ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 8, 3, 8, 8, 8, 3, 3, 3, 600ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 3, 8, 3, 10, 0 610ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien}; 620ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 630ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levienstatic const char _sea_syllable_machine_trans_targs[] = { 640ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 2, 3, 2, 4, 2, 5, 2, 0, 650ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 2, 1, 2 660ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien}; 670ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 680ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levienstatic const char _sea_syllable_machine_trans_actions[] = { 690ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 1, 2, 3, 2, 6, 0, 7, 0, 700ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 8, 0, 9 710ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien}; 720ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 730ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levienstatic const char _sea_syllable_machine_to_state_actions[] = { 740ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 0, 0, 4, 0, 0, 0 750ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien}; 760ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 770ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levienstatic const char _sea_syllable_machine_from_state_actions[] = { 780ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 0, 0, 5, 0, 0, 0 790ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien}; 800ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 810ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levienstatic const char _sea_syllable_machine_eof_trans[] = { 820ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 1, 3, 0, 7, 9, 11 830ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien}; 840ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 850ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levienstatic const int sea_syllable_machine_start = 2; 860ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levienstatic const int sea_syllable_machine_first_final = 2; 870ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levienstatic const int sea_syllable_machine_error = -1; 880ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 890ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levienstatic const int sea_syllable_machine_en_main = 2; 900ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 910ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 929fe80482a1adfd555ec60b563cd9b6641528d2e2Behdad Esfahbod#line 36 "../../src/hb-ot-shape-complex-sea-machine.rl" 930ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 940ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 950ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 969fe80482a1adfd555ec60b563cd9b6641528d2e2Behdad Esfahbod#line 67 "../../src/hb-ot-shape-complex-sea-machine.rl" 970ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 980ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 990ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien#define found_syllable(syllable_type) \ 1000ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien HB_STMT_START { \ 1010ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien if (0) fprintf (stderr, "syllable %d..%d %s\n", last, p+1, #syllable_type); \ 1020ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien for (unsigned int i = last; i < p+1; i++) \ 1030ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien info[i].syllable() = (syllable_serial << 4) | syllable_type; \ 1040ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien last = p+1; \ 1050ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien syllable_serial++; \ 1060ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien if (unlikely (syllable_serial == 16)) syllable_serial = 1; \ 1070ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien } HB_STMT_END 1080ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 1090ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levienstatic void 1100ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levienfind_syllables (hb_buffer_t *buffer) 1110ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien{ 1120ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien unsigned int p, pe, eof, ts HB_UNUSED, te HB_UNUSED, act HB_UNUSED; 1130ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien int cs; 1140ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien hb_glyph_info_t *info = buffer->info; 1150ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 1160ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien#line 117 "hb-ot-shape-complex-sea-machine.hh.tmp" 1170ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien { 1180ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien cs = sea_syllable_machine_start; 1190ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien ts = 0; 1200ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien te = 0; 1210ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien act = 0; 1220ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien } 1230ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 1249fe80482a1adfd555ec60b563cd9b6641528d2e2Behdad Esfahbod#line 88 "../../src/hb-ot-shape-complex-sea-machine.rl" 1250ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 1260ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 1270ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien p = 0; 1280ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien pe = eof = buffer->len; 1290ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 1300ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien unsigned int last = 0; 1310ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien unsigned int syllable_serial = 1; 1320ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 1330ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien#line 134 "hb-ot-shape-complex-sea-machine.hh.tmp" 1340ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien { 1350ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien int _slen; 1360ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien int _trans; 1370ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien const unsigned char *_keys; 1380ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien const char *_inds; 1390ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien if ( p == pe ) 1400ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien goto _test_eof; 1410ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien_resume: 1420ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien switch ( _sea_syllable_machine_from_state_actions[cs] ) { 1430ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien case 5: 1440ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien#line 1 "NONE" 1450ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien {ts = p;} 1460ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien break; 1470ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien#line 148 "hb-ot-shape-complex-sea-machine.hh.tmp" 1480ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien } 1490ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 1500ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien _keys = _sea_syllable_machine_trans_keys + (cs<<1); 1510ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien _inds = _sea_syllable_machine_indicies + _sea_syllable_machine_index_offsets[cs]; 1520ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 1530ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien _slen = _sea_syllable_machine_key_spans[cs]; 1540ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].sea_category()) && 1550ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien ( info[p].sea_category()) <= _keys[1] ? 1560ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien ( info[p].sea_category()) - _keys[0] : _slen ]; 1570ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 1580ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien_eof_trans: 1590ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien cs = _sea_syllable_machine_trans_targs[_trans]; 1600ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 1610ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien if ( _sea_syllable_machine_trans_actions[_trans] == 0 ) 1620ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien goto _again; 1630ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 1640ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien switch ( _sea_syllable_machine_trans_actions[_trans] ) { 1650ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien case 2: 1660ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien#line 1 "NONE" 1670ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien {te = p+1;} 1680ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien break; 1690ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien case 6: 1709fe80482a1adfd555ec60b563cd9b6641528d2e2Behdad Esfahbod#line 63 "../../src/hb-ot-shape-complex-sea-machine.rl" 1710ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien {te = p+1;{ found_syllable (non_sea_cluster); }} 1720ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien break; 1730ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien case 7: 1749fe80482a1adfd555ec60b563cd9b6641528d2e2Behdad Esfahbod#line 61 "../../src/hb-ot-shape-complex-sea-machine.rl" 1750ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien {te = p;p--;{ found_syllable (consonant_syllable); }} 1760ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien break; 1770ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien case 8: 1789fe80482a1adfd555ec60b563cd9b6641528d2e2Behdad Esfahbod#line 62 "../../src/hb-ot-shape-complex-sea-machine.rl" 1790ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien {te = p;p--;{ found_syllable (broken_cluster); }} 1800ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien break; 1810ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien case 9: 1829fe80482a1adfd555ec60b563cd9b6641528d2e2Behdad Esfahbod#line 63 "../../src/hb-ot-shape-complex-sea-machine.rl" 1830ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien {te = p;p--;{ found_syllable (non_sea_cluster); }} 1840ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien break; 1850ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien case 1: 1869fe80482a1adfd555ec60b563cd9b6641528d2e2Behdad Esfahbod#line 61 "../../src/hb-ot-shape-complex-sea-machine.rl" 1870ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien {{p = ((te))-1;}{ found_syllable (consonant_syllable); }} 1880ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien break; 1890ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien case 3: 1909fe80482a1adfd555ec60b563cd9b6641528d2e2Behdad Esfahbod#line 62 "../../src/hb-ot-shape-complex-sea-machine.rl" 1910ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien {{p = ((te))-1;}{ found_syllable (broken_cluster); }} 1920ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien break; 1930ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien#line 194 "hb-ot-shape-complex-sea-machine.hh.tmp" 1940ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien } 1950ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 1960ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien_again: 1970ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien switch ( _sea_syllable_machine_to_state_actions[cs] ) { 1980ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien case 4: 1990ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien#line 1 "NONE" 2000ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien {ts = 0;} 2010ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien break; 2020ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien#line 203 "hb-ot-shape-complex-sea-machine.hh.tmp" 2030ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien } 2040ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 2050ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien if ( ++p != pe ) 2060ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien goto _resume; 2070ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien _test_eof: {} 2080ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien if ( p == eof ) 2090ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien { 2100ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien if ( _sea_syllable_machine_eof_trans[cs] > 0 ) { 2110ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien _trans = _sea_syllable_machine_eof_trans[cs] - 1; 2120ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien goto _eof_trans; 2130ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien } 2140ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien } 2150ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 2160ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien } 2170ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 2189fe80482a1adfd555ec60b563cd9b6641528d2e2Behdad Esfahbod#line 97 "../../src/hb-ot-shape-complex-sea-machine.rl" 2190ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 2200ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien} 2210ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 2220ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien#undef found_syllable 2230ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien 2240ae9e064ddee691abed9dd70f57475e2e926e86bRaph Levien#endif /* HB_OT_SHAPE_COMPLEX_SEA_MACHINE_HH */ 225