1 #line 1 "hb-ot-shape-complex-use-machine.rl"
2 /*
3 * Copyright © 2015  Mozilla Foundation.
4 * Copyright © 2015  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 * Mozilla Author(s): Jonathan Kew
27 * Google Author(s): Behdad Esfahbod
28 */
29 
30 #ifndef HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH
31 #define HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH
32 
33 #include "hb.hh"
34 
35 #include "hb-ot-shape-complex-syllabic.hh"
36 
37 /* buffer var allocations */
38 #define use_category() complex_var_u8_category()
39 
40 #define USE(Cat) use_syllable_machine_ex_##Cat
41 
42 enum use_syllable_type_t {
43         use_independent_cluster,
44         use_virama_terminated_cluster,
45         use_sakot_terminated_cluster,
46         use_standard_cluster,
47         use_number_joiner_terminated_cluster,
48         use_numeral_cluster,
49         use_symbol_cluster,
50         use_hieroglyph_cluster,
51         use_broken_cluster,
52         use_non_cluster,
53 };
54 
55 
56 #line 57 "hb-ot-shape-complex-use-machine.hh"
57 #define use_syllable_machine_ex_B 1u
58 #define use_syllable_machine_ex_CMAbv 31u
59 #define use_syllable_machine_ex_CMBlw 32u
60 #define use_syllable_machine_ex_CS 43u
61 #define use_syllable_machine_ex_FAbv 24u
62 #define use_syllable_machine_ex_FBlw 25u
63 #define use_syllable_machine_ex_FMAbv 45u
64 #define use_syllable_machine_ex_FMBlw 46u
65 #define use_syllable_machine_ex_FMPst 47u
66 #define use_syllable_machine_ex_FPst 26u
67 #define use_syllable_machine_ex_G 49u
68 #define use_syllable_machine_ex_GB 5u
69 #define use_syllable_machine_ex_H 12u
70 #define use_syllable_machine_ex_HN 13u
71 #define use_syllable_machine_ex_HVM 44u
72 #define use_syllable_machine_ex_J 50u
73 #define use_syllable_machine_ex_MAbv 27u
74 #define use_syllable_machine_ex_MBlw 28u
75 #define use_syllable_machine_ex_MPre 30u
76 #define use_syllable_machine_ex_MPst 29u
77 #define use_syllable_machine_ex_N 4u
78 #define use_syllable_machine_ex_O 0u
79 #define use_syllable_machine_ex_R 18u
80 #define use_syllable_machine_ex_S 19u
81 #define use_syllable_machine_ex_SB 51u
82 #define use_syllable_machine_ex_SE 52u
83 #define use_syllable_machine_ex_SMAbv 41u
84 #define use_syllable_machine_ex_SMBlw 42u
85 #define use_syllable_machine_ex_SUB 11u
86 #define use_syllable_machine_ex_Sk 48u
87 #define use_syllable_machine_ex_VAbv 33u
88 #define use_syllable_machine_ex_VBlw 34u
89 #define use_syllable_machine_ex_VMAbv 37u
90 #define use_syllable_machine_ex_VMBlw 38u
91 #define use_syllable_machine_ex_VMPre 23u
92 #define use_syllable_machine_ex_VMPst 39u
93 #define use_syllable_machine_ex_VPre 22u
94 #define use_syllable_machine_ex_VPst 35u
95 #define use_syllable_machine_ex_ZWNJ 14u
96 
97 
98 #line 99 "hb-ot-shape-complex-use-machine.hh"
99 static const unsigned char _use_syllable_machine_trans_keys[] = {
100         1u, 1u, 1u, 1u, 0u, 37u, 5u, 34u,
101         5u, 34u, 1u, 1u, 10u, 34u, 11u, 34u,
102         12u, 33u, 13u, 33u, 14u, 33u, 31u, 32u,
103         32u, 32u, 12u, 34u, 12u, 34u, 12u, 34u,
104         1u, 1u, 12u, 34u, 11u, 34u, 11u, 34u,
105         11u, 34u, 10u, 34u, 10u, 34u, 10u, 34u,
106         5u, 34u, 1u, 34u, 7u, 7u, 3u, 3u,
107         5u, 34u, 27u, 28u, 28u, 28u, 5u, 34u,
108         10u, 34u, 11u, 34u, 12u, 33u, 13u, 33u,
109         14u, 33u, 31u, 32u, 32u, 32u, 12u, 34u,
110         12u, 34u, 12u, 34u, 12u, 34u, 11u, 34u,
111         11u, 34u, 11u, 34u, 10u, 34u, 10u, 34u,
112         10u, 34u, 5u, 34u, 1u, 34u, 1u, 1u,
113         3u, 3u, 7u, 7u, 1u, 34u, 5u, 34u,
114         27u, 28u, 28u, 28u, 1u, 4u, 36u, 38u,
115         35u, 38u, 35u, 37u, 0u
116 };
117 
118 static const signed char _use_syllable_machine_char_class[] = {
119         0, 1, 2, 2, 3, 4, 2, 2,
120         2, 2, 2, 5, 6, 7, 2, 2,
121         2, 2, 8, 9, 2, 2, 10, 11,
122         12, 13, 14, 15, 16, 17, 18, 19,
123         20, 21, 22, 23, 2, 24, 25, 26,
124         2, 27, 28, 29, 30, 31, 32, 33,
125         34, 35, 36, 37, 38, 0
126 };
127 
128 static const short _use_syllable_machine_index_offsets[] = {
129         0, 1, 2, 40, 70, 100, 101, 126,
130         150, 172, 193, 213, 215, 216, 239, 262,
131         285, 286, 309, 333, 357, 381, 406, 431,
132         456, 486, 520, 521, 522, 552, 554, 555,
133         585, 610, 634, 656, 677, 697, 699, 700,
134         723, 746, 769, 792, 816, 840, 864, 889,
135         914, 939, 969, 1003, 1004, 1005, 1006, 1040,
136         1070, 1072, 1073, 1077, 1080, 1084, 0
137 };
138 
139 static const signed char _use_syllable_machine_indicies[] = {
140         1, 2, 4, 5, 6, 7, 8, 1,
141         9, 10, 11, 12, 13, 14, 15, 16,
142         17, 18, 19, 13, 20, 21, 22, 23,
143         24, 25, 26, 27, 28, 29, 30, 31,
144         32, 33, 34, 35, 9, 36, 6, 37,
145         39, 40, 38, 38, 38, 41, 42, 43,
146         44, 45, 46, 47, 41, 48, 5, 49,
147         50, 51, 52, 53, 54, 55, 38, 38,
148         38, 56, 57, 58, 59, 40, 39, 40,
149         38, 38, 38, 41, 42, 43, 44, 45,
150         46, 47, 41, 48, 49, 49, 50, 51,
151         52, 53, 54, 55, 38, 38, 38, 56,
152         57, 58, 59, 40, 39, 41, 42, 43,
153         44, 45, 38, 38, 38, 38, 38, 38,
154         50, 51, 52, 53, 54, 55, 38, 38,
155         38, 42, 57, 58, 59, 61, 42, 43,
156         44, 45, 38, 38, 38, 38, 38, 38,
157         38, 38, 38, 53, 54, 55, 38, 38,
158         38, 38, 57, 58, 59, 61, 43, 44,
159         45, 38, 38, 38, 38, 38, 38, 38,
160         38, 38, 38, 38, 38, 38, 38, 38,
161         38, 57, 58, 59, 44, 45, 38, 38,
162         38, 38, 38, 38, 38, 38, 38, 38,
163         38, 38, 38, 38, 38, 38, 57, 58,
164         59, 45, 38, 38, 38, 38, 38, 38,
165         38, 38, 38, 38, 38, 38, 38, 38,
166         38, 38, 57, 58, 59, 57, 58, 58,
167         43, 44, 45, 38, 38, 38, 38, 38,
168         38, 38, 38, 38, 53, 54, 55, 38,
169         38, 38, 38, 57, 58, 59, 61, 43,
170         44, 45, 38, 38, 38, 38, 38, 38,
171         38, 38, 38, 38, 54, 55, 38, 38,
172         38, 38, 57, 58, 59, 61, 43, 44,
173         45, 38, 38, 38, 38, 38, 38, 38,
174         38, 38, 38, 38, 55, 38, 38, 38,
175         38, 57, 58, 59, 61, 63, 43, 44,
176         45, 38, 38, 38, 38, 38, 38, 38,
177         38, 38, 38, 38, 38, 38, 38, 38,
178         38, 57, 58, 59, 61, 42, 43, 44,
179         45, 38, 38, 38, 38, 38, 38, 50,
180         51, 52, 53, 54, 55, 38, 38, 38,
181         42, 57, 58, 59, 61, 42, 43, 44,
182         45, 38, 38, 38, 38, 38, 38, 38,
183         51, 52, 53, 54, 55, 38, 38, 38,
184         42, 57, 58, 59, 61, 42, 43, 44,
185         45, 38, 38, 38, 38, 38, 38, 38,
186         38, 52, 53, 54, 55, 38, 38, 38,
187         42, 57, 58, 59, 61, 41, 42, 43,
188         44, 45, 38, 47, 41, 38, 38, 38,
189         50, 51, 52, 53, 54, 55, 38, 38,
190         38, 42, 57, 58, 59, 61, 41, 42,
191         43, 44, 45, 38, 38, 41, 38, 38,
192         38, 50, 51, 52, 53, 54, 55, 38,
193         38, 38, 42, 57, 58, 59, 61, 41,
194         42, 43, 44, 45, 46, 47, 41, 38,
195         38, 38, 50, 51, 52, 53, 54, 55,
196         38, 38, 38, 42, 57, 58, 59, 61,
197         39, 40, 38, 38, 38, 41, 42, 43,
198         44, 45, 46, 47, 41, 48, 38, 49,
199         50, 51, 52, 53, 54, 55, 38, 38,
200         38, 56, 57, 58, 59, 40, 39, 60,
201         60, 60, 60, 60, 60, 60, 60, 60,
202         42, 43, 44, 45, 60, 60, 60, 60,
203         60, 60, 60, 60, 60, 53, 54, 55,
204         60, 60, 60, 60, 57, 58, 59, 61,
205         65, 7, 39, 40, 38, 38, 38, 41,
206         42, 43, 44, 45, 46, 47, 41, 48,
207         5, 49, 50, 51, 52, 53, 54, 55,
208         12, 67, 38, 56, 57, 58, 59, 40,
209         12, 67, 67, 1, 70, 69, 69, 69,
210         13, 14, 15, 16, 17, 18, 19, 13,
211         20, 22, 22, 23, 24, 25, 26, 27,
212         28, 69, 69, 69, 32, 33, 34, 35,
213         70, 13, 14, 15, 16, 17, 69, 69,
214         69, 69, 69, 69, 23, 24, 25, 26,
215         27, 28, 69, 69, 69, 14, 33, 34,
216         35, 71, 14, 15, 16, 17, 69, 69,
217         69, 69, 69, 69, 69, 69, 69, 26,
218         27, 28, 69, 69, 69, 69, 33, 34,
219         35, 71, 15, 16, 17, 69, 69, 69,
220         69, 69, 69, 69, 69, 69, 69, 69,
221         69, 69, 69, 69, 69, 33, 34, 35,
222         16, 17, 69, 69, 69, 69, 69, 69,
223         69, 69, 69, 69, 69, 69, 69, 69,
224         69, 69, 33, 34, 35, 17, 69, 69,
225         69, 69, 69, 69, 69, 69, 69, 69,
226         69, 69, 69, 69, 69, 69, 33, 34,
227         35, 33, 34, 34, 15, 16, 17, 69,
228         69, 69, 69, 69, 69, 69, 69, 69,
229         26, 27, 28, 69, 69, 69, 69, 33,
230         34, 35, 71, 15, 16, 17, 69, 69,
231         69, 69, 69, 69, 69, 69, 69, 69,
232         27, 28, 69, 69, 69, 69, 33, 34,
233         35, 71, 15, 16, 17, 69, 69, 69,
234         69, 69, 69, 69, 69, 69, 69, 69,
235         28, 69, 69, 69, 69, 33, 34, 35,
236         71, 15, 16, 17, 69, 69, 69, 69,
237         69, 69, 69, 69, 69, 69, 69, 69,
238         69, 69, 69, 69, 33, 34, 35, 71,
239         14, 15, 16, 17, 69, 69, 69, 69,
240         69, 69, 23, 24, 25, 26, 27, 28,
241         69, 69, 69, 14, 33, 34, 35, 71,
242         14, 15, 16, 17, 69, 69, 69, 69,
243         69, 69, 69, 24, 25, 26, 27, 28,
244         69, 69, 69, 14, 33, 34, 35, 71,
245         14, 15, 16, 17, 69, 69, 69, 69,
246         69, 69, 69, 69, 25, 26, 27, 28,
247         69, 69, 69, 14, 33, 34, 35, 71,
248         13, 14, 15, 16, 17, 69, 19, 13,
249         69, 69, 69, 23, 24, 25, 26, 27,
250         28, 69, 69, 69, 14, 33, 34, 35,
251         71, 13, 14, 15, 16, 17, 69, 69,
252         13, 69, 69, 69, 23, 24, 25, 26,
253         27, 28, 69, 69, 69, 14, 33, 34,
254         35, 71, 13, 14, 15, 16, 17, 18,
255         19, 13, 69, 69, 69, 23, 24, 25,
256         26, 27, 28, 69, 69, 69, 14, 33,
257         34, 35, 71, 1, 70, 69, 69, 69,
258         13, 14, 15, 16, 17, 18, 19, 13,
259         20, 69, 22, 23, 24, 25, 26, 27,
260         28, 69, 69, 69, 32, 33, 34, 35,
261         70, 1, 69, 69, 69, 69, 69, 69,
262         69, 69, 69, 14, 15, 16, 17, 69,
263         69, 69, 69, 69, 69, 69, 69, 69,
264         26, 27, 28, 69, 69, 69, 69, 33,
265         34, 35, 71, 1, 73, 10, 5, 69,
266         69, 5, 1, 70, 10, 69, 69, 13,
267         14, 15, 16, 17, 18, 19, 13, 20,
268         21, 22, 23, 24, 25, 26, 27, 28,
269         29, 30, 69, 32, 33, 34, 35, 70,
270         1, 70, 69, 69, 69, 13, 14, 15,
271         16, 17, 18, 19, 13, 20, 21, 22,
272         23, 24, 25, 26, 27, 28, 69, 69,
273         69, 32, 33, 34, 35, 70, 29, 30,
274         30, 5, 72, 72, 5, 75, 74, 36,
275         36, 75, 74, 75, 36, 74, 37, 0
276 };
277 
278 static const signed char _use_syllable_machine_index_defaults[] = {
279         0, 0, 6, 38, 38, 60, 38, 38,
280         38, 38, 38, 38, 38, 38, 38, 38,
281         62, 38, 38, 38, 38, 38, 38, 38,
282         38, 60, 64, 66, 38, 68, 68, 69,
283         69, 69, 69, 69, 69, 69, 69, 69,
284         69, 69, 69, 69, 69, 69, 69, 69,
285         69, 69, 69, 72, 69, 69, 69, 69,
286         69, 69, 72, 74, 74, 74, 0
287 };
288 
289 static const signed char _use_syllable_machine_cond_targs[] = {
290         2, 31, 42, 2, 2, 3, 2, 26,
291         28, 51, 52, 54, 29, 32, 33, 34,
292         35, 36, 46, 47, 48, 55, 49, 43,
293         44, 45, 39, 40, 41, 56, 57, 58,
294         50, 37, 38, 2, 59, 61, 2, 4,
295         5, 6, 7, 8, 9, 10, 21, 22,
296         23, 24, 18, 19, 20, 13, 14, 15,
297         25, 11, 12, 2, 2, 16, 2, 17,
298         2, 27, 2, 30, 2, 2, 0, 1,
299         2, 53, 2, 60, 0
300 };
301 
302 static const signed char _use_syllable_machine_cond_actions[] = {
303         1, 2, 2, 0, 5, 0, 6, 0,
304         0, 0, 0, 2, 0, 2, 2, 0,
305         0, 0, 2, 2, 2, 2, 2, 2,
306         2, 2, 2, 2, 2, 0, 0, 0,
307         2, 0, 0, 7, 0, 0, 8, 0,
308         0, 0, 0, 0, 0, 0, 0, 0,
309         0, 0, 0, 0, 0, 0, 0, 0,
310         0, 0, 0, 9, 10, 0, 11, 0,
311         12, 0, 13, 0, 14, 15, 0, 0,
312         16, 0, 17, 0, 0
313 };
314 
315 static const signed char _use_syllable_machine_to_state_actions[] = {
316         0, 0, 3, 0, 0, 0, 0, 0,
317         0, 0, 0, 0, 0, 0, 0, 0,
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, 0,
323         0, 0, 0, 0, 0, 0, 0
324 };
325 
326 static const signed char _use_syllable_machine_from_state_actions[] = {
327         0, 0, 4, 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
335 };
336 
337 static const signed char _use_syllable_machine_eof_trans[] = {
338         1, 1, 4, 39, 39, 61, 39, 39,
339         39, 39, 39, 39, 39, 39, 39, 39,
340         63, 39, 39, 39, 39, 39, 39, 39,
341         39, 61, 65, 67, 39, 69, 69, 70,
342         70, 70, 70, 70, 70, 70, 70, 70,
343         70, 70, 70, 70, 70, 70, 70, 70,
344         70, 70, 70, 73, 70, 70, 70, 70,
345         70, 70, 73, 75, 75, 75, 0
346 };
347 
348 static const int use_syllable_machine_start = 2;
349 static const int use_syllable_machine_first_final = 2;
350 static const int use_syllable_machine_error = -1;
351 
352 static const int use_syllable_machine_en_main = 2;
353 
354 
355 #line 59 "hb-ot-shape-complex-use-machine.rl"
356 
357 
358 
359 #line 176 "hb-ot-shape-complex-use-machine.rl"
360 
361 
362 #define found_syllable(syllable_type) \
363 HB_STMT_START { \
364         if (0) fprintf (stderr, "syllable %d..%d %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
365                 for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
366         info[i].syllable() = (syllable_serial << 4) | syllable_type; \
367         syllable_serial++; \
368         if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
369         } HB_STMT_END
370 
371 
372 template <typename Iter>
373 struct machine_index_t :
374 hb_iter_with_fallback_t<machine_index_t<Iter>,
375 typename Iter::item_t>
376 {
machine_index_tmachine_index_t377         machine_index_t (const Iter& it) : it (it) {}
machine_index_tmachine_index_t378         machine_index_t (const machine_index_t& o) : it (o.it) {}
379 
380         static constexpr bool is_random_access_iterator = Iter::is_random_access_iterator;
381         static constexpr bool is_sorted_iterator = Iter::is_sorted_iterator;
382 
__item__machine_index_t383         typename Iter::item_t __item__ () const { return *it; }
__item_at__machine_index_t384         typename Iter::item_t __item_at__ (unsigned i) const { return it[i]; }
__len__machine_index_t385         unsigned __len__ () const { return it.len (); }
__next__machine_index_t386         void __next__ () { ++it; }
__forward__machine_index_t387         void __forward__ (unsigned n) { it += n; }
__prev__machine_index_t388         void __prev__ () { --it; }
__rewind__machine_index_t389         void __rewind__ (unsigned n) { it -= n; }
operator =machine_index_t390         void operator = (unsigned n)
391         { unsigned index = (*it).first; if (index < n) it += n - index; else if (index > n) it -= index - n; }
operator =machine_index_t392         void operator = (const machine_index_t& o) { *this = (*o.it).first; }
operator ==machine_index_t393         bool operator == (const machine_index_t& o) const { return (*it).first == (*o.it).first; }
operator !=machine_index_t394         bool operator != (const machine_index_t& o) const { return !(*this == o); }
395 
396         private:
397         Iter it;
398 };
399 struct
400 {
401         template <typename Iter,
402         hb_requires (hb_is_iterable (Iter))>
403         machine_index_t<hb_iter_type<Iter>>
operator ()__anone050ce590108404         operator () (Iter&& it) const
405         { return machine_index_t<hb_iter_type<Iter>> (hb_iter (it)); }
406 }
407 HB_FUNCOBJ (machine_index);
408 
409 
410 
411 static bool
not_standard_default_ignorable(const hb_glyph_info_t & i)412 not_standard_default_ignorable (const hb_glyph_info_t &i)
413 { return !(i.use_category() == USE(O) && _hb_glyph_info_is_default_ignorable (&i)); }
414 
415 static inline void
find_syllables_use(hb_buffer_t * buffer)416 find_syllables_use (hb_buffer_t *buffer)
417 {
418         hb_glyph_info_t *info = buffer->info;
419         auto p =
420         + hb_iter (info, buffer->len)
421         | hb_enumerate
422         | hb_filter ([] (const hb_glyph_info_t &i) { return not_standard_default_ignorable (i); },
423         hb_second)
424         | hb_filter ([&] (const hb_pair_t<unsigned, const hb_glyph_info_t &> p)
425         {
426                 if (p.second.use_category() == USE(ZWNJ))
427                         for (unsigned i = p.first + 1; i < buffer->len; ++i)
428                 if (not_standard_default_ignorable (info[i]))
429                         return !_hb_glyph_info_is_unicode_mark (&info[i]);
430                 return true;
431         })
432         | hb_enumerate
433         | machine_index
434         ;
435         auto pe = p + p.len ();
436         auto eof = +pe;
437         auto ts = +p;
438         auto te = +p;
439         unsigned int act HB_UNUSED;
440         int cs;
441 
442 #line 443 "hb-ot-shape-complex-use-machine.hh"
443         {
444                 cs = (int)use_syllable_machine_start;
445                 ts = 0;
446                 te = 0;
447         }
448 
449 #line 260 "hb-ot-shape-complex-use-machine.rl"
450 
451 
452         unsigned int syllable_serial = 1;
453 
454 #line 455 "hb-ot-shape-complex-use-machine.hh"
455         {
456                 unsigned int _trans = 0;
457                 const unsigned char * _keys;
458                 const signed char * _inds;
459                 int _ic;
460                 _resume: {}
461                 if ( p == pe && p != eof )
462                         goto _out;
463                 switch ( _use_syllable_machine_from_state_actions[cs] ) {
464                         case 4:  {
465                                 {
466 #line 1 "NONE"
467                                         {ts = p;}}
468 
469 #line 470 "hb-ot-shape-complex-use-machine.hh"
470 
471 
472                                 break;
473                         }
474                 }
475 
476                 if ( p == eof ) {
477                         if ( _use_syllable_machine_eof_trans[cs] > 0 ) {
478                                 _trans = (unsigned int)_use_syllable_machine_eof_trans[cs] - 1;
479                         }
480                 }
481                 else {
482                         _keys = ( _use_syllable_machine_trans_keys + ((cs<<1)));
483                         _inds = ( _use_syllable_machine_indicies + (_use_syllable_machine_index_offsets[cs]));
484 
485                         if ( ((*p).second.second.use_category()) <= 52 ) {
486                                 _ic = (int)_use_syllable_machine_char_class[(int)((*p).second.second.use_category()) - 0];
487                                 if ( _ic <= (int)(*( _keys+1)) && _ic >= (int)(*( _keys)) )
488                                         _trans = (unsigned int)(*( _inds + (int)( _ic - (int)(*( _keys)) ) ));
489                                 else
490                                         _trans = (unsigned int)_use_syllable_machine_index_defaults[cs];
491                         }
492                         else {
493                                 _trans = (unsigned int)_use_syllable_machine_index_defaults[cs];
494                         }
495 
496                 }
497                 cs = (int)_use_syllable_machine_cond_targs[_trans];
498 
499                 if ( _use_syllable_machine_cond_actions[_trans] != 0 ) {
500 
501                         switch ( _use_syllable_machine_cond_actions[_trans] ) {
502                                 case 2:  {
503                                         {
504 #line 1 "NONE"
505                                                 {te = p+1;}}
506 
507 #line 508 "hb-ot-shape-complex-use-machine.hh"
508 
509 
510                                         break;
511                                 }
512                                 case 5:  {
513                                         {
514 #line 163 "hb-ot-shape-complex-use-machine.rl"
515                                                 {te = p+1;{
516 #line 163 "hb-ot-shape-complex-use-machine.rl"
517                                                                 found_syllable (use_independent_cluster); }
518                                                 }}
519 
520 #line 521 "hb-ot-shape-complex-use-machine.hh"
521 
522 
523                                         break;
524                                 }
525                                 case 9:  {
526                                         {
527 #line 166 "hb-ot-shape-complex-use-machine.rl"
528                                                 {te = p+1;{
529 #line 166 "hb-ot-shape-complex-use-machine.rl"
530                                                                 found_syllable (use_standard_cluster); }
531                                                 }}
532 
533 #line 534 "hb-ot-shape-complex-use-machine.hh"
534 
535 
536                                         break;
537                                 }
538                                 case 7:  {
539                                         {
540 #line 171 "hb-ot-shape-complex-use-machine.rl"
541                                                 {te = p+1;{
542 #line 171 "hb-ot-shape-complex-use-machine.rl"
543                                                                 found_syllable (use_broken_cluster); }
544                                                 }}
545 
546 #line 547 "hb-ot-shape-complex-use-machine.hh"
547 
548 
549                                         break;
550                                 }
551                                 case 6:  {
552                                         {
553 #line 172 "hb-ot-shape-complex-use-machine.rl"
554                                                 {te = p+1;{
555 #line 172 "hb-ot-shape-complex-use-machine.rl"
556                                                                 found_syllable (use_non_cluster); }
557                                                 }}
558 
559 #line 560 "hb-ot-shape-complex-use-machine.hh"
560 
561 
562                                         break;
563                                 }
564                                 case 10:  {
565                                         {
566 #line 164 "hb-ot-shape-complex-use-machine.rl"
567                                                 {te = p;p = p - 1;{
568 #line 164 "hb-ot-shape-complex-use-machine.rl"
569                                                                 found_syllable (use_virama_terminated_cluster); }
570                                                 }}
571 
572 #line 573 "hb-ot-shape-complex-use-machine.hh"
573 
574 
575                                         break;
576                                 }
577                                 case 11:  {
578                                         {
579 #line 165 "hb-ot-shape-complex-use-machine.rl"
580                                                 {te = p;p = p - 1;{
581 #line 165 "hb-ot-shape-complex-use-machine.rl"
582                                                                 found_syllable (use_sakot_terminated_cluster); }
583                                                 }}
584 
585 #line 586 "hb-ot-shape-complex-use-machine.hh"
586 
587 
588                                         break;
589                                 }
590                                 case 8:  {
591                                         {
592 #line 166 "hb-ot-shape-complex-use-machine.rl"
593                                                 {te = p;p = p - 1;{
594 #line 166 "hb-ot-shape-complex-use-machine.rl"
595                                                                 found_syllable (use_standard_cluster); }
596                                                 }}
597 
598 #line 599 "hb-ot-shape-complex-use-machine.hh"
599 
600 
601                                         break;
602                                 }
603                                 case 13:  {
604                                         {
605 #line 167 "hb-ot-shape-complex-use-machine.rl"
606                                                 {te = p;p = p - 1;{
607 #line 167 "hb-ot-shape-complex-use-machine.rl"
608                                                                 found_syllable (use_number_joiner_terminated_cluster); }
609                                                 }}
610 
611 #line 612 "hb-ot-shape-complex-use-machine.hh"
612 
613 
614                                         break;
615                                 }
616                                 case 12:  {
617                                         {
618 #line 168 "hb-ot-shape-complex-use-machine.rl"
619                                                 {te = p;p = p - 1;{
620 #line 168 "hb-ot-shape-complex-use-machine.rl"
621                                                                 found_syllable (use_numeral_cluster); }
622                                                 }}
623 
624 #line 625 "hb-ot-shape-complex-use-machine.hh"
625 
626 
627                                         break;
628                                 }
629                                 case 14:  {
630                                         {
631 #line 169 "hb-ot-shape-complex-use-machine.rl"
632                                                 {te = p;p = p - 1;{
633 #line 169 "hb-ot-shape-complex-use-machine.rl"
634                                                                 found_syllable (use_symbol_cluster); }
635                                                 }}
636 
637 #line 638 "hb-ot-shape-complex-use-machine.hh"
638 
639 
640                                         break;
641                                 }
642                                 case 17:  {
643                                         {
644 #line 170 "hb-ot-shape-complex-use-machine.rl"
645                                                 {te = p;p = p - 1;{
646 #line 170 "hb-ot-shape-complex-use-machine.rl"
647                                                                 found_syllable (use_hieroglyph_cluster); }
648                                                 }}
649 
650 #line 651 "hb-ot-shape-complex-use-machine.hh"
651 
652 
653                                         break;
654                                 }
655                                 case 15:  {
656                                         {
657 #line 171 "hb-ot-shape-complex-use-machine.rl"
658                                                 {te = p;p = p - 1;{
659 #line 171 "hb-ot-shape-complex-use-machine.rl"
660                                                                 found_syllable (use_broken_cluster); }
661                                                 }}
662 
663 #line 664 "hb-ot-shape-complex-use-machine.hh"
664 
665 
666                                         break;
667                                 }
668                                 case 16:  {
669                                         {
670 #line 172 "hb-ot-shape-complex-use-machine.rl"
671                                                 {te = p;p = p - 1;{
672 #line 172 "hb-ot-shape-complex-use-machine.rl"
673                                                                 found_syllable (use_non_cluster); }
674                                                 }}
675 
676 #line 677 "hb-ot-shape-complex-use-machine.hh"
677 
678 
679                                         break;
680                                 }
681                                 case 1:  {
682                                         {
683 #line 171 "hb-ot-shape-complex-use-machine.rl"
684                                                 {p = ((te))-1;
685                                                         {
686 #line 171 "hb-ot-shape-complex-use-machine.rl"
687                                                                 found_syllable (use_broken_cluster); }
688                                                 }}
689 
690 #line 691 "hb-ot-shape-complex-use-machine.hh"
691 
692 
693                                         break;
694                                 }
695                         }
696 
697                 }
698 
699                 if ( p == eof ) {
700                         if ( cs >= 2 )
701                                 goto _out;
702                 }
703                 else {
704                         switch ( _use_syllable_machine_to_state_actions[cs] ) {
705                                 case 3:  {
706                                         {
707 #line 1 "NONE"
708                                                 {ts = 0;}}
709 
710 #line 711 "hb-ot-shape-complex-use-machine.hh"
711 
712 
713                                         break;
714                                 }
715                         }
716 
717                         p += 1;
718                         goto _resume;
719                 }
720                 _out: {}
721         }
722 
723 #line 265 "hb-ot-shape-complex-use-machine.rl"
724 
725 }
726 
727 #undef found_syllable
728 
729 #endif /* HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH */
730