Age Owner TLA 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_UTF_8_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_UTF_8_create_env(void);
28 : extern void indonesian_UTF_8_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 :
779 peter 123 UBC 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;
1658 tgl 126 0 : if (!(find_among_b(z, a_0, 3))) return 0;
779 peter 127 0 : z->bra = z->c;
128 0 : { int ret = slice_del(z);
1658 tgl 129 0 : if (ret < 0) return ret;
130 : }
779 peter 131 0 : z->I[1] -= 1;
1658 tgl 132 0 : return 1;
133 : }
134 :
779 peter 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;
1658 tgl 138 0 : if (!(find_among_b(z, a_1, 3))) return 0;
779 peter 139 0 : z->bra = z->c;
140 0 : { int ret = slice_del(z);
1658 tgl 141 0 : if (ret < 0) return ret;
142 : }
779 peter 143 0 : z->I[1] -= 1;
1658 tgl 144 0 : return 1;
145 : }
146 :
779 peter 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;
1658 tgl 151 0 : return 1;
152 : }
153 :
779 peter 154 0 : static int r_SUFFIX_AN_OK(struct SN_env * z) {
155 0 : if (!(z->I[0] != 1)) return 0;
1658 tgl 156 0 : return 1;
157 : }
158 :
779 peter 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;
1658 tgl 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 :
779 peter 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;
1658 tgl 174 0 : if (!(find_among_b(z, a_2, 3))) return 0;
779 peter 175 0 : z->bra = z->c;
176 0 : { int ret = slice_del(z);
1658 tgl 177 0 : if (ret < 0) return ret;
178 : }
779 peter 179 0 : z->I[1] -= 1;
1658 tgl 180 0 : return 1;
181 : }
182 :
779 peter 183 0 : static int r_VOWEL(struct SN_env * z) {
184 0 : if (in_grouping_U(z, g_vowel, 97, 117, 0)) return 0;
1658 tgl 185 0 : return 1;
186 : }
187 :
779 peter 188 0 : static int r_KER(struct SN_env * z) {
189 0 : if (out_grouping_U(z, g_vowel, 97, 117, 0)) return 0;
190 0 : if (!(eq_s(z, 2, s_0))) return 0;
1658 tgl 191 0 : return 1;
192 : }
193 :
779 peter 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;
1658 tgl 198 0 : among_var = find_among(z, a_3, 12);
199 0 : if (!(among_var)) return 0;
779 peter 200 0 : z->ket = z->c;
201 0 : switch (among_var) {
1658 tgl 202 0 : case 1:
779 peter 203 0 : { int ret = slice_del(z);
1658 tgl 204 0 : if (ret < 0) return ret;
205 : }
779 peter 206 0 : z->I[0] = 1;
207 0 : z->I[1] -= 1;
1658 tgl 208 0 : break;
209 0 : case 2:
779 peter 210 0 : { int ret = slice_del(z);
1658 tgl 211 0 : if (ret < 0) return ret;
212 : }
779 peter 213 0 : z->I[0] = 3;
214 0 : z->I[1] -= 1;
1658 tgl 215 0 : break;
216 0 : case 3:
779 peter 217 0 : z->I[0] = 1;
218 0 : { int ret = slice_from_s(z, 1, s_1);
1658 tgl 219 0 : if (ret < 0) return ret;
220 : }
779 peter 221 0 : z->I[1] -= 1;
1658 tgl 222 0 : break;
223 0 : case 4:
779 peter 224 0 : z->I[0] = 3;
225 0 : { int ret = slice_from_s(z, 1, s_2);
1658 tgl 226 0 : if (ret < 0) return ret;
227 : }
779 peter 228 0 : z->I[1] -= 1;
1658 tgl 229 0 : break;
230 0 : case 5:
779 peter 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_U(z, g_vowel, 97, 117, 0)) goto lab1;
1658 tgl 236 0 : z->c = c2;
779 peter 237 0 : { int ret = slice_from_s(z, 1, s_3);
1658 tgl 238 0 : if (ret < 0) return ret;
239 : }
240 : }
241 0 : goto lab0;
242 0 : lab1:
243 0 : z->c = c1;
779 peter 244 0 : { int ret = slice_del(z);
1658 tgl 245 0 : if (ret < 0) return ret;
246 : }
247 : }
248 0 : lab0:
249 0 : break;
250 0 : case 6:
779 peter 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_U(z, g_vowel, 97, 117, 0)) goto lab3;
1658 tgl 256 0 : z->c = c4;
779 peter 257 0 : { int ret = slice_from_s(z, 1, s_4);
1658 tgl 258 0 : if (ret < 0) return ret;
259 : }
260 : }
261 0 : goto lab2;
262 0 : lab3:
263 0 : z->c = c3;
779 peter 264 0 : { int ret = slice_del(z);
1658 tgl 265 0 : if (ret < 0) return ret;
266 : }
267 : }
268 0 : lab2:
269 0 : break;
270 : }
271 0 : return 1;
272 : }
273 :
779 peter 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;
1658 tgl 278 0 : among_var = find_among(z, a_4, 6);
279 0 : if (!(among_var)) return 0;
779 peter 280 0 : z->ket = z->c;
281 0 : switch (among_var) {
1658 tgl 282 0 : case 1:
779 peter 283 0 : { int ret = slice_del(z);
1658 tgl 284 0 : if (ret < 0) return ret;
285 : }
779 peter 286 0 : z->I[0] = 2;
287 0 : z->I[1] -= 1;
1658 tgl 288 0 : break;
289 0 : case 2:
779 peter 290 0 : { int ret = slice_from_s(z, 4, s_5);
1658 tgl 291 0 : if (ret < 0) return ret;
292 : }
779 peter 293 0 : z->I[1] -= 1;
1658 tgl 294 0 : break;
295 0 : case 3:
779 peter 296 0 : { int ret = slice_del(z);
1658 tgl 297 0 : if (ret < 0) return ret;
298 : }
779 peter 299 0 : z->I[0] = 4;
300 0 : z->I[1] -= 1;
1658 tgl 301 0 : break;
302 0 : case 4:
779 peter 303 0 : { int ret = slice_from_s(z, 4, s_6);
1658 tgl 304 0 : if (ret < 0) return ret;
305 : }
779 peter 306 0 : z->I[0] = 4;
307 0 : z->I[1] -= 1;
1658 tgl 308 0 : break;
309 : }
310 0 : return 1;
311 : }
312 :
779 peter 313 0 : extern int indonesian_UTF_8_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 : {
1658 tgl 319 0 : int ret = out_grouping_U(z, g_vowel, 97, 117, 1);
320 0 : if (ret < 0) goto lab1;
321 0 : z->c += ret;
322 : }
779 peter 323 0 : z->I[1] += 1;
1658 tgl 324 0 : continue;
325 0 : lab1:
326 0 : z->c = c2;
327 0 : break;
328 : }
329 0 : z->c = c1;
330 : }
779 peter 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);
1658 tgl 337 0 : if (ret < 0) return ret;
338 : }
339 0 : z->c = z->l - m3;
340 : }
779 peter 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);
1658 tgl 344 0 : if (ret < 0) return ret;
345 : }
346 0 : z->c = z->l - m4;
347 : }
348 0 : z->c = z->lb;
779 peter 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);
1035 353 0 : if (ret == 0) goto lab3;
1658 tgl 354 0 : if (ret < 0) return ret;
355 : }
779 peter 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);
1035 362 0 : if (ret == 0) goto lab4;
1658 tgl 363 0 : if (ret < 0) return ret;
364 : }
365 0 : z->c = z->lb;
366 0 : z->c = c_test8;
367 : }
779 peter 368 0 : if (!(z->I[1] > 2)) goto lab4;
369 0 : { int ret = r_remove_second_order_prefix(z);
1035 370 0 : if (ret == 0) goto lab4;
1658 tgl 371 0 : if (ret < 0) return ret;
372 : }
1035 peter 373 0 : lab4:
1658 tgl 374 0 : z->c = c7;
375 : }
376 0 : z->c = c_test6;
377 : }
1035 peter 378 0 : goto lab2;
379 0 : lab3:
1658 tgl 380 0 : z->c = c5;
779 peter 381 0 : { int c9 = z->c;
382 0 : { int ret = r_remove_second_order_prefix(z);
1658 tgl 383 0 : if (ret < 0) return ret;
384 : }
385 0 : z->c = c9;
386 : }
779 peter 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);
1035 392 0 : if (ret == 0) goto lab5;
1658 tgl 393 0 : if (ret < 0) return ret;
394 : }
395 0 : z->c = z->lb;
1035 peter 396 0 : lab5:
1658 tgl 397 0 : z->c = c10;
398 : }
399 : }
1035 peter 400 0 : lab2:
1658 tgl 401 0 : return 1;
402 : }
403 :
779 peter 404 0 : extern struct SN_env * indonesian_UTF_8_create_env(void) { return SN_create_env(0, 2); }
405 :
1658 tgl 406 0 : extern void indonesian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); }
407 :
|