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