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 1u, 1u, 0u, 39u, 21u, 21u, 8u, 39u, 8u, 39u, 1u, 1u, 8u, 39u, 8u, 39u,
40 8u, 39u, 8u, 26u, 8u, 26u, 8u, 26u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u,
41 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 13u, 21u,
42 4u, 4u, 13u, 13u, 8u, 39u, 8u, 39u, 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, 8u, 39u, 8u, 39u, 1u, 1u, 1u, 39u, 8u, 39u, 21u, 42u, 41u, 42u,
45 42u, 42u, 0
46 };
47
48 static const char _use_syllable_machine_key_spans[] = {
49 1, 40, 1, 32, 32, 1, 32, 32,
50 32, 19, 19, 19, 32, 32, 32, 32,
51 32, 32, 32, 32, 32, 32, 32, 9,
52 1, 1, 32, 32, 32, 32, 19, 19,
53 19, 32, 32, 32, 32, 32, 32, 32,
54 32, 32, 32, 1, 39, 32, 22, 2,
55 1
56 };
57
58 static const short _use_syllable_machine_index_offsets[] = {
59 0, 2, 43, 45, 78, 111, 113, 146,
60 179, 212, 232, 252, 272, 305, 338, 371,
61 404, 437, 470, 503, 536, 569, 602, 635,
62 645, 647, 649, 682, 715, 748, 781, 801,
63 821, 841, 874, 907, 940, 973, 1006, 1039,
64 1072, 1105, 1138, 1171, 1173, 1213, 1246, 1269,
65 1272
66 };
67
68 static const char _use_syllable_machine_indicies[] = {
69 1, 0, 2, 3, 4, 2, 5, 3,
70 4, 4, 6, 4, 4, 1, 7, 4,
71 4, 4, 2, 2, 8, 9, 4, 4,
72 10, 11, 12, 13, 14, 15, 16, 10,
73 17, 18, 19, 20, 21, 22, 4, 23,
74 24, 25, 4, 27, 26, 29, 28, 28,
75 30, 31, 28, 28, 28, 28, 28, 28,
76 28, 28, 32, 33, 34, 35, 36, 37,
77 38, 39, 33, 40, 32, 41, 42, 43,
78 44, 28, 45, 46, 47, 28, 29, 28,
79 28, 30, 31, 28, 28, 28, 28, 28,
80 28, 28, 28, 48, 33, 34, 35, 36,
81 37, 38, 39, 33, 40, 41, 41, 42,
82 43, 44, 28, 45, 46, 47, 28, 30,
83 49, 29, 28, 28, 30, 31, 28, 28,
84 28, 28, 28, 28, 28, 28, 28, 33,
85 34, 35, 36, 37, 38, 39, 33, 40,
86 41, 41, 42, 43, 44, 28, 45, 46,
87 47, 28, 29, 28, 28, 28, 28, 28,
88 28, 28, 28, 28, 28, 28, 28, 28,
89 33, 34, 35, 36, 37, 28, 28, 28,
90 28, 28, 28, 42, 43, 44, 28, 45,
91 46, 47, 28, 29, 28, 28, 28, 28,
92 28, 28, 28, 28, 28, 28, 28, 28,
93 28, 28, 34, 35, 36, 37, 28, 28,
94 28, 28, 28, 28, 28, 28, 28, 28,
95 45, 46, 47, 28, 29, 28, 28, 28,
96 28, 28, 28, 28, 28, 28, 28, 28,
97 28, 28, 28, 28, 35, 36, 37, 28,
98 29, 28, 28, 28, 28, 28, 28, 28,
99 28, 28, 28, 28, 28, 28, 28, 28,
100 28, 36, 37, 28, 29, 28, 28, 28,
101 28, 28, 28, 28, 28, 28, 28, 28,
102 28, 28, 28, 28, 28, 28, 37, 28,
103 29, 28, 28, 28, 28, 28, 28, 28,
104 28, 28, 28, 28, 28, 28, 28, 28,
105 35, 36, 37, 28, 28, 28, 28, 28,
106 28, 28, 28, 28, 28, 45, 46, 47,
107 28, 29, 28, 28, 28, 28, 28, 28,
108 28, 28, 28, 28, 28, 28, 28, 28,
109 28, 35, 36, 37, 28, 28, 28, 28,
110 28, 28, 28, 28, 28, 28, 28, 46,
111 47, 28, 29, 28, 28, 28, 28, 28,
112 28, 28, 28, 28, 28, 28, 28, 28,
113 28, 28, 35, 36, 37, 28, 28, 28,
114 28, 28, 28, 28, 28, 28, 28, 28,
115 28, 47, 28, 29, 28, 28, 28, 28,
116 28, 28, 28, 28, 28, 28, 28, 28,
117 28, 28, 34, 35, 36, 37, 28, 28,
118 28, 28, 28, 28, 42, 43, 44, 28,
119 45, 46, 47, 28, 29, 28, 28, 28,
120 28, 28, 28, 28, 28, 28, 28, 28,
121 28, 28, 28, 34, 35, 36, 37, 28,
122 28, 28, 28, 28, 28, 28, 43, 44,
123 28, 45, 46, 47, 28, 29, 28, 28,
124 28, 28, 28, 28, 28, 28, 28, 28,
125 28, 28, 28, 28, 34, 35, 36, 37,
126 28, 28, 28, 28, 28, 28, 28, 28,
127 44, 28, 45, 46, 47, 28, 29, 28,
128 28, 28, 28, 28, 28, 28, 28, 28,
129 28, 28, 28, 28, 33, 34, 35, 36,
130 37, 28, 39, 33, 28, 28, 28, 42,
131 43, 44, 28, 45, 46, 47, 28, 29,
132 28, 28, 28, 28, 28, 28, 28, 28,
133 28, 28, 28, 28, 28, 33, 34, 35,
134 36, 37, 28, 28, 33, 28, 28, 28,
135 42, 43, 44, 28, 45, 46, 47, 28,
136 29, 28, 28, 28, 28, 28, 28, 28,
137 28, 28, 28, 28, 28, 28, 33, 34,
138 35, 36, 37, 38, 39, 33, 28, 28,
139 28, 42, 43, 44, 28, 45, 46, 47,
140 28, 29, 28, 28, 30, 31, 28, 28,
141 28, 28, 28, 28, 28, 28, 28, 33,
142 34, 35, 36, 37, 38, 39, 33, 40,
143 28, 41, 42, 43, 44, 28, 45, 46,
144 47, 28, 29, 28, 28, 30, 31, 28,
145 28, 28, 28, 28, 28, 28, 28, 28,
146 33, 34, 35, 36, 37, 38, 39, 33,
147 40, 32, 41, 42, 43, 44, 28, 45,
148 46, 47, 28, 51, 50, 50, 50, 50,
149 50, 50, 50, 52, 50, 5, 53, 51,
150 50, 6, 54, 54, 1, 55, 54, 54,
151 54, 54, 54, 54, 54, 54, 56, 10,
152 11, 12, 13, 14, 15, 16, 10, 17,
153 19, 19, 20, 21, 22, 54, 23, 24,
154 25, 54, 6, 54, 54, 1, 55, 54,
155 54, 54, 54, 54, 54, 54, 54, 54,
156 10, 11, 12, 13, 14, 15, 16, 10,
157 17, 19, 19, 20, 21, 22, 54, 23,
158 24, 25, 54, 6, 54, 54, 54, 54,
159 54, 54, 54, 54, 54, 54, 54, 54,
160 54, 10, 11, 12, 13, 14, 54, 54,
161 54, 54, 54, 54, 20, 21, 22, 54,
162 23, 24, 25, 54, 6, 54, 54, 54,
163 54, 54, 54, 54, 54, 54, 54, 54,
164 54, 54, 54, 11, 12, 13, 14, 54,
165 54, 54, 54, 54, 54, 54, 54, 54,
166 54, 23, 24, 25, 54, 6, 54, 54,
167 54, 54, 54, 54, 54, 54, 54, 54,
168 54, 54, 54, 54, 54, 12, 13, 14,
169 54, 6, 54, 54, 54, 54, 54, 54,
170 54, 54, 54, 54, 54, 54, 54, 54,
171 54, 54, 13, 14, 54, 6, 54, 54,
172 54, 54, 54, 54, 54, 54, 54, 54,
173 54, 54, 54, 54, 54, 54, 54, 14,
174 54, 6, 54, 54, 54, 54, 54, 54,
175 54, 54, 54, 54, 54, 54, 54, 54,
176 54, 12, 13, 14, 54, 54, 54, 54,
177 54, 54, 54, 54, 54, 54, 23, 24,
178 25, 54, 6, 54, 54, 54, 54, 54,
179 54, 54, 54, 54, 54, 54, 54, 54,
180 54, 54, 12, 13, 14, 54, 54, 54,
181 54, 54, 54, 54, 54, 54, 54, 54,
182 24, 25, 54, 6, 54, 54, 54, 54,
183 54, 54, 54, 54, 54, 54, 54, 54,
184 54, 54, 54, 12, 13, 14, 54, 54,
185 54, 54, 54, 54, 54, 54, 54, 54,
186 54, 54, 25, 54, 6, 54, 54, 54,
187 54, 54, 54, 54, 54, 54, 54, 54,
188 54, 54, 54, 11, 12, 13, 14, 54,
189 54, 54, 54, 54, 54, 20, 21, 22,
190 54, 23, 24, 25, 54, 6, 54, 54,
191 54, 54, 54, 54, 54, 54, 54, 54,
192 54, 54, 54, 54, 11, 12, 13, 14,
193 54, 54, 54, 54, 54, 54, 54, 21,
194 22, 54, 23, 24, 25, 54, 6, 54,
195 54, 54, 54, 54, 54, 54, 54, 54,
196 54, 54, 54, 54, 54, 11, 12, 13,
197 14, 54, 54, 54, 54, 54, 54, 54,
198 54, 22, 54, 23, 24, 25, 54, 6,
199 54, 54, 54, 54, 54, 54, 54, 54,
200 54, 54, 54, 54, 54, 10, 11, 12,
201 13, 14, 54, 16, 10, 54, 54, 54,
202 20, 21, 22, 54, 23, 24, 25, 54,
203 6, 54, 54, 54, 54, 54, 54, 54,
204 54, 54, 54, 54, 54, 54, 10, 11,
205 12, 13, 14, 54, 54, 10, 54, 54,
206 54, 20, 21, 22, 54, 23, 24, 25,
207 54, 6, 54, 54, 54, 54, 54, 54,
208 54, 54, 54, 54, 54, 54, 54, 10,
209 11, 12, 13, 14, 15, 16, 10, 54,
210 54, 54, 20, 21, 22, 54, 23, 24,
211 25, 54, 6, 54, 54, 1, 55, 54,
212 54, 54, 54, 54, 54, 54, 54, 54,
213 10, 11, 12, 13, 14, 15, 16, 10,
214 17, 54, 19, 20, 21, 22, 54, 23,
215 24, 25, 54, 1, 57, 3, 54, 54,
216 54, 3, 54, 54, 6, 54, 54, 1,
217 55, 54, 54, 54, 54, 54, 54, 54,
218 54, 54, 10, 11, 12, 13, 14, 15,
219 16, 10, 17, 18, 19, 20, 21, 22,
220 54, 23, 24, 25, 54, 6, 54, 54,
221 1, 55, 54, 54, 54, 54, 54, 54,
222 54, 54, 54, 10, 11, 12, 13, 14,
223 15, 16, 10, 17, 18, 19, 20, 21,
224 22, 54, 23, 24, 25, 54, 59, 58,
225 58, 58, 58, 58, 58, 58, 58, 58,
226 58, 58, 58, 58, 58, 58, 58, 58,
227 58, 58, 59, 60, 58, 59, 60, 58,
228 60, 58, 0
229 };
230
231 static const char _use_syllable_machine_trans_targs[] = {
232 1, 26, 2, 3, 1, 23, 1, 43,
233 44, 46, 28, 29, 30, 31, 32, 39,
234 40, 41, 45, 42, 36, 37, 38, 33,
235 34, 35, 1, 1, 1, 1, 4, 5,
236 22, 7, 8, 9, 10, 11, 18, 19,
237 20, 21, 15, 16, 17, 12, 13, 14,
238 6, 1, 1, 24, 25, 1, 1, 0,
239 27, 1, 1, 47, 48
240 };
241
242 static const char _use_syllable_machine_trans_actions[] = {
243 1, 2, 0, 0, 5, 0, 6, 0,
244 2, 0, 0, 0, 0, 0, 0, 0,
245 0, 0, 2, 2, 0, 0, 0, 0,
246 0, 0, 7, 8, 9, 10, 0, 0,
247 0, 0, 0, 0, 0, 0, 0, 0,
248 0, 0, 0, 0, 0, 0, 0, 0,
249 0, 11, 12, 0, 0, 13, 14, 0,
250 2, 15, 16, 0, 0
251 };
252
253 static const char _use_syllable_machine_to_state_actions[] = {
254 0, 3, 0, 0, 0, 0, 0, 0,
255 0, 0, 0, 0, 0, 0, 0, 0,
256 0, 0, 0, 0, 0, 0, 0, 0,
257 0, 0, 0, 0, 0, 0, 0, 0,
258 0, 0, 0, 0, 0, 0, 0, 0,
259 0, 0, 0, 0, 0, 0, 0, 0,
260 0
261 };
262
263 static const char _use_syllable_machine_from_state_actions[] = {
264 0, 4, 0, 0, 0, 0, 0, 0,
265 0, 0, 0, 0, 0, 0, 0, 0,
266 0, 0, 0, 0, 0, 0, 0, 0,
267 0, 0, 0, 0, 0, 0, 0, 0,
268 0, 0, 0, 0, 0, 0, 0, 0,
269 0, 0, 0, 0, 0, 0, 0, 0,
270 0
271 };
272
273 static const short _use_syllable_machine_eof_trans[] = {
274 1, 0, 27, 29, 29, 50, 29, 29,
275 29, 29, 29, 29, 29, 29, 29, 29,
276 29, 29, 29, 29, 29, 29, 29, 51,
277 54, 51, 55, 55, 55, 55, 55, 55,
278 55, 55, 55, 55, 55, 55, 55, 55,
279 55, 55, 55, 58, 55, 55, 59, 59,
280 59
281 };
282
283 static const int use_syllable_machine_start = 1;
284 static const int use_syllable_machine_first_final = 1;
285 static const int use_syllable_machine_error = -1;
286
287 static const int use_syllable_machine_en_main = 1;
288
289
290 #line 38 "hb-ot-shape-complex-use-machine.rl"
291
292
293
294 #line 138 "hb-ot-shape-complex-use-machine.rl"
295
296
297 #define found_syllable(syllable_type) \
298 HB_STMT_START { \
299 if (0) fprintf (stderr, "syllable %d..%d %s\n", last, p+1, #syllable_type); \
300 for (unsigned int i = last; i < p+1; i++) \
301 info[i].syllable() = (syllable_serial << 4) | syllable_type; \
302 last = p+1; \
303 syllable_serial++; \
304 if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
305 } HB_STMT_END
306
307 static void
find_syllables(hb_buffer_t * buffer)308 find_syllables (hb_buffer_t *buffer)
309 {
310 unsigned int p, pe, eof, ts HB_UNUSED, te HB_UNUSED, act HB_UNUSED;
311 int cs;
312 hb_glyph_info_t *info = buffer->info;
313
314 #line 315 "hb-ot-shape-complex-use-machine.hh"
315 {
316 cs = use_syllable_machine_start;
317 ts = 0;
318 te = 0;
319 act = 0;
320 }
321
322 #line 159 "hb-ot-shape-complex-use-machine.rl"
323
324
325 p = 0;
326 pe = eof = buffer->len;
327
328 unsigned int last = 0;
329 unsigned int syllable_serial = 1;
330
331 #line 332 "hb-ot-shape-complex-use-machine.hh"
332 {
333 int _slen;
334 int _trans;
335 const unsigned char *_keys;
336 const char *_inds;
337 if ( p == pe )
338 goto _test_eof;
339 _resume:
340 switch ( _use_syllable_machine_from_state_actions[cs] ) {
341 case 4:
342 #line 1 "NONE"
343 {ts = p;}
344 break;
345 #line 346 "hb-ot-shape-complex-use-machine.hh"
346 }
347
348 _keys = _use_syllable_machine_trans_keys + (cs<<1);
349 _inds = _use_syllable_machine_indicies + _use_syllable_machine_index_offsets[cs];
350
351 _slen = _use_syllable_machine_key_spans[cs];
352 _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].use_category()) &&
353 ( info[p].use_category()) <= _keys[1] ?
354 ( info[p].use_category()) - _keys[0] : _slen ];
355
356 _eof_trans:
357 cs = _use_syllable_machine_trans_targs[_trans];
358
359 if ( _use_syllable_machine_trans_actions[_trans] == 0 )
360 goto _again;
361
362 switch ( _use_syllable_machine_trans_actions[_trans] ) {
363 case 2:
364 #line 1 "NONE"
365 {te = p+1;}
366 break;
367 case 8:
368 #line 127 "hb-ot-shape-complex-use-machine.rl"
369 {te = p+1;{ found_syllable (independent_cluster); }}
370 break;
371 case 10:
372 #line 129 "hb-ot-shape-complex-use-machine.rl"
373 {te = p+1;{ found_syllable (standard_cluster); }}
374 break;
375 case 6:
376 #line 133 "hb-ot-shape-complex-use-machine.rl"
377 {te = p+1;{ found_syllable (broken_cluster); }}
378 break;
379 case 5:
380 #line 134 "hb-ot-shape-complex-use-machine.rl"
381 {te = p+1;{ found_syllable (non_cluster); }}
382 break;
383 case 7:
384 #line 127 "hb-ot-shape-complex-use-machine.rl"
385 {te = p;p--;{ found_syllable (independent_cluster); }}
386 break;
387 case 11:
388 #line 128 "hb-ot-shape-complex-use-machine.rl"
389 {te = p;p--;{ found_syllable (virama_terminated_cluster); }}
390 break;
391 case 9:
392 #line 129 "hb-ot-shape-complex-use-machine.rl"
393 {te = p;p--;{ found_syllable (standard_cluster); }}
394 break;
395 case 13:
396 #line 130 "hb-ot-shape-complex-use-machine.rl"
397 {te = p;p--;{ found_syllable (number_joiner_terminated_cluster); }}
398 break;
399 case 12:
400 #line 131 "hb-ot-shape-complex-use-machine.rl"
401 {te = p;p--;{ found_syllable (numeral_cluster); }}
402 break;
403 case 16:
404 #line 132 "hb-ot-shape-complex-use-machine.rl"
405 {te = p;p--;{ found_syllable (symbol_cluster); }}
406 break;
407 case 14:
408 #line 133 "hb-ot-shape-complex-use-machine.rl"
409 {te = p;p--;{ found_syllable (broken_cluster); }}
410 break;
411 case 15:
412 #line 134 "hb-ot-shape-complex-use-machine.rl"
413 {te = p;p--;{ found_syllable (non_cluster); }}
414 break;
415 case 1:
416 #line 133 "hb-ot-shape-complex-use-machine.rl"
417 {{p = ((te))-1;}{ found_syllable (broken_cluster); }}
418 break;
419 #line 420 "hb-ot-shape-complex-use-machine.hh"
420 }
421
422 _again:
423 switch ( _use_syllable_machine_to_state_actions[cs] ) {
424 case 3:
425 #line 1 "NONE"
426 {ts = 0;}
427 break;
428 #line 429 "hb-ot-shape-complex-use-machine.hh"
429 }
430
431 if ( ++p != pe )
432 goto _resume;
433 _test_eof: {}
434 if ( p == eof )
435 {
436 if ( _use_syllable_machine_eof_trans[cs] > 0 ) {
437 _trans = _use_syllable_machine_eof_trans[cs] - 1;
438 goto _eof_trans;
439 }
440 }
441
442 }
443
444 #line 168 "hb-ot-shape-complex-use-machine.rl"
445
446 }
447
448 #undef found_syllable
449
450 #endif /* HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH */
451