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 {
machine_index_tmachine_index_t387 machine_index_t (const Iter& it) : it (it) {}
machine_index_tmachine_index_t388 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
__item__machine_index_t393 typename Iter::item_t __item__ () const { return *it; }
__item_at__machine_index_t394 typename Iter::item_t __item_at__ (unsigned i) const { return it[i]; }
__len__machine_index_t395 unsigned __len__ () const { return it.len (); }
__next__machine_index_t396 void __next__ () { ++it; }
__forward__machine_index_t397 void __forward__ (unsigned n) { it += n; }
__prev__machine_index_t398 void __prev__ () { --it; }
__rewind__machine_index_t399 void __rewind__ (unsigned n) { it -= n; }
operator =machine_index_t400 void operator = (unsigned n)
401 { unsigned index = (*it).first; if (index < n) it += n - index; else if (index > n) it -= index - n; }
operator =machine_index_t402 void operator = (const machine_index_t& o) { *this = (*o.it).first; }
operator ==machine_index_t403 bool operator == (const machine_index_t& o) const { return (*it).first == (*o.it).first; }
operator !=machine_index_t404 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>>
operator ()__anon70fe297a0108414 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
not_ccs_default_ignorable(const hb_glyph_info_t & i)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
find_syllables_use(hb_buffer_t * buffer)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 */
577