1 
2 #line 1 "hb-ot-shape-complex-use-machine.rl"
3 /*
4  * Copyright © 2015  Mozilla Foundation.
5  * Copyright © 2015  Google, Inc.
6  *
7  *  This is part of HarfBuzz, a text shaping library.
8  *
9  * Permission is hereby granted, without written agreement and without
10  * license or royalty fees, to use, copy, modify, and distribute this
11  * software and its documentation for any purpose, provided that the
12  * above copyright notice and the following two paragraphs appear in
13  * all copies of this software.
14  *
15  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
16  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
17  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
18  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
19  * DAMAGE.
20  *
21  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
22  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
23  * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
24  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
25  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
26  *
27  * Mozilla Author(s): Jonathan Kew
28  * Google Author(s): Behdad Esfahbod
29  */
30 
31 #ifndef HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH
32 #define HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH
33 
34 #include "hb-private.hh"
35 
36 
37 #line 38 "hb-ot-shape-complex-use-machine.hh"
38 static const unsigned char _use_syllable_machine_trans_keys[] = {
39 	0u, 0u, 4u, 4u, 1u, 1u, 0u, 39u, 21u, 21u, 8u, 39u, 8u, 39u, 1u, 1u,
40 	8u, 39u, 8u, 39u, 8u, 39u, 8u, 26u, 8u, 26u, 8u, 26u, 8u, 39u, 8u, 39u,
41 	8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u,
42 	8u, 39u, 8u, 39u, 8u, 39u, 1u, 1u, 8u, 39u, 8u, 39u, 8u, 26u, 8u, 26u,
43 	8u, 26u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u,
44 	8u, 39u, 12u, 21u, 12u, 13u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 26u,
45 	8u, 26u, 8u, 26u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u,
46 	8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 1u, 39u, 8u, 39u, 21u, 42u, 41u, 42u,
47 	42u, 42u, 0
48 };
49 
50 static const char _use_syllable_machine_key_spans[] = {
51 	0, 1, 1, 40, 1, 32, 32, 1,
52 	32, 32, 32, 19, 19, 19, 32, 32,
53 	32, 32, 32, 32, 32, 32, 32, 32,
54 	32, 32, 32, 1, 32, 32, 19, 19,
55 	19, 32, 32, 32, 32, 32, 32, 32,
56 	32, 10, 2, 32, 32, 32, 32, 19,
57 	19, 19, 32, 32, 32, 32, 32, 32,
58 	32, 32, 32, 32, 39, 32, 22, 2,
59 	1
60 };
61 
62 static const short _use_syllable_machine_index_offsets[] = {
63 	0, 0, 2, 4, 45, 47, 80, 113,
64 	115, 148, 181, 214, 234, 254, 274, 307,
65 	340, 373, 406, 439, 472, 505, 538, 571,
66 	604, 637, 670, 703, 705, 738, 771, 791,
67 	811, 831, 864, 897, 930, 963, 996, 1029,
68 	1062, 1095, 1106, 1109, 1142, 1175, 1208, 1241,
69 	1261, 1281, 1301, 1334, 1367, 1400, 1433, 1466,
70 	1499, 1532, 1565, 1598, 1631, 1671, 1704, 1727,
71 	1730
72 };
73 
74 static const char _use_syllable_machine_indicies[] = {
75 	1, 0, 3, 2, 4, 5, 6,
76 	4, 1, 5, 8, 8, 7, 8, 8,
77 	3, 9, 8, 8, 8, 4, 4, 10,
78 	11, 8, 8, 12, 13, 14, 15, 16,
79 	17, 18, 12, 19, 20, 21, 22, 23,
80 	24, 8, 25, 26, 27, 8, 29, 28,
81 	31, 30, 30, 32, 33, 30, 30, 30,
82 	30, 30, 30, 30, 30, 34, 35, 36,
83 	37, 38, 39, 40, 41, 35, 42, 34,
84 	43, 44, 45, 46, 30, 47, 48, 49,
85 	30, 31, 30, 30, 32, 33, 30, 30,
86 	30, 30, 30, 30, 30, 30, 50, 35,
87 	36, 37, 38, 39, 40, 41, 35, 42,
88 	43, 43, 44, 45, 46, 30, 47, 48,
89 	49, 30, 32, 51, 31, 30, 30, 32,
90 	33, 30, 30, 30, 30, 30, 30, 30,
91 	30, 30, 35, 36, 37, 38, 39, 40,
92 	41, 35, 42, 43, 43, 44, 45, 46,
93 	30, 47, 48, 49, 30, 31, 30, 30,
94 	30, 30, 30, 30, 30, 30, 30, 30,
95 	30, 30, 30, 35, 36, 37, 38, 39,
96 	30, 30, 30, 30, 30, 30, 44, 45,
97 	46, 30, 47, 48, 49, 30, 31, 30,
98 	30, 30, 30, 30, 30, 30, 30, 30,
99 	30, 30, 30, 30, 30, 36, 37, 38,
100 	39, 30, 30, 30, 30, 30, 30, 30,
101 	30, 30, 30, 47, 48, 49, 30, 31,
102 	30, 30, 30, 30, 30, 30, 30, 30,
103 	30, 30, 30, 30, 30, 30, 30, 37,
104 	38, 39, 30, 31, 30, 30, 30, 30,
105 	30, 30, 30, 30, 30, 30, 30, 30,
106 	30, 30, 30, 30, 38, 39, 30, 31,
107 	30, 30, 30, 30, 30, 30, 30, 30,
108 	30, 30, 30, 30, 30, 30, 30, 30,
109 	30, 39, 30, 31, 30, 30, 30, 30,
110 	30, 30, 30, 30, 30, 30, 30, 30,
111 	30, 30, 30, 37, 38, 39, 30, 30,
112 	30, 30, 30, 30, 30, 30, 30, 30,
113 	47, 48, 49, 30, 31, 30, 30, 30,
114 	30, 30, 30, 30, 30, 30, 30, 30,
115 	30, 30, 30, 30, 37, 38, 39, 30,
116 	30, 30, 30, 30, 30, 30, 30, 30,
117 	30, 30, 48, 49, 30, 31, 30, 30,
118 	30, 30, 30, 30, 30, 30, 30, 30,
119 	30, 30, 30, 30, 30, 37, 38, 39,
120 	30, 30, 30, 30, 30, 30, 30, 30,
121 	30, 30, 30, 30, 49, 30, 31, 30,
122 	30, 30, 30, 30, 30, 30, 30, 30,
123 	30, 30, 30, 30, 30, 36, 37, 38,
124 	39, 30, 30, 30, 30, 30, 30, 44,
125 	45, 46, 30, 47, 48, 49, 30, 31,
126 	30, 30, 30, 30, 30, 30, 30, 30,
127 	30, 30, 30, 30, 30, 30, 36, 37,
128 	38, 39, 30, 30, 30, 30, 30, 30,
129 	30, 45, 46, 30, 47, 48, 49, 30,
130 	31, 30, 30, 30, 30, 30, 30, 30,
131 	30, 30, 30, 30, 30, 30, 30, 36,
132 	37, 38, 39, 30, 30, 30, 30, 30,
133 	30, 30, 30, 46, 30, 47, 48, 49,
134 	30, 31, 30, 30, 30, 30, 30, 30,
135 	30, 30, 30, 30, 30, 30, 30, 35,
136 	36, 37, 38, 39, 30, 41, 35, 30,
137 	30, 30, 44, 45, 46, 30, 47, 48,
138 	49, 30, 31, 30, 30, 30, 30, 30,
139 	30, 30, 30, 30, 30, 30, 30, 30,
140 	35, 36, 37, 38, 39, 30, 30, 35,
141 	30, 30, 30, 44, 45, 46, 30, 47,
142 	48, 49, 30, 31, 30, 30, 30, 30,
143 	30, 30, 30, 30, 30, 30, 30, 30,
144 	30, 35, 36, 37, 38, 39, 40, 41,
145 	35, 30, 30, 30, 44, 45, 46, 30,
146 	47, 48, 49, 30, 31, 30, 30, 32,
147 	33, 30, 30, 30, 30, 30, 30, 30,
148 	30, 30, 35, 36, 37, 38, 39, 40,
149 	41, 35, 42, 30, 43, 44, 45, 46,
150 	30, 47, 48, 49, 30, 31, 30, 30,
151 	32, 33, 30, 30, 30, 30, 30, 30,
152 	30, 30, 30, 35, 36, 37, 38, 39,
153 	40, 41, 35, 42, 34, 43, 44, 45,
154 	46, 30, 47, 48, 49, 30, 53, 52,
155 	52, 54, 55, 52, 52, 52, 52, 52,
156 	52, 52, 52, 56, 52, 57, 58, 59,
157 	60, 61, 62, 57, 63, 56, 64, 52,
158 	52, 52, 52, 65, 66, 67, 52, 53,
159 	52, 52, 54, 55, 52, 52, 52, 52,
160 	52, 52, 52, 52, 68, 52, 57, 58,
161 	59, 60, 61, 62, 57, 63, 64, 64,
162 	52, 52, 52, 52, 65, 66, 67, 52,
163 	54, 51, 53, 52, 52, 54, 55, 52,
164 	52, 52, 52, 52, 52, 52, 52, 52,
165 	52, 57, 58, 59, 60, 61, 62, 57,
166 	63, 64, 64, 52, 52, 52, 52, 65,
167 	66, 67, 52, 53, 52, 52, 52, 52,
168 	52, 52, 52, 52, 52, 52, 52, 52,
169 	52, 52, 57, 58, 59, 60, 52, 52,
170 	52, 52, 52, 52, 52, 52, 52, 52,
171 	65, 66, 67, 52, 53, 52, 52, 52,
172 	52, 52, 52, 52, 52, 52, 52, 52,
173 	52, 52, 52, 52, 58, 59, 60, 52,
174 	53, 52, 52, 52, 52, 52, 52, 52,
175 	52, 52, 52, 52, 52, 52, 52, 52,
176 	52, 59, 60, 52, 53, 52, 52, 52,
177 	52, 52, 52, 52, 52, 52, 52, 52,
178 	52, 52, 52, 52, 52, 52, 60, 52,
179 	53, 52, 52, 52, 52, 52, 52, 52,
180 	52, 52, 52, 52, 52, 52, 52, 52,
181 	58, 59, 60, 52, 52, 52, 52, 52,
182 	52, 52, 52, 52, 52, 65, 66, 67,
183 	52, 53, 52, 52, 52, 52, 52, 52,
184 	52, 52, 52, 52, 52, 52, 52, 52,
185 	52, 58, 59, 60, 52, 52, 52, 52,
186 	52, 52, 52, 52, 52, 52, 52, 66,
187 	67, 52, 53, 52, 52, 52, 52, 52,
188 	52, 52, 52, 52, 52, 52, 52, 52,
189 	52, 52, 58, 59, 60, 52, 52, 52,
190 	52, 52, 52, 52, 52, 52, 52, 52,
191 	52, 67, 52, 53, 52, 52, 52, 52,
192 	52, 52, 52, 52, 52, 52, 52, 52,
193 	52, 52, 57, 58, 59, 60, 52, 62,
194 	57, 52, 52, 52, 52, 52, 52, 52,
195 	65, 66, 67, 52, 53, 52, 52, 52,
196 	52, 52, 52, 52, 52, 52, 52, 52,
197 	52, 52, 52, 57, 58, 59, 60, 52,
198 	52, 57, 52, 52, 52, 52, 52, 52,
199 	52, 65, 66, 67, 52, 53, 52, 52,
200 	52, 52, 52, 52, 52, 52, 52, 52,
201 	52, 52, 52, 52, 57, 58, 59, 60,
202 	61, 62, 57, 52, 52, 52, 52, 52,
203 	52, 52, 65, 66, 67, 52, 53, 52,
204 	52, 54, 55, 52, 52, 52, 52, 52,
205 	52, 52, 52, 52, 52, 57, 58, 59,
206 	60, 61, 62, 57, 63, 52, 64, 52,
207 	52, 52, 52, 65, 66, 67, 52, 53,
208 	52, 52, 54, 55, 52, 52, 52, 52,
209 	52, 52, 52, 52, 52, 52, 57, 58,
210 	59, 60, 61, 62, 57, 63, 56, 64,
211 	52, 52, 52, 52, 65, 66, 67, 52,
212 	70, 71, 69, 69, 69, 69, 69, 69,
213 	69, 72, 69, 70, 71, 69, 7, 73,
214 	73, 3, 9, 73, 73, 73, 73, 73,
215 	73, 73, 73, 74, 12, 13, 14, 15,
216 	16, 17, 18, 12, 19, 21, 21, 22,
217 	23, 24, 73, 25, 26, 27, 73, 7,
218 	73, 73, 3, 9, 73, 73, 73, 73,
219 	73, 73, 73, 73, 73, 12, 13, 14,
220 	15, 16, 17, 18, 12, 19, 21, 21,
221 	22, 23, 24, 73, 25, 26, 27, 73,
222 	7, 73, 73, 73, 73, 73, 73, 73,
223 	73, 73, 73, 73, 73, 73, 12, 13,
224 	14, 15, 16, 73, 73, 73, 73, 73,
225 	73, 22, 23, 24, 73, 25, 26, 27,
226 	73, 7, 73, 73, 73, 73, 73, 73,
227 	73, 73, 73, 73, 73, 73, 73, 73,
228 	13, 14, 15, 16, 73, 73, 73, 73,
229 	73, 73, 73, 73, 73, 73, 25, 26,
230 	27, 73, 7, 73, 73, 73, 73, 73,
231 	73, 73, 73, 73, 73, 73, 73, 73,
232 	73, 73, 14, 15, 16, 73, 7, 73,
233 	73, 73, 73, 73, 73, 73, 73, 73,
234 	73, 73, 73, 73, 73, 73, 73, 15,
235 	16, 73, 7, 73, 73, 73, 73, 73,
236 	73, 73, 73, 73, 73, 73, 73, 73,
237 	73, 73, 73, 73, 16, 73, 7, 73,
238 	73, 73, 73, 73, 73, 73, 73, 73,
239 	73, 73, 73, 73, 73, 73, 14, 15,
240 	16, 73, 73, 73, 73, 73, 73, 73,
241 	73, 73, 73, 25, 26, 27, 73, 7,
242 	73, 73, 73, 73, 73, 73, 73, 73,
243 	73, 73, 73, 73, 73, 73, 73, 14,
244 	15, 16, 73, 73, 73, 73, 73, 73,
245 	73, 73, 73, 73, 73, 26, 27, 73,
246 	7, 73, 73, 73, 73, 73, 73, 73,
247 	73, 73, 73, 73, 73, 73, 73, 73,
248 	14, 15, 16, 73, 73, 73, 73, 73,
249 	73, 73, 73, 73, 73, 73, 73, 27,
250 	73, 7, 73, 73, 73, 73, 73, 73,
251 	73, 73, 73, 73, 73, 73, 73, 73,
252 	13, 14, 15, 16, 73, 73, 73, 73,
253 	73, 73, 22, 23, 24, 73, 25, 26,
254 	27, 73, 7, 73, 73, 73, 73, 73,
255 	73, 73, 73, 73, 73, 73, 73, 73,
256 	73, 13, 14, 15, 16, 73, 73, 73,
257 	73, 73, 73, 73, 23, 24, 73, 25,
258 	26, 27, 73, 7, 73, 73, 73, 73,
259 	73, 73, 73, 73, 73, 73, 73, 73,
260 	73, 73, 13, 14, 15, 16, 73, 73,
261 	73, 73, 73, 73, 73, 73, 24, 73,
262 	25, 26, 27, 73, 7, 73, 73, 73,
263 	73, 73, 73, 73, 73, 73, 73, 73,
264 	73, 73, 12, 13, 14, 15, 16, 73,
265 	18, 12, 73, 73, 73, 22, 23, 24,
266 	73, 25, 26, 27, 73, 7, 73, 73,
267 	73, 73, 73, 73, 73, 73, 73, 73,
268 	73, 73, 73, 12, 13, 14, 15, 16,
269 	73, 73, 12, 73, 73, 73, 22, 23,
270 	24, 73, 25, 26, 27, 73, 7, 73,
271 	73, 73, 73, 73, 73, 73, 73, 73,
272 	73, 73, 73, 73, 12, 13, 14, 15,
273 	16, 17, 18, 12, 73, 73, 73, 22,
274 	23, 24, 73, 25, 26, 27, 73, 7,
275 	73, 73, 3, 9, 73, 73, 73, 73,
276 	73, 73, 73, 73, 73, 12, 13, 14,
277 	15, 16, 17, 18, 12, 19, 73, 21,
278 	22, 23, 24, 73, 25, 26, 27, 73,
279 	5, 6, 73, 73, 5, 73, 73, 7,
280 	73, 73, 3, 9, 73, 73, 73, 73,
281 	73, 73, 73, 73, 73, 12, 13, 14,
282 	15, 16, 17, 18, 12, 19, 20, 21,
283 	22, 23, 24, 73, 25, 26, 27, 73,
284 	7, 73, 73, 3, 9, 73, 73, 73,
285 	73, 73, 73, 73, 73, 73, 12, 13,
286 	14, 15, 16, 17, 18, 12, 19, 20,
287 	21, 22, 23, 24, 73, 25, 26, 27,
288 	73, 76, 75, 75, 75, 75, 75, 75,
289 	75, 75, 75, 75, 75, 75, 75, 75,
290 	75, 75, 75, 75, 75, 76, 77, 75,
291 	76, 77, 75, 77, 75, 0
292 };
293 
294 static const char _use_syllable_machine_trans_targs[] = {
295 	3, 41, 3, 43, 4, 5, 25, 3,
296 	0, 2, 60, 62, 45, 46, 47, 48,
297 	49, 56, 57, 58, 61, 59, 53, 54,
298 	55, 50, 51, 52, 3, 3, 3, 3,
299 	6, 7, 24, 9, 10, 11, 12, 13,
300 	20, 21, 22, 23, 17, 18, 19, 14,
301 	15, 16, 8, 3, 3, 3, 26, 27,
302 	40, 29, 30, 31, 32, 36, 37, 38,
303 	39, 33, 34, 35, 28, 3, 3, 1,
304 	42, 3, 44, 3, 63, 64
305 };
306 
307 static const char _use_syllable_machine_trans_actions[] = {
308 	1, 2, 3, 4, 0, 0, 0, 7,
309 	0, 0, 4, 0, 0, 0, 0, 0,
310 	0, 0, 0, 0, 4, 4, 0, 0,
311 	0, 0, 0, 0, 8, 9, 10, 11,
312 	0, 0, 0, 0, 0, 0, 0, 0,
313 	0, 0, 0, 0, 0, 0, 0, 0,
314 	0, 0, 0, 12, 13, 14, 0, 0,
315 	0, 0, 0, 0, 0, 0, 0, 0,
316 	0, 0, 0, 0, 0, 15, 16, 0,
317 	2, 17, 4, 18, 0, 0
318 };
319 
320 static const char _use_syllable_machine_to_state_actions[] = {
321 	0, 0, 0, 5, 0, 0, 0, 0,
322 	0, 0, 0, 0, 0, 0, 0, 0,
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
330 };
331 
332 static const char _use_syllable_machine_from_state_actions[] = {
333 	0, 0, 0, 6, 0, 0, 0, 0,
334 	0, 0, 0, 0, 0, 0, 0, 0,
335 	0, 0, 0, 0, 0, 0, 0, 0,
336 	0, 0, 0, 0, 0, 0, 0, 0,
337 	0, 0, 0, 0, 0, 0, 0, 0,
338 	0, 0, 0, 0, 0, 0, 0, 0,
339 	0, 0, 0, 0, 0, 0, 0, 0,
340 	0, 0, 0, 0, 0, 0, 0, 0,
341 	0
342 };
343 
344 static const short _use_syllable_machine_eof_trans[] = {
345 	0, 1, 3, 0, 29, 31, 31, 52,
346 	31, 31, 31, 31, 31, 31, 31, 31,
347 	31, 31, 31, 31, 31, 31, 31, 31,
348 	31, 53, 53, 52, 53, 53, 53, 53,
349 	53, 53, 53, 53, 53, 53, 53, 53,
350 	53, 70, 70, 74, 74, 74, 74, 74,
351 	74, 74, 74, 74, 74, 74, 74, 74,
352 	74, 74, 74, 74, 74, 74, 76, 76,
353 	76
354 };
355 
356 static const int use_syllable_machine_start = 3;
357 static const int use_syllable_machine_first_final = 3;
358 static const int use_syllable_machine_error = 0;
359 
360 static const int use_syllable_machine_en_main = 3;
361 
362 
363 #line 38 "hb-ot-shape-complex-use-machine.rl"
364 
365 
366 
367 #line 145 "hb-ot-shape-complex-use-machine.rl"
368 
369 
370 #define found_syllable(syllable_type) \
371   HB_STMT_START { \
372     if (0) fprintf (stderr, "syllable %d..%d %s\n", last, p+1, #syllable_type); \
373     for (unsigned int i = last; i < p+1; i++) \
374       info[i].syllable() = (syllable_serial << 4) | syllable_type; \
375     last = p+1; \
376     syllable_serial++; \
377     if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
378   } HB_STMT_END
379 
380 static void
find_syllables(hb_buffer_t * buffer)381 find_syllables (hb_buffer_t *buffer)
382 {
383   unsigned int p, pe, eof, ts HB_UNUSED, te HB_UNUSED, act HB_UNUSED;
384   int cs;
385   hb_glyph_info_t *info = buffer->info;
386 
387 #line 388 "hb-ot-shape-complex-use-machine.hh"
388 	{
389 	cs = use_syllable_machine_start;
390 	ts = 0;
391 	te = 0;
392 	act = 0;
393 	}
394 
395 #line 166 "hb-ot-shape-complex-use-machine.rl"
396 
397 
398   p = 0;
399   pe = eof = buffer->len;
400 
401   unsigned int last = 0;
402   unsigned int syllable_serial = 1;
403 
404 #line 405 "hb-ot-shape-complex-use-machine.hh"
405 	{
406 	int _slen;
407 	int _trans;
408 	const unsigned char *_keys;
409 	const char *_inds;
410 	if ( p == pe )
411 		goto _test_eof;
412 	if ( cs == 0 )
413 		goto _out;
414 _resume:
415 	switch ( _use_syllable_machine_from_state_actions[cs] ) {
416 	case 6:
417 #line 1 "NONE"
418 	{ts = p;}
419 	break;
420 #line 421 "hb-ot-shape-complex-use-machine.hh"
421 	}
422 
423 	_keys = _use_syllable_machine_trans_keys + (cs<<1);
424 	_inds = _use_syllable_machine_indicies + _use_syllable_machine_index_offsets[cs];
425 
426 	_slen = _use_syllable_machine_key_spans[cs];
427 	_trans = _inds[ _slen > 0 && _keys[0] <=( info[p].use_category()) &&
428 		( info[p].use_category()) <= _keys[1] ?
429 		( info[p].use_category()) - _keys[0] : _slen ];
430 
431 _eof_trans:
432 	cs = _use_syllable_machine_trans_targs[_trans];
433 
434 	if ( _use_syllable_machine_trans_actions[_trans] == 0 )
435 		goto _again;
436 
437 	switch ( _use_syllable_machine_trans_actions[_trans] ) {
438 	case 2:
439 #line 1 "NONE"
440 	{te = p+1;}
441 	break;
442 	case 9:
443 #line 134 "hb-ot-shape-complex-use-machine.rl"
444 	{te = p+1;{ found_syllable (independent_cluster); }}
445 	break;
446 	case 11:
447 #line 136 "hb-ot-shape-complex-use-machine.rl"
448 	{te = p+1;{ found_syllable (consonant_cluster); }}
449 	break;
450 	case 14:
451 #line 137 "hb-ot-shape-complex-use-machine.rl"
452 	{te = p+1;{ found_syllable (vowel_cluster); }}
453 	break;
454 	case 16:
455 #line 138 "hb-ot-shape-complex-use-machine.rl"
456 	{te = p+1;{ found_syllable (number_joiner_terminated_cluster); }}
457 	break;
458 	case 7:
459 #line 141 "hb-ot-shape-complex-use-machine.rl"
460 	{te = p+1;{ found_syllable (broken_cluster); }}
461 	break;
462 	case 8:
463 #line 134 "hb-ot-shape-complex-use-machine.rl"
464 	{te = p;p--;{ found_syllable (independent_cluster); }}
465 	break;
466 	case 12:
467 #line 135 "hb-ot-shape-complex-use-machine.rl"
468 	{te = p;p--;{ found_syllable (virama_terminated_cluster); }}
469 	break;
470 	case 10:
471 #line 136 "hb-ot-shape-complex-use-machine.rl"
472 	{te = p;p--;{ found_syllable (consonant_cluster); }}
473 	break;
474 	case 13:
475 #line 137 "hb-ot-shape-complex-use-machine.rl"
476 	{te = p;p--;{ found_syllable (vowel_cluster); }}
477 	break;
478 	case 15:
479 #line 139 "hb-ot-shape-complex-use-machine.rl"
480 	{te = p;p--;{ found_syllable (numeral_cluster); }}
481 	break;
482 	case 18:
483 #line 140 "hb-ot-shape-complex-use-machine.rl"
484 	{te = p;p--;{ found_syllable (symbol_cluster); }}
485 	break;
486 	case 17:
487 #line 141 "hb-ot-shape-complex-use-machine.rl"
488 	{te = p;p--;{ found_syllable (broken_cluster); }}
489 	break;
490 	case 1:
491 #line 139 "hb-ot-shape-complex-use-machine.rl"
492 	{{p = ((te))-1;}{ found_syllable (numeral_cluster); }}
493 	break;
494 	case 3:
495 #line 1 "NONE"
496 	{	switch( act ) {
497 	case 0:
498 	{{cs = 0; goto _again;}}
499 	break;
500 	case 8:
501 	{{p = ((te))-1;} found_syllable (broken_cluster); }
502 	break;
503 	}
504 	}
505 	break;
506 	case 4:
507 #line 1 "NONE"
508 	{te = p+1;}
509 #line 141 "hb-ot-shape-complex-use-machine.rl"
510 	{act = 8;}
511 	break;
512 #line 513 "hb-ot-shape-complex-use-machine.hh"
513 	}
514 
515 _again:
516 	switch ( _use_syllable_machine_to_state_actions[cs] ) {
517 	case 5:
518 #line 1 "NONE"
519 	{ts = 0;}
520 #line 1 "NONE"
521 	{act = 0;}
522 	break;
523 #line 524 "hb-ot-shape-complex-use-machine.hh"
524 	}
525 
526 	if ( cs == 0 )
527 		goto _out;
528 	if ( ++p != pe )
529 		goto _resume;
530 	_test_eof: {}
531 	if ( p == eof )
532 	{
533 	if ( _use_syllable_machine_eof_trans[cs] > 0 ) {
534 		_trans = _use_syllable_machine_eof_trans[cs] - 1;
535 		goto _eof_trans;
536 	}
537 	}
538 
539 	_out: {}
540 	}
541 
542 #line 175 "hb-ot-shape-complex-use-machine.rl"
543 
544 }
545 
546 #undef found_syllable
547 
548 #endif /* HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH */
549