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