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, 5u, 8u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u,
38 	4u, 13u, 4u, 8u, 8u, 8u, 5u, 7u, 5u, 8u, 4u, 8u, 6u, 6u, 16u, 16u,
39 	4u, 8u, 4u, 13u, 4u, 13u, 4u, 13u, 8u, 8u, 5u, 7u, 5u, 8u, 4u, 8u,
40 	6u, 6u, 16u, 16u, 4u, 8u, 4u, 8u, 4u, 13u, 8u, 8u, 5u, 7u, 5u, 8u,
41 	4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 4u, 8u, 5u, 8u, 8u, 8u, 1u, 19u,
42 	3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 5u, 10u, 5u, 10u, 10u, 10u, 5u, 10u,
43 	1u, 16u, 1u, 16u, 1u, 16u, 3u, 10u, 4u, 10u, 5u, 10u, 4u, 10u, 5u, 10u,
44 	3u, 10u, 5u, 10u, 3u, 17u, 3u, 17u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u,
45 	3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 5u, 10u, 10u, 10u, 5u, 10u, 1u, 16u,
46 	1u, 16u, 3u, 10u, 4u, 10u, 5u, 10u, 4u, 10u, 5u, 10u, 5u, 10u, 3u, 10u,
47 	5u, 10u, 3u, 17u, 3u, 17u, 4u, 8u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u,
48 	3u, 17u, 1u, 16u, 5u, 10u, 10u, 10u, 5u, 10u, 1u, 16u, 1u, 16u, 3u, 10u,
49 	4u, 10u, 5u, 10u, 3u, 17u, 4u, 10u, 5u, 10u, 5u, 10u, 3u, 10u, 5u, 10u,
50 	3u, 17u, 4u, 13u, 4u, 8u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u,
51 	1u, 16u, 5u, 10u, 10u, 10u, 5u, 10u, 1u, 16u, 1u, 16u, 3u, 10u, 4u, 10u,
52 	5u, 10u, 3u, 17u, 4u, 10u, 5u, 10u, 5u, 10u, 3u, 10u, 5u, 10u, 1u, 17u,
53 	3u, 17u, 1u, 17u, 4u, 13u, 5u, 10u, 10u, 10u, 5u, 10u, 1u, 16u, 3u, 10u,
54 	5u, 10u, 5u, 10u, 10u, 10u, 5u, 10u, 1u, 16u, 0
55 };
56 
57 static const char _indic_syllable_machine_key_spans[] = {
58 	1, 5, 3, 4, 5, 1, 1, 5,
59 	10, 5, 1, 3, 4, 5, 1, 1,
60 	5, 10, 10, 10, 1, 3, 4, 5,
61 	1, 1, 5, 5, 10, 1, 3, 4,
62 	5, 1, 1, 5, 5, 4, 1, 19,
63 	15, 15, 14, 16, 6, 6, 1, 6,
64 	16, 16, 16, 8, 7, 6, 7, 6,
65 	8, 6, 15, 15, 15, 15, 14, 16,
66 	15, 15, 14, 16, 6, 1, 6, 16,
67 	16, 8, 7, 6, 7, 6, 6, 8,
68 	6, 15, 15, 5, 15, 15, 14, 16,
69 	15, 16, 6, 1, 6, 16, 16, 8,
70 	7, 6, 15, 7, 6, 6, 8, 6,
71 	15, 10, 5, 15, 15, 14, 16, 15,
72 	16, 6, 1, 6, 16, 16, 8, 7,
73 	6, 15, 7, 6, 6, 8, 6, 17,
74 	15, 17, 10, 6, 1, 6, 16, 8,
75 	6, 6, 1, 6, 16
76 };
77 
78 static const short _indic_syllable_machine_index_offsets[] = {
79 	0, 2, 8, 12, 17, 23, 25, 27,
80 	33, 44, 50, 52, 56, 61, 67, 69,
81 	71, 77, 88, 99, 110, 112, 116, 121,
82 	127, 129, 131, 137, 143, 154, 156, 160,
83 	165, 171, 173, 175, 181, 187, 192, 194,
84 	214, 230, 246, 261, 278, 285, 292, 294,
85 	301, 318, 335, 352, 361, 369, 376, 384,
86 	391, 400, 407, 423, 439, 455, 471, 486,
87 	503, 519, 535, 550, 567, 574, 576, 583,
88 	600, 617, 626, 634, 641, 649, 656, 663,
89 	672, 679, 695, 711, 717, 733, 749, 764,
90 	781, 797, 814, 821, 823, 830, 847, 864,
91 	873, 881, 888, 904, 912, 919, 926, 935,
92 	942, 958, 969, 975, 991, 1007, 1022, 1039,
93 	1055, 1072, 1079, 1081, 1088, 1105, 1122, 1131,
94 	1139, 1146, 1162, 1170, 1177, 1184, 1193, 1200,
95 	1218, 1234, 1252, 1263, 1270, 1272, 1279, 1296,
96 	1305, 1312, 1319, 1321, 1328
97 };
98 
99 static const unsigned char _indic_syllable_machine_indicies[] = {
100 	1, 0, 2, 3, 3, 4, 1, 0,
101 	3, 3, 4, 0, 3, 3, 4, 1,
102 	0, 5, 3, 3, 4, 1, 0, 6,
103 	0, 7, 0, 8, 3, 3, 4, 1,
104 	0, 2, 3, 3, 4, 1, 0, 0,
105 	0, 0, 9, 0, 11, 12, 12, 13,
106 	14, 10, 14, 10, 12, 12, 13, 10,
107 	12, 12, 13, 14, 10, 15, 12, 12,
108 	13, 14, 10, 16, 10, 17, 10, 18,
109 	12, 12, 13, 14, 10, 11, 12, 12,
110 	13, 14, 10, 10, 10, 10, 19, 10,
111 	11, 12, 12, 13, 14, 10, 10, 10,
112 	10, 20, 10, 22, 23, 23, 24, 25,
113 	21, 21, 21, 21, 26, 21, 25, 21,
114 	23, 23, 24, 27, 23, 23, 24, 25,
115 	21, 28, 23, 23, 24, 25, 21, 29,
116 	21, 30, 21, 22, 23, 23, 24, 25,
117 	21, 31, 23, 23, 24, 25, 21, 33,
118 	34, 34, 35, 36, 32, 32, 32, 32,
119 	37, 32, 36, 32, 34, 34, 35, 32,
120 	34, 34, 35, 36, 32, 38, 34, 34,
121 	35, 36, 32, 39, 32, 40, 32, 33,
122 	34, 34, 35, 36, 32, 41, 34, 34,
123 	35, 36, 32, 23, 23, 24, 1, 0,
124 	43, 42, 45, 46, 47, 48, 49, 50,
125 	24, 25, 44, 51, 52, 52, 26, 44,
126 	53, 54, 55, 56, 57, 44, 59, 60,
127 	61, 62, 4, 1, 58, 63, 58, 58,
128 	9, 58, 58, 58, 64, 58, 65, 60,
129 	66, 66, 4, 1, 58, 63, 58, 58,
130 	58, 58, 58, 58, 64, 58, 60, 66,
131 	66, 4, 1, 58, 63, 58, 58, 58,
132 	58, 58, 58, 64, 58, 45, 58, 58,
133 	58, 67, 68, 58, 1, 58, 63, 58,
134 	58, 58, 58, 58, 45, 58, 69, 69,
135 	58, 1, 58, 63, 58, 63, 58, 58,
136 	70, 58, 63, 58, 63, 58, 63, 58,
137 	58, 58, 58, 63, 58, 45, 58, 71,
138 	58, 69, 69, 58, 1, 58, 63, 58,
139 	58, 58, 58, 58, 45, 58, 45, 58,
140 	58, 58, 69, 69, 58, 1, 58, 63,
141 	58, 58, 58, 58, 58, 45, 58, 45,
142 	58, 58, 58, 69, 68, 58, 1, 58,
143 	63, 58, 58, 58, 58, 58, 45, 58,
144 	72, 7, 73, 74, 4, 1, 58, 63,
145 	58, 7, 73, 74, 4, 1, 58, 63,
146 	58, 73, 73, 4, 1, 58, 63, 58,
147 	75, 76, 76, 4, 1, 58, 63, 58,
148 	67, 77, 58, 1, 58, 63, 58, 67,
149 	58, 69, 69, 58, 1, 58, 63, 58,
150 	69, 77, 58, 1, 58, 63, 58, 59,
151 	60, 66, 66, 4, 1, 58, 63, 58,
152 	58, 58, 58, 58, 58, 64, 58, 59,
153 	60, 61, 66, 4, 1, 58, 63, 58,
154 	58, 9, 58, 58, 58, 64, 58, 79,
155 	80, 81, 82, 13, 14, 78, 83, 78,
156 	78, 20, 78, 78, 78, 84, 78, 85,
157 	80, 86, 82, 13, 14, 78, 83, 78,
158 	78, 78, 78, 78, 78, 84, 78, 80,
159 	86, 82, 13, 14, 78, 83, 78, 78,
160 	78, 78, 78, 78, 84, 78, 87, 78,
161 	78, 78, 88, 89, 78, 14, 78, 83,
162 	78, 78, 78, 78, 78, 87, 78, 90,
163 	80, 91, 92, 13, 14, 78, 83, 78,
164 	78, 19, 78, 78, 78, 84, 78, 93,
165 	80, 86, 86, 13, 14, 78, 83, 78,
166 	78, 78, 78, 78, 78, 84, 78, 80,
167 	86, 86, 13, 14, 78, 83, 78, 78,
168 	78, 78, 78, 78, 84, 78, 87, 78,
169 	78, 78, 94, 89, 78, 14, 78, 83,
170 	78, 78, 78, 78, 78, 87, 78, 83,
171 	78, 78, 95, 78, 83, 78, 83, 78,
172 	83, 78, 78, 78, 78, 83, 78, 87,
173 	78, 96, 78, 94, 94, 78, 14, 78,
174 	83, 78, 78, 78, 78, 78, 87, 78,
175 	87, 78, 78, 78, 94, 94, 78, 14,
176 	78, 83, 78, 78, 78, 78, 78, 87,
177 	78, 97, 17, 98, 99, 13, 14, 78,
178 	83, 78, 17, 98, 99, 13, 14, 78,
179 	83, 78, 98, 98, 13, 14, 78, 83,
180 	78, 100, 101, 101, 13, 14, 78, 83,
181 	78, 88, 102, 78, 14, 78, 83, 78,
182 	94, 94, 78, 14, 78, 83, 78, 88,
183 	78, 94, 94, 78, 14, 78, 83, 78,
184 	94, 102, 78, 14, 78, 83, 78, 90,
185 	80, 86, 86, 13, 14, 78, 83, 78,
186 	78, 78, 78, 78, 78, 84, 78, 90,
187 	80, 91, 86, 13, 14, 78, 83, 78,
188 	78, 19, 78, 78, 78, 84, 78, 11,
189 	12, 12, 13, 14, 78, 79, 80, 86,
190 	82, 13, 14, 78, 83, 78, 78, 78,
191 	78, 78, 78, 84, 78, 104, 48, 105,
192 	105, 24, 25, 103, 51, 103, 103, 103,
193 	103, 103, 103, 55, 103, 48, 105, 105,
194 	24, 25, 103, 51, 103, 103, 103, 103,
195 	103, 103, 55, 103, 106, 103, 103, 103,
196 	107, 108, 103, 25, 103, 51, 103, 103,
197 	103, 103, 103, 106, 103, 47, 48, 109,
198 	110, 24, 25, 103, 51, 103, 103, 26,
199 	103, 103, 103, 55, 103, 106, 103, 103,
200 	103, 111, 108, 103, 25, 103, 51, 103,
201 	103, 103, 103, 103, 106, 103, 51, 103,
202 	103, 112, 103, 51, 103, 51, 103, 51,
203 	103, 103, 103, 103, 51, 103, 106, 103,
204 	113, 103, 111, 111, 103, 25, 103, 51,
205 	103, 103, 103, 103, 103, 106, 103, 106,
206 	103, 103, 103, 111, 111, 103, 25, 103,
207 	51, 103, 103, 103, 103, 103, 106, 103,
208 	114, 30, 115, 116, 24, 25, 103, 51,
209 	103, 30, 115, 116, 24, 25, 103, 51,
210 	103, 115, 115, 24, 25, 103, 51, 103,
211 	47, 48, 105, 105, 24, 25, 103, 51,
212 	103, 103, 103, 103, 103, 103, 55, 103,
213 	117, 118, 118, 24, 25, 103, 51, 103,
214 	107, 119, 103, 25, 103, 51, 103, 111,
215 	111, 103, 25, 103, 51, 103, 107, 103,
216 	111, 111, 103, 25, 103, 51, 103, 111,
217 	119, 103, 25, 103, 51, 103, 47, 48,
218 	109, 105, 24, 25, 103, 51, 103, 103,
219 	26, 103, 103, 103, 55, 103, 22, 23,
220 	23, 24, 25, 120, 120, 120, 120, 26,
221 	120, 22, 23, 23, 24, 25, 120, 122,
222 	123, 124, 125, 35, 36, 121, 126, 121,
223 	121, 37, 121, 121, 121, 127, 121, 128,
224 	123, 125, 125, 35, 36, 121, 126, 121,
225 	121, 121, 121, 121, 121, 127, 121, 123,
226 	125, 125, 35, 36, 121, 126, 121, 121,
227 	121, 121, 121, 121, 127, 121, 129, 121,
228 	121, 121, 130, 131, 121, 36, 121, 126,
229 	121, 121, 121, 121, 121, 129, 121, 122,
230 	123, 124, 52, 35, 36, 121, 126, 121,
231 	121, 37, 121, 121, 121, 127, 121, 129,
232 	121, 121, 121, 132, 131, 121, 36, 121,
233 	126, 121, 121, 121, 121, 121, 129, 121,
234 	126, 121, 121, 133, 121, 126, 121, 126,
235 	121, 126, 121, 121, 121, 121, 126, 121,
236 	129, 121, 134, 121, 132, 132, 121, 36,
237 	121, 126, 121, 121, 121, 121, 121, 129,
238 	121, 129, 121, 121, 121, 132, 132, 121,
239 	36, 121, 126, 121, 121, 121, 121, 121,
240 	129, 121, 135, 40, 136, 137, 35, 36,
241 	121, 126, 121, 40, 136, 137, 35, 36,
242 	121, 126, 121, 136, 136, 35, 36, 121,
243 	126, 121, 122, 123, 125, 125, 35, 36,
244 	121, 126, 121, 121, 121, 121, 121, 121,
245 	127, 121, 138, 139, 139, 35, 36, 121,
246 	126, 121, 130, 140, 121, 36, 121, 126,
247 	121, 132, 132, 121, 36, 121, 126, 121,
248 	130, 121, 132, 132, 121, 36, 121, 126,
249 	121, 132, 140, 121, 36, 121, 126, 121,
250 	45, 46, 47, 48, 109, 105, 24, 25,
251 	103, 51, 52, 52, 26, 103, 103, 45,
252 	55, 103, 59, 141, 61, 62, 4, 1,
253 	58, 63, 58, 58, 9, 58, 58, 58,
254 	64, 58, 45, 46, 47, 48, 142, 143,
255 	24, 144, 58, 145, 58, 52, 26, 58,
256 	58, 45, 55, 58, 22, 146, 146, 24,
257 	144, 58, 63, 58, 58, 26, 58, 145,
258 	58, 58, 147, 58, 145, 58, 145, 58,
259 	145, 58, 58, 58, 58, 145, 58, 45,
260 	58, 71, 22, 146, 146, 24, 144, 58,
261 	63, 58, 58, 58, 58, 58, 45, 58,
262 	149, 148, 150, 150, 148, 43, 148, 151,
263 	148, 150, 150, 148, 43, 148, 151, 148,
264 	151, 148, 148, 152, 148, 151, 148, 151,
265 	148, 151, 148, 148, 148, 148, 151, 148,
266 	45, 120, 120, 120, 120, 120, 120, 120,
267 	120, 120, 52, 120, 120, 120, 120, 45,
268 	120, 0
269 };
270 
271 static const unsigned char _indic_syllable_machine_trans_targs[] = {
272 	39, 45, 50, 2, 51, 5, 6, 53,
273 	57, 58, 39, 67, 11, 73, 68, 14,
274 	15, 75, 80, 81, 84, 39, 89, 21,
275 	95, 90, 98, 39, 24, 25, 97, 103,
276 	39, 112, 30, 118, 113, 121, 33, 34,
277 	120, 126, 39, 137, 39, 40, 60, 85,
278 	87, 105, 106, 91, 107, 127, 128, 99,
279 	135, 140, 39, 41, 43, 8, 59, 46,
280 	54, 42, 1, 44, 48, 0, 47, 49,
281 	52, 3, 4, 55, 7, 56, 39, 61,
282 	63, 18, 83, 69, 76, 62, 9, 64,
283 	78, 71, 65, 17, 82, 66, 10, 70,
284 	72, 74, 12, 13, 77, 16, 79, 39,
285 	86, 26, 88, 101, 93, 19, 104, 20,
286 	92, 94, 96, 22, 23, 100, 27, 102,
287 	39, 39, 108, 110, 28, 35, 114, 122,
288 	109, 111, 124, 116, 29, 115, 117, 119,
289 	31, 32, 123, 36, 125, 129, 130, 134,
290 	131, 132, 37, 133, 39, 136, 38, 138,
291 	139
292 };
293 
294 static const char _indic_syllable_machine_trans_actions[] = {
295 	1, 0, 2, 0, 2, 0, 0, 2,
296 	2, 2, 3, 2, 0, 2, 0, 0,
297 	0, 2, 2, 2, 2, 4, 2, 0,
298 	5, 0, 5, 6, 0, 0, 5, 2,
299 	7, 2, 0, 2, 0, 2, 0, 0,
300 	2, 2, 8, 0, 11, 2, 2, 5,
301 	0, 12, 12, 0, 2, 5, 2, 5,
302 	2, 0, 13, 2, 0, 0, 2, 0,
303 	2, 2, 0, 2, 2, 0, 0, 2,
304 	2, 0, 0, 0, 0, 2, 14, 2,
305 	0, 0, 2, 0, 2, 2, 0, 2,
306 	2, 2, 2, 0, 2, 2, 0, 0,
307 	2, 2, 0, 0, 0, 0, 2, 15,
308 	5, 0, 5, 2, 2, 0, 5, 0,
309 	0, 2, 5, 0, 0, 0, 0, 2,
310 	16, 17, 2, 0, 0, 0, 0, 2,
311 	2, 2, 2, 2, 0, 0, 2, 2,
312 	0, 0, 0, 0, 2, 0, 18, 18,
313 	0, 0, 0, 0, 19, 2, 0, 0,
314 	0
315 };
316 
317 static const char _indic_syllable_machine_to_state_actions[] = {
318 	0, 0, 0, 0, 0, 0, 0, 0,
319 	0, 0, 0, 0, 0, 0, 0, 0,
320 	0, 0, 0, 0, 0, 0, 0, 0,
321 	0, 0, 0, 0, 0, 0, 0, 0,
322 	0, 0, 0, 0, 0, 0, 0, 9,
323 	0, 0, 0, 0, 0, 0, 0, 0,
324 	0, 0, 0, 0, 0, 0, 0, 0,
325 	0, 0, 0, 0, 0, 0, 0, 0,
326 	0, 0, 0, 0, 0, 0, 0, 0,
327 	0, 0, 0, 0, 0, 0, 0, 0,
328 	0, 0, 0, 0, 0, 0, 0, 0,
329 	0, 0, 0, 0, 0, 0, 0, 0,
330 	0, 0, 0, 0, 0, 0, 0, 0,
331 	0, 0, 0, 0, 0, 0, 0, 0,
332 	0, 0, 0, 0, 0, 0, 0, 0,
333 	0, 0, 0, 0, 0, 0, 0, 0,
334 	0, 0, 0, 0, 0, 0, 0, 0,
335 	0, 0, 0, 0, 0
336 };
337 
338 static const char _indic_syllable_machine_from_state_actions[] = {
339 	0, 0, 0, 0, 0, 0, 0, 0,
340 	0, 0, 0, 0, 0, 0, 0, 0,
341 	0, 0, 0, 0, 0, 0, 0, 0,
342 	0, 0, 0, 0, 0, 0, 0, 0,
343 	0, 0, 0, 0, 0, 0, 0, 10,
344 	0, 0, 0, 0, 0, 0, 0, 0,
345 	0, 0, 0, 0, 0, 0, 0, 0,
346 	0, 0, 0, 0, 0, 0, 0, 0,
347 	0, 0, 0, 0, 0, 0, 0, 0,
348 	0, 0, 0, 0, 0, 0, 0, 0,
349 	0, 0, 0, 0, 0, 0, 0, 0,
350 	0, 0, 0, 0, 0, 0, 0, 0,
351 	0, 0, 0, 0, 0, 0, 0, 0,
352 	0, 0, 0, 0, 0, 0, 0, 0,
353 	0, 0, 0, 0, 0, 0, 0, 0,
354 	0, 0, 0, 0, 0, 0, 0, 0,
355 	0, 0, 0, 0, 0, 0, 0, 0,
356 	0, 0, 0, 0, 0
357 };
358 
359 static const short _indic_syllable_machine_eof_trans[] = {
360 	1, 1, 1, 1, 1, 1, 1, 1,
361 	1, 11, 11, 11, 11, 11, 11, 11,
362 	11, 11, 11, 22, 22, 28, 22, 22,
363 	22, 22, 22, 22, 33, 33, 33, 33,
364 	33, 33, 33, 33, 33, 1, 43, 0,
365 	59, 59, 59, 59, 59, 59, 59, 59,
366 	59, 59, 59, 59, 59, 59, 59, 59,
367 	59, 59, 59, 59, 79, 79, 79, 79,
368 	79, 79, 79, 79, 79, 79, 79, 79,
369 	79, 79, 79, 79, 79, 79, 79, 79,
370 	79, 79, 79, 79, 79, 104, 104, 104,
371 	104, 104, 104, 104, 104, 104, 104, 104,
372 	104, 104, 104, 104, 104, 104, 104, 104,
373 	104, 121, 121, 122, 122, 122, 122, 122,
374 	122, 122, 122, 122, 122, 122, 122, 122,
375 	122, 122, 122, 122, 122, 122, 122, 104,
376 	59, 59, 59, 59, 59, 59, 59, 149,
377 	149, 149, 149, 149, 121
378 };
379 
380 static const int indic_syllable_machine_start = 39;
381 static const int indic_syllable_machine_first_final = 39;
382 static const int indic_syllable_machine_error = -1;
383 
384 static const int indic_syllable_machine_en_main = 39;
385 
386 
387 #line 36 "hb-ot-shape-complex-indic-machine.rl"
388 
389 
390 
391 #line 93 "hb-ot-shape-complex-indic-machine.rl"
392 
393 
394 #define found_syllable(syllable_type) \
395   HB_STMT_START { \
396     if (0) fprintf (stderr, "syllable %d..%d %s\n", ts, te, #syllable_type); \
397     for (unsigned int i = ts; i < te; i++) \
398       info[i].syllable() = (syllable_serial << 4) | indic_##syllable_type; \
399     syllable_serial++; \
400     if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
401   } HB_STMT_END
402 
403 static void
find_syllables_indic(hb_buffer_t * buffer)404 find_syllables_indic (hb_buffer_t *buffer)
405 {
406   unsigned int p, pe, eof, ts, te, act;
407   int cs;
408   hb_glyph_info_t *info = buffer->info;
409 
410 #line 411 "hb-ot-shape-complex-indic-machine.hh"
411 	{
412 	cs = indic_syllable_machine_start;
413 	ts = 0;
414 	te = 0;
415 	act = 0;
416 	}
417 
418 #line 113 "hb-ot-shape-complex-indic-machine.rl"
419 
420 
421   p = 0;
422   pe = eof = buffer->len;
423 
424   unsigned int syllable_serial = 1;
425 
426 #line 427 "hb-ot-shape-complex-indic-machine.hh"
427 	{
428 	int _slen;
429 	int _trans;
430 	const unsigned char *_keys;
431 	const unsigned char *_inds;
432 	if ( p == pe )
433 		goto _test_eof;
434 _resume:
435 	switch ( _indic_syllable_machine_from_state_actions[cs] ) {
436 	case 10:
437 #line 1 "NONE"
438 	{ts = p;}
439 	break;
440 #line 441 "hb-ot-shape-complex-indic-machine.hh"
441 	}
442 
443 	_keys = _indic_syllable_machine_trans_keys + (cs<<1);
444 	_inds = _indic_syllable_machine_indicies + _indic_syllable_machine_index_offsets[cs];
445 
446 	_slen = _indic_syllable_machine_key_spans[cs];
447 	_trans = _inds[ _slen > 0 && _keys[0] <=( info[p].indic_category()) &&
448 		( info[p].indic_category()) <= _keys[1] ?
449 		( info[p].indic_category()) - _keys[0] : _slen ];
450 
451 _eof_trans:
452 	cs = _indic_syllable_machine_trans_targs[_trans];
453 
454 	if ( _indic_syllable_machine_trans_actions[_trans] == 0 )
455 		goto _again;
456 
457 	switch ( _indic_syllable_machine_trans_actions[_trans] ) {
458 	case 2:
459 #line 1 "NONE"
460 	{te = p+1;}
461 	break;
462 	case 11:
463 #line 89 "hb-ot-shape-complex-indic-machine.rl"
464 	{te = p+1;{ found_syllable (non_indic_cluster); }}
465 	break;
466 	case 13:
467 #line 84 "hb-ot-shape-complex-indic-machine.rl"
468 	{te = p;p--;{ found_syllable (consonant_syllable); }}
469 	break;
470 	case 14:
471 #line 85 "hb-ot-shape-complex-indic-machine.rl"
472 	{te = p;p--;{ found_syllable (vowel_syllable); }}
473 	break;
474 	case 17:
475 #line 86 "hb-ot-shape-complex-indic-machine.rl"
476 	{te = p;p--;{ found_syllable (standalone_cluster); }}
477 	break;
478 	case 19:
479 #line 87 "hb-ot-shape-complex-indic-machine.rl"
480 	{te = p;p--;{ found_syllable (symbol_cluster); }}
481 	break;
482 	case 15:
483 #line 88 "hb-ot-shape-complex-indic-machine.rl"
484 	{te = p;p--;{ found_syllable (broken_cluster); }}
485 	break;
486 	case 16:
487 #line 89 "hb-ot-shape-complex-indic-machine.rl"
488 	{te = p;p--;{ found_syllable (non_indic_cluster); }}
489 	break;
490 	case 1:
491 #line 84 "hb-ot-shape-complex-indic-machine.rl"
492 	{{p = ((te))-1;}{ found_syllable (consonant_syllable); }}
493 	break;
494 	case 3:
495 #line 85 "hb-ot-shape-complex-indic-machine.rl"
496 	{{p = ((te))-1;}{ found_syllable (vowel_syllable); }}
497 	break;
498 	case 7:
499 #line 86 "hb-ot-shape-complex-indic-machine.rl"
500 	{{p = ((te))-1;}{ found_syllable (standalone_cluster); }}
501 	break;
502 	case 8:
503 #line 87 "hb-ot-shape-complex-indic-machine.rl"
504 	{{p = ((te))-1;}{ found_syllable (symbol_cluster); }}
505 	break;
506 	case 4:
507 #line 88 "hb-ot-shape-complex-indic-machine.rl"
508 	{{p = ((te))-1;}{ found_syllable (broken_cluster); }}
509 	break;
510 	case 6:
511 #line 1 "NONE"
512 	{	switch( act ) {
513 	case 1:
514 	{{p = ((te))-1;} found_syllable (consonant_syllable); }
515 	break;
516 	case 5:
517 	{{p = ((te))-1;} found_syllable (broken_cluster); }
518 	break;
519 	case 6:
520 	{{p = ((te))-1;} found_syllable (non_indic_cluster); }
521 	break;
522 	}
523 	}
524 	break;
525 	case 18:
526 #line 1 "NONE"
527 	{te = p+1;}
528 #line 84 "hb-ot-shape-complex-indic-machine.rl"
529 	{act = 1;}
530 	break;
531 	case 5:
532 #line 1 "NONE"
533 	{te = p+1;}
534 #line 88 "hb-ot-shape-complex-indic-machine.rl"
535 	{act = 5;}
536 	break;
537 	case 12:
538 #line 1 "NONE"
539 	{te = p+1;}
540 #line 89 "hb-ot-shape-complex-indic-machine.rl"
541 	{act = 6;}
542 	break;
543 #line 544 "hb-ot-shape-complex-indic-machine.hh"
544 	}
545 
546 _again:
547 	switch ( _indic_syllable_machine_to_state_actions[cs] ) {
548 	case 9:
549 #line 1 "NONE"
550 	{ts = 0;}
551 	break;
552 #line 553 "hb-ot-shape-complex-indic-machine.hh"
553 	}
554 
555 	if ( ++p != pe )
556 		goto _resume;
557 	_test_eof: {}
558 	if ( p == eof )
559 	{
560 	if ( _indic_syllable_machine_eof_trans[cs] > 0 ) {
561 		_trans = _indic_syllable_machine_eof_trans[cs] - 1;
562 		goto _eof_trans;
563 	}
564 	}
565 
566 	}
567 
568 #line 121 "hb-ot-shape-complex-indic-machine.rl"
569 
570 }
571 
572 #undef found_syllable
573 
574 #endif /* HB_OT_SHAPE_COMPLEX_INDIC_MACHINE_HH */
575