c3920b2cc6c4375cac752842b7b6ef068e4c46a2
[platform/upstream/harfbuzz.git] / src / hb-ot-shape-complex-use-machine.hh
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.hh"
35
36 #include "hb-ot-shape-complex-syllabic.hh"
37
38 /* buffer var allocations */
39 #define use_category() complex_var_u8_category()
40
41 #define USE(Cat) use_syllable_machine_ex_##Cat
42
43 enum use_syllable_type_t {
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_CGJ 6u
59 #define use_syllable_machine_ex_CMAbv 31u
60 #define use_syllable_machine_ex_CMBlw 32u
61 #define use_syllable_machine_ex_CS 43u
62 #define use_syllable_machine_ex_FAbv 24u
63 #define use_syllable_machine_ex_FBlw 25u
64 #define use_syllable_machine_ex_FMAbv 45u
65 #define use_syllable_machine_ex_FMBlw 46u
66 #define use_syllable_machine_ex_FMPst 47u
67 #define use_syllable_machine_ex_FPst 26u
68 #define use_syllable_machine_ex_G 49u
69 #define use_syllable_machine_ex_GB 5u
70 #define use_syllable_machine_ex_H 12u
71 #define use_syllable_machine_ex_HN 13u
72 #define use_syllable_machine_ex_HVM 44u
73 #define use_syllable_machine_ex_J 50u
74 #define use_syllable_machine_ex_MAbv 27u
75 #define use_syllable_machine_ex_MBlw 28u
76 #define use_syllable_machine_ex_MPre 30u
77 #define use_syllable_machine_ex_MPst 29u
78 #define use_syllable_machine_ex_N 4u
79 #define use_syllable_machine_ex_O 0u
80 #define use_syllable_machine_ex_R 18u
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         0u, 51u, 41u, 42u, 42u, 42u, 11u, 48u, 11u, 48u, 1u, 1u, 22u, 48u, 23u, 48u, 
101         24u, 47u, 25u, 47u, 26u, 47u, 45u, 46u, 46u, 46u, 24u, 48u, 24u, 48u, 24u, 48u, 
102         1u, 1u, 24u, 48u, 23u, 48u, 23u, 48u, 23u, 48u, 22u, 48u, 22u, 48u, 22u, 48u, 
103         11u, 48u, 1u, 48u, 13u, 13u, 4u, 4u, 11u, 48u, 11u, 48u, 1u, 1u, 22u, 48u, 
104         23u, 48u, 24u, 47u, 25u, 47u, 26u, 47u, 45u, 46u, 46u, 46u, 24u, 48u, 24u, 48u, 
105         24u, 48u, 1u, 1u, 24u, 48u, 23u, 48u, 23u, 48u, 23u, 48u, 22u, 48u, 22u, 48u, 
106         22u, 48u, 11u, 48u, 1u, 48u, 4u, 4u, 13u, 13u, 1u, 48u, 11u, 48u, 41u, 42u, 
107         42u, 42u, 1u, 5u, 50u, 52u, 49u, 52u, 49u, 51u, 0
108 };
109
110 static const char _use_syllable_machine_key_spans[] = {
111         52, 2, 1, 38, 38, 1, 27, 26, 
112         24, 23, 22, 2, 1, 25, 25, 25, 
113         1, 25, 26, 26, 26, 27, 27, 27, 
114         38, 48, 1, 1, 38, 38, 1, 27, 
115         26, 24, 23, 22, 2, 1, 25, 25, 
116         25, 1, 25, 26, 26, 26, 27, 27, 
117         27, 38, 48, 1, 1, 48, 38, 2, 
118         1, 5, 3, 4, 3
119 };
120
121 static const short _use_syllable_machine_index_offsets[] = {
122         0, 53, 56, 58, 97, 136, 138, 166, 
123         193, 218, 242, 265, 268, 270, 296, 322, 
124         348, 350, 376, 403, 430, 457, 485, 513, 
125         541, 580, 629, 631, 633, 672, 711, 713, 
126         741, 768, 793, 817, 840, 843, 845, 871, 
127         897, 923, 925, 951, 978, 1005, 1032, 1060, 
128         1088, 1116, 1155, 1204, 1206, 1208, 1257, 1296, 
129         1299, 1301, 1307, 1311, 1316
130 };
131
132 static const char _use_syllable_machine_indicies[] = {
133         0, 1, 2, 2, 3, 4, 2, 2, 
134         2, 2, 2, 5, 6, 7, 2, 2, 
135         2, 2, 8, 2, 2, 2, 9, 10, 
136         11, 12, 13, 14, 15, 9, 16, 17, 
137         18, 19, 20, 21, 2, 22, 23, 24, 
138         2, 25, 26, 27, 28, 29, 30, 31, 
139         6, 32, 2, 33, 2, 0, 35, 34, 
140         35, 34, 37, 38, 36, 36, 36, 36, 
141         36, 36, 36, 36, 36, 39, 40, 41, 
142         42, 43, 44, 45, 39, 46, 1, 47, 
143         48, 49, 50, 36, 51, 52, 53, 36, 
144         36, 36, 36, 54, 55, 56, 57, 38, 
145         36, 37, 38, 36, 36, 36, 36, 36, 
146         36, 36, 36, 36, 39, 40, 41, 42, 
147         43, 44, 45, 39, 46, 47, 47, 48, 
148         49, 50, 36, 51, 52, 53, 36, 36, 
149         36, 36, 54, 55, 56, 57, 38, 36, 
150         37, 58, 39, 40, 41, 42, 43, 36, 
151         36, 36, 36, 36, 36, 48, 49, 50, 
152         36, 51, 52, 53, 36, 36, 36, 36, 
153         40, 55, 56, 57, 59, 36, 40, 41, 
154         42, 43, 36, 36, 36, 36, 36, 36, 
155         36, 36, 36, 36, 51, 52, 53, 36, 
156         36, 36, 36, 36, 55, 56, 57, 59, 
157         36, 41, 42, 43, 36, 36, 36, 36, 
158         36, 36, 36, 36, 36, 36, 36, 36, 
159         36, 36, 36, 36, 36, 36, 55, 56, 
160         57, 36, 42, 43, 36, 36, 36, 36, 
161         36, 36, 36, 36, 36, 36, 36, 36, 
162         36, 36, 36, 36, 36, 36, 55, 56, 
163         57, 36, 43, 36, 36, 36, 36, 36, 
164         36, 36, 36, 36, 36, 36, 36, 36, 
165         36, 36, 36, 36, 36, 55, 56, 57, 
166         36, 55, 56, 36, 56, 36, 41, 42, 
167         43, 36, 36, 36, 36, 36, 36, 36, 
168         36, 36, 36, 51, 52, 53, 36, 36, 
169         36, 36, 36, 55, 56, 57, 59, 36, 
170         41, 42, 43, 36, 36, 36, 36, 36, 
171         36, 36, 36, 36, 36, 36, 52, 53, 
172         36, 36, 36, 36, 36, 55, 56, 57, 
173         59, 36, 41, 42, 43, 36, 36, 36, 
174         36, 36, 36, 36, 36, 36, 36, 36, 
175         36, 53, 36, 36, 36, 36, 36, 55, 
176         56, 57, 59, 36, 61, 60, 41, 42, 
177         43, 36, 36, 36, 36, 36, 36, 36, 
178         36, 36, 36, 36, 36, 36, 36, 36, 
179         36, 36, 36, 55, 56, 57, 59, 36, 
180         40, 41, 42, 43, 36, 36, 36, 36, 
181         36, 36, 48, 49, 50, 36, 51, 52, 
182         53, 36, 36, 36, 36, 40, 55, 56, 
183         57, 59, 36, 40, 41, 42, 43, 36, 
184         36, 36, 36, 36, 36, 36, 49, 50, 
185         36, 51, 52, 53, 36, 36, 36, 36, 
186         40, 55, 56, 57, 59, 36, 40, 41, 
187         42, 43, 36, 36, 36, 36, 36, 36, 
188         36, 36, 50, 36, 51, 52, 53, 36, 
189         36, 36, 36, 40, 55, 56, 57, 59, 
190         36, 39, 40, 41, 42, 43, 36, 45, 
191         39, 36, 36, 36, 48, 49, 50, 36, 
192         51, 52, 53, 36, 36, 36, 36, 40, 
193         55, 56, 57, 59, 36, 39, 40, 41, 
194         42, 43, 36, 36, 39, 36, 36, 36, 
195         48, 49, 50, 36, 51, 52, 53, 36, 
196         36, 36, 36, 40, 55, 56, 57, 59, 
197         36, 39, 40, 41, 42, 43, 44, 45, 
198         39, 36, 36, 36, 48, 49, 50, 36, 
199         51, 52, 53, 36, 36, 36, 36, 40, 
200         55, 56, 57, 59, 36, 37, 38, 36, 
201         36, 36, 36, 36, 36, 36, 36, 36, 
202         39, 40, 41, 42, 43, 44, 45, 39, 
203         46, 36, 47, 48, 49, 50, 36, 51, 
204         52, 53, 36, 36, 36, 36, 54, 55, 
205         56, 57, 38, 36, 37, 58, 58, 58, 
206         58, 58, 58, 58, 58, 58, 58, 58, 
207         58, 58, 58, 58, 58, 58, 58, 58, 
208         58, 58, 40, 41, 42, 43, 58, 58, 
209         58, 58, 58, 58, 58, 58, 58, 58, 
210         51, 52, 53, 58, 58, 58, 58, 58, 
211         55, 56, 57, 59, 58, 63, 62, 3, 
212         64, 37, 38, 36, 36, 36, 36, 36, 
213         36, 36, 36, 36, 39, 40, 41, 42, 
214         43, 44, 45, 39, 46, 1, 47, 48, 
215         49, 50, 36, 51, 52, 53, 36, 0, 
216         35, 36, 54, 55, 56, 57, 38, 36, 
217         5, 6, 65, 65, 65, 65, 65, 65, 
218         65, 65, 65, 9, 10, 11, 12, 13, 
219         14, 15, 9, 16, 18, 18, 19, 20, 
220         21, 65, 22, 23, 24, 65, 65, 65, 
221         65, 28, 29, 30, 31, 6, 65, 5, 
222         65, 9, 10, 11, 12, 13, 65, 65, 
223         65, 65, 65, 65, 19, 20, 21, 65, 
224         22, 23, 24, 65, 65, 65, 65, 10, 
225         29, 30, 31, 66, 65, 10, 11, 12, 
226         13, 65, 65, 65, 65, 65, 65, 65, 
227         65, 65, 65, 22, 23, 24, 65, 65, 
228         65, 65, 65, 29, 30, 31, 66, 65, 
229         11, 12, 13, 65, 65, 65, 65, 65, 
230         65, 65, 65, 65, 65, 65, 65, 65, 
231         65, 65, 65, 65, 65, 29, 30, 31, 
232         65, 12, 13, 65, 65, 65, 65, 65, 
233         65, 65, 65, 65, 65, 65, 65, 65, 
234         65, 65, 65, 65, 65, 29, 30, 31, 
235         65, 13, 65, 65, 65, 65, 65, 65, 
236         65, 65, 65, 65, 65, 65, 65, 65, 
237         65, 65, 65, 65, 29, 30, 31, 65, 
238         29, 30, 65, 30, 65, 11, 12, 13, 
239         65, 65, 65, 65, 65, 65, 65, 65, 
240         65, 65, 22, 23, 24, 65, 65, 65, 
241         65, 65, 29, 30, 31, 66, 65, 11, 
242         12, 13, 65, 65, 65, 65, 65, 65, 
243         65, 65, 65, 65, 65, 23, 24, 65, 
244         65, 65, 65, 65, 29, 30, 31, 66, 
245         65, 11, 12, 13, 65, 65, 65, 65, 
246         65, 65, 65, 65, 65, 65, 65, 65, 
247         24, 65, 65, 65, 65, 65, 29, 30, 
248         31, 66, 65, 67, 65, 11, 12, 13, 
249         65, 65, 65, 65, 65, 65, 65, 65, 
250         65, 65, 65, 65, 65, 65, 65, 65, 
251         65, 65, 29, 30, 31, 66, 65, 10, 
252         11, 12, 13, 65, 65, 65, 65, 65, 
253         65, 19, 20, 21, 65, 22, 23, 24, 
254         65, 65, 65, 65, 10, 29, 30, 31, 
255         66, 65, 10, 11, 12, 13, 65, 65, 
256         65, 65, 65, 65, 65, 20, 21, 65, 
257         22, 23, 24, 65, 65, 65, 65, 10, 
258         29, 30, 31, 66, 65, 10, 11, 12, 
259         13, 65, 65, 65, 65, 65, 65, 65, 
260         65, 21, 65, 22, 23, 24, 65, 65, 
261         65, 65, 10, 29, 30, 31, 66, 65, 
262         9, 10, 11, 12, 13, 65, 15, 9, 
263         65, 65, 65, 19, 20, 21, 65, 22, 
264         23, 24, 65, 65, 65, 65, 10, 29, 
265         30, 31, 66, 65, 9, 10, 11, 12, 
266         13, 65, 65, 9, 65, 65, 65, 19, 
267         20, 21, 65, 22, 23, 24, 65, 65, 
268         65, 65, 10, 29, 30, 31, 66, 65, 
269         9, 10, 11, 12, 13, 14, 15, 9, 
270         65, 65, 65, 19, 20, 21, 65, 22, 
271         23, 24, 65, 65, 65, 65, 10, 29, 
272         30, 31, 66, 65, 5, 6, 65, 65, 
273         65, 65, 65, 65, 65, 65, 65, 9, 
274         10, 11, 12, 13, 14, 15, 9, 16, 
275         65, 18, 19, 20, 21, 65, 22, 23, 
276         24, 65, 65, 65, 65, 28, 29, 30, 
277         31, 6, 65, 5, 65, 65, 65, 65, 
278         65, 65, 65, 65, 65, 65, 65, 65, 
279         65, 65, 65, 65, 65, 65, 65, 65, 
280         65, 10, 11, 12, 13, 65, 65, 65, 
281         65, 65, 65, 65, 65, 65, 65, 22, 
282         23, 24, 65, 65, 65, 65, 65, 29, 
283         30, 31, 66, 65, 68, 65, 7, 65, 
284         1, 65, 65, 65, 1, 65, 65, 65, 
285         65, 65, 5, 6, 7, 65, 65, 65, 
286         65, 65, 65, 65, 65, 9, 10, 11, 
287         12, 13, 14, 15, 9, 16, 17, 18, 
288         19, 20, 21, 65, 22, 23, 24, 65, 
289         25, 26, 65, 28, 29, 30, 31, 6, 
290         65, 5, 6, 65, 65, 65, 65, 65, 
291         65, 65, 65, 65, 9, 10, 11, 12, 
292         13, 14, 15, 9, 16, 17, 18, 19, 
293         20, 21, 65, 22, 23, 24, 65, 65, 
294         65, 65, 28, 29, 30, 31, 6, 65, 
295         25, 26, 65, 26, 65, 1, 69, 69, 
296         69, 1, 69, 71, 70, 32, 70, 32, 
297         71, 70, 71, 70, 32, 70, 33, 70, 
298         0
299 };
300
301 static const char _use_syllable_machine_trans_targs[] = {
302         1, 3, 0, 26, 28, 29, 30, 51, 
303         53, 31, 32, 33, 34, 35, 46, 47, 
304         48, 54, 49, 43, 44, 45, 38, 39, 
305         40, 55, 56, 57, 50, 36, 37, 0, 
306         58, 60, 0, 2, 0, 4, 5, 6, 
307         7, 8, 9, 10, 21, 22, 23, 24, 
308         18, 19, 20, 13, 14, 15, 25, 11, 
309         12, 0, 0, 16, 0, 17, 0, 27, 
310         0, 0, 41, 42, 52, 0, 0, 59
311 };
312
313 static const char _use_syllable_machine_trans_actions[] = {
314         0, 0, 3, 0, 0, 0, 0, 0, 
315         0, 0, 0, 0, 0, 0, 0, 0, 
316         0, 0, 0, 0, 0, 0, 0, 0, 
317         0, 0, 0, 0, 0, 0, 0, 4, 
318         0, 0, 5, 0, 6, 0, 0, 0, 
319         0, 0, 0, 0, 0, 0, 0, 0, 
320         0, 0, 0, 0, 0, 0, 0, 0, 
321         0, 7, 8, 0, 9, 0, 10, 0, 
322         11, 12, 0, 0, 0, 13, 14, 0
323 };
324
325 static const char _use_syllable_machine_to_state_actions[] = {
326         1, 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
334 };
335
336 static const char _use_syllable_machine_from_state_actions[] = {
337         2, 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, 0, 0, 0, 0, 0, 0, 0, 
342         0, 0, 0, 0, 0, 0, 0, 0, 
343         0, 0, 0, 0, 0, 0, 0, 0, 
344         0, 0, 0, 0, 0
345 };
346
347 static const short _use_syllable_machine_eof_trans[] = {
348         0, 35, 35, 37, 37, 59, 37, 37, 
349         37, 37, 37, 37, 37, 37, 37, 37, 
350         61, 37, 37, 37, 37, 37, 37, 37, 
351         37, 59, 63, 65, 37, 66, 66, 66, 
352         66, 66, 66, 66, 66, 66, 66, 66, 
353         66, 66, 66, 66, 66, 66, 66, 66, 
354         66, 66, 66, 66, 66, 66, 66, 66, 
355         66, 70, 71, 71, 71
356 };
357
358 static const int use_syllable_machine_start = 0;
359 static const int use_syllable_machine_first_final = 0;
360 static const int use_syllable_machine_error = -1;
361
362 static const int use_syllable_machine_en_main = 0;
363
364
365 #line 58 "hb-ot-shape-complex-use-machine.rl"
366
367
368
369 #line 179 "hb-ot-shape-complex-use-machine.rl"
370
371
372 #define found_syllable(syllable_type) \
373   HB_STMT_START { \
374     if (0) fprintf (stderr, "syllable %d..%d %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
375     for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
376       info[i].syllable() = (syllable_serial << 4) | syllable_type; \
377     syllable_serial++; \
378     if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
379   } HB_STMT_END
380
381
382 template <typename Iter>
383 struct machine_index_t :
384   hb_iter_with_fallback_t<machine_index_t<Iter>,
385                           typename Iter::item_t>
386 {
387   machine_index_t (const Iter& it) : it (it) {}
388   machine_index_t (const machine_index_t& o) : it (o.it) {}
389
390   static constexpr bool is_random_access_iterator = Iter::is_random_access_iterator;
391   static constexpr bool is_sorted_iterator = Iter::is_sorted_iterator;
392
393   typename Iter::item_t __item__ () const { return *it; }
394   typename Iter::item_t __item_at__ (unsigned i) const { return it[i]; }
395   unsigned __len__ () const { return it.len (); }
396   void __next__ () { ++it; }
397   void __forward__ (unsigned n) { it += n; }
398   void __prev__ () { --it; }
399   void __rewind__ (unsigned n) { it -= n; }
400   void operator = (unsigned n)
401   { unsigned index = (*it).first; if (index < n) it += n - index; else if (index > n) it -= index - n; }
402   void operator = (const machine_index_t& o) { *this = (*o.it).first; }
403   bool operator == (const machine_index_t& o) const { return (*it).first == (*o.it).first; }
404   bool operator != (const machine_index_t& o) const { return !(*this == o); }
405
406   private:
407   Iter it;
408 };
409 struct
410 {
411   template <typename Iter,
412             hb_requires (hb_is_iterable (Iter))>
413   machine_index_t<hb_iter_type<Iter>>
414   operator () (Iter&& it) const
415   { return machine_index_t<hb_iter_type<Iter>> (hb_iter (it)); }
416 }
417 HB_FUNCOBJ (machine_index);
418
419
420
421 static bool
422 not_ccs_default_ignorable (const hb_glyph_info_t &i)
423 { return !(i.use_category() == USE(CGJ) && _hb_glyph_info_is_default_ignorable (&i)); }
424
425 static inline void
426 find_syllables_use (hb_buffer_t *buffer)
427 {
428   hb_glyph_info_t *info = buffer->info;
429   auto p =
430     + hb_iter (info, buffer->len)
431     | hb_enumerate
432     | hb_filter ([] (const hb_glyph_info_t &i) { return not_ccs_default_ignorable (i); },
433                  hb_second)
434     | hb_filter ([&] (const hb_pair_t<unsigned, const hb_glyph_info_t &> p)
435                  {
436                    if (p.second.use_category() == USE(ZWNJ))
437                      for (unsigned i = p.first + 1; i < buffer->len; ++i)
438                        if (not_ccs_default_ignorable (info[i]))
439                          return !_hb_glyph_info_is_unicode_mark (&info[i]);
440                    return true;
441                  })
442     | hb_enumerate
443     | machine_index
444     ;
445   auto pe = p + p.len ();
446   auto eof = +pe;
447   auto ts = +p;
448   auto te = +p;
449   unsigned int act HB_UNUSED;
450   int cs;
451   
452 #line 453 "hb-ot-shape-complex-use-machine.hh"
453         {
454         cs = use_syllable_machine_start;
455         ts = 0;
456         te = 0;
457         act = 0;
458         }
459
460 #line 263 "hb-ot-shape-complex-use-machine.rl"
461
462
463   unsigned int syllable_serial = 1;
464   
465 #line 466 "hb-ot-shape-complex-use-machine.hh"
466         {
467         int _slen;
468         int _trans;
469         const unsigned char *_keys;
470         const char *_inds;
471         if ( p == pe )
472                 goto _test_eof;
473 _resume:
474         switch ( _use_syllable_machine_from_state_actions[cs] ) {
475         case 2:
476 #line 1 "NONE"
477         {ts = p;}
478         break;
479 #line 480 "hb-ot-shape-complex-use-machine.hh"
480         }
481
482         _keys = _use_syllable_machine_trans_keys + (cs<<1);
483         _inds = _use_syllable_machine_indicies + _use_syllable_machine_index_offsets[cs];
484
485         _slen = _use_syllable_machine_key_spans[cs];
486         _trans = _inds[ _slen > 0 && _keys[0] <=( (*p).second.second.use_category()) &&
487                 ( (*p).second.second.use_category()) <= _keys[1] ?
488                 ( (*p).second.second.use_category()) - _keys[0] : _slen ];
489
490 _eof_trans:
491         cs = _use_syllable_machine_trans_targs[_trans];
492
493         if ( _use_syllable_machine_trans_actions[_trans] == 0 )
494                 goto _again;
495
496         switch ( _use_syllable_machine_trans_actions[_trans] ) {
497         case 7:
498 #line 169 "hb-ot-shape-complex-use-machine.rl"
499         {te = p+1;{ found_syllable (use_standard_cluster); }}
500         break;
501         case 4:
502 #line 174 "hb-ot-shape-complex-use-machine.rl"
503         {te = p+1;{ found_syllable (use_broken_cluster); }}
504         break;
505         case 3:
506 #line 175 "hb-ot-shape-complex-use-machine.rl"
507         {te = p+1;{ found_syllable (use_non_cluster); }}
508         break;
509         case 8:
510 #line 167 "hb-ot-shape-complex-use-machine.rl"
511         {te = p;p--;{ found_syllable (use_virama_terminated_cluster); }}
512         break;
513         case 9:
514 #line 168 "hb-ot-shape-complex-use-machine.rl"
515         {te = p;p--;{ found_syllable (use_sakot_terminated_cluster); }}
516         break;
517         case 6:
518 #line 169 "hb-ot-shape-complex-use-machine.rl"
519         {te = p;p--;{ found_syllable (use_standard_cluster); }}
520         break;
521         case 11:
522 #line 170 "hb-ot-shape-complex-use-machine.rl"
523         {te = p;p--;{ found_syllable (use_number_joiner_terminated_cluster); }}
524         break;
525         case 10:
526 #line 171 "hb-ot-shape-complex-use-machine.rl"
527         {te = p;p--;{ found_syllable (use_numeral_cluster); }}
528         break;
529         case 5:
530 #line 172 "hb-ot-shape-complex-use-machine.rl"
531         {te = p;p--;{ found_syllable (use_symbol_cluster); }}
532         break;
533         case 14:
534 #line 173 "hb-ot-shape-complex-use-machine.rl"
535         {te = p;p--;{ found_syllable (use_hieroglyph_cluster); }}
536         break;
537         case 12:
538 #line 174 "hb-ot-shape-complex-use-machine.rl"
539         {te = p;p--;{ found_syllable (use_broken_cluster); }}
540         break;
541         case 13:
542 #line 175 "hb-ot-shape-complex-use-machine.rl"
543         {te = p;p--;{ found_syllable (use_non_cluster); }}
544         break;
545 #line 546 "hb-ot-shape-complex-use-machine.hh"
546         }
547
548 _again:
549         switch ( _use_syllable_machine_to_state_actions[cs] ) {
550         case 1:
551 #line 1 "NONE"
552         {ts = 0;}
553         break;
554 #line 555 "hb-ot-shape-complex-use-machine.hh"
555         }
556
557         if ( ++p != pe )
558                 goto _resume;
559         _test_eof: {}
560         if ( p == eof )
561         {
562         if ( _use_syllable_machine_eof_trans[cs] > 0 ) {
563                 _trans = _use_syllable_machine_eof_trans[cs] - 1;
564                 goto _eof_trans;
565         }
566         }
567
568         }
569
570 #line 268 "hb-ot-shape-complex-use-machine.rl"
571
572 }
573
574 #undef found_syllable
575
576 #endif /* HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH */