Line data Source code
1 : /* Generated by Snowball 2.2.0 - https://snowballstem.org/ */
2 :
3 : #include "header.h"
4 :
5 : #ifdef __cplusplus
6 : extern "C" {
7 : #endif
8 : extern int indonesian_ISO_8859_1_stem(struct SN_env * z);
9 : #ifdef __cplusplus
10 : }
11 : #endif
12 : static int r_VOWEL(struct SN_env * z);
13 : static int r_SUFFIX_I_OK(struct SN_env * z);
14 : static int r_SUFFIX_AN_OK(struct SN_env * z);
15 : static int r_SUFFIX_KAN_OK(struct SN_env * z);
16 : static int r_KER(struct SN_env * z);
17 : static int r_remove_suffix(struct SN_env * z);
18 : static int r_remove_second_order_prefix(struct SN_env * z);
19 : static int r_remove_first_order_prefix(struct SN_env * z);
20 : static int r_remove_possessive_pronoun(struct SN_env * z);
21 : static int r_remove_particle(struct SN_env * z);
22 : #ifdef __cplusplus
23 : extern "C" {
24 : #endif
25 :
26 :
27 : extern struct SN_env * indonesian_ISO_8859_1_create_env(void);
28 : extern void indonesian_ISO_8859_1_close_env(struct SN_env * z);
29 :
30 :
31 : #ifdef __cplusplus
32 : }
33 : #endif
34 : static const symbol s_0_0[3] = { 'k', 'a', 'h' };
35 : static const symbol s_0_1[3] = { 'l', 'a', 'h' };
36 : static const symbol s_0_2[3] = { 'p', 'u', 'n' };
37 :
38 : static const struct among a_0[3] =
39 : {
40 : { 3, s_0_0, -1, 1, 0},
41 : { 3, s_0_1, -1, 1, 0},
42 : { 3, s_0_2, -1, 1, 0}
43 : };
44 :
45 : static const symbol s_1_0[3] = { 'n', 'y', 'a' };
46 : static const symbol s_1_1[2] = { 'k', 'u' };
47 : static const symbol s_1_2[2] = { 'm', 'u' };
48 :
49 : static const struct among a_1[3] =
50 : {
51 : { 3, s_1_0, -1, 1, 0},
52 : { 2, s_1_1, -1, 1, 0},
53 : { 2, s_1_2, -1, 1, 0}
54 : };
55 :
56 : static const symbol s_2_0[1] = { 'i' };
57 : static const symbol s_2_1[2] = { 'a', 'n' };
58 : static const symbol s_2_2[3] = { 'k', 'a', 'n' };
59 :
60 : static const struct among a_2[3] =
61 : {
62 : { 1, s_2_0, -1, 1, r_SUFFIX_I_OK},
63 : { 2, s_2_1, -1, 1, r_SUFFIX_AN_OK},
64 : { 3, s_2_2, 1, 1, r_SUFFIX_KAN_OK}
65 : };
66 :
67 : static const symbol s_3_0[2] = { 'd', 'i' };
68 : static const symbol s_3_1[2] = { 'k', 'e' };
69 : static const symbol s_3_2[2] = { 'm', 'e' };
70 : static const symbol s_3_3[3] = { 'm', 'e', 'm' };
71 : static const symbol s_3_4[3] = { 'm', 'e', 'n' };
72 : static const symbol s_3_5[4] = { 'm', 'e', 'n', 'g' };
73 : static const symbol s_3_6[4] = { 'm', 'e', 'n', 'y' };
74 : static const symbol s_3_7[3] = { 'p', 'e', 'm' };
75 : static const symbol s_3_8[3] = { 'p', 'e', 'n' };
76 : static const symbol s_3_9[4] = { 'p', 'e', 'n', 'g' };
77 : static const symbol s_3_10[4] = { 'p', 'e', 'n', 'y' };
78 : static const symbol s_3_11[3] = { 't', 'e', 'r' };
79 :
80 : static const struct among a_3[12] =
81 : {
82 : { 2, s_3_0, -1, 1, 0},
83 : { 2, s_3_1, -1, 2, 0},
84 : { 2, s_3_2, -1, 1, 0},
85 : { 3, s_3_3, 2, 5, 0},
86 : { 3, s_3_4, 2, 1, 0},
87 : { 4, s_3_5, 4, 1, 0},
88 : { 4, s_3_6, 4, 3, r_VOWEL},
89 : { 3, s_3_7, -1, 6, 0},
90 : { 3, s_3_8, -1, 2, 0},
91 : { 4, s_3_9, 8, 2, 0},
92 : { 4, s_3_10, 8, 4, r_VOWEL},
93 : { 3, s_3_11, -1, 1, 0}
94 : };
95 :
96 : static const symbol s_4_0[2] = { 'b', 'e' };
97 : static const symbol s_4_1[7] = { 'b', 'e', 'l', 'a', 'j', 'a', 'r' };
98 : static const symbol s_4_2[3] = { 'b', 'e', 'r' };
99 : static const symbol s_4_3[2] = { 'p', 'e' };
100 : static const symbol s_4_4[7] = { 'p', 'e', 'l', 'a', 'j', 'a', 'r' };
101 : static const symbol s_4_5[3] = { 'p', 'e', 'r' };
102 :
103 : static const struct among a_4[6] =
104 : {
105 : { 2, s_4_0, -1, 3, r_KER},
106 : { 7, s_4_1, 0, 4, 0},
107 : { 3, s_4_2, 0, 3, 0},
108 : { 2, s_4_3, -1, 1, 0},
109 : { 7, s_4_4, 3, 2, 0},
110 : { 3, s_4_5, 3, 1, 0}
111 : };
112 :
113 : static const unsigned char g_vowel[] = { 17, 65, 16 };
114 :
115 : static const symbol s_0[] = { 'e', 'r' };
116 : static const symbol s_1[] = { 's' };
117 : static const symbol s_2[] = { 's' };
118 : static const symbol s_3[] = { 'p' };
119 : static const symbol s_4[] = { 'p' };
120 : static const symbol s_5[] = { 'a', 'j', 'a', 'r' };
121 : static const symbol s_6[] = { 'a', 'j', 'a', 'r' };
122 :
123 0 : static int r_remove_particle(struct SN_env * z) {
124 0 : z->ket = z->c;
125 0 : if (z->c - 2 <= z->lb || (z->p[z->c - 1] != 104 && z->p[z->c - 1] != 110)) return 0;
126 0 : if (!(find_among_b(z, a_0, 3))) return 0;
127 0 : z->bra = z->c;
128 0 : { int ret = slice_del(z);
129 0 : if (ret < 0) return ret;
130 : }
131 0 : z->I[1] -= 1;
132 0 : return 1;
133 : }
134 :
135 0 : static int r_remove_possessive_pronoun(struct SN_env * z) {
136 0 : z->ket = z->c;
137 0 : if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 97 && z->p[z->c - 1] != 117)) return 0;
138 0 : if (!(find_among_b(z, a_1, 3))) return 0;
139 0 : z->bra = z->c;
140 0 : { int ret = slice_del(z);
141 0 : if (ret < 0) return ret;
142 : }
143 0 : z->I[1] -= 1;
144 0 : return 1;
145 : }
146 :
147 0 : static int r_SUFFIX_KAN_OK(struct SN_env * z) {
148 :
149 0 : if (!(z->I[0] != 3)) return 0;
150 0 : if (!(z->I[0] != 2)) return 0;
151 0 : return 1;
152 : }
153 :
154 0 : static int r_SUFFIX_AN_OK(struct SN_env * z) {
155 0 : if (!(z->I[0] != 1)) return 0;
156 0 : return 1;
157 : }
158 :
159 0 : static int r_SUFFIX_I_OK(struct SN_env * z) {
160 0 : if (!(z->I[0] <= 2)) return 0;
161 0 : { int m1 = z->l - z->c; (void)m1;
162 0 : if (z->c <= z->lb || z->p[z->c - 1] != 's') goto lab0;
163 0 : z->c--;
164 0 : return 0;
165 0 : lab0:
166 0 : z->c = z->l - m1;
167 : }
168 0 : return 1;
169 : }
170 :
171 0 : static int r_remove_suffix(struct SN_env * z) {
172 0 : z->ket = z->c;
173 0 : if (z->c <= z->lb || (z->p[z->c - 1] != 105 && z->p[z->c - 1] != 110)) return 0;
174 0 : if (!(find_among_b(z, a_2, 3))) return 0;
175 0 : z->bra = z->c;
176 0 : { int ret = slice_del(z);
177 0 : if (ret < 0) return ret;
178 : }
179 0 : z->I[1] -= 1;
180 0 : return 1;
181 : }
182 :
183 0 : static int r_VOWEL(struct SN_env * z) {
184 0 : if (in_grouping(z, g_vowel, 97, 117, 0)) return 0;
185 0 : return 1;
186 : }
187 :
188 0 : static int r_KER(struct SN_env * z) {
189 0 : if (out_grouping(z, g_vowel, 97, 117, 0)) return 0;
190 0 : if (!(eq_s(z, 2, s_0))) return 0;
191 0 : return 1;
192 : }
193 :
194 0 : static int r_remove_first_order_prefix(struct SN_env * z) {
195 : int among_var;
196 0 : z->bra = z->c;
197 0 : if (z->c + 1 >= z->l || (z->p[z->c + 1] != 105 && z->p[z->c + 1] != 101)) return 0;
198 0 : among_var = find_among(z, a_3, 12);
199 0 : if (!(among_var)) return 0;
200 0 : z->ket = z->c;
201 0 : switch (among_var) {
202 0 : case 1:
203 0 : { int ret = slice_del(z);
204 0 : if (ret < 0) return ret;
205 : }
206 0 : z->I[0] = 1;
207 0 : z->I[1] -= 1;
208 0 : break;
209 0 : case 2:
210 0 : { int ret = slice_del(z);
211 0 : if (ret < 0) return ret;
212 : }
213 0 : z->I[0] = 3;
214 0 : z->I[1] -= 1;
215 0 : break;
216 0 : case 3:
217 0 : z->I[0] = 1;
218 0 : { int ret = slice_from_s(z, 1, s_1);
219 0 : if (ret < 0) return ret;
220 : }
221 0 : z->I[1] -= 1;
222 0 : break;
223 0 : case 4:
224 0 : z->I[0] = 3;
225 0 : { int ret = slice_from_s(z, 1, s_2);
226 0 : if (ret < 0) return ret;
227 : }
228 0 : z->I[1] -= 1;
229 0 : break;
230 0 : case 5:
231 0 : z->I[0] = 1;
232 0 : z->I[1] -= 1;
233 0 : { int c1 = z->c;
234 0 : { int c2 = z->c;
235 0 : if (in_grouping(z, g_vowel, 97, 117, 0)) goto lab1;
236 0 : z->c = c2;
237 0 : { int ret = slice_from_s(z, 1, s_3);
238 0 : if (ret < 0) return ret;
239 : }
240 : }
241 0 : goto lab0;
242 0 : lab1:
243 0 : z->c = c1;
244 0 : { int ret = slice_del(z);
245 0 : if (ret < 0) return ret;
246 : }
247 : }
248 0 : lab0:
249 0 : break;
250 0 : case 6:
251 0 : z->I[0] = 3;
252 0 : z->I[1] -= 1;
253 0 : { int c3 = z->c;
254 0 : { int c4 = z->c;
255 0 : if (in_grouping(z, g_vowel, 97, 117, 0)) goto lab3;
256 0 : z->c = c4;
257 0 : { int ret = slice_from_s(z, 1, s_4);
258 0 : if (ret < 0) return ret;
259 : }
260 : }
261 0 : goto lab2;
262 0 : lab3:
263 0 : z->c = c3;
264 0 : { int ret = slice_del(z);
265 0 : if (ret < 0) return ret;
266 : }
267 : }
268 0 : lab2:
269 0 : break;
270 : }
271 0 : return 1;
272 : }
273 :
274 0 : static int r_remove_second_order_prefix(struct SN_env * z) {
275 : int among_var;
276 0 : z->bra = z->c;
277 0 : if (z->c + 1 >= z->l || z->p[z->c + 1] != 101) return 0;
278 0 : among_var = find_among(z, a_4, 6);
279 0 : if (!(among_var)) return 0;
280 0 : z->ket = z->c;
281 0 : switch (among_var) {
282 0 : case 1:
283 0 : { int ret = slice_del(z);
284 0 : if (ret < 0) return ret;
285 : }
286 0 : z->I[0] = 2;
287 0 : z->I[1] -= 1;
288 0 : break;
289 0 : case 2:
290 0 : { int ret = slice_from_s(z, 4, s_5);
291 0 : if (ret < 0) return ret;
292 : }
293 0 : z->I[1] -= 1;
294 0 : break;
295 0 : case 3:
296 0 : { int ret = slice_del(z);
297 0 : if (ret < 0) return ret;
298 : }
299 0 : z->I[0] = 4;
300 0 : z->I[1] -= 1;
301 0 : break;
302 0 : case 4:
303 0 : { int ret = slice_from_s(z, 4, s_6);
304 0 : if (ret < 0) return ret;
305 : }
306 0 : z->I[0] = 4;
307 0 : z->I[1] -= 1;
308 0 : break;
309 : }
310 0 : return 1;
311 : }
312 :
313 0 : extern int indonesian_ISO_8859_1_stem(struct SN_env * z) {
314 0 : z->I[1] = 0;
315 0 : { int c1 = z->c;
316 0 : while(1) {
317 0 : int c2 = z->c;
318 : {
319 0 : int ret = out_grouping(z, g_vowel, 97, 117, 1);
320 0 : if (ret < 0) goto lab1;
321 0 : z->c += ret;
322 : }
323 0 : z->I[1] += 1;
324 0 : continue;
325 0 : lab1:
326 0 : z->c = c2;
327 0 : break;
328 : }
329 0 : z->c = c1;
330 : }
331 0 : if (!(z->I[1] > 2)) return 0;
332 0 : z->I[0] = 0;
333 0 : z->lb = z->c; z->c = z->l;
334 :
335 0 : { int m3 = z->l - z->c; (void)m3;
336 0 : { int ret = r_remove_particle(z);
337 0 : if (ret < 0) return ret;
338 : }
339 0 : z->c = z->l - m3;
340 : }
341 0 : if (!(z->I[1] > 2)) return 0;
342 0 : { int m4 = z->l - z->c; (void)m4;
343 0 : { int ret = r_remove_possessive_pronoun(z);
344 0 : if (ret < 0) return ret;
345 : }
346 0 : z->c = z->l - m4;
347 : }
348 0 : z->c = z->lb;
349 0 : if (!(z->I[1] > 2)) return 0;
350 0 : { int c5 = z->c;
351 0 : { int c_test6 = z->c;
352 0 : { int ret = r_remove_first_order_prefix(z);
353 0 : if (ret == 0) goto lab3;
354 0 : if (ret < 0) return ret;
355 : }
356 0 : { int c7 = z->c;
357 0 : { int c_test8 = z->c;
358 0 : if (!(z->I[1] > 2)) goto lab4;
359 0 : z->lb = z->c; z->c = z->l;
360 :
361 0 : { int ret = r_remove_suffix(z);
362 0 : if (ret == 0) goto lab4;
363 0 : if (ret < 0) return ret;
364 : }
365 0 : z->c = z->lb;
366 0 : z->c = c_test8;
367 : }
368 0 : if (!(z->I[1] > 2)) goto lab4;
369 0 : { int ret = r_remove_second_order_prefix(z);
370 0 : if (ret == 0) goto lab4;
371 0 : if (ret < 0) return ret;
372 : }
373 0 : lab4:
374 0 : z->c = c7;
375 : }
376 0 : z->c = c_test6;
377 : }
378 0 : goto lab2;
379 0 : lab3:
380 0 : z->c = c5;
381 0 : { int c9 = z->c;
382 0 : { int ret = r_remove_second_order_prefix(z);
383 0 : if (ret < 0) return ret;
384 : }
385 0 : z->c = c9;
386 : }
387 0 : { int c10 = z->c;
388 0 : if (!(z->I[1] > 2)) goto lab5;
389 0 : z->lb = z->c; z->c = z->l;
390 :
391 0 : { int ret = r_remove_suffix(z);
392 0 : if (ret == 0) goto lab5;
393 0 : if (ret < 0) return ret;
394 : }
395 0 : z->c = z->lb;
396 0 : lab5:
397 0 : z->c = c10;
398 : }
399 : }
400 0 : lab2:
401 0 : return 1;
402 : }
403 :
404 0 : extern struct SN_env * indonesian_ISO_8859_1_create_env(void) { return SN_create_env(0, 2); }
405 :
406 0 : extern void indonesian_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); }
407 :
|