1 /* Generated by Snowball 2.1.0 - https://snowballstem.org/ */
2
3 #include "header.h"
4
5 #ifdef __cplusplus
6 extern "C" {
7 #endif
8 extern int arabic_UTF_8_stem(struct SN_env * z);
9 #ifdef __cplusplus
10 }
11 #endif
12 static int r_Checks1(struct SN_env * z);
13 static int r_Normalize_pre(struct SN_env * z);
14 static int r_Normalize_post(struct SN_env * z);
15 static int r_Suffix_Verb_Step2c(struct SN_env * z);
16 static int r_Suffix_Verb_Step2b(struct SN_env * z);
17 static int r_Suffix_Verb_Step2a(struct SN_env * z);
18 static int r_Suffix_Verb_Step1(struct SN_env * z);
19 static int r_Suffix_Noun_Step3(struct SN_env * z);
20 static int r_Suffix_Noun_Step2c2(struct SN_env * z);
21 static int r_Suffix_Noun_Step2c1(struct SN_env * z);
22 static int r_Suffix_Noun_Step2b(struct SN_env * z);
23 static int r_Suffix_Noun_Step2a(struct SN_env * z);
24 static int r_Suffix_Noun_Step1b(struct SN_env * z);
25 static int r_Suffix_Noun_Step1a(struct SN_env * z);
26 static int r_Suffix_All_alef_maqsura(struct SN_env * z);
27 static int r_Prefix_Step4_Verb(struct SN_env * z);
28 static int r_Prefix_Step3_Verb(struct SN_env * z);
29 static int r_Prefix_Step3b_Noun(struct SN_env * z);
30 static int r_Prefix_Step3a_Noun(struct SN_env * z);
31 static int r_Prefix_Step2(struct SN_env * z);
32 static int r_Prefix_Step1(struct SN_env * z);
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36
37
38 extern struct SN_env * arabic_UTF_8_create_env(void);
39 extern void arabic_UTF_8_close_env(struct SN_env * z);
40
41
42 #ifdef __cplusplus
43 }
44 #endif
45 static const symbol s_0_0[2] = { 0xD9, 0x80 };
46 static const symbol s_0_1[2] = { 0xD9, 0x8B };
47 static const symbol s_0_2[2] = { 0xD9, 0x8C };
48 static const symbol s_0_3[2] = { 0xD9, 0x8D };
49 static const symbol s_0_4[2] = { 0xD9, 0x8E };
50 static const symbol s_0_5[2] = { 0xD9, 0x8F };
51 static const symbol s_0_6[2] = { 0xD9, 0x90 };
52 static const symbol s_0_7[2] = { 0xD9, 0x91 };
53 static const symbol s_0_8[2] = { 0xD9, 0x92 };
54 static const symbol s_0_9[2] = { 0xD9, 0xA0 };
55 static const symbol s_0_10[2] = { 0xD9, 0xA1 };
56 static const symbol s_0_11[2] = { 0xD9, 0xA2 };
57 static const symbol s_0_12[2] = { 0xD9, 0xA3 };
58 static const symbol s_0_13[2] = { 0xD9, 0xA4 };
59 static const symbol s_0_14[2] = { 0xD9, 0xA5 };
60 static const symbol s_0_15[2] = { 0xD9, 0xA6 };
61 static const symbol s_0_16[2] = { 0xD9, 0xA7 };
62 static const symbol s_0_17[2] = { 0xD9, 0xA8 };
63 static const symbol s_0_18[2] = { 0xD9, 0xA9 };
64 static const symbol s_0_19[3] = { 0xEF, 0xBA, 0x80 };
65 static const symbol s_0_20[3] = { 0xEF, 0xBA, 0x81 };
66 static const symbol s_0_21[3] = { 0xEF, 0xBA, 0x82 };
67 static const symbol s_0_22[3] = { 0xEF, 0xBA, 0x83 };
68 static const symbol s_0_23[3] = { 0xEF, 0xBA, 0x84 };
69 static const symbol s_0_24[3] = { 0xEF, 0xBA, 0x85 };
70 static const symbol s_0_25[3] = { 0xEF, 0xBA, 0x86 };
71 static const symbol s_0_26[3] = { 0xEF, 0xBA, 0x87 };
72 static const symbol s_0_27[3] = { 0xEF, 0xBA, 0x88 };
73 static const symbol s_0_28[3] = { 0xEF, 0xBA, 0x89 };
74 static const symbol s_0_29[3] = { 0xEF, 0xBA, 0x8A };
75 static const symbol s_0_30[3] = { 0xEF, 0xBA, 0x8B };
76 static const symbol s_0_31[3] = { 0xEF, 0xBA, 0x8C };
77 static const symbol s_0_32[3] = { 0xEF, 0xBA, 0x8D };
78 static const symbol s_0_33[3] = { 0xEF, 0xBA, 0x8E };
79 static const symbol s_0_34[3] = { 0xEF, 0xBA, 0x8F };
80 static const symbol s_0_35[3] = { 0xEF, 0xBA, 0x90 };
81 static const symbol s_0_36[3] = { 0xEF, 0xBA, 0x91 };
82 static const symbol s_0_37[3] = { 0xEF, 0xBA, 0x92 };
83 static const symbol s_0_38[3] = { 0xEF, 0xBA, 0x93 };
84 static const symbol s_0_39[3] = { 0xEF, 0xBA, 0x94 };
85 static const symbol s_0_40[3] = { 0xEF, 0xBA, 0x95 };
86 static const symbol s_0_41[3] = { 0xEF, 0xBA, 0x96 };
87 static const symbol s_0_42[3] = { 0xEF, 0xBA, 0x97 };
88 static const symbol s_0_43[3] = { 0xEF, 0xBA, 0x98 };
89 static const symbol s_0_44[3] = { 0xEF, 0xBA, 0x99 };
90 static const symbol s_0_45[3] = { 0xEF, 0xBA, 0x9A };
91 static const symbol s_0_46[3] = { 0xEF, 0xBA, 0x9B };
92 static const symbol s_0_47[3] = { 0xEF, 0xBA, 0x9C };
93 static const symbol s_0_48[3] = { 0xEF, 0xBA, 0x9D };
94 static const symbol s_0_49[3] = { 0xEF, 0xBA, 0x9E };
95 static const symbol s_0_50[3] = { 0xEF, 0xBA, 0x9F };
96 static const symbol s_0_51[3] = { 0xEF, 0xBA, 0xA0 };
97 static const symbol s_0_52[3] = { 0xEF, 0xBA, 0xA1 };
98 static const symbol s_0_53[3] = { 0xEF, 0xBA, 0xA2 };
99 static const symbol s_0_54[3] = { 0xEF, 0xBA, 0xA3 };
100 static const symbol s_0_55[3] = { 0xEF, 0xBA, 0xA4 };
101 static const symbol s_0_56[3] = { 0xEF, 0xBA, 0xA5 };
102 static const symbol s_0_57[3] = { 0xEF, 0xBA, 0xA6 };
103 static const symbol s_0_58[3] = { 0xEF, 0xBA, 0xA7 };
104 static const symbol s_0_59[3] = { 0xEF, 0xBA, 0xA8 };
105 static const symbol s_0_60[3] = { 0xEF, 0xBA, 0xA9 };
106 static const symbol s_0_61[3] = { 0xEF, 0xBA, 0xAA };
107 static const symbol s_0_62[3] = { 0xEF, 0xBA, 0xAB };
108 static const symbol s_0_63[3] = { 0xEF, 0xBA, 0xAC };
109 static const symbol s_0_64[3] = { 0xEF, 0xBA, 0xAD };
110 static const symbol s_0_65[3] = { 0xEF, 0xBA, 0xAE };
111 static const symbol s_0_66[3] = { 0xEF, 0xBA, 0xAF };
112 static const symbol s_0_67[3] = { 0xEF, 0xBA, 0xB0 };
113 static const symbol s_0_68[3] = { 0xEF, 0xBA, 0xB1 };
114 static const symbol s_0_69[3] = { 0xEF, 0xBA, 0xB2 };
115 static const symbol s_0_70[3] = { 0xEF, 0xBA, 0xB3 };
116 static const symbol s_0_71[3] = { 0xEF, 0xBA, 0xB4 };
117 static const symbol s_0_72[3] = { 0xEF, 0xBA, 0xB5 };
118 static const symbol s_0_73[3] = { 0xEF, 0xBA, 0xB6 };
119 static const symbol s_0_74[3] = { 0xEF, 0xBA, 0xB7 };
120 static const symbol s_0_75[3] = { 0xEF, 0xBA, 0xB8 };
121 static const symbol s_0_76[3] = { 0xEF, 0xBA, 0xB9 };
122 static const symbol s_0_77[3] = { 0xEF, 0xBA, 0xBA };
123 static const symbol s_0_78[3] = { 0xEF, 0xBA, 0xBB };
124 static const symbol s_0_79[3] = { 0xEF, 0xBA, 0xBC };
125 static const symbol s_0_80[3] = { 0xEF, 0xBA, 0xBD };
126 static const symbol s_0_81[3] = { 0xEF, 0xBA, 0xBE };
127 static const symbol s_0_82[3] = { 0xEF, 0xBA, 0xBF };
128 static const symbol s_0_83[3] = { 0xEF, 0xBB, 0x80 };
129 static const symbol s_0_84[3] = { 0xEF, 0xBB, 0x81 };
130 static const symbol s_0_85[3] = { 0xEF, 0xBB, 0x82 };
131 static const symbol s_0_86[3] = { 0xEF, 0xBB, 0x83 };
132 static const symbol s_0_87[3] = { 0xEF, 0xBB, 0x84 };
133 static const symbol s_0_88[3] = { 0xEF, 0xBB, 0x85 };
134 static const symbol s_0_89[3] = { 0xEF, 0xBB, 0x86 };
135 static const symbol s_0_90[3] = { 0xEF, 0xBB, 0x87 };
136 static const symbol s_0_91[3] = { 0xEF, 0xBB, 0x88 };
137 static const symbol s_0_92[3] = { 0xEF, 0xBB, 0x89 };
138 static const symbol s_0_93[3] = { 0xEF, 0xBB, 0x8A };
139 static const symbol s_0_94[3] = { 0xEF, 0xBB, 0x8B };
140 static const symbol s_0_95[3] = { 0xEF, 0xBB, 0x8C };
141 static const symbol s_0_96[3] = { 0xEF, 0xBB, 0x8D };
142 static const symbol s_0_97[3] = { 0xEF, 0xBB, 0x8E };
143 static const symbol s_0_98[3] = { 0xEF, 0xBB, 0x8F };
144 static const symbol s_0_99[3] = { 0xEF, 0xBB, 0x90 };
145 static const symbol s_0_100[3] = { 0xEF, 0xBB, 0x91 };
146 static const symbol s_0_101[3] = { 0xEF, 0xBB, 0x92 };
147 static const symbol s_0_102[3] = { 0xEF, 0xBB, 0x93 };
148 static const symbol s_0_103[3] = { 0xEF, 0xBB, 0x94 };
149 static const symbol s_0_104[3] = { 0xEF, 0xBB, 0x95 };
150 static const symbol s_0_105[3] = { 0xEF, 0xBB, 0x96 };
151 static const symbol s_0_106[3] = { 0xEF, 0xBB, 0x97 };
152 static const symbol s_0_107[3] = { 0xEF, 0xBB, 0x98 };
153 static const symbol s_0_108[3] = { 0xEF, 0xBB, 0x99 };
154 static const symbol s_0_109[3] = { 0xEF, 0xBB, 0x9A };
155 static const symbol s_0_110[3] = { 0xEF, 0xBB, 0x9B };
156 static const symbol s_0_111[3] = { 0xEF, 0xBB, 0x9C };
157 static const symbol s_0_112[3] = { 0xEF, 0xBB, 0x9D };
158 static const symbol s_0_113[3] = { 0xEF, 0xBB, 0x9E };
159 static const symbol s_0_114[3] = { 0xEF, 0xBB, 0x9F };
160 static const symbol s_0_115[3] = { 0xEF, 0xBB, 0xA0 };
161 static const symbol s_0_116[3] = { 0xEF, 0xBB, 0xA1 };
162 static const symbol s_0_117[3] = { 0xEF, 0xBB, 0xA2 };
163 static const symbol s_0_118[3] = { 0xEF, 0xBB, 0xA3 };
164 static const symbol s_0_119[3] = { 0xEF, 0xBB, 0xA4 };
165 static const symbol s_0_120[3] = { 0xEF, 0xBB, 0xA5 };
166 static const symbol s_0_121[3] = { 0xEF, 0xBB, 0xA6 };
167 static const symbol s_0_122[3] = { 0xEF, 0xBB, 0xA7 };
168 static const symbol s_0_123[3] = { 0xEF, 0xBB, 0xA8 };
169 static const symbol s_0_124[3] = { 0xEF, 0xBB, 0xA9 };
170 static const symbol s_0_125[3] = { 0xEF, 0xBB, 0xAA };
171 static const symbol s_0_126[3] = { 0xEF, 0xBB, 0xAB };
172 static const symbol s_0_127[3] = { 0xEF, 0xBB, 0xAC };
173 static const symbol s_0_128[3] = { 0xEF, 0xBB, 0xAD };
174 static const symbol s_0_129[3] = { 0xEF, 0xBB, 0xAE };
175 static const symbol s_0_130[3] = { 0xEF, 0xBB, 0xAF };
176 static const symbol s_0_131[3] = { 0xEF, 0xBB, 0xB0 };
177 static const symbol s_0_132[3] = { 0xEF, 0xBB, 0xB1 };
178 static const symbol s_0_133[3] = { 0xEF, 0xBB, 0xB2 };
179 static const symbol s_0_134[3] = { 0xEF, 0xBB, 0xB3 };
180 static const symbol s_0_135[3] = { 0xEF, 0xBB, 0xB4 };
181 static const symbol s_0_136[3] = { 0xEF, 0xBB, 0xB5 };
182 static const symbol s_0_137[3] = { 0xEF, 0xBB, 0xB6 };
183 static const symbol s_0_138[3] = { 0xEF, 0xBB, 0xB7 };
184 static const symbol s_0_139[3] = { 0xEF, 0xBB, 0xB8 };
185 static const symbol s_0_140[3] = { 0xEF, 0xBB, 0xB9 };
186 static const symbol s_0_141[3] = { 0xEF, 0xBB, 0xBA };
187 static const symbol s_0_142[3] = { 0xEF, 0xBB, 0xBB };
188 static const symbol s_0_143[3] = { 0xEF, 0xBB, 0xBC };
189
190 static const struct among a_0[144] =
191 {
192 { 2, s_0_0, -1, 1, 0},
193 { 2, s_0_1, -1, 1, 0},
194 { 2, s_0_2, -1, 1, 0},
195 { 2, s_0_3, -1, 1, 0},
196 { 2, s_0_4, -1, 1, 0},
197 { 2, s_0_5, -1, 1, 0},
198 { 2, s_0_6, -1, 1, 0},
199 { 2, s_0_7, -1, 1, 0},
200 { 2, s_0_8, -1, 1, 0},
201 { 2, s_0_9, -1, 2, 0},
202 { 2, s_0_10, -1, 3, 0},
203 { 2, s_0_11, -1, 4, 0},
204 { 2, s_0_12, -1, 5, 0},
205 { 2, s_0_13, -1, 6, 0},
206 { 2, s_0_14, -1, 7, 0},
207 { 2, s_0_15, -1, 8, 0},
208 { 2, s_0_16, -1, 9, 0},
209 { 2, s_0_17, -1, 10, 0},
210 { 2, s_0_18, -1, 11, 0},
211 { 3, s_0_19, -1, 12, 0},
212 { 3, s_0_20, -1, 16, 0},
213 { 3, s_0_21, -1, 16, 0},
214 { 3, s_0_22, -1, 13, 0},
215 { 3, s_0_23, -1, 13, 0},
216 { 3, s_0_24, -1, 17, 0},
217 { 3, s_0_25, -1, 17, 0},
218 { 3, s_0_26, -1, 14, 0},
219 { 3, s_0_27, -1, 14, 0},
220 { 3, s_0_28, -1, 15, 0},
221 { 3, s_0_29, -1, 15, 0},
222 { 3, s_0_30, -1, 15, 0},
223 { 3, s_0_31, -1, 15, 0},
224 { 3, s_0_32, -1, 18, 0},
225 { 3, s_0_33, -1, 18, 0},
226 { 3, s_0_34, -1, 19, 0},
227 { 3, s_0_35, -1, 19, 0},
228 { 3, s_0_36, -1, 19, 0},
229 { 3, s_0_37, -1, 19, 0},
230 { 3, s_0_38, -1, 20, 0},
231 { 3, s_0_39, -1, 20, 0},
232 { 3, s_0_40, -1, 21, 0},
233 { 3, s_0_41, -1, 21, 0},
234 { 3, s_0_42, -1, 21, 0},
235 { 3, s_0_43, -1, 21, 0},
236 { 3, s_0_44, -1, 22, 0},
237 { 3, s_0_45, -1, 22, 0},
238 { 3, s_0_46, -1, 22, 0},
239 { 3, s_0_47, -1, 22, 0},
240 { 3, s_0_48, -1, 23, 0},
241 { 3, s_0_49, -1, 23, 0},
242 { 3, s_0_50, -1, 23, 0},
243 { 3, s_0_51, -1, 23, 0},
244 { 3, s_0_52, -1, 24, 0},
245 { 3, s_0_53, -1, 24, 0},
246 { 3, s_0_54, -1, 24, 0},
247 { 3, s_0_55, -1, 24, 0},
248 { 3, s_0_56, -1, 25, 0},
249 { 3, s_0_57, -1, 25, 0},
250 { 3, s_0_58, -1, 25, 0},
251 { 3, s_0_59, -1, 25, 0},
252 { 3, s_0_60, -1, 26, 0},
253 { 3, s_0_61, -1, 26, 0},
254 { 3, s_0_62, -1, 27, 0},
255 { 3, s_0_63, -1, 27, 0},
256 { 3, s_0_64, -1, 28, 0},
257 { 3, s_0_65, -1, 28, 0},
258 { 3, s_0_66, -1, 29, 0},
259 { 3, s_0_67, -1, 29, 0},
260 { 3, s_0_68, -1, 30, 0},
261 { 3, s_0_69, -1, 30, 0},
262 { 3, s_0_70, -1, 30, 0},
263 { 3, s_0_71, -1, 30, 0},
264 { 3, s_0_72, -1, 31, 0},
265 { 3, s_0_73, -1, 31, 0},
266 { 3, s_0_74, -1, 31, 0},
267 { 3, s_0_75, -1, 31, 0},
268 { 3, s_0_76, -1, 32, 0},
269 { 3, s_0_77, -1, 32, 0},
270 { 3, s_0_78, -1, 32, 0},
271 { 3, s_0_79, -1, 32, 0},
272 { 3, s_0_80, -1, 33, 0},
273 { 3, s_0_81, -1, 33, 0},
274 { 3, s_0_82, -1, 33, 0},
275 { 3, s_0_83, -1, 33, 0},
276 { 3, s_0_84, -1, 34, 0},
277 { 3, s_0_85, -1, 34, 0},
278 { 3, s_0_86, -1, 34, 0},
279 { 3, s_0_87, -1, 34, 0},
280 { 3, s_0_88, -1, 35, 0},
281 { 3, s_0_89, -1, 35, 0},
282 { 3, s_0_90, -1, 35, 0},
283 { 3, s_0_91, -1, 35, 0},
284 { 3, s_0_92, -1, 36, 0},
285 { 3, s_0_93, -1, 36, 0},
286 { 3, s_0_94, -1, 36, 0},
287 { 3, s_0_95, -1, 36, 0},
288 { 3, s_0_96, -1, 37, 0},
289 { 3, s_0_97, -1, 37, 0},
290 { 3, s_0_98, -1, 37, 0},
291 { 3, s_0_99, -1, 37, 0},
292 { 3, s_0_100, -1, 38, 0},
293 { 3, s_0_101, -1, 38, 0},
294 { 3, s_0_102, -1, 38, 0},
295 { 3, s_0_103, -1, 38, 0},
296 { 3, s_0_104, -1, 39, 0},
297 { 3, s_0_105, -1, 39, 0},
298 { 3, s_0_106, -1, 39, 0},
299 { 3, s_0_107, -1, 39, 0},
300 { 3, s_0_108, -1, 40, 0},
301 { 3, s_0_109, -1, 40, 0},
302 { 3, s_0_110, -1, 40, 0},
303 { 3, s_0_111, -1, 40, 0},
304 { 3, s_0_112, -1, 41, 0},
305 { 3, s_0_113, -1, 41, 0},
306 { 3, s_0_114, -1, 41, 0},
307 { 3, s_0_115, -1, 41, 0},
308 { 3, s_0_116, -1, 42, 0},
309 { 3, s_0_117, -1, 42, 0},
310 { 3, s_0_118, -1, 42, 0},
311 { 3, s_0_119, -1, 42, 0},
312 { 3, s_0_120, -1, 43, 0},
313 { 3, s_0_121, -1, 43, 0},
314 { 3, s_0_122, -1, 43, 0},
315 { 3, s_0_123, -1, 43, 0},
316 { 3, s_0_124, -1, 44, 0},
317 { 3, s_0_125, -1, 44, 0},
318 { 3, s_0_126, -1, 44, 0},
319 { 3, s_0_127, -1, 44, 0},
320 { 3, s_0_128, -1, 45, 0},
321 { 3, s_0_129, -1, 45, 0},
322 { 3, s_0_130, -1, 46, 0},
323 { 3, s_0_131, -1, 46, 0},
324 { 3, s_0_132, -1, 47, 0},
325 { 3, s_0_133, -1, 47, 0},
326 { 3, s_0_134, -1, 47, 0},
327 { 3, s_0_135, -1, 47, 0},
328 { 3, s_0_136, -1, 51, 0},
329 { 3, s_0_137, -1, 51, 0},
330 { 3, s_0_138, -1, 49, 0},
331 { 3, s_0_139, -1, 49, 0},
332 { 3, s_0_140, -1, 50, 0},
333 { 3, s_0_141, -1, 50, 0},
334 { 3, s_0_142, -1, 48, 0},
335 { 3, s_0_143, -1, 48, 0}
336 };
337
338 static const symbol s_1_0[2] = { 0xD8, 0xA2 };
339 static const symbol s_1_1[2] = { 0xD8, 0xA3 };
340 static const symbol s_1_2[2] = { 0xD8, 0xA4 };
341 static const symbol s_1_3[2] = { 0xD8, 0xA5 };
342 static const symbol s_1_4[2] = { 0xD8, 0xA6 };
343
344 static const struct among a_1[5] =
345 {
346 { 2, s_1_0, -1, 1, 0},
347 { 2, s_1_1, -1, 1, 0},
348 { 2, s_1_2, -1, 1, 0},
349 { 2, s_1_3, -1, 1, 0},
350 { 2, s_1_4, -1, 1, 0}
351 };
352
353 static const symbol s_2_0[2] = { 0xD8, 0xA2 };
354 static const symbol s_2_1[2] = { 0xD8, 0xA3 };
355 static const symbol s_2_2[2] = { 0xD8, 0xA4 };
356 static const symbol s_2_3[2] = { 0xD8, 0xA5 };
357 static const symbol s_2_4[2] = { 0xD8, 0xA6 };
358
359 static const struct among a_2[5] =
360 {
361 { 2, s_2_0, -1, 1, 0},
362 { 2, s_2_1, -1, 1, 0},
363 { 2, s_2_2, -1, 2, 0},
364 { 2, s_2_3, -1, 1, 0},
365 { 2, s_2_4, -1, 3, 0}
366 };
367
368 static const symbol s_3_0[4] = { 0xD8, 0xA7, 0xD9, 0x84 };
369 static const symbol s_3_1[6] = { 0xD8, 0xA8, 0xD8, 0xA7, 0xD9, 0x84 };
370 static const symbol s_3_2[6] = { 0xD9, 0x83, 0xD8, 0xA7, 0xD9, 0x84 };
371 static const symbol s_3_3[4] = { 0xD9, 0x84, 0xD9, 0x84 };
372
373 static const struct among a_3[4] =
374 {
375 { 4, s_3_0, -1, 2, 0},
376 { 6, s_3_1, -1, 1, 0},
377 { 6, s_3_2, -1, 1, 0},
378 { 4, s_3_3, -1, 2, 0}
379 };
380
381 static const symbol s_4_0[4] = { 0xD8, 0xA3, 0xD8, 0xA2 };
382 static const symbol s_4_1[4] = { 0xD8, 0xA3, 0xD8, 0xA3 };
383 static const symbol s_4_2[4] = { 0xD8, 0xA3, 0xD8, 0xA4 };
384 static const symbol s_4_3[4] = { 0xD8, 0xA3, 0xD8, 0xA5 };
385 static const symbol s_4_4[4] = { 0xD8, 0xA3, 0xD8, 0xA7 };
386
387 static const struct among a_4[5] =
388 {
389 { 4, s_4_0, -1, 2, 0},
390 { 4, s_4_1, -1, 1, 0},
391 { 4, s_4_2, -1, 1, 0},
392 { 4, s_4_3, -1, 4, 0},
393 { 4, s_4_4, -1, 3, 0}
394 };
395
396 static const symbol s_5_0[2] = { 0xD9, 0x81 };
397 static const symbol s_5_1[2] = { 0xD9, 0x88 };
398
399 static const struct among a_5[2] =
400 {
401 { 2, s_5_0, -1, 1, 0},
402 { 2, s_5_1, -1, 1, 0}
403 };
404
405 static const symbol s_6_0[4] = { 0xD8, 0xA7, 0xD9, 0x84 };
406 static const symbol s_6_1[6] = { 0xD8, 0xA8, 0xD8, 0xA7, 0xD9, 0x84 };
407 static const symbol s_6_2[6] = { 0xD9, 0x83, 0xD8, 0xA7, 0xD9, 0x84 };
408 static const symbol s_6_3[4] = { 0xD9, 0x84, 0xD9, 0x84 };
409
410 static const struct among a_6[4] =
411 {
412 { 4, s_6_0, -1, 2, 0},
413 { 6, s_6_1, -1, 1, 0},
414 { 6, s_6_2, -1, 1, 0},
415 { 4, s_6_3, -1, 2, 0}
416 };
417
418 static const symbol s_7_0[2] = { 0xD8, 0xA8 };
419 static const symbol s_7_1[4] = { 0xD8, 0xA8, 0xD8, 0xA8 };
420 static const symbol s_7_2[4] = { 0xD9, 0x83, 0xD9, 0x83 };
421
422 static const struct among a_7[3] =
423 {
424 { 2, s_7_0, -1, 1, 0},
425 { 4, s_7_1, 0, 2, 0},
426 { 4, s_7_2, -1, 3, 0}
427 };
428
429 static const symbol s_8_0[4] = { 0xD8, 0xB3, 0xD8, 0xA3 };
430 static const symbol s_8_1[4] = { 0xD8, 0xB3, 0xD8, 0xAA };
431 static const symbol s_8_2[4] = { 0xD8, 0xB3, 0xD9, 0x86 };
432 static const symbol s_8_3[4] = { 0xD8, 0xB3, 0xD9, 0x8A };
433
434 static const struct among a_8[4] =
435 {
436 { 4, s_8_0, -1, 4, 0},
437 { 4, s_8_1, -1, 2, 0},
438 { 4, s_8_2, -1, 3, 0},
439 { 4, s_8_3, -1, 1, 0}
440 };
441
442 static const symbol s_9_0[6] = { 0xD8, 0xAA, 0xD8, 0xB3, 0xD8, 0xAA };
443 static const symbol s_9_1[6] = { 0xD9, 0x86, 0xD8, 0xB3, 0xD8, 0xAA };
444 static const symbol s_9_2[6] = { 0xD9, 0x8A, 0xD8, 0xB3, 0xD8, 0xAA };
445
446 static const struct among a_9[3] =
447 {
448 { 6, s_9_0, -1, 1, 0},
449 { 6, s_9_1, -1, 1, 0},
450 { 6, s_9_2, -1, 1, 0}
451 };
452
453 static const symbol s_10_0[2] = { 0xD9, 0x83 };
454 static const symbol s_10_1[4] = { 0xD9, 0x83, 0xD9, 0x85 };
455 static const symbol s_10_2[4] = { 0xD9, 0x87, 0xD9, 0x85 };
456 static const symbol s_10_3[4] = { 0xD9, 0x87, 0xD9, 0x86 };
457 static const symbol s_10_4[2] = { 0xD9, 0x87 };
458 static const symbol s_10_5[2] = { 0xD9, 0x8A };
459 static const symbol s_10_6[6] = { 0xD9, 0x83, 0xD9, 0x85, 0xD8, 0xA7 };
460 static const symbol s_10_7[6] = { 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xA7 };
461 static const symbol s_10_8[4] = { 0xD9, 0x86, 0xD8, 0xA7 };
462 static const symbol s_10_9[4] = { 0xD9, 0x87, 0xD8, 0xA7 };
463
464 static const struct among a_10[10] =
465 {
466 { 2, s_10_0, -1, 1, 0},
467 { 4, s_10_1, -1, 2, 0},
468 { 4, s_10_2, -1, 2, 0},
469 { 4, s_10_3, -1, 2, 0},
470 { 2, s_10_4, -1, 1, 0},
471 { 2, s_10_5, -1, 1, 0},
472 { 6, s_10_6, -1, 3, 0},
473 { 6, s_10_7, -1, 3, 0},
474 { 4, s_10_8, -1, 2, 0},
475 { 4, s_10_9, -1, 2, 0}
476 };
477
478 static const symbol s_11_0[2] = { 0xD9, 0x86 };
479
480 static const struct among a_11[1] =
481 {
482 { 2, s_11_0, -1, 1, 0}
483 };
484
485 static const symbol s_12_0[2] = { 0xD9, 0x88 };
486 static const symbol s_12_1[2] = { 0xD9, 0x8A };
487 static const symbol s_12_2[2] = { 0xD8, 0xA7 };
488
489 static const struct among a_12[3] =
490 {
491 { 2, s_12_0, -1, 1, 0},
492 { 2, s_12_1, -1, 1, 0},
493 { 2, s_12_2, -1, 1, 0}
494 };
495
496 static const symbol s_13_0[4] = { 0xD8, 0xA7, 0xD8, 0xAA };
497
498 static const struct among a_13[1] =
499 {
500 { 4, s_13_0, -1, 1, 0}
501 };
502
503 static const symbol s_14_0[2] = { 0xD8, 0xAA };
504
505 static const struct among a_14[1] =
506 {
507 { 2, s_14_0, -1, 1, 0}
508 };
509
510 static const symbol s_15_0[2] = { 0xD8, 0xA9 };
511
512 static const struct among a_15[1] =
513 {
514 { 2, s_15_0, -1, 1, 0}
515 };
516
517 static const symbol s_16_0[2] = { 0xD9, 0x8A };
518
519 static const struct among a_16[1] =
520 {
521 { 2, s_16_0, -1, 1, 0}
522 };
523
524 static const symbol s_17_0[2] = { 0xD9, 0x83 };
525 static const symbol s_17_1[4] = { 0xD9, 0x83, 0xD9, 0x85 };
526 static const symbol s_17_2[4] = { 0xD9, 0x87, 0xD9, 0x85 };
527 static const symbol s_17_3[4] = { 0xD9, 0x83, 0xD9, 0x86 };
528 static const symbol s_17_4[4] = { 0xD9, 0x87, 0xD9, 0x86 };
529 static const symbol s_17_5[2] = { 0xD9, 0x87 };
530 static const symbol s_17_6[6] = { 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x88 };
531 static const symbol s_17_7[4] = { 0xD9, 0x86, 0xD9, 0x8A };
532 static const symbol s_17_8[6] = { 0xD9, 0x83, 0xD9, 0x85, 0xD8, 0xA7 };
533 static const symbol s_17_9[6] = { 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xA7 };
534 static const symbol s_17_10[4] = { 0xD9, 0x86, 0xD8, 0xA7 };
535 static const symbol s_17_11[4] = { 0xD9, 0x87, 0xD8, 0xA7 };
536
537 static const struct among a_17[12] =
538 {
539 { 2, s_17_0, -1, 1, 0},
540 { 4, s_17_1, -1, 2, 0},
541 { 4, s_17_2, -1, 2, 0},
542 { 4, s_17_3, -1, 2, 0},
543 { 4, s_17_4, -1, 2, 0},
544 { 2, s_17_5, -1, 1, 0},
545 { 6, s_17_6, -1, 3, 0},
546 { 4, s_17_7, -1, 2, 0},
547 { 6, s_17_8, -1, 3, 0},
548 { 6, s_17_9, -1, 3, 0},
549 { 4, s_17_10, -1, 2, 0},
550 { 4, s_17_11, -1, 2, 0}
551 };
552
553 static const symbol s_18_0[2] = { 0xD9, 0x86 };
554 static const symbol s_18_1[4] = { 0xD9, 0x88, 0xD9, 0x86 };
555 static const symbol s_18_2[4] = { 0xD9, 0x8A, 0xD9, 0x86 };
556 static const symbol s_18_3[4] = { 0xD8, 0xA7, 0xD9, 0x86 };
557 static const symbol s_18_4[4] = { 0xD8, 0xAA, 0xD9, 0x86 };
558 static const symbol s_18_5[2] = { 0xD9, 0x8A };
559 static const symbol s_18_6[2] = { 0xD8, 0xA7 };
560 static const symbol s_18_7[6] = { 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xA7 };
561 static const symbol s_18_8[4] = { 0xD9, 0x86, 0xD8, 0xA7 };
562 static const symbol s_18_9[4] = { 0xD8, 0xAA, 0xD8, 0xA7 };
563 static const symbol s_18_10[2] = { 0xD8, 0xAA };
564
565 static const struct among a_18[11] =
566 {
567 { 2, s_18_0, -1, 1, 0},
568 { 4, s_18_1, 0, 3, 0},
569 { 4, s_18_2, 0, 3, 0},
570 { 4, s_18_3, 0, 3, 0},
571 { 4, s_18_4, 0, 2, 0},
572 { 2, s_18_5, -1, 1, 0},
573 { 2, s_18_6, -1, 1, 0},
574 { 6, s_18_7, 6, 4, 0},
575 { 4, s_18_8, 6, 2, 0},
576 { 4, s_18_9, 6, 2, 0},
577 { 2, s_18_10, -1, 1, 0}
578 };
579
580 static const symbol s_19_0[4] = { 0xD8, 0xAA, 0xD9, 0x85 };
581 static const symbol s_19_1[4] = { 0xD9, 0x88, 0xD8, 0xA7 };
582
583 static const struct among a_19[2] =
584 {
585 { 4, s_19_0, -1, 1, 0},
586 { 4, s_19_1, -1, 1, 0}
587 };
588
589 static const symbol s_20_0[2] = { 0xD9, 0x88 };
590 static const symbol s_20_1[6] = { 0xD8, 0xAA, 0xD9, 0x85, 0xD9, 0x88 };
591
592 static const struct among a_20[2] =
593 {
594 { 2, s_20_0, -1, 1, 0},
595 { 6, s_20_1, 0, 2, 0}
596 };
597
598 static const symbol s_21_0[2] = { 0xD9, 0x89 };
599
600 static const struct among a_21[1] =
601 {
602 { 2, s_21_0, -1, 1, 0}
603 };
604
605 static const symbol s_0[] = { '0' };
606 static const symbol s_1[] = { '1' };
607 static const symbol s_2[] = { '2' };
608 static const symbol s_3[] = { '3' };
609 static const symbol s_4[] = { '4' };
610 static const symbol s_5[] = { '5' };
611 static const symbol s_6[] = { '6' };
612 static const symbol s_7[] = { '7' };
613 static const symbol s_8[] = { '8' };
614 static const symbol s_9[] = { '9' };
615 static const symbol s_10[] = { 0xD8, 0xA1 };
616 static const symbol s_11[] = { 0xD8, 0xA3 };
617 static const symbol s_12[] = { 0xD8, 0xA5 };
618 static const symbol s_13[] = { 0xD8, 0xA6 };
619 static const symbol s_14[] = { 0xD8, 0xA2 };
620 static const symbol s_15[] = { 0xD8, 0xA4 };
621 static const symbol s_16[] = { 0xD8, 0xA7 };
622 static const symbol s_17[] = { 0xD8, 0xA8 };
623 static const symbol s_18[] = { 0xD8, 0xA9 };
624 static const symbol s_19[] = { 0xD8, 0xAA };
625 static const symbol s_20[] = { 0xD8, 0xAB };
626 static const symbol s_21[] = { 0xD8, 0xAC };
627 static const symbol s_22[] = { 0xD8, 0xAD };
628 static const symbol s_23[] = { 0xD8, 0xAE };
629 static const symbol s_24[] = { 0xD8, 0xAF };
630 static const symbol s_25[] = { 0xD8, 0xB0 };
631 static const symbol s_26[] = { 0xD8, 0xB1 };
632 static const symbol s_27[] = { 0xD8, 0xB2 };
633 static const symbol s_28[] = { 0xD8, 0xB3 };
634 static const symbol s_29[] = { 0xD8, 0xB4 };
635 static const symbol s_30[] = { 0xD8, 0xB5 };
636 static const symbol s_31[] = { 0xD8, 0xB6 };
637 static const symbol s_32[] = { 0xD8, 0xB7 };
638 static const symbol s_33[] = { 0xD8, 0xB8 };
639 static const symbol s_34[] = { 0xD8, 0xB9 };
640 static const symbol s_35[] = { 0xD8, 0xBA };
641 static const symbol s_36[] = { 0xD9, 0x81 };
642 static const symbol s_37[] = { 0xD9, 0x82 };
643 static const symbol s_38[] = { 0xD9, 0x83 };
644 static const symbol s_39[] = { 0xD9, 0x84 };
645 static const symbol s_40[] = { 0xD9, 0x85 };
646 static const symbol s_41[] = { 0xD9, 0x86 };
647 static const symbol s_42[] = { 0xD9, 0x87 };
648 static const symbol s_43[] = { 0xD9, 0x88 };
649 static const symbol s_44[] = { 0xD9, 0x89 };
650 static const symbol s_45[] = { 0xD9, 0x8A };
651 static const symbol s_46[] = { 0xD9, 0x84, 0xD8, 0xA7 };
652 static const symbol s_47[] = { 0xD9, 0x84, 0xD8, 0xA3 };
653 static const symbol s_48[] = { 0xD9, 0x84, 0xD8, 0xA5 };
654 static const symbol s_49[] = { 0xD9, 0x84, 0xD8, 0xA2 };
655 static const symbol s_50[] = { 0xD8, 0xA1 };
656 static const symbol s_51[] = { 0xD8, 0xA7 };
657 static const symbol s_52[] = { 0xD9, 0x88 };
658 static const symbol s_53[] = { 0xD9, 0x8A };
659 static const symbol s_54[] = { 0xD8, 0xA3 };
660 static const symbol s_55[] = { 0xD8, 0xA2 };
661 static const symbol s_56[] = { 0xD8, 0xA7 };
662 static const symbol s_57[] = { 0xD8, 0xA5 };
663 static const symbol s_58[] = { 0xD9, 0x81, 0xD8, 0xA7 };
664 static const symbol s_59[] = { 0xD9, 0x88, 0xD8, 0xA7 };
665 static const symbol s_60[] = { 0xD8, 0xA8, 0xD8, 0xA7 };
666 static const symbol s_61[] = { 0xD8, 0xA8 };
667 static const symbol s_62[] = { 0xD9, 0x83 };
668 static const symbol s_63[] = { 0xD9, 0x8A };
669 static const symbol s_64[] = { 0xD8, 0xAA };
670 static const symbol s_65[] = { 0xD9, 0x86 };
671 static const symbol s_66[] = { 0xD8, 0xA3 };
672 static const symbol s_67[] = { 0xD8, 0xA7, 0xD8, 0xB3, 0xD8, 0xAA };
673 static const symbol s_68[] = { 0xD9, 0x8A };
674
r_Normalize_pre(struct SN_env * z)675 static int r_Normalize_pre(struct SN_env * z) {
676 int among_var;
677 { int c1 = z->c;
678 while(1) {
679 int c2 = z->c;
680 { int c3 = z->c;
681 z->bra = z->c;
682 among_var = find_among(z, a_0, 144);
683 if (!(among_var)) goto lab3;
684 z->ket = z->c;
685 switch (among_var) {
686 case 1:
687 { int ret = slice_del(z);
688 if (ret < 0) return ret;
689 }
690 break;
691 case 2:
692 { int ret = slice_from_s(z, 1, s_0);
693 if (ret < 0) return ret;
694 }
695 break;
696 case 3:
697 { int ret = slice_from_s(z, 1, s_1);
698 if (ret < 0) return ret;
699 }
700 break;
701 case 4:
702 { int ret = slice_from_s(z, 1, s_2);
703 if (ret < 0) return ret;
704 }
705 break;
706 case 5:
707 { int ret = slice_from_s(z, 1, s_3);
708 if (ret < 0) return ret;
709 }
710 break;
711 case 6:
712 { int ret = slice_from_s(z, 1, s_4);
713 if (ret < 0) return ret;
714 }
715 break;
716 case 7:
717 { int ret = slice_from_s(z, 1, s_5);
718 if (ret < 0) return ret;
719 }
720 break;
721 case 8:
722 { int ret = slice_from_s(z, 1, s_6);
723 if (ret < 0) return ret;
724 }
725 break;
726 case 9:
727 { int ret = slice_from_s(z, 1, s_7);
728 if (ret < 0) return ret;
729 }
730 break;
731 case 10:
732 { int ret = slice_from_s(z, 1, s_8);
733 if (ret < 0) return ret;
734 }
735 break;
736 case 11:
737 { int ret = slice_from_s(z, 1, s_9);
738 if (ret < 0) return ret;
739 }
740 break;
741 case 12:
742 { int ret = slice_from_s(z, 2, s_10);
743 if (ret < 0) return ret;
744 }
745 break;
746 case 13:
747 { int ret = slice_from_s(z, 2, s_11);
748 if (ret < 0) return ret;
749 }
750 break;
751 case 14:
752 { int ret = slice_from_s(z, 2, s_12);
753 if (ret < 0) return ret;
754 }
755 break;
756 case 15:
757 { int ret = slice_from_s(z, 2, s_13);
758 if (ret < 0) return ret;
759 }
760 break;
761 case 16:
762 { int ret = slice_from_s(z, 2, s_14);
763 if (ret < 0) return ret;
764 }
765 break;
766 case 17:
767 { int ret = slice_from_s(z, 2, s_15);
768 if (ret < 0) return ret;
769 }
770 break;
771 case 18:
772 { int ret = slice_from_s(z, 2, s_16);
773 if (ret < 0) return ret;
774 }
775 break;
776 case 19:
777 { int ret = slice_from_s(z, 2, s_17);
778 if (ret < 0) return ret;
779 }
780 break;
781 case 20:
782 { int ret = slice_from_s(z, 2, s_18);
783 if (ret < 0) return ret;
784 }
785 break;
786 case 21:
787 { int ret = slice_from_s(z, 2, s_19);
788 if (ret < 0) return ret;
789 }
790 break;
791 case 22:
792 { int ret = slice_from_s(z, 2, s_20);
793 if (ret < 0) return ret;
794 }
795 break;
796 case 23:
797 { int ret = slice_from_s(z, 2, s_21);
798 if (ret < 0) return ret;
799 }
800 break;
801 case 24:
802 { int ret = slice_from_s(z, 2, s_22);
803 if (ret < 0) return ret;
804 }
805 break;
806 case 25:
807 { int ret = slice_from_s(z, 2, s_23);
808 if (ret < 0) return ret;
809 }
810 break;
811 case 26:
812 { int ret = slice_from_s(z, 2, s_24);
813 if (ret < 0) return ret;
814 }
815 break;
816 case 27:
817 { int ret = slice_from_s(z, 2, s_25);
818 if (ret < 0) return ret;
819 }
820 break;
821 case 28:
822 { int ret = slice_from_s(z, 2, s_26);
823 if (ret < 0) return ret;
824 }
825 break;
826 case 29:
827 { int ret = slice_from_s(z, 2, s_27);
828 if (ret < 0) return ret;
829 }
830 break;
831 case 30:
832 { int ret = slice_from_s(z, 2, s_28);
833 if (ret < 0) return ret;
834 }
835 break;
836 case 31:
837 { int ret = slice_from_s(z, 2, s_29);
838 if (ret < 0) return ret;
839 }
840 break;
841 case 32:
842 { int ret = slice_from_s(z, 2, s_30);
843 if (ret < 0) return ret;
844 }
845 break;
846 case 33:
847 { int ret = slice_from_s(z, 2, s_31);
848 if (ret < 0) return ret;
849 }
850 break;
851 case 34:
852 { int ret = slice_from_s(z, 2, s_32);
853 if (ret < 0) return ret;
854 }
855 break;
856 case 35:
857 { int ret = slice_from_s(z, 2, s_33);
858 if (ret < 0) return ret;
859 }
860 break;
861 case 36:
862 { int ret = slice_from_s(z, 2, s_34);
863 if (ret < 0) return ret;
864 }
865 break;
866 case 37:
867 { int ret = slice_from_s(z, 2, s_35);
868 if (ret < 0) return ret;
869 }
870 break;
871 case 38:
872 { int ret = slice_from_s(z, 2, s_36);
873 if (ret < 0) return ret;
874 }
875 break;
876 case 39:
877 { int ret = slice_from_s(z, 2, s_37);
878 if (ret < 0) return ret;
879 }
880 break;
881 case 40:
882 { int ret = slice_from_s(z, 2, s_38);
883 if (ret < 0) return ret;
884 }
885 break;
886 case 41:
887 { int ret = slice_from_s(z, 2, s_39);
888 if (ret < 0) return ret;
889 }
890 break;
891 case 42:
892 { int ret = slice_from_s(z, 2, s_40);
893 if (ret < 0) return ret;
894 }
895 break;
896 case 43:
897 { int ret = slice_from_s(z, 2, s_41);
898 if (ret < 0) return ret;
899 }
900 break;
901 case 44:
902 { int ret = slice_from_s(z, 2, s_42);
903 if (ret < 0) return ret;
904 }
905 break;
906 case 45:
907 { int ret = slice_from_s(z, 2, s_43);
908 if (ret < 0) return ret;
909 }
910 break;
911 case 46:
912 { int ret = slice_from_s(z, 2, s_44);
913 if (ret < 0) return ret;
914 }
915 break;
916 case 47:
917 { int ret = slice_from_s(z, 2, s_45);
918 if (ret < 0) return ret;
919 }
920 break;
921 case 48:
922 { int ret = slice_from_s(z, 4, s_46);
923 if (ret < 0) return ret;
924 }
925 break;
926 case 49:
927 { int ret = slice_from_s(z, 4, s_47);
928 if (ret < 0) return ret;
929 }
930 break;
931 case 50:
932 { int ret = slice_from_s(z, 4, s_48);
933 if (ret < 0) return ret;
934 }
935 break;
936 case 51:
937 { int ret = slice_from_s(z, 4, s_49);
938 if (ret < 0) return ret;
939 }
940 break;
941 }
942 goto lab2;
943 lab3:
944 z->c = c3;
945 { int ret = skip_utf8(z->p, z->c, z->l, 1);
946 if (ret < 0) goto lab1;
947 z->c = ret;
948 }
949 }
950 lab2:
951 continue;
952 lab1:
953 z->c = c2;
954 break;
955 }
956 z->c = c1;
957 }
958 return 1;
959 }
960
r_Normalize_post(struct SN_env * z)961 static int r_Normalize_post(struct SN_env * z) {
962 int among_var;
963 { int c1 = z->c;
964 z->lb = z->c; z->c = z->l;
965
966 z->ket = z->c;
967 if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 5 || !((124 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab0;
968 if (!(find_among_b(z, a_1, 5))) goto lab0;
969 z->bra = z->c;
970 { int ret = slice_from_s(z, 2, s_50);
971 if (ret < 0) return ret;
972 }
973 z->c = z->lb;
974 lab0:
975 z->c = c1;
976 }
977 { int c2 = z->c;
978 while(1) {
979 int c3 = z->c;
980 { int c4 = z->c;
981 z->bra = z->c;
982 if (z->c + 1 >= z->l || z->p[z->c + 1] >> 5 != 5 || !((124 >> (z->p[z->c + 1] & 0x1f)) & 1)) goto lab4;
983 among_var = find_among(z, a_2, 5);
984 if (!(among_var)) goto lab4;
985 z->ket = z->c;
986 switch (among_var) {
987 case 1:
988 { int ret = slice_from_s(z, 2, s_51);
989 if (ret < 0) return ret;
990 }
991 break;
992 case 2:
993 { int ret = slice_from_s(z, 2, s_52);
994 if (ret < 0) return ret;
995 }
996 break;
997 case 3:
998 { int ret = slice_from_s(z, 2, s_53);
999 if (ret < 0) return ret;
1000 }
1001 break;
1002 }
1003 goto lab3;
1004 lab4:
1005 z->c = c4;
1006 { int ret = skip_utf8(z->p, z->c, z->l, 1);
1007 if (ret < 0) goto lab2;
1008 z->c = ret;
1009 }
1010 }
1011 lab3:
1012 continue;
1013 lab2:
1014 z->c = c3;
1015 break;
1016 }
1017 z->c = c2;
1018 }
1019 return 1;
1020 }
1021
r_Checks1(struct SN_env * z)1022 static int r_Checks1(struct SN_env * z) {
1023 int among_var;
1024 z->bra = z->c;
1025 if (z->c + 3 >= z->l || (z->p[z->c + 3] != 132 && z->p[z->c + 3] != 167)) return 0;
1026 among_var = find_among(z, a_3, 4);
1027 if (!(among_var)) return 0;
1028 z->ket = z->c;
1029 switch (among_var) {
1030 case 1:
1031 if (!(len_utf8(z->p) > 4)) return 0;
1032 z->I[2] = 1;
1033 z->I[1] = 0;
1034 z->I[0] = 1;
1035 break;
1036 case 2:
1037 if (!(len_utf8(z->p) > 3)) return 0;
1038 z->I[2] = 1;
1039 z->I[1] = 0;
1040 z->I[0] = 1;
1041 break;
1042 }
1043 return 1;
1044 }
1045
r_Prefix_Step1(struct SN_env * z)1046 static int r_Prefix_Step1(struct SN_env * z) {
1047 int among_var;
1048 z->bra = z->c;
1049 if (z->c + 3 >= z->l || z->p[z->c + 3] >> 5 != 5 || !((188 >> (z->p[z->c + 3] & 0x1f)) & 1)) return 0;
1050 among_var = find_among(z, a_4, 5);
1051 if (!(among_var)) return 0;
1052 z->ket = z->c;
1053 switch (among_var) {
1054 case 1:
1055 if (!(len_utf8(z->p) > 3)) return 0;
1056 { int ret = slice_from_s(z, 2, s_54);
1057 if (ret < 0) return ret;
1058 }
1059 break;
1060 case 2:
1061 if (!(len_utf8(z->p) > 3)) return 0;
1062 { int ret = slice_from_s(z, 2, s_55);
1063 if (ret < 0) return ret;
1064 }
1065 break;
1066 case 3:
1067 if (!(len_utf8(z->p) > 3)) return 0;
1068 { int ret = slice_from_s(z, 2, s_56);
1069 if (ret < 0) return ret;
1070 }
1071 break;
1072 case 4:
1073 if (!(len_utf8(z->p) > 3)) return 0;
1074 { int ret = slice_from_s(z, 2, s_57);
1075 if (ret < 0) return ret;
1076 }
1077 break;
1078 }
1079 return 1;
1080 }
1081
r_Prefix_Step2(struct SN_env * z)1082 static int r_Prefix_Step2(struct SN_env * z) {
1083 { int c1 = z->c;
1084 if (!(eq_s(z, 4, s_58))) goto lab0;
1085 return 0;
1086 lab0:
1087 z->c = c1;
1088 }
1089 { int c2 = z->c;
1090 if (!(eq_s(z, 4, s_59))) goto lab1;
1091 return 0;
1092 lab1:
1093 z->c = c2;
1094 }
1095 z->bra = z->c;
1096 if (z->c + 1 >= z->l || (z->p[z->c + 1] != 129 && z->p[z->c + 1] != 136)) return 0;
1097 if (!(find_among(z, a_5, 2))) return 0;
1098 z->ket = z->c;
1099 if (!(len_utf8(z->p) > 3)) return 0;
1100 { int ret = slice_del(z);
1101 if (ret < 0) return ret;
1102 }
1103 return 1;
1104 }
1105
r_Prefix_Step3a_Noun(struct SN_env * z)1106 static int r_Prefix_Step3a_Noun(struct SN_env * z) {
1107 int among_var;
1108 z->bra = z->c;
1109 if (z->c + 3 >= z->l || (z->p[z->c + 3] != 132 && z->p[z->c + 3] != 167)) return 0;
1110 among_var = find_among(z, a_6, 4);
1111 if (!(among_var)) return 0;
1112 z->ket = z->c;
1113 switch (among_var) {
1114 case 1:
1115 if (!(len_utf8(z->p) > 5)) return 0;
1116 { int ret = slice_del(z);
1117 if (ret < 0) return ret;
1118 }
1119 break;
1120 case 2:
1121 if (!(len_utf8(z->p) > 4)) return 0;
1122 { int ret = slice_del(z);
1123 if (ret < 0) return ret;
1124 }
1125 break;
1126 }
1127 return 1;
1128 }
1129
r_Prefix_Step3b_Noun(struct SN_env * z)1130 static int r_Prefix_Step3b_Noun(struct SN_env * z) {
1131 int among_var;
1132 { int c1 = z->c;
1133 if (!(eq_s(z, 4, s_60))) goto lab0;
1134 return 0;
1135 lab0:
1136 z->c = c1;
1137 }
1138 z->bra = z->c;
1139 if (z->c + 1 >= z->l || (z->p[z->c + 1] != 168 && z->p[z->c + 1] != 131)) return 0;
1140 among_var = find_among(z, a_7, 3);
1141 if (!(among_var)) return 0;
1142 z->ket = z->c;
1143 switch (among_var) {
1144 case 1:
1145 if (!(len_utf8(z->p) > 3)) return 0;
1146 { int ret = slice_del(z);
1147 if (ret < 0) return ret;
1148 }
1149 break;
1150 case 2:
1151 if (!(len_utf8(z->p) > 3)) return 0;
1152 { int ret = slice_from_s(z, 2, s_61);
1153 if (ret < 0) return ret;
1154 }
1155 break;
1156 case 3:
1157 if (!(len_utf8(z->p) > 3)) return 0;
1158 { int ret = slice_from_s(z, 2, s_62);
1159 if (ret < 0) return ret;
1160 }
1161 break;
1162 }
1163 return 1;
1164 }
1165
r_Prefix_Step3_Verb(struct SN_env * z)1166 static int r_Prefix_Step3_Verb(struct SN_env * z) {
1167 int among_var;
1168 z->bra = z->c;
1169 among_var = find_among(z, a_8, 4);
1170 if (!(among_var)) return 0;
1171 z->ket = z->c;
1172 switch (among_var) {
1173 case 1:
1174 if (!(len_utf8(z->p) > 4)) return 0;
1175 { int ret = slice_from_s(z, 2, s_63);
1176 if (ret < 0) return ret;
1177 }
1178 break;
1179 case 2:
1180 if (!(len_utf8(z->p) > 4)) return 0;
1181 { int ret = slice_from_s(z, 2, s_64);
1182 if (ret < 0) return ret;
1183 }
1184 break;
1185 case 3:
1186 if (!(len_utf8(z->p) > 4)) return 0;
1187 { int ret = slice_from_s(z, 2, s_65);
1188 if (ret < 0) return ret;
1189 }
1190 break;
1191 case 4:
1192 if (!(len_utf8(z->p) > 4)) return 0;
1193 { int ret = slice_from_s(z, 2, s_66);
1194 if (ret < 0) return ret;
1195 }
1196 break;
1197 }
1198 return 1;
1199 }
1200
r_Prefix_Step4_Verb(struct SN_env * z)1201 static int r_Prefix_Step4_Verb(struct SN_env * z) {
1202 z->bra = z->c;
1203 if (z->c + 5 >= z->l || z->p[z->c + 5] != 170) return 0;
1204 if (!(find_among(z, a_9, 3))) return 0;
1205 z->ket = z->c;
1206 if (!(len_utf8(z->p) > 4)) return 0;
1207 z->I[1] = 1;
1208 z->I[2] = 0;
1209 { int ret = slice_from_s(z, 6, s_67);
1210 if (ret < 0) return ret;
1211 }
1212 return 1;
1213 }
1214
r_Suffix_Noun_Step1a(struct SN_env * z)1215 static int r_Suffix_Noun_Step1a(struct SN_env * z) {
1216 int among_var;
1217 z->ket = z->c;
1218 among_var = find_among_b(z, a_10, 10);
1219 if (!(among_var)) return 0;
1220 z->bra = z->c;
1221 switch (among_var) {
1222 case 1:
1223 if (!(len_utf8(z->p) >= 4)) return 0;
1224 { int ret = slice_del(z);
1225 if (ret < 0) return ret;
1226 }
1227 break;
1228 case 2:
1229 if (!(len_utf8(z->p) >= 5)) return 0;
1230 { int ret = slice_del(z);
1231 if (ret < 0) return ret;
1232 }
1233 break;
1234 case 3:
1235 if (!(len_utf8(z->p) >= 6)) return 0;
1236 { int ret = slice_del(z);
1237 if (ret < 0) return ret;
1238 }
1239 break;
1240 }
1241 return 1;
1242 }
1243
r_Suffix_Noun_Step1b(struct SN_env * z)1244 static int r_Suffix_Noun_Step1b(struct SN_env * z) {
1245 z->ket = z->c;
1246 if (z->c - 1 <= z->lb || z->p[z->c - 1] != 134) return 0;
1247 if (!(find_among_b(z, a_11, 1))) return 0;
1248 z->bra = z->c;
1249 if (!(len_utf8(z->p) > 5)) return 0;
1250 { int ret = slice_del(z);
1251 if (ret < 0) return ret;
1252 }
1253 return 1;
1254 }
1255
r_Suffix_Noun_Step2a(struct SN_env * z)1256 static int r_Suffix_Noun_Step2a(struct SN_env * z) {
1257 z->ket = z->c;
1258 if (!(find_among_b(z, a_12, 3))) return 0;
1259 z->bra = z->c;
1260 if (!(len_utf8(z->p) > 4)) return 0;
1261 { int ret = slice_del(z);
1262 if (ret < 0) return ret;
1263 }
1264 return 1;
1265 }
1266
r_Suffix_Noun_Step2b(struct SN_env * z)1267 static int r_Suffix_Noun_Step2b(struct SN_env * z) {
1268 z->ket = z->c;
1269 if (z->c - 3 <= z->lb || z->p[z->c - 1] != 170) return 0;
1270 if (!(find_among_b(z, a_13, 1))) return 0;
1271 z->bra = z->c;
1272 if (!(len_utf8(z->p) >= 5)) return 0;
1273 { int ret = slice_del(z);
1274 if (ret < 0) return ret;
1275 }
1276 return 1;
1277 }
1278
r_Suffix_Noun_Step2c1(struct SN_env * z)1279 static int r_Suffix_Noun_Step2c1(struct SN_env * z) {
1280 z->ket = z->c;
1281 if (z->c - 1 <= z->lb || z->p[z->c - 1] != 170) return 0;
1282 if (!(find_among_b(z, a_14, 1))) return 0;
1283 z->bra = z->c;
1284 if (!(len_utf8(z->p) >= 4)) return 0;
1285 { int ret = slice_del(z);
1286 if (ret < 0) return ret;
1287 }
1288 return 1;
1289 }
1290
r_Suffix_Noun_Step2c2(struct SN_env * z)1291 static int r_Suffix_Noun_Step2c2(struct SN_env * z) {
1292 z->ket = z->c;
1293 if (z->c - 1 <= z->lb || z->p[z->c - 1] != 169) return 0;
1294 if (!(find_among_b(z, a_15, 1))) return 0;
1295 z->bra = z->c;
1296 if (!(len_utf8(z->p) >= 4)) return 0;
1297 { int ret = slice_del(z);
1298 if (ret < 0) return ret;
1299 }
1300 return 1;
1301 }
1302
r_Suffix_Noun_Step3(struct SN_env * z)1303 static int r_Suffix_Noun_Step3(struct SN_env * z) {
1304 z->ket = z->c;
1305 if (z->c - 1 <= z->lb || z->p[z->c - 1] != 138) return 0;
1306 if (!(find_among_b(z, a_16, 1))) return 0;
1307 z->bra = z->c;
1308 if (!(len_utf8(z->p) >= 3)) return 0;
1309 { int ret = slice_del(z);
1310 if (ret < 0) return ret;
1311 }
1312 return 1;
1313 }
1314
r_Suffix_Verb_Step1(struct SN_env * z)1315 static int r_Suffix_Verb_Step1(struct SN_env * z) {
1316 int among_var;
1317 z->ket = z->c;
1318 among_var = find_among_b(z, a_17, 12);
1319 if (!(among_var)) return 0;
1320 z->bra = z->c;
1321 switch (among_var) {
1322 case 1:
1323 if (!(len_utf8(z->p) >= 4)) return 0;
1324 { int ret = slice_del(z);
1325 if (ret < 0) return ret;
1326 }
1327 break;
1328 case 2:
1329 if (!(len_utf8(z->p) >= 5)) return 0;
1330 { int ret = slice_del(z);
1331 if (ret < 0) return ret;
1332 }
1333 break;
1334 case 3:
1335 if (!(len_utf8(z->p) >= 6)) return 0;
1336 { int ret = slice_del(z);
1337 if (ret < 0) return ret;
1338 }
1339 break;
1340 }
1341 return 1;
1342 }
1343
r_Suffix_Verb_Step2a(struct SN_env * z)1344 static int r_Suffix_Verb_Step2a(struct SN_env * z) {
1345 int among_var;
1346 z->ket = z->c;
1347 among_var = find_among_b(z, a_18, 11);
1348 if (!(among_var)) return 0;
1349 z->bra = z->c;
1350 switch (among_var) {
1351 case 1:
1352 if (!(len_utf8(z->p) >= 4)) return 0;
1353 { int ret = slice_del(z);
1354 if (ret < 0) return ret;
1355 }
1356 break;
1357 case 2:
1358 if (!(len_utf8(z->p) >= 5)) return 0;
1359 { int ret = slice_del(z);
1360 if (ret < 0) return ret;
1361 }
1362 break;
1363 case 3:
1364 if (!(len_utf8(z->p) > 5)) return 0;
1365 { int ret = slice_del(z);
1366 if (ret < 0) return ret;
1367 }
1368 break;
1369 case 4:
1370 if (!(len_utf8(z->p) >= 6)) return 0;
1371 { int ret = slice_del(z);
1372 if (ret < 0) return ret;
1373 }
1374 break;
1375 }
1376 return 1;
1377 }
1378
r_Suffix_Verb_Step2b(struct SN_env * z)1379 static int r_Suffix_Verb_Step2b(struct SN_env * z) {
1380 z->ket = z->c;
1381 if (z->c - 3 <= z->lb || (z->p[z->c - 1] != 133 && z->p[z->c - 1] != 167)) return 0;
1382 if (!(find_among_b(z, a_19, 2))) return 0;
1383 z->bra = z->c;
1384 if (!(len_utf8(z->p) >= 5)) return 0;
1385 { int ret = slice_del(z);
1386 if (ret < 0) return ret;
1387 }
1388 return 1;
1389 }
1390
r_Suffix_Verb_Step2c(struct SN_env * z)1391 static int r_Suffix_Verb_Step2c(struct SN_env * z) {
1392 int among_var;
1393 z->ket = z->c;
1394 if (z->c - 1 <= z->lb || z->p[z->c - 1] != 136) return 0;
1395 among_var = find_among_b(z, a_20, 2);
1396 if (!(among_var)) return 0;
1397 z->bra = z->c;
1398 switch (among_var) {
1399 case 1:
1400 if (!(len_utf8(z->p) >= 4)) return 0;
1401 { int ret = slice_del(z);
1402 if (ret < 0) return ret;
1403 }
1404 break;
1405 case 2:
1406 if (!(len_utf8(z->p) >= 6)) return 0;
1407 { int ret = slice_del(z);
1408 if (ret < 0) return ret;
1409 }
1410 break;
1411 }
1412 return 1;
1413 }
1414
r_Suffix_All_alef_maqsura(struct SN_env * z)1415 static int r_Suffix_All_alef_maqsura(struct SN_env * z) {
1416 z->ket = z->c;
1417 if (z->c - 1 <= z->lb || z->p[z->c - 1] != 137) return 0;
1418 if (!(find_among_b(z, a_21, 1))) return 0;
1419 z->bra = z->c;
1420 { int ret = slice_from_s(z, 2, s_68);
1421 if (ret < 0) return ret;
1422 }
1423 return 1;
1424 }
1425
arabic_UTF_8_stem(struct SN_env * z)1426 extern int arabic_UTF_8_stem(struct SN_env * z) {
1427 z->I[2] = 1;
1428 z->I[1] = 1;
1429 z->I[0] = 0;
1430 { int c1 = z->c;
1431 { int ret = r_Checks1(z);
1432 if (ret < 0) return ret;
1433 }
1434 z->c = c1;
1435 }
1436
1437 { int ret = r_Normalize_pre(z);
1438 if (ret < 0) return ret;
1439 }
1440 z->lb = z->c; z->c = z->l;
1441
1442 { int m2 = z->l - z->c; (void)m2;
1443 { int m3 = z->l - z->c; (void)m3;
1444 if (!(z->I[1])) goto lab2;
1445 { int m4 = z->l - z->c; (void)m4;
1446 { int i = 1;
1447 while(1) {
1448 int m5 = z->l - z->c; (void)m5;
1449 { int ret = r_Suffix_Verb_Step1(z);
1450 if (ret == 0) goto lab5;
1451 if (ret < 0) return ret;
1452 }
1453 i--;
1454 continue;
1455 lab5:
1456 z->c = z->l - m5;
1457 break;
1458 }
1459 if (i > 0) goto lab4;
1460 }
1461 { int m6 = z->l - z->c; (void)m6;
1462 { int ret = r_Suffix_Verb_Step2a(z);
1463 if (ret == 0) goto lab7;
1464 if (ret < 0) return ret;
1465 }
1466 goto lab6;
1467 lab7:
1468 z->c = z->l - m6;
1469 { int ret = r_Suffix_Verb_Step2c(z);
1470 if (ret == 0) goto lab8;
1471 if (ret < 0) return ret;
1472 }
1473 goto lab6;
1474 lab8:
1475 z->c = z->l - m6;
1476 { int ret = skip_b_utf8(z->p, z->c, z->lb, 1);
1477 if (ret < 0) goto lab4;
1478 z->c = ret;
1479 }
1480 }
1481 lab6:
1482 goto lab3;
1483 lab4:
1484 z->c = z->l - m4;
1485 { int ret = r_Suffix_Verb_Step2b(z);
1486 if (ret == 0) goto lab9;
1487 if (ret < 0) return ret;
1488 }
1489 goto lab3;
1490 lab9:
1491 z->c = z->l - m4;
1492 { int ret = r_Suffix_Verb_Step2a(z);
1493 if (ret == 0) goto lab2;
1494 if (ret < 0) return ret;
1495 }
1496 }
1497 lab3:
1498 goto lab1;
1499 lab2:
1500 z->c = z->l - m3;
1501 if (!(z->I[2])) goto lab10;
1502 { int m7 = z->l - z->c; (void)m7;
1503 { int m8 = z->l - z->c; (void)m8;
1504 { int ret = r_Suffix_Noun_Step2c2(z);
1505 if (ret == 0) goto lab13;
1506 if (ret < 0) return ret;
1507 }
1508 goto lab12;
1509 lab13:
1510 z->c = z->l - m8;
1511
1512 if (!(z->I[0])) goto lab15;
1513 goto lab14;
1514 lab15:
1515 { int ret = r_Suffix_Noun_Step1a(z);
1516 if (ret == 0) goto lab14;
1517 if (ret < 0) return ret;
1518 }
1519 { int m9 = z->l - z->c; (void)m9;
1520 { int ret = r_Suffix_Noun_Step2a(z);
1521 if (ret == 0) goto lab17;
1522 if (ret < 0) return ret;
1523 }
1524 goto lab16;
1525 lab17:
1526 z->c = z->l - m9;
1527 { int ret = r_Suffix_Noun_Step2b(z);
1528 if (ret == 0) goto lab18;
1529 if (ret < 0) return ret;
1530 }
1531 goto lab16;
1532 lab18:
1533 z->c = z->l - m9;
1534 { int ret = r_Suffix_Noun_Step2c1(z);
1535 if (ret == 0) goto lab19;
1536 if (ret < 0) return ret;
1537 }
1538 goto lab16;
1539 lab19:
1540 z->c = z->l - m9;
1541 { int ret = skip_b_utf8(z->p, z->c, z->lb, 1);
1542 if (ret < 0) goto lab14;
1543 z->c = ret;
1544 }
1545 }
1546 lab16:
1547 goto lab12;
1548 lab14:
1549 z->c = z->l - m8;
1550 { int ret = r_Suffix_Noun_Step1b(z);
1551 if (ret == 0) goto lab20;
1552 if (ret < 0) return ret;
1553 }
1554 { int m10 = z->l - z->c; (void)m10;
1555 { int ret = r_Suffix_Noun_Step2a(z);
1556 if (ret == 0) goto lab22;
1557 if (ret < 0) return ret;
1558 }
1559 goto lab21;
1560 lab22:
1561 z->c = z->l - m10;
1562 { int ret = r_Suffix_Noun_Step2b(z);
1563 if (ret == 0) goto lab23;
1564 if (ret < 0) return ret;
1565 }
1566 goto lab21;
1567 lab23:
1568 z->c = z->l - m10;
1569 { int ret = r_Suffix_Noun_Step2c1(z);
1570 if (ret == 0) goto lab20;
1571 if (ret < 0) return ret;
1572 }
1573 }
1574 lab21:
1575 goto lab12;
1576 lab20:
1577 z->c = z->l - m8;
1578
1579 if (!(z->I[0])) goto lab25;
1580 goto lab24;
1581 lab25:
1582 { int ret = r_Suffix_Noun_Step2a(z);
1583 if (ret == 0) goto lab24;
1584 if (ret < 0) return ret;
1585 }
1586 goto lab12;
1587 lab24:
1588 z->c = z->l - m8;
1589 { int ret = r_Suffix_Noun_Step2b(z);
1590 if (ret == 0) { z->c = z->l - m7; goto lab11; }
1591 if (ret < 0) return ret;
1592 }
1593 }
1594 lab12:
1595 lab11:
1596 ;
1597 }
1598 { int ret = r_Suffix_Noun_Step3(z);
1599 if (ret == 0) goto lab10;
1600 if (ret < 0) return ret;
1601 }
1602 goto lab1;
1603 lab10:
1604 z->c = z->l - m3;
1605 { int ret = r_Suffix_All_alef_maqsura(z);
1606 if (ret == 0) goto lab0;
1607 if (ret < 0) return ret;
1608 }
1609 }
1610 lab1:
1611 lab0:
1612 z->c = z->l - m2;
1613 }
1614 z->c = z->lb;
1615 { int c11 = z->c;
1616 { int c12 = z->c;
1617 { int ret = r_Prefix_Step1(z);
1618 if (ret == 0) { z->c = c12; goto lab27; }
1619 if (ret < 0) return ret;
1620 }
1621 lab27:
1622 ;
1623 }
1624 { int c13 = z->c;
1625 { int ret = r_Prefix_Step2(z);
1626 if (ret == 0) { z->c = c13; goto lab28; }
1627 if (ret < 0) return ret;
1628 }
1629 lab28:
1630 ;
1631 }
1632 { int c14 = z->c;
1633 { int ret = r_Prefix_Step3a_Noun(z);
1634 if (ret == 0) goto lab30;
1635 if (ret < 0) return ret;
1636 }
1637 goto lab29;
1638 lab30:
1639 z->c = c14;
1640 if (!(z->I[2])) goto lab31;
1641 { int ret = r_Prefix_Step3b_Noun(z);
1642 if (ret == 0) goto lab31;
1643 if (ret < 0) return ret;
1644 }
1645 goto lab29;
1646 lab31:
1647 z->c = c14;
1648 if (!(z->I[1])) goto lab26;
1649 { int c15 = z->c;
1650 { int ret = r_Prefix_Step3_Verb(z);
1651 if (ret == 0) { z->c = c15; goto lab32; }
1652 if (ret < 0) return ret;
1653 }
1654 lab32:
1655 ;
1656 }
1657 { int ret = r_Prefix_Step4_Verb(z);
1658 if (ret == 0) goto lab26;
1659 if (ret < 0) return ret;
1660 }
1661 }
1662 lab29:
1663 lab26:
1664 z->c = c11;
1665 }
1666
1667 { int ret = r_Normalize_post(z);
1668 if (ret < 0) return ret;
1669 }
1670 return 1;
1671 }
1672
arabic_UTF_8_create_env(void)1673 extern struct SN_env * arabic_UTF_8_create_env(void) { return SN_create_env(0, 3); }
1674
arabic_UTF_8_close_env(struct SN_env * z)1675 extern void arabic_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); }
1676
1677