Imported Upstream version 2.3.1
[platform/upstream/harfbuzz.git] / src / hb-ot-shape-complex-indic-machine.hh
1
2 #line 1 "hb-ot-shape-complex-indic-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_INDIC_MACHINE_HH
30 #define HB_OT_SHAPE_COMPLEX_INDIC_MACHINE_HH
31
32 #include "hb.hh"
33
34
35 #line 36 "hb-ot-shape-complex-indic-machine.hh"
36 static const unsigned char _indic_syllable_machine_trans_keys[] = {
37         8u, 8u, 4u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 
38         5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 4u, 8u, 6u, 6u, 16u, 16u, 
39         4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 
40         16u, 16u, 4u, 13u, 4u, 8u, 4u, 13u, 4u, 8u, 4u, 13u, 4u, 8u, 4u, 13u, 
41         4u, 8u, 4u, 13u, 8u, 8u, 4u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 
42         7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 4u, 8u, 
43         6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 
44         4u, 8u, 6u, 6u, 16u, 16u, 4u, 13u, 4u, 8u, 4u, 13u, 4u, 8u, 4u, 13u, 
45         4u, 8u, 4u, 13u, 4u, 8u, 4u, 13u, 8u, 8u, 4u, 8u, 5u, 7u, 7u, 7u, 
46         5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 
47         7u, 7u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 
48         6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 13u, 4u, 8u, 4u, 13u, 
49         4u, 8u, 4u, 13u, 4u, 8u, 4u, 13u, 4u, 8u, 8u, 8u, 4u, 8u, 5u, 7u, 
50         7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 
51         5u, 7u, 7u, 7u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 
52         4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 13u, 4u, 8u, 
53         4u, 13u, 4u, 8u, 4u, 13u, 4u, 8u, 4u, 13u, 4u, 8u, 4u, 13u, 4u, 13u, 
54         5u, 8u, 8u, 8u, 1u, 19u, 3u, 13u, 3u, 10u, 4u, 10u, 1u, 16u, 3u, 13u, 
55         3u, 10u, 4u, 10u, 1u, 16u, 3u, 13u, 3u, 10u, 4u, 10u, 1u, 16u, 3u, 13u, 
56         3u, 10u, 4u, 10u, 1u, 16u, 3u, 13u, 3u, 10u, 4u, 10u, 5u, 10u, 5u, 10u, 
57         5u, 10u, 10u, 10u, 10u, 10u, 10u, 10u, 5u, 10u, 3u, 10u, 5u, 10u, 3u, 10u, 
58         4u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 5u, 10u, 
59         3u, 10u, 4u, 10u, 3u, 10u, 3u, 13u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 10u, 
60         3u, 13u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 10u, 3u, 13u, 1u, 16u, 1u, 16u, 
61         1u, 16u, 3u, 10u, 3u, 13u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 10u, 3u, 13u, 
62         3u, 13u, 3u, 10u, 4u, 10u, 1u, 16u, 3u, 13u, 3u, 10u, 4u, 10u, 1u, 16u, 
63         3u, 13u, 3u, 10u, 4u, 10u, 1u, 16u, 3u, 13u, 3u, 10u, 4u, 10u, 1u, 16u, 
64         3u, 13u, 3u, 10u, 4u, 10u, 5u, 10u, 5u, 10u, 5u, 10u, 10u, 10u, 10u, 10u, 
65         10u, 10u, 5u, 10u, 3u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 5u, 10u, 3u, 10u, 
66         4u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 3u, 10u, 
67         3u, 13u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 10u, 3u, 13u, 1u, 16u, 1u, 16u, 
68         1u, 16u, 3u, 10u, 3u, 13u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 10u, 3u, 13u, 
69         1u, 16u, 1u, 16u, 1u, 16u, 4u, 8u, 3u, 10u, 3u, 10u, 4u, 10u, 1u, 16u, 
70         3u, 13u, 3u, 10u, 4u, 10u, 1u, 16u, 3u, 13u, 3u, 10u, 4u, 10u, 1u, 16u, 
71         3u, 13u, 3u, 10u, 4u, 10u, 1u, 16u, 3u, 13u, 3u, 10u, 4u, 10u, 5u, 10u, 
72         5u, 10u, 5u, 10u, 10u, 10u, 10u, 10u, 10u, 10u, 5u, 10u, 3u, 10u, 5u, 10u, 
73         3u, 10u, 4u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 
74         5u, 10u, 3u, 10u, 4u, 10u, 3u, 10u, 3u, 13u, 1u, 16u, 1u, 16u, 1u, 16u, 
75         3u, 10u, 3u, 13u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 10u, 3u, 13u, 1u, 16u, 
76         1u, 16u, 1u, 16u, 3u, 10u, 3u, 13u, 1u, 16u, 1u, 16u, 1u, 16u, 4u, 13u, 
77         3u, 10u, 4u, 8u, 3u, 13u, 3u, 10u, 4u, 10u, 1u, 16u, 3u, 13u, 3u, 10u, 
78         4u, 10u, 1u, 16u, 3u, 13u, 3u, 10u, 4u, 10u, 1u, 16u, 3u, 13u, 3u, 10u, 
79         4u, 10u, 1u, 16u, 3u, 13u, 3u, 10u, 4u, 10u, 5u, 10u, 5u, 10u, 5u, 10u, 
80         10u, 10u, 10u, 10u, 10u, 10u, 5u, 10u, 3u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 
81         5u, 10u, 3u, 10u, 4u, 10u, 5u, 10u, 3u, 10u, 4u, 10u, 5u, 10u, 3u, 10u, 
82         4u, 10u, 3u, 10u, 3u, 13u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 10u, 3u, 13u, 
83         1u, 16u, 1u, 16u, 1u, 16u, 3u, 10u, 3u, 13u, 1u, 16u, 1u, 16u, 1u, 16u, 
84         3u, 10u, 3u, 13u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 10u, 1u, 16u, 3u, 13u, 
85         1u, 16u, 4u, 13u, 5u, 10u, 10u, 10u, 10u, 10u, 10u, 10u, 5u, 10u, 1u, 16u, 
86         3u, 10u, 5u, 10u, 5u, 10u, 10u, 10u, 10u, 10u, 10u, 10u, 5u, 10u, 1u, 16u, 
87         0
88 };
89
90 static const char _indic_syllable_machine_key_spans[] = {
91         1, 5, 3, 1, 4, 3, 1, 4, 
92         3, 1, 4, 3, 1, 5, 1, 1, 
93         5, 1, 1, 5, 1, 1, 5, 1, 
94         1, 10, 5, 10, 5, 10, 5, 10, 
95         5, 10, 1, 5, 3, 1, 4, 3, 
96         1, 4, 3, 1, 4, 3, 1, 5, 
97         1, 1, 5, 1, 1, 5, 1, 1, 
98         5, 1, 1, 10, 5, 10, 5, 10, 
99         5, 10, 5, 10, 1, 5, 3, 1, 
100         4, 3, 1, 4, 3, 1, 4, 3, 
101         1, 5, 1, 1, 5, 1, 1, 5, 
102         1, 1, 5, 1, 1, 10, 5, 10, 
103         5, 10, 5, 10, 5, 1, 5, 3, 
104         1, 4, 3, 1, 4, 3, 1, 4, 
105         3, 1, 5, 1, 1, 5, 1, 1, 
106         5, 1, 1, 5, 1, 1, 10, 5, 
107         10, 5, 10, 5, 10, 5, 10, 10, 
108         4, 1, 19, 11, 8, 7, 16, 11, 
109         8, 7, 16, 11, 8, 7, 16, 11, 
110         8, 7, 16, 11, 8, 7, 6, 6, 
111         6, 1, 1, 1, 6, 8, 6, 8, 
112         7, 6, 8, 7, 6, 8, 7, 6, 
113         8, 7, 8, 11, 16, 16, 16, 8, 
114         11, 16, 16, 16, 8, 11, 16, 16, 
115         16, 8, 11, 16, 16, 16, 8, 11, 
116         11, 8, 7, 16, 11, 8, 7, 16, 
117         11, 8, 7, 16, 11, 8, 7, 16, 
118         11, 8, 7, 6, 6, 6, 1, 1, 
119         1, 6, 8, 6, 8, 7, 6, 8, 
120         7, 6, 8, 7, 6, 8, 7, 8, 
121         11, 16, 16, 16, 8, 11, 16, 16, 
122         16, 8, 11, 16, 16, 16, 8, 11, 
123         16, 16, 16, 5, 8, 8, 7, 16, 
124         11, 8, 7, 16, 11, 8, 7, 16, 
125         11, 8, 7, 16, 11, 8, 7, 6, 
126         6, 6, 1, 1, 1, 6, 8, 6, 
127         8, 7, 6, 8, 7, 6, 8, 7, 
128         6, 8, 7, 8, 11, 16, 16, 16, 
129         8, 11, 16, 16, 16, 8, 11, 16, 
130         16, 16, 8, 11, 16, 16, 16, 10, 
131         8, 5, 11, 8, 7, 16, 11, 8, 
132         7, 16, 11, 8, 7, 16, 11, 8, 
133         7, 16, 11, 8, 7, 6, 6, 6, 
134         1, 1, 1, 6, 8, 6, 8, 7, 
135         6, 8, 7, 6, 8, 7, 6, 8, 
136         7, 8, 11, 16, 16, 16, 8, 11, 
137         16, 16, 16, 8, 11, 16, 16, 16, 
138         8, 11, 16, 16, 16, 8, 16, 11, 
139         16, 10, 6, 1, 1, 1, 6, 16, 
140         8, 6, 6, 1, 1, 1, 6, 16
141 };
142
143 static const short _indic_syllable_machine_index_offsets[] = {
144         0, 2, 8, 12, 14, 19, 23, 25, 
145         30, 34, 36, 41, 45, 47, 53, 55, 
146         57, 63, 65, 67, 73, 75, 77, 83, 
147         85, 87, 98, 104, 115, 121, 132, 138, 
148         149, 155, 166, 168, 174, 178, 180, 185, 
149         189, 191, 196, 200, 202, 207, 211, 213, 
150         219, 221, 223, 229, 231, 233, 239, 241, 
151         243, 249, 251, 253, 264, 270, 281, 287, 
152         298, 304, 315, 321, 332, 334, 340, 344, 
153         346, 351, 355, 357, 362, 366, 368, 373, 
154         377, 379, 385, 387, 389, 395, 397, 399, 
155         405, 407, 409, 415, 417, 419, 430, 436, 
156         447, 453, 464, 470, 481, 487, 489, 495, 
157         499, 501, 506, 510, 512, 517, 521, 523, 
158         528, 532, 534, 540, 542, 544, 550, 552, 
159         554, 560, 562, 564, 570, 572, 574, 585, 
160         591, 602, 608, 619, 625, 636, 642, 653, 
161         664, 669, 671, 691, 703, 712, 720, 737, 
162         749, 758, 766, 783, 795, 804, 812, 829, 
163         841, 850, 858, 875, 887, 896, 904, 911, 
164         918, 925, 927, 929, 931, 938, 947, 954, 
165         963, 971, 978, 987, 995, 1002, 1011, 1019, 
166         1026, 1035, 1043, 1052, 1064, 1081, 1098, 1115, 
167         1124, 1136, 1153, 1170, 1187, 1196, 1208, 1225, 
168         1242, 1259, 1268, 1280, 1297, 1314, 1331, 1340, 
169         1352, 1364, 1373, 1381, 1398, 1410, 1419, 1427, 
170         1444, 1456, 1465, 1473, 1490, 1502, 1511, 1519, 
171         1536, 1548, 1557, 1565, 1572, 1579, 1586, 1588, 
172         1590, 1592, 1599, 1608, 1615, 1624, 1632, 1639, 
173         1648, 1656, 1663, 1672, 1680, 1687, 1696, 1704, 
174         1713, 1725, 1742, 1759, 1776, 1785, 1797, 1814, 
175         1831, 1848, 1857, 1869, 1886, 1903, 1920, 1929, 
176         1941, 1958, 1975, 1992, 1998, 2007, 2016, 2024, 
177         2041, 2053, 2062, 2070, 2087, 2099, 2108, 2116, 
178         2133, 2145, 2154, 2162, 2179, 2191, 2200, 2208, 
179         2215, 2222, 2229, 2231, 2233, 2235, 2242, 2251, 
180         2258, 2267, 2275, 2282, 2291, 2299, 2306, 2315, 
181         2323, 2330, 2339, 2347, 2356, 2368, 2385, 2402, 
182         2419, 2428, 2440, 2457, 2474, 2491, 2500, 2512, 
183         2529, 2546, 2563, 2572, 2584, 2601, 2618, 2635, 
184         2646, 2655, 2661, 2673, 2682, 2690, 2707, 2719, 
185         2728, 2736, 2753, 2765, 2774, 2782, 2799, 2811, 
186         2820, 2828, 2845, 2857, 2866, 2874, 2881, 2888, 
187         2895, 2897, 2899, 2901, 2908, 2917, 2924, 2933, 
188         2941, 2948, 2957, 2965, 2972, 2981, 2989, 2996, 
189         3005, 3013, 3022, 3034, 3051, 3068, 3085, 3094, 
190         3106, 3123, 3140, 3157, 3166, 3178, 3195, 3212, 
191         3229, 3238, 3250, 3267, 3284, 3301, 3310, 3327, 
192         3339, 3356, 3367, 3374, 3376, 3378, 3380, 3387, 
193         3404, 3413, 3420, 3427, 3429, 3431, 3433, 3440
194 };
195
196 static const short _indic_syllable_machine_indicies[] = {
197         1, 0, 2, 3, 3, 4, 1, 0, 
198         5, 5, 4, 0, 4, 0, 6, 6, 
199         7, 1, 0, 8, 8, 7, 0, 7, 
200         0, 9, 9, 10, 1, 0, 11, 11, 
201         10, 0, 10, 0, 12, 12, 13, 1, 
202         0, 14, 14, 13, 0, 13, 0, 15, 
203         0, 0, 0, 1, 0, 16, 0, 17, 
204         0, 18, 12, 12, 13, 1, 0, 19, 
205         0, 20, 0, 21, 9, 9, 10, 1, 
206         0, 22, 0, 23, 0, 24, 6, 6, 
207         7, 1, 0, 25, 0, 26, 0, 2, 
208         3, 3, 4, 1, 0, 0, 0, 0, 
209         27, 0, 28, 3, 3, 4, 1, 0, 
210         28, 3, 3, 4, 1, 0, 0, 0, 
211         0, 29, 0, 30, 3, 3, 4, 1, 
212         0, 30, 3, 3, 4, 1, 0, 0, 
213         0, 0, 31, 0, 32, 3, 3, 4, 
214         1, 0, 32, 3, 3, 4, 1, 0, 
215         0, 0, 0, 33, 0, 34, 3, 3, 
216         4, 1, 0, 34, 3, 3, 4, 1, 
217         0, 0, 0, 0, 35, 0, 37, 36, 
218         38, 39, 39, 40, 37, 36, 41, 41, 
219         40, 36, 40, 36, 42, 42, 43, 37, 
220         36, 44, 44, 43, 36, 43, 36, 45, 
221         45, 46, 37, 36, 47, 47, 46, 36, 
222         46, 36, 48, 48, 49, 37, 36, 50, 
223         50, 49, 36, 49, 36, 51, 36, 36, 
224         36, 37, 36, 52, 36, 53, 36, 54, 
225         48, 48, 49, 37, 36, 55, 36, 56, 
226         36, 57, 45, 45, 46, 37, 36, 58, 
227         36, 59, 36, 60, 42, 42, 43, 37, 
228         36, 61, 36, 62, 36, 38, 39, 39, 
229         40, 37, 36, 36, 36, 36, 63, 36, 
230         64, 39, 39, 40, 37, 36, 64, 39, 
231         39, 40, 37, 36, 36, 36, 36, 65, 
232         36, 66, 39, 39, 40, 37, 36, 66, 
233         39, 39, 40, 37, 36, 36, 36, 36, 
234         67, 36, 68, 39, 39, 40, 37, 36, 
235         68, 39, 39, 40, 37, 36, 36, 36, 
236         36, 69, 36, 70, 39, 39, 40, 37, 
237         36, 70, 39, 39, 40, 37, 36, 36, 
238         36, 36, 71, 36, 73, 72, 74, 75, 
239         75, 76, 73, 72, 78, 78, 76, 77, 
240         76, 77, 79, 79, 80, 73, 72, 81, 
241         81, 80, 72, 80, 72, 82, 82, 83, 
242         73, 72, 84, 84, 83, 72, 83, 72, 
243         85, 85, 86, 73, 72, 87, 87, 86, 
244         72, 86, 72, 88, 72, 72, 72, 73, 
245         72, 89, 72, 90, 72, 91, 85, 85, 
246         86, 73, 72, 92, 72, 93, 72, 94, 
247         82, 82, 83, 73, 72, 95, 72, 96, 
248         72, 97, 79, 79, 80, 73, 72, 98, 
249         72, 99, 72, 74, 75, 75, 76, 73, 
250         72, 72, 72, 72, 100, 72, 101, 75, 
251         75, 76, 73, 72, 101, 75, 75, 76, 
252         73, 72, 72, 72, 72, 102, 72, 103, 
253         75, 75, 76, 73, 72, 103, 75, 75, 
254         76, 73, 72, 72, 72, 72, 104, 72, 
255         105, 75, 75, 76, 73, 72, 105, 75, 
256         75, 76, 73, 72, 72, 72, 72, 106, 
257         72, 107, 75, 75, 76, 73, 72, 109, 
258         108, 110, 111, 111, 112, 109, 108, 113, 
259         113, 112, 108, 112, 108, 114, 114, 115, 
260         109, 108, 116, 116, 115, 108, 115, 108, 
261         117, 117, 118, 109, 108, 119, 119, 118, 
262         108, 118, 108, 120, 120, 121, 109, 108, 
263         122, 122, 121, 108, 121, 108, 123, 108, 
264         108, 108, 109, 108, 124, 108, 125, 108, 
265         126, 120, 120, 121, 109, 108, 127, 108, 
266         128, 108, 129, 117, 117, 118, 109, 108, 
267         130, 108, 131, 108, 132, 114, 114, 115, 
268         109, 108, 133, 108, 134, 108, 110, 111, 
269         111, 112, 109, 108, 108, 108, 108, 135, 
270         108, 136, 111, 111, 112, 109, 108, 136, 
271         111, 111, 112, 109, 108, 108, 108, 108, 
272         137, 108, 138, 111, 111, 112, 109, 108, 
273         138, 111, 111, 112, 109, 108, 108, 108, 
274         108, 139, 108, 140, 111, 111, 112, 109, 
275         108, 140, 111, 111, 112, 109, 108, 108, 
276         108, 108, 141, 108, 142, 111, 111, 112, 
277         109, 108, 142, 111, 111, 112, 109, 108, 
278         108, 108, 108, 143, 108, 107, 75, 75, 
279         76, 73, 72, 72, 72, 72, 144, 72, 
280         78, 78, 76, 1, 0, 146, 145, 148, 
281         149, 150, 151, 152, 153, 76, 73, 147, 
282         154, 155, 155, 144, 147, 156, 157, 147, 
283         158, 159, 147, 161, 162, 163, 164, 4, 
284         1, 160, 165, 160, 160, 35, 160, 166, 
285         162, 167, 167, 4, 1, 160, 165, 160, 
286         162, 167, 167, 4, 1, 160, 165, 160, 
287         168, 160, 160, 160, 17, 169, 160, 1, 
288         160, 165, 160, 160, 160, 160, 160, 168, 
289         160, 170, 171, 172, 173, 4, 1, 160, 
290         165, 160, 160, 33, 160, 174, 171, 175, 
291         175, 4, 1, 160, 165, 160, 171, 175, 
292         175, 4, 1, 160, 165, 160, 176, 160, 
293         160, 160, 17, 177, 160, 1, 160, 165, 
294         160, 160, 160, 160, 160, 176, 160, 178, 
295         179, 180, 181, 4, 1, 160, 165, 160, 
296         160, 31, 160, 182, 179, 183, 183, 4, 
297         1, 160, 165, 160, 179, 183, 183, 4, 
298         1, 160, 165, 160, 184, 160, 160, 160, 
299         17, 185, 160, 1, 160, 165, 160, 160, 
300         160, 160, 160, 184, 160, 186, 187, 188, 
301         189, 4, 1, 160, 165, 160, 160, 29, 
302         160, 190, 187, 191, 191, 4, 1, 160, 
303         165, 160, 187, 191, 191, 4, 1, 160, 
304         165, 160, 192, 160, 160, 160, 17, 193, 
305         160, 1, 160, 165, 160, 160, 160, 160, 
306         160, 192, 160, 194, 195, 196, 197, 4, 
307         1, 160, 165, 160, 160, 27, 160, 198, 
308         195, 199, 199, 4, 1, 160, 165, 160, 
309         195, 199, 199, 4, 1, 160, 165, 160, 
310         17, 200, 160, 1, 160, 165, 160, 201, 
311         201, 160, 1, 160, 165, 160, 202, 160, 
312         160, 203, 160, 165, 160, 165, 160, 204, 
313         160, 205, 160, 202, 160, 160, 160, 160, 
314         165, 160, 17, 160, 201, 201, 160, 1, 
315         160, 165, 160, 201, 200, 160, 1, 160, 
316         165, 160, 206, 26, 207, 208, 7, 1, 
317         160, 165, 160, 26, 207, 208, 7, 1, 
318         160, 165, 160, 207, 207, 7, 1, 160, 
319         165, 160, 209, 23, 210, 211, 10, 1, 
320         160, 165, 160, 23, 210, 211, 10, 1, 
321         160, 165, 160, 210, 210, 10, 1, 160, 
322         165, 160, 212, 20, 213, 214, 13, 1, 
323         160, 165, 160, 20, 213, 214, 13, 1, 
324         160, 165, 160, 213, 213, 13, 1, 160, 
325         165, 160, 215, 17, 201, 216, 160, 1, 
326         160, 165, 160, 17, 201, 216, 160, 1, 
327         160, 165, 160, 194, 195, 199, 199, 4, 
328         1, 160, 165, 160, 194, 195, 196, 199, 
329         4, 1, 160, 165, 160, 160, 27, 160, 
330         192, 160, 217, 160, 201, 201, 160, 1, 
331         160, 165, 160, 160, 160, 160, 160, 192, 
332         160, 192, 160, 160, 160, 201, 201, 160, 
333         1, 160, 165, 160, 160, 160, 160, 160, 
334         192, 160, 192, 160, 160, 160, 201, 193, 
335         160, 1, 160, 165, 160, 160, 160, 160, 
336         160, 192, 160, 186, 187, 191, 191, 4, 
337         1, 160, 165, 160, 186, 187, 188, 191, 
338         4, 1, 160, 165, 160, 160, 29, 160, 
339         184, 160, 218, 160, 201, 201, 160, 1, 
340         160, 165, 160, 160, 160, 160, 160, 184, 
341         160, 184, 160, 160, 160, 201, 201, 160, 
342         1, 160, 165, 160, 160, 160, 160, 160, 
343         184, 160, 184, 160, 160, 160, 201, 185, 
344         160, 1, 160, 165, 160, 160, 160, 160, 
345         160, 184, 160, 178, 179, 183, 183, 4, 
346         1, 160, 165, 160, 178, 179, 180, 183, 
347         4, 1, 160, 165, 160, 160, 31, 160, 
348         176, 160, 219, 160, 201, 201, 160, 1, 
349         160, 165, 160, 160, 160, 160, 160, 176, 
350         160, 176, 160, 160, 160, 201, 201, 160, 
351         1, 160, 165, 160, 160, 160, 160, 160, 
352         176, 160, 176, 160, 160, 160, 201, 177, 
353         160, 1, 160, 165, 160, 160, 160, 160, 
354         160, 176, 160, 170, 171, 175, 175, 4, 
355         1, 160, 165, 160, 170, 171, 172, 175, 
356         4, 1, 160, 165, 160, 160, 33, 160, 
357         168, 160, 220, 160, 201, 201, 160, 1, 
358         160, 165, 160, 160, 160, 160, 160, 168, 
359         160, 168, 160, 160, 160, 201, 201, 160, 
360         1, 160, 165, 160, 160, 160, 160, 160, 
361         168, 160, 168, 160, 160, 160, 201, 169, 
362         160, 1, 160, 165, 160, 160, 160, 160, 
363         160, 168, 160, 161, 162, 167, 167, 4, 
364         1, 160, 165, 160, 161, 162, 163, 167, 
365         4, 1, 160, 165, 160, 160, 35, 160, 
366         222, 223, 224, 225, 40, 37, 221, 226, 
367         221, 221, 71, 221, 227, 223, 228, 225, 
368         40, 37, 221, 226, 221, 223, 228, 225, 
369         40, 37, 221, 226, 221, 229, 221, 221, 
370         221, 53, 230, 221, 37, 221, 226, 221, 
371         221, 221, 221, 221, 229, 221, 231, 232, 
372         233, 234, 40, 37, 221, 226, 221, 221, 
373         69, 221, 235, 232, 236, 236, 40, 37, 
374         221, 226, 221, 232, 236, 236, 40, 37, 
375         221, 226, 221, 237, 221, 221, 221, 53, 
376         238, 221, 37, 221, 226, 221, 221, 221, 
377         221, 221, 237, 221, 239, 240, 241, 242, 
378         40, 37, 221, 226, 221, 221, 67, 221, 
379         243, 240, 244, 244, 40, 37, 221, 226, 
380         221, 240, 244, 244, 40, 37, 221, 226, 
381         221, 245, 221, 221, 221, 53, 246, 221, 
382         37, 221, 226, 221, 221, 221, 221, 221, 
383         245, 221, 247, 248, 249, 250, 40, 37, 
384         221, 226, 221, 221, 65, 221, 251, 248, 
385         252, 252, 40, 37, 221, 226, 221, 248, 
386         252, 252, 40, 37, 221, 226, 221, 253, 
387         221, 221, 221, 53, 254, 221, 37, 221, 
388         226, 221, 221, 221, 221, 221, 253, 221, 
389         255, 256, 257, 258, 40, 37, 221, 226, 
390         221, 221, 63, 221, 259, 256, 260, 260, 
391         40, 37, 221, 226, 221, 256, 260, 260, 
392         40, 37, 221, 226, 221, 53, 261, 221, 
393         37, 221, 226, 221, 262, 262, 221, 37, 
394         221, 226, 221, 263, 221, 221, 264, 221, 
395         226, 221, 226, 221, 265, 221, 266, 221, 
396         263, 221, 221, 221, 221, 226, 221, 53, 
397         221, 262, 262, 221, 37, 221, 226, 221, 
398         262, 261, 221, 37, 221, 226, 221, 267, 
399         62, 268, 269, 43, 37, 221, 226, 221, 
400         62, 268, 269, 43, 37, 221, 226, 221, 
401         268, 268, 43, 37, 221, 226, 221, 270, 
402         59, 271, 272, 46, 37, 221, 226, 221, 
403         59, 271, 272, 46, 37, 221, 226, 221, 
404         271, 271, 46, 37, 221, 226, 221, 273, 
405         56, 274, 275, 49, 37, 221, 226, 221, 
406         56, 274, 275, 49, 37, 221, 226, 221, 
407         274, 274, 49, 37, 221, 226, 221, 276, 
408         53, 262, 277, 221, 37, 221, 226, 221, 
409         53, 262, 277, 221, 37, 221, 226, 221, 
410         255, 256, 260, 260, 40, 37, 221, 226, 
411         221, 255, 256, 257, 260, 40, 37, 221, 
412         226, 221, 221, 63, 221, 253, 221, 278, 
413         221, 262, 262, 221, 37, 221, 226, 221, 
414         221, 221, 221, 221, 253, 221, 253, 221, 
415         221, 221, 262, 262, 221, 37, 221, 226, 
416         221, 221, 221, 221, 221, 253, 221, 253, 
417         221, 221, 221, 262, 254, 221, 37, 221, 
418         226, 221, 221, 221, 221, 221, 253, 221, 
419         247, 248, 252, 252, 40, 37, 221, 226, 
420         221, 247, 248, 249, 252, 40, 37, 221, 
421         226, 221, 221, 65, 221, 245, 221, 279, 
422         221, 262, 262, 221, 37, 221, 226, 221, 
423         221, 221, 221, 221, 245, 221, 245, 221, 
424         221, 221, 262, 262, 221, 37, 221, 226, 
425         221, 221, 221, 221, 221, 245, 221, 245, 
426         221, 221, 221, 262, 246, 221, 37, 221, 
427         226, 221, 221, 221, 221, 221, 245, 221, 
428         239, 240, 244, 244, 40, 37, 221, 226, 
429         221, 239, 240, 241, 244, 40, 37, 221, 
430         226, 221, 221, 67, 221, 237, 221, 280, 
431         221, 262, 262, 221, 37, 221, 226, 221, 
432         221, 221, 221, 221, 237, 221, 237, 221, 
433         221, 221, 262, 262, 221, 37, 221, 226, 
434         221, 221, 221, 221, 221, 237, 221, 237, 
435         221, 221, 221, 262, 238, 221, 37, 221, 
436         226, 221, 221, 221, 221, 221, 237, 221, 
437         231, 232, 236, 236, 40, 37, 221, 226, 
438         221, 231, 232, 233, 236, 40, 37, 221, 
439         226, 221, 221, 69, 221, 229, 221, 281, 
440         221, 262, 262, 221, 37, 221, 226, 221, 
441         221, 221, 221, 221, 229, 221, 229, 221, 
442         221, 221, 262, 262, 221, 37, 221, 226, 
443         221, 221, 221, 221, 221, 229, 221, 229, 
444         221, 221, 221, 262, 230, 221, 37, 221, 
445         226, 221, 221, 221, 221, 221, 229, 221, 
446         70, 39, 39, 40, 37, 221, 222, 223, 
447         228, 225, 40, 37, 221, 226, 221, 283, 
448         151, 284, 284, 76, 73, 282, 154, 282, 
449         151, 284, 284, 76, 73, 282, 154, 282, 
450         285, 282, 282, 282, 90, 286, 282, 73, 
451         282, 154, 282, 282, 282, 282, 282, 285, 
452         282, 287, 288, 289, 290, 76, 73, 282, 
453         154, 282, 282, 106, 282, 291, 288, 292, 
454         292, 76, 73, 282, 154, 282, 288, 292, 
455         292, 76, 73, 282, 154, 282, 293, 282, 
456         282, 282, 90, 294, 282, 73, 282, 154, 
457         282, 282, 282, 282, 282, 293, 282, 295, 
458         296, 297, 298, 76, 73, 282, 154, 282, 
459         282, 104, 282, 299, 296, 300, 300, 76, 
460         73, 282, 154, 282, 296, 300, 300, 76, 
461         73, 282, 154, 282, 301, 282, 282, 282, 
462         90, 302, 282, 73, 282, 154, 282, 282, 
463         282, 282, 282, 301, 282, 303, 304, 305, 
464         306, 76, 73, 282, 154, 282, 282, 102, 
465         282, 307, 304, 308, 308, 76, 73, 282, 
466         154, 282, 304, 308, 308, 76, 73, 282, 
467         154, 282, 309, 282, 282, 282, 90, 310, 
468         282, 73, 282, 154, 282, 282, 282, 282, 
469         282, 309, 282, 311, 312, 313, 314, 76, 
470         73, 282, 154, 282, 282, 100, 282, 315, 
471         312, 316, 316, 76, 73, 282, 154, 282, 
472         312, 316, 316, 76, 73, 282, 154, 282, 
473         90, 317, 282, 73, 282, 154, 282, 318, 
474         318, 282, 73, 282, 154, 282, 319, 282, 
475         282, 320, 282, 154, 282, 154, 282, 321, 
476         282, 322, 282, 319, 282, 282, 282, 282, 
477         154, 282, 90, 282, 318, 318, 282, 73, 
478         282, 154, 282, 318, 317, 282, 73, 282, 
479         154, 282, 323, 99, 324, 325, 80, 73, 
480         282, 154, 282, 99, 324, 325, 80, 73, 
481         282, 154, 282, 324, 324, 80, 73, 282, 
482         154, 282, 326, 96, 327, 328, 83, 73, 
483         282, 154, 282, 96, 327, 328, 83, 73, 
484         282, 154, 282, 327, 327, 83, 73, 282, 
485         154, 282, 329, 93, 330, 331, 86, 73, 
486         282, 154, 282, 93, 330, 331, 86, 73, 
487         282, 154, 282, 330, 330, 86, 73, 282, 
488         154, 282, 332, 90, 318, 333, 282, 73, 
489         282, 154, 282, 90, 318, 333, 282, 73, 
490         282, 154, 282, 311, 312, 316, 316, 76, 
491         73, 282, 154, 282, 311, 312, 313, 316, 
492         76, 73, 282, 154, 282, 282, 100, 282, 
493         309, 282, 334, 282, 318, 318, 282, 73, 
494         282, 154, 282, 282, 282, 282, 282, 309, 
495         282, 309, 282, 282, 282, 318, 318, 282, 
496         73, 282, 154, 282, 282, 282, 282, 282, 
497         309, 282, 309, 282, 282, 282, 318, 310, 
498         282, 73, 282, 154, 282, 282, 282, 282, 
499         282, 309, 282, 303, 304, 308, 308, 76, 
500         73, 282, 154, 282, 303, 304, 305, 308, 
501         76, 73, 282, 154, 282, 282, 102, 282, 
502         301, 282, 335, 282, 318, 318, 282, 73, 
503         282, 154, 282, 282, 282, 282, 282, 301, 
504         282, 301, 282, 282, 282, 318, 318, 282, 
505         73, 282, 154, 282, 282, 282, 282, 282, 
506         301, 282, 301, 282, 282, 282, 318, 302, 
507         282, 73, 282, 154, 282, 282, 282, 282, 
508         282, 301, 282, 295, 296, 300, 300, 76, 
509         73, 282, 154, 282, 295, 296, 297, 300, 
510         76, 73, 282, 154, 282, 282, 104, 282, 
511         293, 282, 336, 282, 318, 318, 282, 73, 
512         282, 154, 282, 282, 282, 282, 282, 293, 
513         282, 293, 282, 282, 282, 318, 318, 282, 
514         73, 282, 154, 282, 282, 282, 282, 282, 
515         293, 282, 293, 282, 282, 282, 318, 294, 
516         282, 73, 282, 154, 282, 282, 282, 282, 
517         282, 293, 282, 287, 288, 292, 292, 76, 
518         73, 282, 154, 282, 287, 288, 289, 292, 
519         76, 73, 282, 154, 282, 282, 106, 282, 
520         285, 282, 337, 282, 318, 318, 282, 73, 
521         282, 154, 282, 282, 282, 282, 282, 285, 
522         282, 285, 282, 282, 282, 318, 318, 282, 
523         73, 282, 154, 282, 282, 282, 282, 282, 
524         285, 282, 285, 282, 282, 282, 318, 286, 
525         282, 73, 282, 154, 282, 282, 282, 282, 
526         282, 285, 282, 107, 75, 75, 76, 73, 
527         338, 338, 338, 338, 144, 338, 150, 151, 
528         284, 284, 76, 73, 282, 154, 282, 107, 
529         75, 75, 76, 73, 338, 340, 341, 342, 
530         343, 112, 109, 339, 344, 339, 339, 143, 
531         339, 345, 341, 343, 343, 112, 109, 339, 
532         344, 339, 341, 343, 343, 112, 109, 339, 
533         344, 339, 346, 339, 339, 339, 125, 347, 
534         339, 109, 339, 344, 339, 339, 339, 339, 
535         339, 346, 339, 348, 349, 350, 351, 112, 
536         109, 339, 344, 339, 339, 141, 339, 352, 
537         349, 353, 353, 112, 109, 339, 344, 339, 
538         349, 353, 353, 112, 109, 339, 344, 339, 
539         354, 339, 339, 339, 125, 355, 339, 109, 
540         339, 344, 339, 339, 339, 339, 339, 354, 
541         339, 356, 357, 358, 359, 112, 109, 339, 
542         344, 339, 339, 139, 339, 360, 357, 361, 
543         361, 112, 109, 339, 344, 339, 357, 361, 
544         361, 112, 109, 339, 344, 339, 362, 339, 
545         339, 339, 125, 363, 339, 109, 339, 344, 
546         339, 339, 339, 339, 339, 362, 339, 364, 
547         365, 366, 367, 112, 109, 339, 344, 339, 
548         339, 137, 339, 368, 365, 369, 369, 112, 
549         109, 339, 344, 339, 365, 369, 369, 112, 
550         109, 339, 344, 339, 370, 339, 339, 339, 
551         125, 371, 339, 109, 339, 344, 339, 339, 
552         339, 339, 339, 370, 339, 372, 373, 374, 
553         375, 112, 109, 339, 344, 339, 339, 135, 
554         339, 376, 373, 377, 377, 112, 109, 339, 
555         344, 339, 373, 377, 377, 112, 109, 339, 
556         344, 339, 125, 378, 339, 109, 339, 344, 
557         339, 379, 379, 339, 109, 339, 344, 339, 
558         380, 339, 339, 381, 339, 344, 339, 344, 
559         339, 382, 339, 383, 339, 380, 339, 339, 
560         339, 339, 344, 339, 125, 339, 379, 379, 
561         339, 109, 339, 344, 339, 379, 378, 339, 
562         109, 339, 344, 339, 384, 134, 385, 386, 
563         115, 109, 339, 344, 339, 134, 385, 386, 
564         115, 109, 339, 344, 339, 385, 385, 115, 
565         109, 339, 344, 339, 387, 131, 388, 389, 
566         118, 109, 339, 344, 339, 131, 388, 389, 
567         118, 109, 339, 344, 339, 388, 388, 118, 
568         109, 339, 344, 339, 390, 128, 391, 392, 
569         121, 109, 339, 344, 339, 128, 391, 392, 
570         121, 109, 339, 344, 339, 391, 391, 121, 
571         109, 339, 344, 339, 393, 125, 379, 394, 
572         339, 109, 339, 344, 339, 125, 379, 394, 
573         339, 109, 339, 344, 339, 372, 373, 377, 
574         377, 112, 109, 339, 344, 339, 372, 373, 
575         374, 377, 112, 109, 339, 344, 339, 339, 
576         135, 339, 370, 339, 395, 339, 379, 379, 
577         339, 109, 339, 344, 339, 339, 339, 339, 
578         339, 370, 339, 370, 339, 339, 339, 379, 
579         379, 339, 109, 339, 344, 339, 339, 339, 
580         339, 339, 370, 339, 370, 339, 339, 339, 
581         379, 371, 339, 109, 339, 344, 339, 339, 
582         339, 339, 339, 370, 339, 364, 365, 369, 
583         369, 112, 109, 339, 344, 339, 364, 365, 
584         366, 369, 112, 109, 339, 344, 339, 339, 
585         137, 339, 362, 339, 396, 339, 379, 379, 
586         339, 109, 339, 344, 339, 339, 339, 339, 
587         339, 362, 339, 362, 339, 339, 339, 379, 
588         379, 339, 109, 339, 344, 339, 339, 339, 
589         339, 339, 362, 339, 362, 339, 339, 339, 
590         379, 363, 339, 109, 339, 344, 339, 339, 
591         339, 339, 339, 362, 339, 356, 357, 361, 
592         361, 112, 109, 339, 344, 339, 356, 357, 
593         358, 361, 112, 109, 339, 344, 339, 339, 
594         139, 339, 354, 339, 397, 339, 379, 379, 
595         339, 109, 339, 344, 339, 339, 339, 339, 
596         339, 354, 339, 354, 339, 339, 339, 379, 
597         379, 339, 109, 339, 344, 339, 339, 339, 
598         339, 339, 354, 339, 354, 339, 339, 339, 
599         379, 355, 339, 109, 339, 344, 339, 339, 
600         339, 339, 339, 354, 339, 348, 349, 353, 
601         353, 112, 109, 339, 344, 339, 348, 349, 
602         350, 353, 112, 109, 339, 344, 339, 339, 
603         141, 339, 346, 339, 398, 339, 379, 379, 
604         339, 109, 339, 344, 339, 339, 339, 339, 
605         339, 346, 339, 346, 339, 339, 339, 379, 
606         379, 339, 109, 339, 344, 339, 339, 339, 
607         339, 339, 346, 339, 346, 339, 339, 339, 
608         379, 347, 339, 109, 339, 344, 339, 339, 
609         339, 339, 339, 346, 339, 340, 341, 343, 
610         343, 112, 109, 339, 344, 339, 148, 149, 
611         150, 151, 399, 284, 76, 73, 282, 154, 
612         155, 155, 144, 282, 282, 148, 282, 161, 
613         400, 163, 164, 4, 1, 160, 165, 160, 
614         160, 35, 160, 168, 149, 150, 151, 401, 
615         402, 76, 403, 160, 404, 160, 155, 144, 
616         160, 160, 168, 160, 107, 405, 405, 76, 
617         403, 160, 165, 160, 160, 144, 160, 406, 
618         160, 160, 407, 160, 404, 160, 404, 160, 
619         408, 160, 205, 160, 406, 160, 160, 160, 
620         160, 404, 160, 168, 160, 220, 107, 405, 
621         405, 76, 403, 160, 165, 160, 160, 160, 
622         160, 160, 168, 160, 410, 409, 411, 411, 
623         409, 146, 409, 412, 409, 411, 411, 409, 
624         146, 409, 412, 409, 413, 409, 409, 414, 
625         409, 412, 409, 412, 409, 415, 409, 416, 
626         409, 413, 409, 409, 409, 409, 412, 409, 
627         148, 338, 338, 338, 338, 338, 338, 338, 
628         338, 338, 155, 338, 338, 338, 338, 148, 
629         338, 0
630 };
631
632 static const short _indic_syllable_machine_trans_targs[] = {
633         138, 160, 166, 2, 167, 3, 5, 170, 
634         6, 8, 173, 9, 11, 176, 12, 14, 
635         15, 159, 17, 18, 175, 20, 21, 172, 
636         23, 24, 169, 178, 182, 183, 187, 188, 
637         192, 193, 197, 198, 138, 221, 227, 36, 
638         228, 37, 39, 231, 40, 42, 234, 43, 
639         45, 237, 46, 48, 49, 220, 51, 52, 
640         236, 54, 55, 233, 57, 58, 230, 239, 
641         243, 244, 248, 249, 253, 254, 258, 260, 
642         138, 281, 287, 70, 288, 138, 71, 73, 
643         291, 74, 76, 294, 77, 79, 297, 80, 
644         82, 83, 280, 85, 86, 296, 88, 89, 
645         293, 91, 92, 290, 299, 303, 304, 308, 
646         309, 313, 314, 318, 138, 343, 349, 103, 
647         350, 104, 106, 353, 107, 109, 356, 110, 
648         112, 359, 113, 115, 116, 342, 118, 119, 
649         358, 121, 122, 355, 124, 125, 352, 361, 
650         365, 366, 370, 371, 375, 376, 380, 381, 
651         320, 138, 394, 138, 139, 200, 261, 263, 
652         319, 321, 283, 322, 382, 383, 392, 399, 
653         138, 140, 142, 33, 199, 162, 141, 32, 
654         143, 195, 144, 146, 31, 194, 145, 30, 
655         147, 190, 148, 150, 29, 189, 149, 28, 
656         151, 185, 152, 154, 27, 184, 153, 26, 
657         155, 180, 156, 158, 25, 179, 157, 1, 
658         165, 0, 161, 164, 163, 138, 168, 4, 
659         22, 171, 7, 19, 174, 10, 16, 177, 
660         13, 181, 186, 191, 196, 138, 201, 203, 
661         67, 259, 223, 202, 66, 204, 256, 205, 
662         207, 65, 255, 206, 64, 208, 251, 209, 
663         211, 63, 250, 210, 62, 212, 246, 213, 
664         215, 61, 245, 214, 60, 216, 241, 217, 
665         219, 59, 240, 218, 35, 226, 34, 222, 
666         225, 224, 138, 229, 38, 56, 232, 41, 
667         53, 235, 44, 50, 238, 47, 242, 247, 
668         252, 257, 138, 262, 100, 264, 316, 265, 
669         267, 99, 315, 266, 98, 268, 311, 269, 
670         271, 97, 310, 270, 96, 272, 306, 273, 
671         275, 95, 305, 274, 94, 276, 301, 277, 
672         279, 93, 300, 278, 69, 286, 68, 282, 
673         285, 284, 138, 289, 72, 90, 292, 75, 
674         87, 295, 78, 84, 298, 81, 302, 307, 
675         312, 317, 138, 138, 323, 325, 134, 133, 
676         345, 324, 326, 378, 327, 329, 132, 377, 
677         328, 131, 330, 373, 331, 333, 130, 372, 
678         332, 129, 334, 368, 335, 337, 128, 367, 
679         336, 127, 338, 363, 339, 341, 126, 362, 
680         340, 102, 348, 101, 344, 347, 346, 138, 
681         351, 105, 123, 354, 108, 120, 357, 111, 
682         117, 360, 114, 364, 369, 374, 379, 135, 
683         384, 385, 391, 386, 388, 136, 387, 390, 
684         389, 138, 393, 137, 396, 395, 398, 397, 
685         138
686 };
687
688 static const char _indic_syllable_machine_trans_actions[] = {
689         1, 0, 2, 0, 2, 0, 0, 2, 
690         0, 0, 2, 0, 0, 2, 0, 0, 
691         0, 2, 0, 0, 2, 0, 0, 2, 
692         0, 0, 2, 2, 2, 2, 2, 2, 
693         2, 2, 2, 2, 3, 0, 2, 0, 
694         2, 0, 0, 2, 0, 0, 2, 0, 
695         0, 2, 0, 0, 0, 2, 0, 0, 
696         2, 0, 0, 2, 0, 0, 2, 2, 
697         2, 2, 2, 2, 2, 2, 2, 2, 
698         4, 0, 2, 0, 2, 5, 0, 0, 
699         2, 0, 0, 2, 0, 0, 2, 0, 
700         0, 0, 2, 0, 0, 2, 0, 0, 
701         2, 0, 0, 2, 6, 2, 6, 2, 
702         6, 2, 6, 2, 7, 0, 2, 0, 
703         2, 0, 0, 2, 0, 0, 2, 0, 
704         0, 2, 0, 0, 0, 2, 0, 0, 
705         2, 0, 0, 2, 0, 0, 2, 2, 
706         2, 2, 2, 2, 2, 2, 2, 2, 
707         6, 8, 0, 11, 2, 2, 6, 0, 
708         12, 12, 0, 2, 6, 2, 2, 0, 
709         13, 2, 0, 0, 2, 0, 2, 0, 
710         2, 2, 2, 0, 0, 2, 2, 0, 
711         2, 2, 2, 0, 0, 2, 2, 0, 
712         2, 2, 2, 0, 0, 2, 2, 0, 
713         2, 2, 2, 0, 0, 2, 2, 0, 
714         2, 0, 0, 0, 0, 14, 2, 0, 
715         0, 2, 0, 0, 2, 0, 0, 2, 
716         0, 2, 2, 2, 2, 15, 2, 0, 
717         0, 2, 0, 2, 0, 2, 2, 2, 
718         0, 0, 2, 2, 0, 2, 2, 2, 
719         0, 0, 2, 2, 0, 2, 2, 2, 
720         0, 0, 2, 2, 0, 2, 2, 2, 
721         0, 0, 2, 2, 0, 2, 0, 0, 
722         0, 0, 16, 2, 0, 0, 2, 0, 
723         0, 2, 0, 0, 2, 0, 2, 2, 
724         2, 2, 17, 6, 0, 6, 2, 6, 
725         0, 0, 6, 6, 0, 6, 2, 6, 
726         0, 0, 6, 6, 0, 6, 2, 6, 
727         0, 0, 6, 6, 0, 6, 2, 6, 
728         0, 0, 6, 6, 0, 2, 0, 0, 
729         0, 0, 18, 2, 0, 0, 2, 0, 
730         0, 2, 0, 0, 2, 0, 2, 2, 
731         2, 2, 19, 20, 2, 0, 0, 0, 
732         0, 2, 2, 2, 2, 0, 0, 2, 
733         2, 0, 2, 2, 2, 0, 0, 2, 
734         2, 0, 2, 2, 2, 0, 0, 2, 
735         2, 0, 2, 2, 2, 0, 0, 2, 
736         2, 0, 2, 0, 0, 0, 0, 21, 
737         2, 0, 0, 2, 0, 0, 2, 0, 
738         0, 2, 0, 2, 2, 2, 2, 0, 
739         0, 22, 22, 0, 0, 0, 0, 0, 
740         0, 23, 2, 0, 0, 0, 0, 0, 
741         24
742 };
743
744 static const char _indic_syllable_machine_to_state_actions[] = {
745         0, 0, 0, 0, 0, 0, 0, 0, 
746         0, 0, 0, 0, 0, 0, 0, 0, 
747         0, 0, 0, 0, 0, 0, 0, 0, 
748         0, 0, 0, 0, 0, 0, 0, 0, 
749         0, 0, 0, 0, 0, 0, 0, 0, 
750         0, 0, 0, 0, 0, 0, 0, 0, 
751         0, 0, 0, 0, 0, 0, 0, 0, 
752         0, 0, 0, 0, 0, 0, 0, 0, 
753         0, 0, 0, 0, 0, 0, 0, 0, 
754         0, 0, 0, 0, 0, 0, 0, 0, 
755         0, 0, 0, 0, 0, 0, 0, 0, 
756         0, 0, 0, 0, 0, 0, 0, 0, 
757         0, 0, 0, 0, 0, 0, 0, 0, 
758         0, 0, 0, 0, 0, 0, 0, 0, 
759         0, 0, 0, 0, 0, 0, 0, 0, 
760         0, 0, 0, 0, 0, 0, 0, 0, 
761         0, 0, 0, 0, 0, 0, 0, 0, 
762         0, 0, 9, 0, 0, 0, 0, 0, 
763         0, 0, 0, 0, 0, 0, 0, 0, 
764         0, 0, 0, 0, 0, 0, 0, 0, 
765         0, 0, 0, 0, 0, 0, 0, 0, 
766         0, 0, 0, 0, 0, 0, 0, 0, 
767         0, 0, 0, 0, 0, 0, 0, 0, 
768         0, 0, 0, 0, 0, 0, 0, 0, 
769         0, 0, 0, 0, 0, 0, 0, 0, 
770         0, 0, 0, 0, 0, 0, 0, 0, 
771         0, 0, 0, 0, 0, 0, 0, 0, 
772         0, 0, 0, 0, 0, 0, 0, 0, 
773         0, 0, 0, 0, 0, 0, 0, 0, 
774         0, 0, 0, 0, 0, 0, 0, 0, 
775         0, 0, 0, 0, 0, 0, 0, 0, 
776         0, 0, 0, 0, 0, 0, 0, 0, 
777         0, 0, 0, 0, 0, 0, 0, 0, 
778         0, 0, 0, 0, 0, 0, 0, 0, 
779         0, 0, 0, 0, 0, 0, 0, 0, 
780         0, 0, 0, 0, 0, 0, 0, 0, 
781         0, 0, 0, 0, 0, 0, 0, 0, 
782         0, 0, 0, 0, 0, 0, 0, 0, 
783         0, 0, 0, 0, 0, 0, 0, 0, 
784         0, 0, 0, 0, 0, 0, 0, 0, 
785         0, 0, 0, 0, 0, 0, 0, 0, 
786         0, 0, 0, 0, 0, 0, 0, 0, 
787         0, 0, 0, 0, 0, 0, 0, 0, 
788         0, 0, 0, 0, 0, 0, 0, 0, 
789         0, 0, 0, 0, 0, 0, 0, 0, 
790         0, 0, 0, 0, 0, 0, 0, 0, 
791         0, 0, 0, 0, 0, 0, 0, 0, 
792         0, 0, 0, 0, 0, 0, 0, 0, 
793         0, 0, 0, 0, 0, 0, 0, 0, 
794         0, 0, 0, 0, 0, 0, 0, 0
795 };
796
797 static const char _indic_syllable_machine_from_state_actions[] = {
798         0, 0, 0, 0, 0, 0, 0, 0, 
799         0, 0, 0, 0, 0, 0, 0, 0, 
800         0, 0, 0, 0, 0, 0, 0, 0, 
801         0, 0, 0, 0, 0, 0, 0, 0, 
802         0, 0, 0, 0, 0, 0, 0, 0, 
803         0, 0, 0, 0, 0, 0, 0, 0, 
804         0, 0, 0, 0, 0, 0, 0, 0, 
805         0, 0, 0, 0, 0, 0, 0, 0, 
806         0, 0, 0, 0, 0, 0, 0, 0, 
807         0, 0, 0, 0, 0, 0, 0, 0, 
808         0, 0, 0, 0, 0, 0, 0, 0, 
809         0, 0, 0, 0, 0, 0, 0, 0, 
810         0, 0, 0, 0, 0, 0, 0, 0, 
811         0, 0, 0, 0, 0, 0, 0, 0, 
812         0, 0, 0, 0, 0, 0, 0, 0, 
813         0, 0, 0, 0, 0, 0, 0, 0, 
814         0, 0, 0, 0, 0, 0, 0, 0, 
815         0, 0, 10, 0, 0, 0, 0, 0, 
816         0, 0, 0, 0, 0, 0, 0, 0, 
817         0, 0, 0, 0, 0, 0, 0, 0, 
818         0, 0, 0, 0, 0, 0, 0, 0, 
819         0, 0, 0, 0, 0, 0, 0, 0, 
820         0, 0, 0, 0, 0, 0, 0, 0, 
821         0, 0, 0, 0, 0, 0, 0, 0, 
822         0, 0, 0, 0, 0, 0, 0, 0, 
823         0, 0, 0, 0, 0, 0, 0, 0, 
824         0, 0, 0, 0, 0, 0, 0, 0, 
825         0, 0, 0, 0, 0, 0, 0, 0, 
826         0, 0, 0, 0, 0, 0, 0, 0, 
827         0, 0, 0, 0, 0, 0, 0, 0, 
828         0, 0, 0, 0, 0, 0, 0, 0, 
829         0, 0, 0, 0, 0, 0, 0, 0, 
830         0, 0, 0, 0, 0, 0, 0, 0, 
831         0, 0, 0, 0, 0, 0, 0, 0, 
832         0, 0, 0, 0, 0, 0, 0, 0, 
833         0, 0, 0, 0, 0, 0, 0, 0, 
834         0, 0, 0, 0, 0, 0, 0, 0, 
835         0, 0, 0, 0, 0, 0, 0, 0, 
836         0, 0, 0, 0, 0, 0, 0, 0, 
837         0, 0, 0, 0, 0, 0, 0, 0, 
838         0, 0, 0, 0, 0, 0, 0, 0, 
839         0, 0, 0, 0, 0, 0, 0, 0, 
840         0, 0, 0, 0, 0, 0, 0, 0, 
841         0, 0, 0, 0, 0, 0, 0, 0, 
842         0, 0, 0, 0, 0, 0, 0, 0, 
843         0, 0, 0, 0, 0, 0, 0, 0, 
844         0, 0, 0, 0, 0, 0, 0, 0, 
845         0, 0, 0, 0, 0, 0, 0, 0, 
846         0, 0, 0, 0, 0, 0, 0, 0, 
847         0, 0, 0, 0, 0, 0, 0, 0
848 };
849
850 static const short _indic_syllable_machine_eof_trans[] = {
851         1, 1, 1, 1, 1, 1, 1, 1, 
852         1, 1, 1, 1, 1, 1, 1, 1, 
853         1, 1, 1, 1, 1, 1, 1, 1, 
854         1, 1, 1, 1, 1, 1, 1, 1, 
855         1, 1, 37, 37, 37, 37, 37, 37, 
856         37, 37, 37, 37, 37, 37, 37, 37, 
857         37, 37, 37, 37, 37, 37, 37, 37, 
858         37, 37, 37, 37, 37, 37, 37, 37, 
859         37, 37, 37, 37, 73, 73, 78, 78, 
860         73, 73, 73, 73, 73, 73, 73, 73, 
861         73, 73, 73, 73, 73, 73, 73, 73, 
862         73, 73, 73, 73, 73, 73, 73, 73, 
863         73, 73, 73, 73, 73, 109, 109, 109, 
864         109, 109, 109, 109, 109, 109, 109, 109, 
865         109, 109, 109, 109, 109, 109, 109, 109, 
866         109, 109, 109, 109, 109, 109, 109, 109, 
867         109, 109, 109, 109, 109, 109, 109, 73, 
868         1, 146, 0, 161, 161, 161, 161, 161, 
869         161, 161, 161, 161, 161, 161, 161, 161, 
870         161, 161, 161, 161, 161, 161, 161, 161, 
871         161, 161, 161, 161, 161, 161, 161, 161, 
872         161, 161, 161, 161, 161, 161, 161, 161, 
873         161, 161, 161, 161, 161, 161, 161, 161, 
874         161, 161, 161, 161, 161, 161, 161, 161, 
875         161, 161, 161, 161, 161, 161, 161, 161, 
876         222, 222, 222, 222, 222, 222, 222, 222, 
877         222, 222, 222, 222, 222, 222, 222, 222, 
878         222, 222, 222, 222, 222, 222, 222, 222, 
879         222, 222, 222, 222, 222, 222, 222, 222, 
880         222, 222, 222, 222, 222, 222, 222, 222, 
881         222, 222, 222, 222, 222, 222, 222, 222, 
882         222, 222, 222, 222, 222, 222, 222, 222, 
883         222, 222, 222, 222, 222, 283, 283, 283, 
884         283, 283, 283, 283, 283, 283, 283, 283, 
885         283, 283, 283, 283, 283, 283, 283, 283, 
886         283, 283, 283, 283, 283, 283, 283, 283, 
887         283, 283, 283, 283, 283, 283, 283, 283, 
888         283, 283, 283, 283, 283, 283, 283, 283, 
889         283, 283, 283, 283, 283, 283, 283, 283, 
890         283, 283, 283, 283, 283, 283, 283, 339, 
891         283, 339, 340, 340, 340, 340, 340, 340, 
892         340, 340, 340, 340, 340, 340, 340, 340, 
893         340, 340, 340, 340, 340, 340, 340, 340, 
894         340, 340, 340, 340, 340, 340, 340, 340, 
895         340, 340, 340, 340, 340, 340, 340, 340, 
896         340, 340, 340, 340, 340, 340, 340, 340, 
897         340, 340, 340, 340, 340, 340, 340, 340, 
898         340, 340, 340, 340, 340, 340, 283, 161, 
899         161, 161, 161, 161, 161, 161, 161, 161, 
900         410, 410, 410, 410, 410, 410, 410, 339
901 };
902
903 static const int indic_syllable_machine_start = 138;
904 static const int indic_syllable_machine_first_final = 138;
905 static const int indic_syllable_machine_error = -1;
906
907 static const int indic_syllable_machine_en_main = 138;
908
909
910 #line 36 "hb-ot-shape-complex-indic-machine.rl"
911
912
913
914 #line 92 "hb-ot-shape-complex-indic-machine.rl"
915
916
917 #define found_syllable(syllable_type) \
918   HB_STMT_START { \
919     if (0) fprintf (stderr, "syllable %d..%d %s\n", ts, te, #syllable_type); \
920     for (unsigned int i = ts; i < te; i++) \
921       info[i].syllable() = (syllable_serial << 4) | syllable_type; \
922     syllable_serial++; \
923     if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
924   } HB_STMT_END
925
926 static void
927 find_syllables (hb_buffer_t *buffer)
928 {
929   unsigned int p, pe, eof, ts, te, act;
930   int cs;
931   hb_glyph_info_t *info = buffer->info;
932   
933 #line 934 "hb-ot-shape-complex-indic-machine.hh"
934         {
935         cs = indic_syllable_machine_start;
936         ts = 0;
937         te = 0;
938         act = 0;
939         }
940
941 #line 112 "hb-ot-shape-complex-indic-machine.rl"
942
943
944   p = 0;
945   pe = eof = buffer->len;
946
947   unsigned int syllable_serial = 1;
948   
949 #line 950 "hb-ot-shape-complex-indic-machine.hh"
950         {
951         int _slen;
952         int _trans;
953         const unsigned char *_keys;
954         const short *_inds;
955         if ( p == pe )
956                 goto _test_eof;
957 _resume:
958         switch ( _indic_syllable_machine_from_state_actions[cs] ) {
959         case 10:
960 #line 1 "NONE"
961         {ts = p;}
962         break;
963 #line 964 "hb-ot-shape-complex-indic-machine.hh"
964         }
965
966         _keys = _indic_syllable_machine_trans_keys + (cs<<1);
967         _inds = _indic_syllable_machine_indicies + _indic_syllable_machine_index_offsets[cs];
968
969         _slen = _indic_syllable_machine_key_spans[cs];
970         _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].indic_category()) &&
971                 ( info[p].indic_category()) <= _keys[1] ?
972                 ( info[p].indic_category()) - _keys[0] : _slen ];
973
974 _eof_trans:
975         cs = _indic_syllable_machine_trans_targs[_trans];
976
977         if ( _indic_syllable_machine_trans_actions[_trans] == 0 )
978                 goto _again;
979
980         switch ( _indic_syllable_machine_trans_actions[_trans] ) {
981         case 2:
982 #line 1 "NONE"
983         {te = p+1;}
984         break;
985         case 14:
986 #line 83 "hb-ot-shape-complex-indic-machine.rl"
987         {te = p+1;{ found_syllable (consonant_syllable); }}
988         break;
989         case 16:
990 #line 84 "hb-ot-shape-complex-indic-machine.rl"
991         {te = p+1;{ found_syllable (vowel_syllable); }}
992         break;
993         case 21:
994 #line 85 "hb-ot-shape-complex-indic-machine.rl"
995         {te = p+1;{ found_syllable (standalone_cluster); }}
996         break;
997         case 24:
998 #line 86 "hb-ot-shape-complex-indic-machine.rl"
999         {te = p+1;{ found_syllable (symbol_cluster); }}
1000         break;
1001         case 18:
1002 #line 87 "hb-ot-shape-complex-indic-machine.rl"
1003         {te = p+1;{ found_syllable (broken_cluster); }}
1004         break;
1005         case 11:
1006 #line 88 "hb-ot-shape-complex-indic-machine.rl"
1007         {te = p+1;{ found_syllable (non_indic_cluster); }}
1008         break;
1009         case 13:
1010 #line 83 "hb-ot-shape-complex-indic-machine.rl"
1011         {te = p;p--;{ found_syllable (consonant_syllable); }}
1012         break;
1013         case 15:
1014 #line 84 "hb-ot-shape-complex-indic-machine.rl"
1015         {te = p;p--;{ found_syllable (vowel_syllable); }}
1016         break;
1017         case 20:
1018 #line 85 "hb-ot-shape-complex-indic-machine.rl"
1019         {te = p;p--;{ found_syllable (standalone_cluster); }}
1020         break;
1021         case 23:
1022 #line 86 "hb-ot-shape-complex-indic-machine.rl"
1023         {te = p;p--;{ found_syllable (symbol_cluster); }}
1024         break;
1025         case 17:
1026 #line 87 "hb-ot-shape-complex-indic-machine.rl"
1027         {te = p;p--;{ found_syllable (broken_cluster); }}
1028         break;
1029         case 19:
1030 #line 88 "hb-ot-shape-complex-indic-machine.rl"
1031         {te = p;p--;{ found_syllable (non_indic_cluster); }}
1032         break;
1033         case 1:
1034 #line 83 "hb-ot-shape-complex-indic-machine.rl"
1035         {{p = ((te))-1;}{ found_syllable (consonant_syllable); }}
1036         break;
1037         case 3:
1038 #line 84 "hb-ot-shape-complex-indic-machine.rl"
1039         {{p = ((te))-1;}{ found_syllable (vowel_syllable); }}
1040         break;
1041         case 7:
1042 #line 85 "hb-ot-shape-complex-indic-machine.rl"
1043         {{p = ((te))-1;}{ found_syllable (standalone_cluster); }}
1044         break;
1045         case 8:
1046 #line 86 "hb-ot-shape-complex-indic-machine.rl"
1047         {{p = ((te))-1;}{ found_syllable (symbol_cluster); }}
1048         break;
1049         case 4:
1050 #line 87 "hb-ot-shape-complex-indic-machine.rl"
1051         {{p = ((te))-1;}{ found_syllable (broken_cluster); }}
1052         break;
1053         case 5:
1054 #line 1 "NONE"
1055         {       switch( act ) {
1056         case 1:
1057         {{p = ((te))-1;} found_syllable (consonant_syllable); }
1058         break;
1059         case 5:
1060         {{p = ((te))-1;} found_syllable (broken_cluster); }
1061         break;
1062         case 6:
1063         {{p = ((te))-1;} found_syllable (non_indic_cluster); }
1064         break;
1065         }
1066         }
1067         break;
1068         case 22:
1069 #line 1 "NONE"
1070         {te = p+1;}
1071 #line 83 "hb-ot-shape-complex-indic-machine.rl"
1072         {act = 1;}
1073         break;
1074         case 6:
1075 #line 1 "NONE"
1076         {te = p+1;}
1077 #line 87 "hb-ot-shape-complex-indic-machine.rl"
1078         {act = 5;}
1079         break;
1080         case 12:
1081 #line 1 "NONE"
1082         {te = p+1;}
1083 #line 88 "hb-ot-shape-complex-indic-machine.rl"
1084         {act = 6;}
1085         break;
1086 #line 1087 "hb-ot-shape-complex-indic-machine.hh"
1087         }
1088
1089 _again:
1090         switch ( _indic_syllable_machine_to_state_actions[cs] ) {
1091         case 9:
1092 #line 1 "NONE"
1093         {ts = 0;}
1094         break;
1095 #line 1096 "hb-ot-shape-complex-indic-machine.hh"
1096         }
1097
1098         if ( ++p != pe )
1099                 goto _resume;
1100         _test_eof: {}
1101         if ( p == eof )
1102         {
1103         if ( _indic_syllable_machine_eof_trans[cs] > 0 ) {
1104                 _trans = _indic_syllable_machine_eof_trans[cs] - 1;
1105                 goto _eof_trans;
1106         }
1107         }
1108
1109         }
1110
1111 #line 120 "hb-ot-shape-complex-indic-machine.rl"
1112
1113 }
1114
1115 #endif /* HB_OT_SHAPE_COMPLEX_INDIC_MACHINE_HH */