blob: 41e8a34f3be9ae6a0ebd927e09ad1fd51417a2b7 [file] [log] [blame]
Khaled Hosny5898a962021-09-14 07:09:50 +02001
Behdad Esfahbod5bfb0b72022-06-03 02:56:41 -06002#line 1 "hb-ot-shaper-use-machine.rl"
Behdad Esfahbodabc82b42018-02-20 14:34:16 -08003/*
Khaled Hosny5898a962021-09-14 07:09:50 +02004 * 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 */
Behdad Esfahbodabc82b42018-02-20 14:34:16 -080030
Behdad Esfahbod44be1e52022-06-03 02:54:33 -060031#ifndef HB_OT_SHAPER_USE_MACHINE_HH
32#define HB_OT_SHAPER_USE_MACHINE_HH
Behdad Esfahbodabc82b42018-02-20 14:34:16 -080033
Behdad Esfahbodc77ae402018-08-25 22:36:36 -070034#include "hb.hh"
Behdad Esfahbodd9b167d2021-01-28 20:40:42 -070035
Behdad Esfahbod5bfb0b72022-06-03 02:56:41 -060036#include "hb-ot-shaper-syllabic.hh"
Behdad Esfahbodabc82b42018-02-20 14:34:16 -080037
Behdad Esfahbodc417e0d2021-01-28 20:27:59 -070038/* buffer var allocations */
Behdad Esfahboda5601822022-06-03 02:46:58 -060039#define use_category() ot_shaper_var_u8_category()
Behdad Esfahbodabc82b42018-02-20 14:34:16 -080040
Behdad Esfahbodd9b167d2021-01-28 20:40:42 -070041#define USE(Cat) use_syllable_machine_ex_##Cat
42
Behdad Esfahbodc417e0d2021-01-28 20:27:59 -070043enum use_syllable_type_t {
Khaled Hosny5898a962021-09-14 07:09:50 +020044 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,
Behdad Esfahbodc417e0d2021-01-28 20:27:59 -070053};
54
55
David Corbettf9d48152022-08-27 15:39:39 -040056#line 57 "hb-ot-shaper-use-machine.hh"
Behdad Esfahbod880fdb72021-01-28 19:47:53 -070057#define use_syllable_machine_ex_B 1u
David Corbett8eaee2f2021-10-07 20:10:31 -040058#define use_syllable_machine_ex_CGJ 6u
Behdad Esfahbod880fdb72021-01-28 19:47:53 -070059#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
David Corbett60598282022-06-25 11:33:44 -040072#define use_syllable_machine_ex_HVM 53u
David Corbett49fb8f92022-03-13 15:01:11 -040073#define use_syllable_machine_ex_IS 44u
Behdad Esfahbod880fdb72021-01-28 19:47:53 -070074#define use_syllable_machine_ex_J 50u
75#define use_syllable_machine_ex_MAbv 27u
76#define use_syllable_machine_ex_MBlw 28u
77#define use_syllable_machine_ex_MPre 30u
78#define use_syllable_machine_ex_MPst 29u
79#define use_syllable_machine_ex_N 4u
80#define use_syllable_machine_ex_O 0u
81#define use_syllable_machine_ex_R 18u
Behdad Esfahbod880fdb72021-01-28 19:47:53 -070082#define use_syllable_machine_ex_SB 51u
83#define use_syllable_machine_ex_SE 52u
84#define use_syllable_machine_ex_SMAbv 41u
85#define use_syllable_machine_ex_SMBlw 42u
86#define use_syllable_machine_ex_SUB 11u
87#define use_syllable_machine_ex_Sk 48u
88#define use_syllable_machine_ex_VAbv 33u
89#define use_syllable_machine_ex_VBlw 34u
90#define use_syllable_machine_ex_VMAbv 37u
91#define use_syllable_machine_ex_VMBlw 38u
92#define use_syllable_machine_ex_VMPre 23u
93#define use_syllable_machine_ex_VMPst 39u
94#define use_syllable_machine_ex_VPre 22u
95#define use_syllable_machine_ex_VPst 35u
David Corbett5b0a5982022-03-04 20:45:30 -050096#define use_syllable_machine_ex_WJ 16u
Behdad Esfahbod880fdb72021-01-28 19:47:53 -070097#define use_syllable_machine_ex_ZWNJ 14u
98
99
David Corbettf9d48152022-08-27 15:39:39 -0400100#line 101 "hb-ot-shaper-use-machine.hh"
Behdad Esfahbodae8719e2019-05-13 12:27:10 -0700101static const unsigned char _use_syllable_machine_trans_keys[] = {
David Corbett09b9a1f2022-09-01 20:20:44 -0400102 0u, 53u, 11u, 53u, 11u, 53u, 1u, 53u, 14u, 48u, 14u, 47u, 14u, 47u, 14u, 47u,
103 14u, 46u, 14u, 46u, 14u, 14u, 14u, 48u, 14u, 48u, 14u, 48u, 1u, 14u, 14u, 48u,
104 14u, 53u, 14u, 53u, 14u, 53u, 14u, 53u, 12u, 53u, 14u, 53u, 12u, 53u, 12u, 53u,
105 12u, 53u, 11u, 53u, 1u, 14u, 1u, 48u, 11u, 53u, 14u, 42u, 14u, 42u, 11u, 53u,
106 11u, 53u, 1u, 53u, 14u, 48u, 14u, 47u, 14u, 47u, 14u, 47u, 14u, 46u, 14u, 46u,
107 14u, 14u, 14u, 48u, 14u, 48u, 14u, 48u, 1u, 14u, 14u, 48u, 14u, 53u, 14u, 53u,
108 14u, 53u, 14u, 53u, 12u, 53u, 14u, 53u, 12u, 53u, 12u, 53u, 12u, 53u, 11u, 53u,
109 1u, 14u, 1u, 14u, 1u, 48u, 13u, 14u, 4u, 14u, 11u, 53u, 11u, 53u, 1u, 53u,
110 14u, 48u, 14u, 47u, 14u, 47u, 14u, 47u, 14u, 46u, 14u, 46u, 14u, 14u, 14u, 48u,
111 14u, 48u, 14u, 48u, 1u, 14u, 14u, 48u, 14u, 53u, 14u, 53u, 14u, 53u, 14u, 53u,
112 12u, 53u, 14u, 53u, 12u, 53u, 12u, 53u, 12u, 53u, 11u, 53u, 1u, 14u, 1u, 14u,
113 1u, 48u, 11u, 53u, 11u, 53u, 1u, 53u, 14u, 48u, 14u, 47u, 14u, 47u, 14u, 47u,
114 14u, 46u, 14u, 46u, 14u, 14u, 14u, 48u, 14u, 48u, 14u, 48u, 1u, 14u, 14u, 48u,
115 14u, 53u, 14u, 53u, 14u, 53u, 14u, 53u, 12u, 53u, 14u, 53u, 12u, 53u, 12u, 53u,
116 12u, 53u, 11u, 53u, 1u, 14u, 1u, 48u, 4u, 14u, 13u, 14u, 1u, 53u, 11u, 53u,
117 14u, 42u, 14u, 42u, 1u, 5u, 14u, 52u, 14u, 52u, 14u, 51u, 0
Behdad Esfahbodae8719e2019-05-13 12:27:10 -0700118};
119
Khaled Hosny5898a962021-09-14 07:09:50 +0200120static const char _use_syllable_machine_key_spans[] = {
David Corbett09b9a1f2022-09-01 20:20:44 -0400121 54, 43, 43, 53, 35, 34, 34, 34,
122 33, 33, 1, 35, 35, 35, 14, 35,
123 40, 40, 40, 40, 42, 40, 42, 42,
124 42, 43, 14, 48, 43, 29, 29, 43,
125 43, 53, 35, 34, 34, 34, 33, 33,
126 1, 35, 35, 35, 14, 35, 40, 40,
127 40, 40, 42, 40, 42, 42, 42, 43,
128 14, 14, 48, 2, 11, 43, 43, 53,
129 35, 34, 34, 34, 33, 33, 1, 35,
130 35, 35, 14, 35, 40, 40, 40, 40,
131 42, 40, 42, 42, 42, 43, 14, 14,
132 48, 43, 43, 53, 35, 34, 34, 34,
133 33, 33, 1, 35, 35, 35, 14, 35,
134 40, 40, 40, 40, 42, 40, 42, 42,
135 42, 43, 14, 48, 11, 2, 53, 43,
136 29, 29, 5, 39, 39, 38
Behdad Esfahbodabc82b42018-02-20 14:34:16 -0800137};
138
139static const short _use_syllable_machine_index_offsets[] = {
David Corbett09b9a1f2022-09-01 20:20:44 -0400140 0, 55, 99, 143, 197, 233, 268, 303,
141 338, 372, 406, 408, 444, 480, 516, 531,
142 567, 608, 649, 690, 731, 774, 815, 858,
143 901, 944, 988, 1003, 1052, 1096, 1126, 1156,
144 1200, 1244, 1298, 1334, 1369, 1404, 1439, 1473,
145 1507, 1509, 1545, 1581, 1617, 1632, 1668, 1709,
146 1750, 1791, 1832, 1875, 1916, 1959, 2002, 2045,
147 2089, 2104, 2119, 2168, 2171, 2183, 2227, 2271,
148 2325, 2361, 2396, 2431, 2466, 2500, 2534, 2536,
149 2572, 2608, 2644, 2659, 2695, 2736, 2777, 2818,
150 2859, 2902, 2943, 2986, 3029, 3072, 3116, 3131,
151 3146, 3195, 3239, 3283, 3337, 3373, 3408, 3443,
152 3478, 3512, 3546, 3548, 3584, 3620, 3656, 3671,
153 3707, 3748, 3789, 3830, 3871, 3914, 3955, 3998,
154 4041, 4084, 4128, 4143, 4192, 4204, 4207, 4261,
155 4305, 4335, 4365, 4371, 4411, 4451
Behdad Esfahbod52c15b02019-05-13 14:10:28 -0700156};
157
David Corbett60598282022-06-25 11:33:44 -0400158static const unsigned char _use_syllable_machine_indicies[] = {
David Corbettae193cd2021-10-08 21:58:07 -0400159 0, 1, 2, 2, 3, 4, 2, 2,
David Corbett09b9a1f2022-09-01 20:20:44 -0400160 2, 2, 2, 5, 6, 7, 8, 2,
161 2, 2, 9, 2, 2, 2, 10, 11,
David Corbett60598282022-06-25 11:33:44 -0400162 12, 13, 14, 15, 16, 17, 18, 19,
David Corbett09b9a1f2022-09-01 20:20:44 -0400163 20, 21, 22, 23, 2, 24, 25, 26,
164 2, 27, 28, 29, 30, 31, 32, 33,
165 30, 34, 2, 35, 2, 36, 2, 38,
166 39, 37, 40, 37, 37, 37, 37, 37,
167 37, 37, 41, 42, 43, 44, 45, 46,
168 47, 48, 49, 50, 51, 52, 53, 54,
169 37, 55, 56, 57, 37, 58, 59, 37,
170 60, 61, 62, 63, 60, 37, 37, 37,
171 37, 64, 37, 38, 39, 37, 40, 37,
172 37, 37, 37, 37, 37, 37, 41, 42,
173 43, 44, 45, 46, 47, 48, 49, 51,
174 51, 52, 53, 54, 37, 55, 56, 57,
175 37, 37, 37, 37, 60, 61, 62, 63,
176 60, 37, 37, 37, 37, 64, 37, 38,
177 37, 37, 37, 37, 37, 37, 37, 37,
178 37, 37, 37, 37, 40, 37, 37, 37,
179 37, 37, 37, 37, 37, 42, 43, 44,
180 45, 37, 37, 37, 37, 37, 37, 37,
181 37, 37, 37, 55, 56, 57, 37, 37,
182 37, 37, 37, 61, 62, 63, 65, 37,
183 37, 37, 37, 42, 37, 40, 37, 37,
184 37, 37, 37, 37, 37, 37, 42, 43,
185 44, 45, 37, 37, 37, 37, 37, 37,
186 37, 37, 37, 37, 55, 56, 57, 37,
187 37, 37, 37, 37, 61, 62, 63, 65,
188 37, 40, 37, 37, 37, 37, 37, 37,
189 37, 37, 37, 43, 44, 45, 37, 37,
190 37, 37, 37, 37, 37, 37, 37, 37,
191 37, 37, 37, 37, 37, 37, 37, 37,
192 61, 62, 63, 37, 40, 37, 37, 37,
193 37, 37, 37, 37, 37, 37, 37, 44,
194 45, 37, 37, 37, 37, 37, 37, 37,
195 37, 37, 37, 37, 37, 37, 37, 37,
196 37, 37, 37, 61, 62, 63, 37, 40,
197 37, 37, 37, 37, 37, 37, 37, 37,
198 37, 37, 37, 45, 37, 37, 37, 37,
199 37, 37, 37, 37, 37, 37, 37, 37,
200 37, 37, 37, 37, 37, 37, 61, 62,
201 63, 37, 40, 37, 37, 37, 37, 37,
202 37, 37, 37, 37, 37, 37, 37, 37,
203 37, 37, 37, 37, 37, 37, 37, 37,
204 37, 37, 37, 37, 37, 37, 37, 37,
205 37, 61, 62, 37, 40, 37, 37, 37,
206 37, 37, 37, 37, 37, 37, 37, 37,
207 37, 37, 37, 37, 37, 37, 37, 37,
208 37, 37, 37, 37, 37, 37, 37, 37,
209 37, 37, 37, 37, 62, 37, 40, 37,
210 40, 37, 37, 37, 37, 37, 37, 37,
211 37, 37, 43, 44, 45, 37, 37, 37,
212 37, 37, 37, 37, 37, 37, 37, 55,
213 56, 57, 37, 37, 37, 37, 37, 61,
214 62, 63, 65, 37, 40, 37, 37, 37,
215 37, 37, 37, 37, 37, 37, 43, 44,
216 45, 37, 37, 37, 37, 37, 37, 37,
217 37, 37, 37, 37, 56, 57, 37, 37,
218 37, 37, 37, 61, 62, 63, 65, 37,
219 40, 37, 37, 37, 37, 37, 37, 37,
220 37, 37, 43, 44, 45, 37, 37, 37,
221 37, 37, 37, 37, 37, 37, 37, 37,
222 37, 57, 37, 37, 37, 37, 37, 61,
223 62, 63, 65, 37, 66, 37, 37, 37,
224 37, 37, 37, 37, 37, 37, 37, 37,
225 37, 40, 37, 40, 37, 37, 37, 37,
226 37, 37, 37, 37, 37, 43, 44, 45,
227 37, 37, 37, 37, 37, 37, 37, 37,
228 37, 37, 37, 37, 37, 37, 37, 37,
229 37, 37, 61, 62, 63, 65, 37, 40,
230 37, 37, 37, 37, 37, 37, 37, 41,
231 42, 43, 44, 45, 37, 37, 37, 37,
232 37, 37, 52, 53, 54, 37, 55, 56,
233 57, 37, 37, 37, 37, 37, 61, 62,
234 63, 65, 37, 37, 37, 37, 42, 37,
235 40, 37, 37, 37, 37, 37, 37, 37,
236 37, 42, 43, 44, 45, 37, 37, 37,
237 37, 37, 37, 52, 53, 54, 37, 55,
238 56, 57, 37, 37, 37, 37, 37, 61,
239 62, 63, 65, 37, 37, 37, 37, 42,
240 37, 40, 37, 37, 37, 37, 37, 37,
241 37, 37, 42, 43, 44, 45, 37, 37,
242 37, 37, 37, 37, 37, 53, 54, 37,
243 55, 56, 57, 37, 37, 37, 37, 37,
244 61, 62, 63, 65, 37, 37, 37, 37,
245 42, 37, 40, 37, 37, 37, 37, 37,
246 37, 37, 37, 42, 43, 44, 45, 37,
247 37, 37, 37, 37, 37, 37, 37, 54,
248 37, 55, 56, 57, 37, 37, 37, 37,
249 37, 61, 62, 63, 65, 37, 37, 37,
250 37, 42, 37, 67, 37, 40, 37, 37,
251 37, 37, 37, 37, 37, 41, 42, 43,
252 44, 45, 37, 47, 48, 37, 37, 37,
253 52, 53, 54, 37, 55, 56, 57, 37,
254 37, 37, 37, 37, 61, 62, 63, 65,
255 37, 37, 37, 37, 42, 37, 40, 37,
256 37, 37, 37, 37, 37, 37, 37, 42,
257 43, 44, 45, 37, 37, 37, 37, 37,
258 37, 37, 37, 37, 37, 55, 56, 57,
259 37, 37, 37, 37, 37, 61, 62, 63,
260 65, 37, 37, 37, 37, 42, 37, 67,
261 37, 40, 37, 37, 37, 37, 37, 37,
262 37, 41, 42, 43, 44, 45, 37, 37,
263 48, 37, 37, 37, 52, 53, 54, 37,
264 55, 56, 57, 37, 37, 37, 37, 37,
265 61, 62, 63, 65, 37, 37, 37, 37,
266 42, 37, 67, 37, 40, 37, 37, 37,
267 37, 37, 37, 37, 41, 42, 43, 44,
268 45, 37, 37, 37, 37, 37, 37, 52,
269 53, 54, 37, 55, 56, 57, 37, 37,
270 37, 37, 37, 61, 62, 63, 65, 37,
271 37, 37, 37, 42, 37, 67, 37, 40,
272 37, 37, 37, 37, 37, 37, 37, 41,
273 42, 43, 44, 45, 46, 47, 48, 37,
274 37, 37, 52, 53, 54, 37, 55, 56,
275 57, 37, 37, 37, 37, 37, 61, 62,
276 63, 65, 37, 37, 37, 37, 42, 37,
277 38, 39, 37, 40, 37, 37, 37, 37,
278 37, 37, 37, 41, 42, 43, 44, 45,
279 46, 47, 48, 49, 37, 51, 52, 53,
280 54, 37, 55, 56, 57, 37, 37, 37,
281 37, 60, 61, 62, 63, 60, 37, 37,
282 37, 37, 64, 37, 38, 37, 37, 37,
283 37, 37, 37, 37, 37, 37, 37, 37,
284 37, 40, 37, 38, 37, 37, 37, 37,
285 37, 37, 37, 37, 37, 37, 37, 37,
286 40, 37, 37, 37, 37, 37, 37, 37,
287 37, 42, 43, 44, 45, 37, 37, 37,
288 37, 37, 37, 37, 37, 37, 37, 55,
289 56, 57, 37, 37, 37, 37, 37, 61,
290 62, 63, 65, 37, 38, 39, 37, 40,
291 37, 37, 37, 37, 37, 37, 37, 41,
292 42, 43, 44, 45, 46, 47, 48, 49,
293 50, 51, 52, 53, 54, 37, 55, 56,
294 57, 37, 37, 37, 37, 60, 61, 62,
295 63, 60, 37, 37, 37, 37, 64, 37,
296 40, 37, 37, 37, 37, 37, 37, 37,
297 37, 37, 37, 37, 37, 37, 37, 37,
298 37, 37, 37, 37, 37, 37, 37, 37,
299 37, 37, 37, 58, 59, 37, 40, 37,
300 37, 37, 37, 37, 37, 37, 37, 37,
301 37, 37, 37, 37, 37, 37, 37, 37,
302 37, 37, 37, 37, 37, 37, 37, 37,
303 37, 37, 59, 37, 69, 70, 68, 71,
304 68, 68, 68, 68, 68, 68, 68, 72,
305 73, 74, 75, 76, 77, 78, 79, 80,
306 1, 81, 82, 83, 84, 68, 85, 86,
307 87, 68, 68, 68, 68, 88, 89, 90,
308 91, 92, 68, 68, 68, 68, 93, 68,
309 69, 70, 68, 71, 68, 68, 68, 68,
310 68, 68, 68, 72, 73, 74, 75, 76,
311 77, 78, 79, 80, 81, 81, 82, 83,
312 84, 68, 85, 86, 87, 68, 68, 68,
313 68, 88, 89, 90, 91, 92, 68, 68,
314 68, 68, 93, 68, 69, 68, 68, 68,
315 68, 68, 68, 68, 68, 68, 68, 68,
316 68, 71, 68, 68, 68, 68, 68, 68,
317 68, 68, 73, 74, 75, 76, 68, 68,
318 68, 68, 68, 68, 68, 68, 68, 68,
319 85, 86, 87, 68, 68, 68, 68, 68,
320 89, 90, 91, 94, 68, 68, 68, 68,
321 73, 68, 71, 68, 68, 68, 68, 68,
322 68, 68, 68, 73, 74, 75, 76, 68,
323 68, 68, 68, 68, 68, 68, 68, 68,
324 68, 85, 86, 87, 68, 68, 68, 68,
325 68, 89, 90, 91, 94, 68, 71, 68,
326 68, 68, 68, 68, 68, 68, 68, 68,
327 74, 75, 76, 68, 68, 68, 68, 68,
328 68, 68, 68, 68, 68, 68, 68, 68,
329 68, 68, 68, 68, 68, 89, 90, 91,
330 68, 71, 68, 68, 68, 68, 68, 68,
331 68, 68, 68, 68, 75, 76, 68, 68,
332 68, 68, 68, 68, 68, 68, 68, 68,
333 68, 68, 68, 68, 68, 68, 68, 68,
334 89, 90, 91, 68, 71, 68, 68, 68,
335 68, 68, 68, 68, 68, 68, 68, 68,
336 76, 68, 68, 68, 68, 68, 68, 68,
337 68, 68, 68, 68, 68, 68, 68, 68,
338 68, 68, 68, 89, 90, 91, 68, 71,
339 68, 68, 68, 68, 68, 68, 68, 68,
340 68, 68, 68, 68, 68, 68, 68, 68,
341 68, 68, 68, 68, 68, 68, 68, 68,
342 68, 68, 68, 68, 68, 68, 89, 90,
343 68, 71, 68, 68, 68, 68, 68, 68,
344 68, 68, 68, 68, 68, 68, 68, 68,
345 68, 68, 68, 68, 68, 68, 68, 68,
346 68, 68, 68, 68, 68, 68, 68, 68,
347 68, 90, 68, 71, 68, 71, 68, 68,
348 68, 68, 68, 68, 68, 68, 68, 74,
349 75, 76, 68, 68, 68, 68, 68, 68,
350 68, 68, 68, 68, 85, 86, 87, 68,
351 68, 68, 68, 68, 89, 90, 91, 94,
352 68, 71, 68, 68, 68, 68, 68, 68,
353 68, 68, 68, 74, 75, 76, 68, 68,
354 68, 68, 68, 68, 68, 68, 68, 68,
355 68, 86, 87, 68, 68, 68, 68, 68,
356 89, 90, 91, 94, 68, 71, 68, 68,
357 68, 68, 68, 68, 68, 68, 68, 74,
358 75, 76, 68, 68, 68, 68, 68, 68,
359 68, 68, 68, 68, 68, 68, 87, 68,
360 68, 68, 68, 68, 89, 90, 91, 94,
361 68, 96, 95, 95, 95, 95, 95, 95,
362 95, 95, 95, 95, 95, 95, 97, 95,
363 71, 68, 68, 68, 68, 68, 68, 68,
364 68, 68, 74, 75, 76, 68, 68, 68,
365 68, 68, 68, 68, 68, 68, 68, 68,
366 68, 68, 68, 68, 68, 68, 68, 89,
367 90, 91, 94, 68, 71, 68, 68, 68,
368 68, 68, 68, 68, 72, 73, 74, 75,
369 76, 68, 68, 68, 68, 68, 68, 82,
370 83, 84, 68, 85, 86, 87, 68, 68,
371 68, 68, 68, 89, 90, 91, 94, 68,
372 68, 68, 68, 73, 68, 71, 68, 68,
373 68, 68, 68, 68, 68, 68, 73, 74,
374 75, 76, 68, 68, 68, 68, 68, 68,
375 82, 83, 84, 68, 85, 86, 87, 68,
376 68, 68, 68, 68, 89, 90, 91, 94,
377 68, 68, 68, 68, 73, 68, 71, 68,
378 68, 68, 68, 68, 68, 68, 68, 73,
379 74, 75, 76, 68, 68, 68, 68, 68,
380 68, 68, 83, 84, 68, 85, 86, 87,
381 68, 68, 68, 68, 68, 89, 90, 91,
382 94, 68, 68, 68, 68, 73, 68, 71,
383 68, 68, 68, 68, 68, 68, 68, 68,
384 73, 74, 75, 76, 68, 68, 68, 68,
385 68, 68, 68, 68, 84, 68, 85, 86,
386 87, 68, 68, 68, 68, 68, 89, 90,
387 91, 94, 68, 68, 68, 68, 73, 68,
388 98, 68, 71, 68, 68, 68, 68, 68,
389 68, 68, 72, 73, 74, 75, 76, 68,
390 78, 79, 68, 68, 68, 82, 83, 84,
391 68, 85, 86, 87, 68, 68, 68, 68,
392 68, 89, 90, 91, 94, 68, 68, 68,
393 68, 73, 68, 71, 68, 68, 68, 68,
394 68, 68, 68, 68, 73, 74, 75, 76,
395 68, 68, 68, 68, 68, 68, 68, 68,
396 68, 68, 85, 86, 87, 68, 68, 68,
397 68, 68, 89, 90, 91, 94, 68, 68,
398 68, 68, 73, 68, 98, 68, 71, 68,
399 68, 68, 68, 68, 68, 68, 72, 73,
400 74, 75, 76, 68, 68, 79, 68, 68,
401 68, 82, 83, 84, 68, 85, 86, 87,
402 68, 68, 68, 68, 68, 89, 90, 91,
403 94, 68, 68, 68, 68, 73, 68, 98,
404 68, 71, 68, 68, 68, 68, 68, 68,
405 68, 72, 73, 74, 75, 76, 68, 68,
406 68, 68, 68, 68, 82, 83, 84, 68,
407 85, 86, 87, 68, 68, 68, 68, 68,
408 89, 90, 91, 94, 68, 68, 68, 68,
409 73, 68, 98, 68, 71, 68, 68, 68,
410 68, 68, 68, 68, 72, 73, 74, 75,
411 76, 77, 78, 79, 68, 68, 68, 82,
412 83, 84, 68, 85, 86, 87, 68, 68,
413 68, 68, 68, 89, 90, 91, 94, 68,
414 68, 68, 68, 73, 68, 69, 70, 68,
415 71, 68, 68, 68, 68, 68, 68, 68,
416 72, 73, 74, 75, 76, 77, 78, 79,
417 80, 68, 81, 82, 83, 84, 68, 85,
418 86, 87, 68, 68, 68, 68, 88, 89,
419 90, 91, 92, 68, 68, 68, 68, 93,
420 68, 69, 99, 99, 99, 99, 99, 99,
421 99, 99, 99, 99, 99, 99, 100, 99,
422 69, 95, 95, 95, 95, 95, 95, 95,
423 95, 95, 95, 95, 95, 97, 95, 69,
424 68, 68, 68, 68, 68, 68, 68, 68,
425 68, 68, 68, 68, 71, 68, 68, 68,
426 68, 68, 68, 68, 68, 73, 74, 75,
427 76, 68, 68, 68, 68, 68, 68, 68,
428 68, 68, 68, 85, 86, 87, 68, 68,
429 68, 68, 68, 89, 90, 91, 94, 68,
430 102, 103, 101, 3, 104, 104, 104, 104,
431 104, 104, 104, 104, 104, 105, 104, 106,
432 107, 68, 71, 68, 68, 68, 68, 68,
433 68, 68, 108, 109, 110, 111, 112, 113,
434 114, 115, 116, 117, 118, 119, 120, 121,
435 68, 122, 123, 124, 68, 58, 59, 68,
436 125, 126, 127, 128, 129, 68, 68, 68,
437 68, 130, 68, 106, 107, 68, 71, 68,
438 68, 68, 68, 68, 68, 68, 108, 109,
439 110, 111, 112, 113, 114, 115, 116, 118,
440 118, 119, 120, 121, 68, 122, 123, 124,
441 68, 68, 68, 68, 125, 126, 127, 128,
442 129, 68, 68, 68, 68, 130, 68, 106,
443 68, 68, 68, 68, 68, 68, 68, 68,
444 68, 68, 68, 68, 71, 68, 68, 68,
445 68, 68, 68, 68, 68, 109, 110, 111,
446 112, 68, 68, 68, 68, 68, 68, 68,
447 68, 68, 68, 122, 123, 124, 68, 68,
448 68, 68, 68, 126, 127, 128, 131, 68,
449 68, 68, 68, 109, 68, 71, 68, 68,
450 68, 68, 68, 68, 68, 68, 109, 110,
451 111, 112, 68, 68, 68, 68, 68, 68,
452 68, 68, 68, 68, 122, 123, 124, 68,
453 68, 68, 68, 68, 126, 127, 128, 131,
454 68, 71, 68, 68, 68, 68, 68, 68,
455 68, 68, 68, 110, 111, 112, 68, 68,
456 68, 68, 68, 68, 68, 68, 68, 68,
457 68, 68, 68, 68, 68, 68, 68, 68,
458 126, 127, 128, 68, 71, 68, 68, 68,
459 68, 68, 68, 68, 68, 68, 68, 111,
460 112, 68, 68, 68, 68, 68, 68, 68,
461 68, 68, 68, 68, 68, 68, 68, 68,
462 68, 68, 68, 126, 127, 128, 68, 71,
463 68, 68, 68, 68, 68, 68, 68, 68,
464 68, 68, 68, 112, 68, 68, 68, 68,
465 68, 68, 68, 68, 68, 68, 68, 68,
466 68, 68, 68, 68, 68, 68, 126, 127,
467 128, 68, 71, 68, 68, 68, 68, 68,
468 68, 68, 68, 68, 68, 68, 68, 68,
469 68, 68, 68, 68, 68, 68, 68, 68,
470 68, 68, 68, 68, 68, 68, 68, 68,
471 68, 126, 127, 68, 71, 68, 68, 68,
472 68, 68, 68, 68, 68, 68, 68, 68,
473 68, 68, 68, 68, 68, 68, 68, 68,
474 68, 68, 68, 68, 68, 68, 68, 68,
475 68, 68, 68, 68, 127, 68, 71, 68,
476 71, 68, 68, 68, 68, 68, 68, 68,
477 68, 68, 110, 111, 112, 68, 68, 68,
478 68, 68, 68, 68, 68, 68, 68, 122,
479 123, 124, 68, 68, 68, 68, 68, 126,
480 127, 128, 131, 68, 71, 68, 68, 68,
481 68, 68, 68, 68, 68, 68, 110, 111,
482 112, 68, 68, 68, 68, 68, 68, 68,
483 68, 68, 68, 68, 123, 124, 68, 68,
484 68, 68, 68, 126, 127, 128, 131, 68,
485 71, 68, 68, 68, 68, 68, 68, 68,
486 68, 68, 110, 111, 112, 68, 68, 68,
487 68, 68, 68, 68, 68, 68, 68, 68,
488 68, 124, 68, 68, 68, 68, 68, 126,
489 127, 128, 131, 68, 132, 95, 95, 95,
490 95, 95, 95, 95, 95, 95, 95, 95,
491 95, 97, 95, 71, 68, 68, 68, 68,
492 68, 68, 68, 68, 68, 110, 111, 112,
493 68, 68, 68, 68, 68, 68, 68, 68,
494 68, 68, 68, 68, 68, 68, 68, 68,
495 68, 68, 126, 127, 128, 131, 68, 71,
496 68, 68, 68, 68, 68, 68, 68, 108,
497 109, 110, 111, 112, 68, 68, 68, 68,
498 68, 68, 119, 120, 121, 68, 122, 123,
499 124, 68, 68, 68, 68, 68, 126, 127,
500 128, 131, 68, 68, 68, 68, 109, 68,
501 71, 68, 68, 68, 68, 68, 68, 68,
502 68, 109, 110, 111, 112, 68, 68, 68,
503 68, 68, 68, 119, 120, 121, 68, 122,
504 123, 124, 68, 68, 68, 68, 68, 126,
505 127, 128, 131, 68, 68, 68, 68, 109,
506 68, 71, 68, 68, 68, 68, 68, 68,
507 68, 68, 109, 110, 111, 112, 68, 68,
508 68, 68, 68, 68, 68, 120, 121, 68,
509 122, 123, 124, 68, 68, 68, 68, 68,
510 126, 127, 128, 131, 68, 68, 68, 68,
511 109, 68, 71, 68, 68, 68, 68, 68,
512 68, 68, 68, 109, 110, 111, 112, 68,
513 68, 68, 68, 68, 68, 68, 68, 121,
514 68, 122, 123, 124, 68, 68, 68, 68,
515 68, 126, 127, 128, 131, 68, 68, 68,
516 68, 109, 68, 133, 68, 71, 68, 68,
517 68, 68, 68, 68, 68, 108, 109, 110,
518 111, 112, 68, 114, 115, 68, 68, 68,
519 119, 120, 121, 68, 122, 123, 124, 68,
520 68, 68, 68, 68, 126, 127, 128, 131,
521 68, 68, 68, 68, 109, 68, 71, 68,
522 68, 68, 68, 68, 68, 68, 68, 109,
523 110, 111, 112, 68, 68, 68, 68, 68,
524 68, 68, 68, 68, 68, 122, 123, 124,
525 68, 68, 68, 68, 68, 126, 127, 128,
526 131, 68, 68, 68, 68, 109, 68, 133,
527 68, 71, 68, 68, 68, 68, 68, 68,
528 68, 108, 109, 110, 111, 112, 68, 68,
529 115, 68, 68, 68, 119, 120, 121, 68,
530 122, 123, 124, 68, 68, 68, 68, 68,
531 126, 127, 128, 131, 68, 68, 68, 68,
532 109, 68, 133, 68, 71, 68, 68, 68,
533 68, 68, 68, 68, 108, 109, 110, 111,
534 112, 68, 68, 68, 68, 68, 68, 119,
535 120, 121, 68, 122, 123, 124, 68, 68,
536 68, 68, 68, 126, 127, 128, 131, 68,
537 68, 68, 68, 109, 68, 133, 68, 71,
538 68, 68, 68, 68, 68, 68, 68, 108,
539 109, 110, 111, 112, 113, 114, 115, 68,
540 68, 68, 119, 120, 121, 68, 122, 123,
541 124, 68, 68, 68, 68, 68, 126, 127,
542 128, 131, 68, 68, 68, 68, 109, 68,
543 106, 107, 68, 71, 68, 68, 68, 68,
544 68, 68, 68, 108, 109, 110, 111, 112,
545 113, 114, 115, 116, 68, 118, 119, 120,
546 121, 68, 122, 123, 124, 68, 68, 68,
547 68, 125, 126, 127, 128, 129, 68, 68,
548 68, 68, 130, 68, 106, 99, 99, 99,
549 99, 99, 99, 99, 99, 99, 99, 99,
550 99, 100, 99, 106, 95, 95, 95, 95,
551 95, 95, 95, 95, 95, 95, 95, 95,
552 97, 95, 106, 68, 68, 68, 68, 68,
553 68, 68, 68, 68, 68, 68, 68, 71,
554 68, 68, 68, 68, 68, 68, 68, 68,
555 109, 110, 111, 112, 68, 68, 68, 68,
556 68, 68, 68, 68, 68, 68, 122, 123,
557 124, 68, 68, 68, 68, 68, 126, 127,
558 128, 131, 68, 106, 107, 68, 71, 68,
559 68, 68, 68, 68, 68, 68, 108, 109,
560 110, 111, 112, 113, 114, 115, 116, 117,
561 118, 119, 120, 121, 68, 122, 123, 124,
562 68, 68, 68, 68, 125, 126, 127, 128,
563 129, 68, 68, 68, 68, 130, 68, 5,
564 6, 134, 8, 134, 134, 134, 134, 134,
565 134, 134, 10, 11, 12, 13, 14, 15,
566 16, 17, 18, 20, 20, 21, 22, 23,
567 134, 24, 25, 26, 134, 134, 134, 134,
568 30, 31, 32, 33, 30, 134, 134, 134,
569 134, 36, 134, 5, 134, 134, 134, 134,
570 134, 134, 134, 134, 134, 134, 134, 134,
571 8, 134, 134, 134, 134, 134, 134, 134,
572 134, 11, 12, 13, 14, 134, 134, 134,
573 134, 134, 134, 134, 134, 134, 134, 24,
574 25, 26, 134, 134, 134, 134, 134, 31,
575 32, 33, 135, 134, 134, 134, 134, 11,
576 134, 8, 134, 134, 134, 134, 134, 134,
577 134, 134, 11, 12, 13, 14, 134, 134,
578 134, 134, 134, 134, 134, 134, 134, 134,
579 24, 25, 26, 134, 134, 134, 134, 134,
580 31, 32, 33, 135, 134, 8, 134, 134,
581 134, 134, 134, 134, 134, 134, 134, 12,
582 13, 14, 134, 134, 134, 134, 134, 134,
583 134, 134, 134, 134, 134, 134, 134, 134,
584 134, 134, 134, 134, 31, 32, 33, 134,
585 8, 134, 134, 134, 134, 134, 134, 134,
586 134, 134, 134, 13, 14, 134, 134, 134,
587 134, 134, 134, 134, 134, 134, 134, 134,
588 134, 134, 134, 134, 134, 134, 134, 31,
589 32, 33, 134, 8, 134, 134, 134, 134,
590 134, 134, 134, 134, 134, 134, 134, 14,
591 134, 134, 134, 134, 134, 134, 134, 134,
592 134, 134, 134, 134, 134, 134, 134, 134,
593 134, 134, 31, 32, 33, 134, 8, 134,
594 134, 134, 134, 134, 134, 134, 134, 134,
595 134, 134, 134, 134, 134, 134, 134, 134,
596 134, 134, 134, 134, 134, 134, 134, 134,
597 134, 134, 134, 134, 134, 31, 32, 134,
598 8, 134, 134, 134, 134, 134, 134, 134,
599 134, 134, 134, 134, 134, 134, 134, 134,
600 134, 134, 134, 134, 134, 134, 134, 134,
601 134, 134, 134, 134, 134, 134, 134, 134,
602 32, 134, 8, 134, 8, 134, 134, 134,
603 134, 134, 134, 134, 134, 134, 12, 13,
604 14, 134, 134, 134, 134, 134, 134, 134,
605 134, 134, 134, 24, 25, 26, 134, 134,
606 134, 134, 134, 31, 32, 33, 135, 134,
607 8, 134, 134, 134, 134, 134, 134, 134,
608 134, 134, 12, 13, 14, 134, 134, 134,
609 134, 134, 134, 134, 134, 134, 134, 134,
610 25, 26, 134, 134, 134, 134, 134, 31,
611 32, 33, 135, 134, 8, 134, 134, 134,
612 134, 134, 134, 134, 134, 134, 12, 13,
613 14, 134, 134, 134, 134, 134, 134, 134,
614 134, 134, 134, 134, 134, 26, 134, 134,
615 134, 134, 134, 31, 32, 33, 135, 134,
616 136, 134, 134, 134, 134, 134, 134, 134,
617 134, 134, 134, 134, 134, 8, 134, 8,
618 134, 134, 134, 134, 134, 134, 134, 134,
619 134, 12, 13, 14, 134, 134, 134, 134,
620 134, 134, 134, 134, 134, 134, 134, 134,
621 134, 134, 134, 134, 134, 134, 31, 32,
622 33, 135, 134, 8, 134, 134, 134, 134,
623 134, 134, 134, 10, 11, 12, 13, 14,
624 134, 134, 134, 134, 134, 134, 21, 22,
625 23, 134, 24, 25, 26, 134, 134, 134,
626 134, 134, 31, 32, 33, 135, 134, 134,
627 134, 134, 11, 134, 8, 134, 134, 134,
628 134, 134, 134, 134, 134, 11, 12, 13,
629 14, 134, 134, 134, 134, 134, 134, 21,
630 22, 23, 134, 24, 25, 26, 134, 134,
631 134, 134, 134, 31, 32, 33, 135, 134,
632 134, 134, 134, 11, 134, 8, 134, 134,
633 134, 134, 134, 134, 134, 134, 11, 12,
634 13, 14, 134, 134, 134, 134, 134, 134,
635 134, 22, 23, 134, 24, 25, 26, 134,
636 134, 134, 134, 134, 31, 32, 33, 135,
637 134, 134, 134, 134, 11, 134, 8, 134,
638 134, 134, 134, 134, 134, 134, 134, 11,
639 12, 13, 14, 134, 134, 134, 134, 134,
640 134, 134, 134, 23, 134, 24, 25, 26,
641 134, 134, 134, 134, 134, 31, 32, 33,
642 135, 134, 134, 134, 134, 11, 134, 137,
643 134, 8, 134, 134, 134, 134, 134, 134,
644 134, 10, 11, 12, 13, 14, 134, 16,
645 17, 134, 134, 134, 21, 22, 23, 134,
646 24, 25, 26, 134, 134, 134, 134, 134,
647 31, 32, 33, 135, 134, 134, 134, 134,
648 11, 134, 8, 134, 134, 134, 134, 134,
649 134, 134, 134, 11, 12, 13, 14, 134,
650 134, 134, 134, 134, 134, 134, 134, 134,
651 134, 24, 25, 26, 134, 134, 134, 134,
652 134, 31, 32, 33, 135, 134, 134, 134,
653 134, 11, 134, 137, 134, 8, 134, 134,
654 134, 134, 134, 134, 134, 10, 11, 12,
655 13, 14, 134, 134, 17, 134, 134, 134,
656 21, 22, 23, 134, 24, 25, 26, 134,
657 134, 134, 134, 134, 31, 32, 33, 135,
658 134, 134, 134, 134, 11, 134, 137, 134,
659 8, 134, 134, 134, 134, 134, 134, 134,
660 10, 11, 12, 13, 14, 134, 134, 134,
661 134, 134, 134, 21, 22, 23, 134, 24,
662 25, 26, 134, 134, 134, 134, 134, 31,
663 32, 33, 135, 134, 134, 134, 134, 11,
664 134, 137, 134, 8, 134, 134, 134, 134,
665 134, 134, 134, 10, 11, 12, 13, 14,
666 15, 16, 17, 134, 134, 134, 21, 22,
667 23, 134, 24, 25, 26, 134, 134, 134,
668 134, 134, 31, 32, 33, 135, 134, 134,
669 134, 134, 11, 134, 5, 6, 134, 8,
670 134, 134, 134, 134, 134, 134, 134, 10,
671 11, 12, 13, 14, 15, 16, 17, 18,
672 134, 20, 21, 22, 23, 134, 24, 25,
673 26, 134, 134, 134, 134, 30, 31, 32,
674 33, 30, 134, 134, 134, 134, 36, 134,
675 5, 134, 134, 134, 134, 134, 134, 134,
676 134, 134, 134, 134, 134, 8, 134, 5,
677 134, 134, 134, 134, 134, 134, 134, 134,
678 134, 134, 134, 134, 8, 134, 134, 134,
679 134, 134, 134, 134, 134, 11, 12, 13,
680 14, 134, 134, 134, 134, 134, 134, 134,
681 134, 134, 134, 24, 25, 26, 134, 134,
682 134, 134, 134, 31, 32, 33, 135, 134,
683 138, 134, 134, 134, 134, 134, 134, 134,
684 134, 134, 8, 134, 7, 8, 134, 1,
685 134, 134, 134, 1, 134, 134, 134, 134,
686 134, 5, 6, 7, 8, 134, 134, 134,
687 134, 134, 134, 134, 10, 11, 12, 13,
688 14, 15, 16, 17, 18, 19, 20, 21,
689 22, 23, 134, 24, 25, 26, 134, 27,
690 28, 134, 30, 31, 32, 33, 30, 134,
691 134, 134, 134, 36, 134, 5, 6, 134,
692 8, 134, 134, 134, 134, 134, 134, 134,
693 10, 11, 12, 13, 14, 15, 16, 17,
694 18, 19, 20, 21, 22, 23, 134, 24,
695 25, 26, 134, 134, 134, 134, 30, 31,
696 32, 33, 30, 134, 134, 134, 134, 36,
697 134, 8, 134, 134, 134, 134, 134, 134,
698 134, 134, 134, 134, 134, 134, 134, 134,
699 134, 134, 134, 134, 134, 134, 134, 134,
700 134, 134, 134, 134, 27, 28, 134, 8,
701 134, 134, 134, 134, 134, 134, 134, 134,
702 134, 134, 134, 134, 134, 134, 134, 134,
703 134, 134, 134, 134, 134, 134, 134, 134,
704 134, 134, 134, 28, 134, 1, 139, 139,
705 139, 1, 139, 141, 140, 140, 140, 140,
706 140, 140, 140, 140, 140, 140, 140, 140,
707 140, 140, 140, 140, 140, 140, 140, 140,
708 140, 140, 140, 140, 140, 140, 140, 140,
709 140, 140, 140, 140, 140, 140, 140, 142,
710 140, 34, 140, 141, 140, 140, 140, 140,
711 140, 140, 140, 140, 140, 140, 140, 140,
712 140, 140, 140, 140, 140, 140, 140, 140,
713 140, 140, 140, 140, 140, 140, 140, 140,
714 140, 140, 140, 140, 140, 140, 34, 142,
715 140, 142, 140, 141, 140, 140, 140, 140,
716 140, 140, 140, 140, 140, 140, 140, 140,
717 140, 140, 140, 140, 140, 140, 140, 140,
718 140, 140, 140, 140, 140, 140, 140, 140,
719 140, 140, 140, 140, 140, 140, 34, 140,
720 35, 140, 0
Behdad Esfahbod52c15b02019-05-13 14:10:28 -0700721};
722
Khaled Hosny5898a962021-09-14 07:09:50 +0200723static const char _use_syllable_machine_trans_targs[] = {
David Corbett09b9a1f2022-09-01 20:20:44 -0400724 1, 31, 0, 59, 61, 90, 91, 116,
725 0, 118, 104, 92, 93, 94, 95, 108,
726 110, 111, 112, 119, 113, 105, 106, 107,
727 99, 100, 101, 120, 121, 122, 114, 96,
728 97, 98, 123, 125, 115, 0, 2, 3,
729 0, 16, 4, 5, 6, 7, 20, 22,
730 23, 24, 28, 25, 17, 18, 19, 11,
731 12, 13, 29, 30, 26, 8, 9, 10,
732 27, 14, 15, 21, 0, 32, 33, 0,
733 46, 34, 35, 36, 37, 50, 52, 53,
734 54, 55, 47, 48, 49, 41, 42, 43,
735 56, 38, 39, 40, 57, 58, 44, 0,
736 45, 0, 51, 0, 0, 0, 60, 0,
737 0, 0, 62, 63, 76, 64, 65, 66,
738 67, 80, 82, 83, 84, 89, 85, 77,
739 78, 79, 71, 72, 73, 86, 68, 69,
740 70, 87, 88, 74, 75, 81, 0, 102,
741 103, 109, 117, 0, 0, 0, 124
Behdad Esfahbodabc82b42018-02-20 14:34:16 -0800742};
743
Khaled Hosny5898a962021-09-14 07:09:50 +0200744static const char _use_syllable_machine_trans_actions[] = {
Khaled Hosny5898a962021-09-14 07:09:50 +0200745 0, 0, 3, 0, 0, 0, 0, 0,
David Corbett09b9a1f2022-09-01 20:20:44 -0400746 4, 0, 0, 0, 0, 0, 0, 0,
Khaled Hosny5898a962021-09-14 07:09:50 +0200747 0, 0, 0, 0, 0, 0, 0, 0,
748 0, 0, 0, 0, 0, 0, 0, 0,
David Corbett09b9a1f2022-09-01 20:20:44 -0400749 0, 0, 0, 0, 0, 5, 0, 0,
750 6, 0, 0, 0, 0, 0, 0, 0,
David Corbettae193cd2021-10-08 21:58:07 -0400751 0, 0, 0, 0, 0, 0, 0, 0,
752 0, 0, 0, 0, 0, 0, 0, 0,
David Corbett09b9a1f2022-09-01 20:20:44 -0400753 0, 0, 0, 0, 7, 0, 0, 8,
David Corbett6e059a42022-03-04 19:18:40 -0500754 0, 0, 0, 0, 0, 0, 0, 0,
755 0, 0, 0, 0, 0, 0, 0, 0,
David Corbett09b9a1f2022-09-01 20:20:44 -0400756 0, 0, 0, 0, 0, 0, 0, 9,
757 0, 10, 0, 11, 12, 13, 0, 14,
758 15, 16, 0, 0, 0, 0, 0, 0,
759 0, 0, 0, 0, 0, 0, 0, 0,
760 0, 0, 0, 0, 0, 0, 0, 0,
761 0, 0, 0, 0, 0, 0, 17, 0,
762 0, 0, 0, 18, 19, 20, 0
David Corbettae193cd2021-10-08 21:58:07 -0400763};
764
765static const char _use_syllable_machine_to_state_actions[] = {
766 1, 0, 0, 0, 0, 0, 0, 0,
Khaled Hosny5898a962021-09-14 07:09:50 +0200767 0, 0, 0, 0, 0, 0, 0, 0,
768 0, 0, 0, 0, 0, 0, 0, 0,
769 0, 0, 0, 0, 0, 0, 0, 0,
770 0, 0, 0, 0, 0, 0, 0, 0,
David Corbettae193cd2021-10-08 21:58:07 -0400771 0, 0, 0, 0, 0, 0, 0, 0,
772 0, 0, 0, 0, 0, 0, 0, 0,
David Corbett6e059a42022-03-04 19:18:40 -0500773 0, 0, 0, 0, 0, 0, 0, 0,
774 0, 0, 0, 0, 0, 0, 0, 0,
775 0, 0, 0, 0, 0, 0, 0, 0,
776 0, 0, 0, 0, 0, 0, 0, 0,
777 0, 0, 0, 0, 0, 0, 0, 0,
778 0, 0, 0, 0, 0, 0, 0, 0,
David Corbett60598282022-06-25 11:33:44 -0400779 0, 0, 0, 0, 0, 0, 0, 0,
David Corbett09b9a1f2022-09-01 20:20:44 -0400780 0, 0, 0, 0, 0, 0, 0, 0,
781 0, 0, 0, 0, 0, 0
Behdad Esfahbodabc82b42018-02-20 14:34:16 -0800782};
783
Khaled Hosny5898a962021-09-14 07:09:50 +0200784static const char _use_syllable_machine_from_state_actions[] = {
David Corbettae193cd2021-10-08 21:58:07 -0400785 2, 0, 0, 0, 0, 0, 0, 0,
Khaled Hosny5898a962021-09-14 07:09:50 +0200786 0, 0, 0, 0, 0, 0, 0, 0,
787 0, 0, 0, 0, 0, 0, 0, 0,
788 0, 0, 0, 0, 0, 0, 0, 0,
789 0, 0, 0, 0, 0, 0, 0, 0,
790 0, 0, 0, 0, 0, 0, 0, 0,
791 0, 0, 0, 0, 0, 0, 0, 0,
David Corbett6e059a42022-03-04 19:18:40 -0500792 0, 0, 0, 0, 0, 0, 0, 0,
793 0, 0, 0, 0, 0, 0, 0, 0,
794 0, 0, 0, 0, 0, 0, 0, 0,
795 0, 0, 0, 0, 0, 0, 0, 0,
796 0, 0, 0, 0, 0, 0, 0, 0,
797 0, 0, 0, 0, 0, 0, 0, 0,
David Corbett60598282022-06-25 11:33:44 -0400798 0, 0, 0, 0, 0, 0, 0, 0,
David Corbett09b9a1f2022-09-01 20:20:44 -0400799 0, 0, 0, 0, 0, 0, 0, 0,
800 0, 0, 0, 0, 0, 0
Behdad Esfahbodabc82b42018-02-20 14:34:16 -0800801};
802
Khaled Hosny5898a962021-09-14 07:09:50 +0200803static const short _use_syllable_machine_eof_trans[] = {
David Corbett09b9a1f2022-09-01 20:20:44 -0400804 0, 38, 38, 38, 38, 38, 38, 38,
805 38, 38, 38, 38, 38, 38, 38, 38,
806 38, 38, 38, 38, 38, 38, 38, 38,
807 38, 38, 38, 38, 38, 38, 38, 69,
808 69, 69, 69, 69, 69, 69, 69, 69,
809 69, 69, 69, 69, 96, 69, 69, 69,
810 69, 69, 69, 69, 69, 69, 69, 69,
811 100, 96, 69, 102, 105, 69, 69, 69,
812 69, 69, 69, 69, 69, 69, 69, 69,
813 69, 69, 96, 69, 69, 69, 69, 69,
814 69, 69, 69, 69, 69, 69, 100, 96,
815 69, 69, 135, 135, 135, 135, 135, 135,
816 135, 135, 135, 135, 135, 135, 135, 135,
817 135, 135, 135, 135, 135, 135, 135, 135,
818 135, 135, 135, 135, 135, 135, 135, 135,
819 135, 135, 140, 141, 141, 141
Behdad Esfahbodabc82b42018-02-20 14:34:16 -0800820};
821
David Corbettae193cd2021-10-08 21:58:07 -0400822static const int use_syllable_machine_start = 0;
823static const int use_syllable_machine_first_final = 0;
Behdad Esfahbodabc82b42018-02-20 14:34:16 -0800824static const int use_syllable_machine_error = -1;
825
David Corbettae193cd2021-10-08 21:58:07 -0400826static const int use_syllable_machine_en_main = 0;
Behdad Esfahbodabc82b42018-02-20 14:34:16 -0800827
828
Behdad Esfahbod5bfb0b72022-06-03 02:56:41 -0600829#line 58 "hb-ot-shaper-use-machine.rl"
Behdad Esfahbodabc82b42018-02-20 14:34:16 -0800830
831
832
David Corbett60598282022-06-25 11:33:44 -0400833#line 182 "hb-ot-shaper-use-machine.rl"
Behdad Esfahbod8461ade2019-05-13 14:10:48 -0700834
835
Behdad Esfahbodabc82b42018-02-20 14:34:16 -0800836#define found_syllable(syllable_type) \
Khaled Hosny5898a962021-09-14 07:09:50 +0200837 HB_STMT_START { \
838 if (0) fprintf (stderr, "syllable %d..%d %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
839 for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
840 info[i].syllable() = (syllable_serial << 4) | syllable_type; \
841 syllable_serial++; \
842 if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
843 } HB_STMT_END
Behdad Esfahbodabc82b42018-02-20 14:34:16 -0800844
Behdad Esfahbodd9b167d2021-01-28 20:40:42 -0700845
846template <typename Iter>
847struct machine_index_t :
Khaled Hosny5898a962021-09-14 07:09:50 +0200848 hb_iter_with_fallback_t<machine_index_t<Iter>,
849 typename Iter::item_t>
Behdad Esfahbodd9b167d2021-01-28 20:40:42 -0700850{
Khaled Hosny5898a962021-09-14 07:09:50 +0200851 machine_index_t (const Iter& it) : it (it) {}
Behdad Esfahbod7af165d2022-02-12 21:25:24 -0600852 machine_index_t (const machine_index_t& o) : hb_iter_with_fallback_t<machine_index_t<Iter>,
853 typename Iter::item_t> (),
Behdad Esfahboda665e292022-03-23 17:30:25 -0600854 it (o.it), is_null (o.is_null) {}
Khaled Hosny5898a962021-09-14 07:09:50 +0200855
856 static constexpr bool is_random_access_iterator = Iter::is_random_access_iterator;
857 static constexpr bool is_sorted_iterator = Iter::is_sorted_iterator;
858
859 typename Iter::item_t __item__ () const { return *it; }
860 typename Iter::item_t __item_at__ (unsigned i) const { return it[i]; }
861 unsigned __len__ () const { return it.len (); }
862 void __next__ () { ++it; }
863 void __forward__ (unsigned n) { it += n; }
864 void __prev__ () { --it; }
865 void __rewind__ (unsigned n) { it -= n; }
Behdad Esfahboda665e292022-03-23 17:30:25 -0600866
Khaled Hosny5898a962021-09-14 07:09:50 +0200867 void operator = (unsigned n)
Behdad Esfahboda665e292022-03-23 17:30:25 -0600868 {
869 assert (n == 0);
870 is_null = true;
871 }
872 explicit operator bool () { return !is_null; }
873
874 void operator = (const machine_index_t& o)
875 {
876 is_null = o.is_null;
877 unsigned index = (*it).first;
878 unsigned n = (*o.it).first;
879 if (index < n) it += n - index; else if (index > n) it -= index - n;
880 }
881 bool operator == (const machine_index_t& o) const
882 { return is_null ? o.is_null : !o.is_null && (*it).first == (*o.it).first; }
Khaled Hosny5898a962021-09-14 07:09:50 +0200883 bool operator != (const machine_index_t& o) const { return !(*this == o); }
884
885 private:
886 Iter it;
Behdad Esfahboda665e292022-03-23 17:30:25 -0600887 bool is_null = false;
Behdad Esfahbodd9b167d2021-01-28 20:40:42 -0700888};
889struct
890{
Khaled Hosny5898a962021-09-14 07:09:50 +0200891 template <typename Iter,
892 hb_requires (hb_is_iterable (Iter))>
893 machine_index_t<hb_iter_type<Iter>>
894 operator () (Iter&& it) const
895 { return machine_index_t<hb_iter_type<Iter>> (hb_iter (it)); }
Behdad Esfahbodd9b167d2021-01-28 20:40:42 -0700896}
897HB_FUNCOBJ (machine_index);
898
899
900
David Corbett6a38ade2019-05-03 14:16:50 -0400901static bool
David Corbett8eaee2f2021-10-07 20:10:31 -0400902not_ccs_default_ignorable (const hb_glyph_info_t &i)
David Corbett854219e2022-03-05 10:46:31 -0500903{ return i.use_category() != USE(CGJ); }
David Corbett6a38ade2019-05-03 14:16:50 -0400904
Behdad Esfahbod3bb26532021-01-28 20:36:51 -0700905static inline void
Behdad Esfahbodd115a9e2019-07-02 14:42:45 -0700906find_syllables_use (hb_buffer_t *buffer)
Behdad Esfahbodabc82b42018-02-20 14:34:16 -0800907{
Khaled Hosny5898a962021-09-14 07:09:50 +0200908 hb_glyph_info_t *info = buffer->info;
909 auto p =
910 + hb_iter (info, buffer->len)
911 | hb_enumerate
David Corbett8eaee2f2021-10-07 20:10:31 -0400912 | hb_filter ([] (const hb_glyph_info_t &i) { return not_ccs_default_ignorable (i); },
Khaled Hosny5898a962021-09-14 07:09:50 +0200913 hb_second)
914 | hb_filter ([&] (const hb_pair_t<unsigned, const hb_glyph_info_t &> p)
915 {
916 if (p.second.use_category() == USE(ZWNJ))
917 for (unsigned i = p.first + 1; i < buffer->len; ++i)
David Corbett8eaee2f2021-10-07 20:10:31 -0400918 if (not_ccs_default_ignorable (info[i]))
Khaled Hosny5898a962021-09-14 07:09:50 +0200919 return !_hb_glyph_info_is_unicode_mark (&info[i]);
920 return true;
921 })
922 | hb_enumerate
923 | machine_index
924 ;
925 auto pe = p + p.len ();
926 auto eof = +pe;
927 auto ts = +p;
928 auto te = +p;
929 unsigned int act HB_UNUSED;
930 int cs;
931
David Corbett09b9a1f2022-09-01 20:20:44 -0400932#line 933 "hb-ot-shaper-use-machine.hh"
Behdad Esfahbodabc82b42018-02-20 14:34:16 -0800933 {
Khaled Hosny5898a962021-09-14 07:09:50 +0200934 cs = use_syllable_machine_start;
935 ts = 0;
936 te = 0;
937 act = 0;
Behdad Esfahbodabc82b42018-02-20 14:34:16 -0800938 }
Khaled Hosny5898a962021-09-14 07:09:50 +0200939
David Corbett60598282022-06-25 11:33:44 -0400940#line 282 "hb-ot-shaper-use-machine.rl"
Khaled Hosny5898a962021-09-14 07:09:50 +0200941
942
943 unsigned int syllable_serial = 1;
944
David Corbett09b9a1f2022-09-01 20:20:44 -0400945#line 946 "hb-ot-shaper-use-machine.hh"
Behdad Esfahbodabc82b42018-02-20 14:34:16 -0800946 {
Khaled Hosny5898a962021-09-14 07:09:50 +0200947 int _slen;
948 int _trans;
949 const unsigned char *_keys;
David Corbett60598282022-06-25 11:33:44 -0400950 const unsigned char *_inds;
Khaled Hosny5898a962021-09-14 07:09:50 +0200951 if ( p == pe )
952 goto _test_eof;
953_resume:
954 switch ( _use_syllable_machine_from_state_actions[cs] ) {
David Corbettae193cd2021-10-08 21:58:07 -0400955 case 2:
Behdad Esfahbod8461ade2019-05-13 14:10:48 -0700956#line 1 "NONE"
Khaled Hosny5898a962021-09-14 07:09:50 +0200957 {ts = p;}
958 break;
David Corbett09b9a1f2022-09-01 20:20:44 -0400959#line 960 "hb-ot-shaper-use-machine.hh"
Behdad Esfahbod8461ade2019-05-13 14:10:48 -0700960 }
Khaled Hosny5898a962021-09-14 07:09:50 +0200961
962 _keys = _use_syllable_machine_trans_keys + (cs<<1);
963 _inds = _use_syllable_machine_indicies + _use_syllable_machine_index_offsets[cs];
964
965 _slen = _use_syllable_machine_key_spans[cs];
966 _trans = _inds[ _slen > 0 && _keys[0] <=( (*p).second.second.use_category()) &&
967 ( (*p).second.second.use_category()) <= _keys[1] ?
968 ( (*p).second.second.use_category()) - _keys[0] : _slen ];
969
970_eof_trans:
971 cs = _use_syllable_machine_trans_targs[_trans];
972
973 if ( _use_syllable_machine_trans_actions[_trans] == 0 )
974 goto _again;
975
976 switch ( _use_syllable_machine_trans_actions[_trans] ) {
David Corbett09b9a1f2022-09-01 20:20:44 -0400977 case 12:
978#line 170 "hb-ot-shaper-use-machine.rl"
979 {te = p+1;{ found_syllable (use_virama_terminated_cluster); }}
980 break;
981 case 10:
982#line 171 "hb-ot-shaper-use-machine.rl"
983 {te = p+1;{ found_syllable (use_sakot_terminated_cluster); }}
984 break;
985 case 8:
David Corbett60598282022-06-25 11:33:44 -0400986#line 172 "hb-ot-shaper-use-machine.rl"
Khaled Hosny5898a962021-09-14 07:09:50 +0200987 {te = p+1;{ found_syllable (use_standard_cluster); }}
988 break;
David Corbett09b9a1f2022-09-01 20:20:44 -0400989 case 16:
990#line 173 "hb-ot-shaper-use-machine.rl"
991 {te = p+1;{ found_syllable (use_number_joiner_terminated_cluster); }}
992 break;
993 case 14:
994#line 174 "hb-ot-shaper-use-machine.rl"
995 {te = p+1;{ found_syllable (use_numeral_cluster); }}
996 break;
David Corbett6e059a42022-03-04 19:18:40 -0500997 case 6:
David Corbett60598282022-06-25 11:33:44 -0400998#line 175 "hb-ot-shaper-use-machine.rl"
David Corbett6e059a42022-03-04 19:18:40 -0500999 {te = p+1;{ found_syllable (use_symbol_cluster); }}
1000 break;
David Corbett09b9a1f2022-09-01 20:20:44 -04001001 case 20:
1002#line 176 "hb-ot-shaper-use-machine.rl"
1003 {te = p+1;{ found_syllable (use_hieroglyph_cluster); }}
1004 break;
David Corbettae193cd2021-10-08 21:58:07 -04001005 case 4:
David Corbett60598282022-06-25 11:33:44 -04001006#line 177 "hb-ot-shaper-use-machine.rl"
Behdad Esfahbod148283d2022-06-10 07:48:39 -06001007 {te = p+1;{ found_syllable (use_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
Khaled Hosny5898a962021-09-14 07:09:50 +02001008 break;
David Corbettae193cd2021-10-08 21:58:07 -04001009 case 3:
David Corbett60598282022-06-25 11:33:44 -04001010#line 178 "hb-ot-shaper-use-machine.rl"
Khaled Hosny5898a962021-09-14 07:09:50 +02001011 {te = p+1;{ found_syllable (use_non_cluster); }}
1012 break;
David Corbett49fb8f92022-03-13 15:01:11 -04001013 case 11:
David Corbett09b9a1f2022-09-01 20:20:44 -04001014#line 170 "hb-ot-shaper-use-machine.rl"
1015 {te = p;p--;{ found_syllable (use_virama_terminated_cluster); }}
1016 break;
1017 case 9:
David Corbett60598282022-06-25 11:33:44 -04001018#line 171 "hb-ot-shaper-use-machine.rl"
David Corbett6e059a42022-03-04 19:18:40 -05001019 {te = p;p--;{ found_syllable (use_sakot_terminated_cluster); }}
1020 break;
1021 case 7:
David Corbett60598282022-06-25 11:33:44 -04001022#line 172 "hb-ot-shaper-use-machine.rl"
David Corbett6e059a42022-03-04 19:18:40 -05001023 {te = p;p--;{ found_syllable (use_standard_cluster); }}
1024 break;
David Corbett09b9a1f2022-09-01 20:20:44 -04001025 case 15:
David Corbett60598282022-06-25 11:33:44 -04001026#line 173 "hb-ot-shaper-use-machine.rl"
David Corbett6e059a42022-03-04 19:18:40 -05001027 {te = p;p--;{ found_syllable (use_number_joiner_terminated_cluster); }}
1028 break;
David Corbett49fb8f92022-03-13 15:01:11 -04001029 case 13:
David Corbett60598282022-06-25 11:33:44 -04001030#line 174 "hb-ot-shaper-use-machine.rl"
Khaled Hosny5898a962021-09-14 07:09:50 +02001031 {te = p;p--;{ found_syllable (use_numeral_cluster); }}
1032 break;
David Corbettae193cd2021-10-08 21:58:07 -04001033 case 5:
David Corbett60598282022-06-25 11:33:44 -04001034#line 175 "hb-ot-shaper-use-machine.rl"
Khaled Hosny5898a962021-09-14 07:09:50 +02001035 {te = p;p--;{ found_syllable (use_symbol_cluster); }}
1036 break;
David Corbett09b9a1f2022-09-01 20:20:44 -04001037 case 19:
David Corbett60598282022-06-25 11:33:44 -04001038#line 176 "hb-ot-shaper-use-machine.rl"
David Corbett6e059a42022-03-04 19:18:40 -05001039 {te = p;p--;{ found_syllable (use_hieroglyph_cluster); }}
Khaled Hosny5898a962021-09-14 07:09:50 +02001040 break;
David Corbett09b9a1f2022-09-01 20:20:44 -04001041 case 17:
David Corbett60598282022-06-25 11:33:44 -04001042#line 177 "hb-ot-shaper-use-machine.rl"
Behdad Esfahbod148283d2022-06-10 07:48:39 -06001043 {te = p;p--;{ found_syllable (use_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
David Corbett6e059a42022-03-04 19:18:40 -05001044 break;
David Corbett09b9a1f2022-09-01 20:20:44 -04001045 case 18:
David Corbett60598282022-06-25 11:33:44 -04001046#line 178 "hb-ot-shaper-use-machine.rl"
Khaled Hosny5898a962021-09-14 07:09:50 +02001047 {te = p;p--;{ found_syllable (use_non_cluster); }}
1048 break;
David Corbett09b9a1f2022-09-01 20:20:44 -04001049#line 1050 "hb-ot-shaper-use-machine.hh"
Khaled Hosny5898a962021-09-14 07:09:50 +02001050 }
1051
1052_again:
1053 switch ( _use_syllable_machine_to_state_actions[cs] ) {
David Corbettae193cd2021-10-08 21:58:07 -04001054 case 1:
Khaled Hosny5898a962021-09-14 07:09:50 +02001055#line 1 "NONE"
1056 {ts = 0;}
1057 break;
David Corbett09b9a1f2022-09-01 20:20:44 -04001058#line 1059 "hb-ot-shaper-use-machine.hh"
Khaled Hosny5898a962021-09-14 07:09:50 +02001059 }
1060
1061 if ( ++p != pe )
1062 goto _resume;
1063 _test_eof: {}
1064 if ( p == eof )
1065 {
1066 if ( _use_syllable_machine_eof_trans[cs] > 0 ) {
1067 _trans = _use_syllable_machine_eof_trans[cs] - 1;
1068 goto _eof_trans;
1069 }
1070 }
1071
1072 }
1073
David Corbett60598282022-06-25 11:33:44 -04001074#line 287 "hb-ot-shaper-use-machine.rl"
Khaled Hosny5898a962021-09-14 07:09:50 +02001075
Behdad Esfahbodabc82b42018-02-20 14:34:16 -08001076}
1077
1078#undef found_syllable
1079
Behdad Esfahbod44be1e52022-06-03 02:54:33 -06001080#endif /* HB_OT_SHAPER_USE_MACHINE_HH */