1
2 #line 1 "hb-ot-shape-complex-myanmar-machine.rl"
3 /*
4 * Copyright © 2011,2012 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 * Google Author(s): Behdad Esfahbod
27 */
28
29 #ifndef HB_OT_SHAPE_COMPLEX_MYANMAR_MACHINE_HH
30 #define HB_OT_SHAPE_COMPLEX_MYANMAR_MACHINE_HH
31
32 #include "hb.hh"
33
34
35 #line 36 "hb-ot-shape-complex-myanmar-machine.hh"
36 static const unsigned char _myanmar_syllable_machine_trans_keys[] = {
37 1u, 32u, 3u, 30u, 5u, 29u, 5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u,
38 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 16u, 3u, 29u, 3u, 29u, 3u, 29u,
39 3u, 29u, 3u, 29u, 3u, 30u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 5u, 29u,
40 5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u, 3u, 29u, 3u, 29u, 3u, 29u,
41 3u, 29u, 3u, 30u, 3u, 29u, 1u, 32u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u,
42 3u, 29u, 3u, 30u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 32u, 8u, 8u,
43 0
44 };
45
46 static const char _myanmar_syllable_machine_key_spans[] = {
47 32, 28, 25, 4, 25, 23, 21, 21,
48 27, 27, 27, 27, 16, 27, 27, 27,
49 27, 27, 28, 27, 27, 27, 27, 25,
50 4, 25, 23, 21, 21, 27, 27, 27,
51 27, 28, 27, 32, 27, 27, 27, 27,
52 27, 28, 27, 27, 27, 27, 32, 1
53 };
54
55 static const short _myanmar_syllable_machine_index_offsets[] = {
56 0, 33, 62, 88, 93, 119, 143, 165,
57 187, 215, 243, 271, 299, 316, 344, 372,
58 400, 428, 456, 485, 513, 541, 569, 597,
59 623, 628, 654, 678, 700, 722, 750, 778,
60 806, 834, 863, 891, 924, 952, 980, 1008,
61 1036, 1064, 1093, 1121, 1149, 1177, 1205, 1238
62 };
63
64 static const char _myanmar_syllable_machine_indicies[] = {
65 1, 1, 2, 3, 4, 4, 0, 5,
66 0, 6, 1, 0, 0, 0, 0, 7,
67 0, 8, 9, 0, 10, 11, 12, 13,
68 14, 15, 16, 17, 18, 19, 20, 1,
69 0, 22, 23, 24, 24, 21, 25, 21,
70 26, 21, 21, 21, 21, 21, 21, 21,
71 27, 21, 21, 28, 29, 30, 31, 32,
72 33, 34, 35, 36, 37, 21, 24, 24,
73 21, 25, 21, 21, 21, 21, 21, 21,
74 21, 21, 21, 38, 21, 21, 21, 21,
75 21, 21, 32, 21, 21, 21, 36, 21,
76 24, 24, 21, 25, 21, 24, 24, 21,
77 25, 21, 21, 21, 21, 21, 21, 21,
78 21, 21, 21, 21, 21, 21, 21, 21,
79 21, 32, 21, 21, 21, 36, 21, 39,
80 21, 24, 24, 21, 25, 21, 32, 21,
81 21, 21, 21, 21, 21, 21, 40, 21,
82 21, 21, 21, 21, 21, 32, 21, 24,
83 24, 21, 25, 21, 21, 21, 21, 21,
84 21, 21, 21, 21, 40, 21, 21, 21,
85 21, 21, 21, 32, 21, 24, 24, 21,
86 25, 21, 21, 21, 21, 21, 21, 21,
87 21, 21, 21, 21, 21, 21, 21, 21,
88 21, 32, 21, 22, 21, 24, 24, 21,
89 25, 21, 26, 21, 21, 21, 21, 21,
90 21, 21, 41, 21, 21, 41, 21, 21,
91 21, 32, 42, 21, 21, 36, 21, 22,
92 21, 24, 24, 21, 25, 21, 26, 21,
93 21, 21, 21, 21, 21, 21, 21, 21,
94 21, 21, 21, 21, 21, 32, 21, 21,
95 21, 36, 21, 22, 21, 24, 24, 21,
96 25, 21, 26, 21, 21, 21, 21, 21,
97 21, 21, 41, 21, 21, 21, 21, 21,
98 21, 32, 42, 21, 21, 36, 21, 22,
99 21, 24, 24, 21, 25, 21, 26, 21,
100 21, 21, 21, 21, 21, 21, 21, 21,
101 21, 21, 21, 21, 21, 32, 42, 21,
102 21, 36, 21, 1, 1, 21, 21, 21,
103 21, 21, 21, 21, 21, 21, 21, 21,
104 21, 21, 1, 21, 22, 21, 24, 24,
105 21, 25, 21, 26, 21, 21, 21, 21,
106 21, 21, 21, 27, 21, 21, 28, 29,
107 30, 31, 32, 33, 34, 35, 36, 21,
108 22, 21, 24, 24, 21, 25, 21, 26,
109 21, 21, 21, 21, 21, 21, 21, 43,
110 21, 21, 21, 21, 21, 21, 32, 33,
111 34, 35, 36, 21, 22, 21, 24, 24,
112 21, 25, 21, 26, 21, 21, 21, 21,
113 21, 21, 21, 21, 21, 21, 21, 21,
114 21, 21, 32, 33, 34, 35, 36, 21,
115 22, 21, 24, 24, 21, 25, 21, 26,
116 21, 21, 21, 21, 21, 21, 21, 21,
117 21, 21, 21, 21, 21, 21, 32, 33,
118 34, 21, 36, 21, 22, 21, 24, 24,
119 21, 25, 21, 26, 21, 21, 21, 21,
120 21, 21, 21, 21, 21, 21, 21, 21,
121 21, 21, 32, 21, 34, 21, 36, 21,
122 22, 21, 24, 24, 21, 25, 21, 26,
123 21, 21, 21, 21, 21, 21, 21, 21,
124 21, 21, 21, 21, 21, 21, 32, 33,
125 34, 35, 36, 43, 21, 22, 21, 24,
126 24, 21, 25, 21, 26, 21, 21, 21,
127 21, 21, 21, 21, 43, 21, 21, 28,
128 21, 30, 21, 32, 33, 34, 35, 36,
129 21, 22, 21, 24, 24, 21, 25, 21,
130 26, 21, 21, 21, 21, 21, 21, 21,
131 43, 21, 21, 28, 21, 21, 21, 32,
132 33, 34, 35, 36, 21, 22, 21, 24,
133 24, 21, 25, 21, 26, 21, 21, 21,
134 21, 21, 21, 21, 43, 21, 21, 28,
135 29, 30, 21, 32, 33, 34, 35, 36,
136 21, 22, 23, 24, 24, 21, 25, 21,
137 26, 21, 21, 21, 21, 21, 21, 21,
138 27, 21, 21, 28, 29, 30, 31, 32,
139 33, 34, 35, 36, 21, 3, 3, 44,
140 5, 44, 44, 44, 44, 44, 44, 44,
141 44, 44, 45, 44, 44, 44, 44, 44,
142 44, 14, 44, 44, 44, 18, 44, 3,
143 3, 44, 5, 44, 3, 3, 44, 5,
144 44, 44, 44, 44, 44, 44, 44, 44,
145 44, 44, 44, 44, 44, 44, 44, 44,
146 14, 44, 44, 44, 18, 44, 46, 44,
147 3, 3, 44, 5, 44, 14, 44, 44,
148 44, 44, 44, 44, 44, 47, 44, 44,
149 44, 44, 44, 44, 14, 44, 3, 3,
150 44, 5, 44, 44, 44, 44, 44, 44,
151 44, 44, 44, 47, 44, 44, 44, 44,
152 44, 44, 14, 44, 3, 3, 44, 5,
153 44, 44, 44, 44, 44, 44, 44, 44,
154 44, 44, 44, 44, 44, 44, 44, 44,
155 14, 44, 2, 44, 3, 3, 44, 5,
156 44, 6, 44, 44, 44, 44, 44, 44,
157 44, 48, 44, 44, 48, 44, 44, 44,
158 14, 49, 44, 44, 18, 44, 2, 44,
159 3, 3, 44, 5, 44, 6, 44, 44,
160 44, 44, 44, 44, 44, 44, 44, 44,
161 44, 44, 44, 44, 14, 44, 44, 44,
162 18, 44, 2, 44, 3, 3, 44, 5,
163 44, 6, 44, 44, 44, 44, 44, 44,
164 44, 48, 44, 44, 44, 44, 44, 44,
165 14, 49, 44, 44, 18, 44, 2, 44,
166 3, 3, 44, 5, 44, 6, 44, 44,
167 44, 44, 44, 44, 44, 44, 44, 44,
168 44, 44, 44, 44, 14, 49, 44, 44,
169 18, 44, 22, 23, 24, 24, 21, 25,
170 21, 26, 21, 21, 21, 21, 21, 21,
171 21, 50, 21, 21, 28, 29, 30, 31,
172 32, 33, 34, 35, 36, 37, 21, 22,
173 51, 24, 24, 21, 25, 21, 26, 21,
174 21, 21, 21, 21, 21, 21, 27, 21,
175 21, 28, 29, 30, 31, 32, 33, 34,
176 35, 36, 21, 1, 1, 2, 3, 3,
177 3, 44, 5, 44, 6, 1, 44, 44,
178 44, 44, 1, 44, 8, 44, 44, 10,
179 11, 12, 13, 14, 15, 16, 17, 18,
180 19, 44, 1, 44, 2, 44, 3, 3,
181 44, 5, 44, 6, 44, 44, 44, 44,
182 44, 44, 44, 8, 44, 44, 10, 11,
183 12, 13, 14, 15, 16, 17, 18, 44,
184 2, 44, 3, 3, 44, 5, 44, 6,
185 44, 44, 44, 44, 44, 44, 44, 52,
186 44, 44, 44, 44, 44, 44, 14, 15,
187 16, 17, 18, 44, 2, 44, 3, 3,
188 44, 5, 44, 6, 44, 44, 44, 44,
189 44, 44, 44, 44, 44, 44, 44, 44,
190 44, 44, 14, 15, 16, 17, 18, 44,
191 2, 44, 3, 3, 44, 5, 44, 6,
192 44, 44, 44, 44, 44, 44, 44, 44,
193 44, 44, 44, 44, 44, 44, 14, 15,
194 16, 44, 18, 44, 2, 44, 3, 3,
195 44, 5, 44, 6, 44, 44, 44, 44,
196 44, 44, 44, 44, 44, 44, 44, 44,
197 44, 44, 14, 44, 16, 44, 18, 44,
198 2, 44, 3, 3, 44, 5, 44, 6,
199 44, 44, 44, 44, 44, 44, 44, 44,
200 44, 44, 44, 44, 44, 44, 14, 15,
201 16, 17, 18, 52, 44, 2, 44, 3,
202 3, 44, 5, 44, 6, 44, 44, 44,
203 44, 44, 44, 44, 52, 44, 44, 10,
204 44, 12, 44, 14, 15, 16, 17, 18,
205 44, 2, 44, 3, 3, 44, 5, 44,
206 6, 44, 44, 44, 44, 44, 44, 44,
207 52, 44, 44, 10, 44, 44, 44, 14,
208 15, 16, 17, 18, 44, 2, 44, 3,
209 3, 44, 5, 44, 6, 44, 44, 44,
210 44, 44, 44, 44, 52, 44, 44, 10,
211 11, 12, 44, 14, 15, 16, 17, 18,
212 44, 2, 3, 3, 3, 44, 5, 44,
213 6, 44, 44, 44, 44, 44, 44, 44,
214 8, 44, 44, 10, 11, 12, 13, 14,
215 15, 16, 17, 18, 44, 1, 1, 53,
216 53, 53, 53, 53, 53, 53, 53, 1,
217 53, 53, 53, 53, 1, 53, 53, 53,
218 53, 53, 53, 53, 53, 53, 53, 53,
219 53, 53, 53, 53, 1, 53, 54, 53,
220 0
221 };
222
223 static const char _myanmar_syllable_machine_trans_targs[] = {
224 0, 1, 23, 0, 0, 24, 30, 33,
225 36, 46, 37, 42, 43, 44, 26, 39,
226 40, 41, 29, 45, 47, 0, 2, 12,
227 0, 3, 9, 13, 14, 19, 20, 21,
228 5, 16, 17, 18, 8, 22, 4, 6,
229 7, 10, 11, 15, 0, 25, 27, 28,
230 31, 32, 34, 35, 38, 0, 0
231 };
232
233 static const char _myanmar_syllable_machine_trans_actions[] = {
234 3, 0, 0, 4, 5, 0, 0, 0,
235 0, 0, 0, 0, 0, 0, 0, 0,
236 0, 0, 0, 0, 0, 6, 0, 0,
237 7, 0, 0, 0, 0, 0, 0, 0,
238 0, 0, 0, 0, 0, 0, 0, 0,
239 0, 0, 0, 0, 8, 0, 0, 0,
240 0, 0, 0, 0, 0, 9, 10
241 };
242
243 static const char _myanmar_syllable_machine_to_state_actions[] = {
244 1, 0, 0, 0, 0, 0, 0, 0,
245 0, 0, 0, 0, 0, 0, 0, 0,
246 0, 0, 0, 0, 0, 0, 0, 0,
247 0, 0, 0, 0, 0, 0, 0, 0,
248 0, 0, 0, 0, 0, 0, 0, 0,
249 0, 0, 0, 0, 0, 0, 0, 0
250 };
251
252 static const char _myanmar_syllable_machine_from_state_actions[] = {
253 2, 0, 0, 0, 0, 0, 0, 0,
254 0, 0, 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 };
260
261 static const short _myanmar_syllable_machine_eof_trans[] = {
262 0, 22, 22, 22, 22, 22, 22, 22,
263 22, 22, 22, 22, 22, 22, 22, 22,
264 22, 22, 22, 22, 22, 22, 22, 45,
265 45, 45, 45, 45, 45, 45, 45, 45,
266 45, 22, 22, 45, 45, 45, 45, 45,
267 45, 45, 45, 45, 45, 45, 54, 54
268 };
269
270 static const int myanmar_syllable_machine_start = 0;
271 static const int myanmar_syllable_machine_first_final = 0;
272 static const int myanmar_syllable_machine_error = -1;
273
274 static const int myanmar_syllable_machine_en_main = 0;
275
276
277 #line 36 "hb-ot-shape-complex-myanmar-machine.rl"
278
279
280
281 #line 94 "hb-ot-shape-complex-myanmar-machine.rl"
282
283
284 #define found_syllable(syllable_type) \
285 HB_STMT_START { \
286 if (0) fprintf (stderr, "syllable %d..%d %s\n", ts, te, #syllable_type); \
287 for (unsigned int i = ts; i < te; i++) \
288 info[i].syllable() = (syllable_serial << 4) | syllable_type; \
289 syllable_serial++; \
290 if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
291 } HB_STMT_END
292
293 static void
find_syllables(hb_buffer_t * buffer)294 find_syllables (hb_buffer_t *buffer)
295 {
296 unsigned int p, pe, eof, ts, te, act HB_UNUSED;
297 int cs;
298 hb_glyph_info_t *info = buffer->info;
299
300 #line 301 "hb-ot-shape-complex-myanmar-machine.hh"
301 {
302 cs = myanmar_syllable_machine_start;
303 ts = 0;
304 te = 0;
305 act = 0;
306 }
307
308 #line 114 "hb-ot-shape-complex-myanmar-machine.rl"
309
310
311 p = 0;
312 pe = eof = buffer->len;
313
314 unsigned int syllable_serial = 1;
315
316 #line 317 "hb-ot-shape-complex-myanmar-machine.hh"
317 {
318 int _slen;
319 int _trans;
320 const unsigned char *_keys;
321 const char *_inds;
322 if ( p == pe )
323 goto _test_eof;
324 _resume:
325 switch ( _myanmar_syllable_machine_from_state_actions[cs] ) {
326 case 2:
327 #line 1 "NONE"
328 {ts = p;}
329 break;
330 #line 331 "hb-ot-shape-complex-myanmar-machine.hh"
331 }
332
333 _keys = _myanmar_syllable_machine_trans_keys + (cs<<1);
334 _inds = _myanmar_syllable_machine_indicies + _myanmar_syllable_machine_index_offsets[cs];
335
336 _slen = _myanmar_syllable_machine_key_spans[cs];
337 _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].myanmar_category()) &&
338 ( info[p].myanmar_category()) <= _keys[1] ?
339 ( info[p].myanmar_category()) - _keys[0] : _slen ];
340
341 _eof_trans:
342 cs = _myanmar_syllable_machine_trans_targs[_trans];
343
344 if ( _myanmar_syllable_machine_trans_actions[_trans] == 0 )
345 goto _again;
346
347 switch ( _myanmar_syllable_machine_trans_actions[_trans] ) {
348 case 7:
349 #line 86 "hb-ot-shape-complex-myanmar-machine.rl"
350 {te = p+1;{ found_syllable (consonant_syllable); }}
351 break;
352 case 5:
353 #line 87 "hb-ot-shape-complex-myanmar-machine.rl"
354 {te = p+1;{ found_syllable (non_myanmar_cluster); }}
355 break;
356 case 10:
357 #line 88 "hb-ot-shape-complex-myanmar-machine.rl"
358 {te = p+1;{ found_syllable (punctuation_cluster); }}
359 break;
360 case 4:
361 #line 89 "hb-ot-shape-complex-myanmar-machine.rl"
362 {te = p+1;{ found_syllable (broken_cluster); }}
363 break;
364 case 3:
365 #line 90 "hb-ot-shape-complex-myanmar-machine.rl"
366 {te = p+1;{ found_syllable (non_myanmar_cluster); }}
367 break;
368 case 6:
369 #line 86 "hb-ot-shape-complex-myanmar-machine.rl"
370 {te = p;p--;{ found_syllable (consonant_syllable); }}
371 break;
372 case 8:
373 #line 89 "hb-ot-shape-complex-myanmar-machine.rl"
374 {te = p;p--;{ found_syllable (broken_cluster); }}
375 break;
376 case 9:
377 #line 90 "hb-ot-shape-complex-myanmar-machine.rl"
378 {te = p;p--;{ found_syllable (non_myanmar_cluster); }}
379 break;
380 #line 381 "hb-ot-shape-complex-myanmar-machine.hh"
381 }
382
383 _again:
384 switch ( _myanmar_syllable_machine_to_state_actions[cs] ) {
385 case 1:
386 #line 1 "NONE"
387 {ts = 0;}
388 break;
389 #line 390 "hb-ot-shape-complex-myanmar-machine.hh"
390 }
391
392 if ( ++p != pe )
393 goto _resume;
394 _test_eof: {}
395 if ( p == eof )
396 {
397 if ( _myanmar_syllable_machine_eof_trans[cs] > 0 ) {
398 _trans = _myanmar_syllable_machine_eof_trans[cs] - 1;
399 goto _eof_trans;
400 }
401 }
402
403 }
404
405 #line 122 "hb-ot-shape-complex-myanmar-machine.rl"
406
407 }
408
409 #undef found_syllable
410
411 #endif /* HB_OT_SHAPE_COMPLEX_MYANMAR_MACHINE_HH */
412