00001
00002
00003
00004 #include "header.h"
00005
00006 #ifdef __cplusplus
00007 extern "C" {
00008 #endif
00009 extern int dutch_UTF_8_stem(struct SN_env * z);
00010 #ifdef __cplusplus
00011 }
00012 #endif
00013 static int r_standard_suffix(struct SN_env * z);
00014 static int r_undouble(struct SN_env * z);
00015 static int r_R2(struct SN_env * z);
00016 static int r_R1(struct SN_env * z);
00017 static int r_mark_regions(struct SN_env * z);
00018 static int r_en_ending(struct SN_env * z);
00019 static int r_e_ending(struct SN_env * z);
00020 static int r_postlude(struct SN_env * z);
00021 static int r_prelude(struct SN_env * z);
00022 #ifdef __cplusplus
00023 extern "C" {
00024 #endif
00025
00026
00027 extern struct SN_env * dutch_UTF_8_create_env(void);
00028 extern void dutch_UTF_8_close_env(struct SN_env * z);
00029
00030
00031 #ifdef __cplusplus
00032 }
00033 #endif
00034 static const symbol s_0_1[2] = { 0xC3, 0xA1 };
00035 static const symbol s_0_2[2] = { 0xC3, 0xA4 };
00036 static const symbol s_0_3[2] = { 0xC3, 0xA9 };
00037 static const symbol s_0_4[2] = { 0xC3, 0xAB };
00038 static const symbol s_0_5[2] = { 0xC3, 0xAD };
00039 static const symbol s_0_6[2] = { 0xC3, 0xAF };
00040 static const symbol s_0_7[2] = { 0xC3, 0xB3 };
00041 static const symbol s_0_8[2] = { 0xC3, 0xB6 };
00042 static const symbol s_0_9[2] = { 0xC3, 0xBA };
00043 static const symbol s_0_10[2] = { 0xC3, 0xBC };
00044
00045 static const struct among a_0[11] =
00046 {
00047 { 0, 0, -1, 6, 0},
00048 { 2, s_0_1, 0, 1, 0},
00049 { 2, s_0_2, 0, 1, 0},
00050 { 2, s_0_3, 0, 2, 0},
00051 { 2, s_0_4, 0, 2, 0},
00052 { 2, s_0_5, 0, 3, 0},
00053 { 2, s_0_6, 0, 3, 0},
00054 { 2, s_0_7, 0, 4, 0},
00055 { 2, s_0_8, 0, 4, 0},
00056 { 2, s_0_9, 0, 5, 0},
00057 { 2, s_0_10, 0, 5, 0}
00058 };
00059
00060 static const symbol s_1_1[1] = { 'I' };
00061 static const symbol s_1_2[1] = { 'Y' };
00062
00063 static const struct among a_1[3] =
00064 {
00065 { 0, 0, -1, 3, 0},
00066 { 1, s_1_1, 0, 2, 0},
00067 { 1, s_1_2, 0, 1, 0}
00068 };
00069
00070 static const symbol s_2_0[2] = { 'd', 'd' };
00071 static const symbol s_2_1[2] = { 'k', 'k' };
00072 static const symbol s_2_2[2] = { 't', 't' };
00073
00074 static const struct among a_2[3] =
00075 {
00076 { 2, s_2_0, -1, -1, 0},
00077 { 2, s_2_1, -1, -1, 0},
00078 { 2, s_2_2, -1, -1, 0}
00079 };
00080
00081 static const symbol s_3_0[3] = { 'e', 'n', 'e' };
00082 static const symbol s_3_1[2] = { 's', 'e' };
00083 static const symbol s_3_2[2] = { 'e', 'n' };
00084 static const symbol s_3_3[5] = { 'h', 'e', 'd', 'e', 'n' };
00085 static const symbol s_3_4[1] = { 's' };
00086
00087 static const struct among a_3[5] =
00088 {
00089 { 3, s_3_0, -1, 2, 0},
00090 { 2, s_3_1, -1, 3, 0},
00091 { 2, s_3_2, -1, 2, 0},
00092 { 5, s_3_3, 2, 1, 0},
00093 { 1, s_3_4, -1, 3, 0}
00094 };
00095
00096 static const symbol s_4_0[3] = { 'e', 'n', 'd' };
00097 static const symbol s_4_1[2] = { 'i', 'g' };
00098 static const symbol s_4_2[3] = { 'i', 'n', 'g' };
00099 static const symbol s_4_3[4] = { 'l', 'i', 'j', 'k' };
00100 static const symbol s_4_4[4] = { 'b', 'a', 'a', 'r' };
00101 static const symbol s_4_5[3] = { 'b', 'a', 'r' };
00102
00103 static const struct among a_4[6] =
00104 {
00105 { 3, s_4_0, -1, 1, 0},
00106 { 2, s_4_1, -1, 2, 0},
00107 { 3, s_4_2, -1, 1, 0},
00108 { 4, s_4_3, -1, 3, 0},
00109 { 4, s_4_4, -1, 4, 0},
00110 { 3, s_4_5, -1, 5, 0}
00111 };
00112
00113 static const symbol s_5_0[2] = { 'a', 'a' };
00114 static const symbol s_5_1[2] = { 'e', 'e' };
00115 static const symbol s_5_2[2] = { 'o', 'o' };
00116 static const symbol s_5_3[2] = { 'u', 'u' };
00117
00118 static const struct among a_5[4] =
00119 {
00120 { 2, s_5_0, -1, -1, 0},
00121 { 2, s_5_1, -1, -1, 0},
00122 { 2, s_5_2, -1, -1, 0},
00123 { 2, s_5_3, -1, -1, 0}
00124 };
00125
00126 static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
00127
00128 static const unsigned char g_v_I[] = { 1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
00129
00130 static const unsigned char g_v_j[] = { 17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
00131
00132 static const symbol s_0[] = { 'a' };
00133 static const symbol s_1[] = { 'e' };
00134 static const symbol s_2[] = { 'i' };
00135 static const symbol s_3[] = { 'o' };
00136 static const symbol s_4[] = { 'u' };
00137 static const symbol s_5[] = { 'y' };
00138 static const symbol s_6[] = { 'Y' };
00139 static const symbol s_7[] = { 'i' };
00140 static const symbol s_8[] = { 'I' };
00141 static const symbol s_9[] = { 'y' };
00142 static const symbol s_10[] = { 'Y' };
00143 static const symbol s_11[] = { 'y' };
00144 static const symbol s_12[] = { 'i' };
00145 static const symbol s_13[] = { 'e' };
00146 static const symbol s_14[] = { 'g', 'e', 'm' };
00147 static const symbol s_15[] = { 'h', 'e', 'i', 'd' };
00148 static const symbol s_16[] = { 'h', 'e', 'i', 'd' };
00149 static const symbol s_17[] = { 'c' };
00150 static const symbol s_18[] = { 'e', 'n' };
00151 static const symbol s_19[] = { 'i', 'g' };
00152 static const symbol s_20[] = { 'e' };
00153 static const symbol s_21[] = { 'e' };
00154
00155 static int r_prelude(struct SN_env * z) {
00156 int among_var;
00157 { int c_test = z->c;
00158 while(1) {
00159 int c1 = z->c;
00160 z->bra = z->c;
00161 if (z->c + 1 >= z->l || z->p[z->c + 1] >> 5 != 5 || !((340306450 >> (z->p[z->c + 1] & 0x1f)) & 1)) among_var = 6; else
00162 among_var = find_among(z, a_0, 11);
00163 if (!(among_var)) goto lab0;
00164 z->ket = z->c;
00165 switch(among_var) {
00166 case 0: goto lab0;
00167 case 1:
00168 { int ret = slice_from_s(z, 1, s_0);
00169 if (ret < 0) return ret;
00170 }
00171 break;
00172 case 2:
00173 { int ret = slice_from_s(z, 1, s_1);
00174 if (ret < 0) return ret;
00175 }
00176 break;
00177 case 3:
00178 { int ret = slice_from_s(z, 1, s_2);
00179 if (ret < 0) return ret;
00180 }
00181 break;
00182 case 4:
00183 { int ret = slice_from_s(z, 1, s_3);
00184 if (ret < 0) return ret;
00185 }
00186 break;
00187 case 5:
00188 { int ret = slice_from_s(z, 1, s_4);
00189 if (ret < 0) return ret;
00190 }
00191 break;
00192 case 6:
00193 { int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
00194 if (ret < 0) goto lab0;
00195 z->c = ret;
00196 }
00197 break;
00198 }
00199 continue;
00200 lab0:
00201 z->c = c1;
00202 break;
00203 }
00204 z->c = c_test;
00205 }
00206 { int c_keep = z->c;
00207 z->bra = z->c;
00208 if (!(eq_s(z, 1, s_5))) { z->c = c_keep; goto lab1; }
00209 z->ket = z->c;
00210 { int ret = slice_from_s(z, 1, s_6);
00211 if (ret < 0) return ret;
00212 }
00213 lab1:
00214 ;
00215 }
00216 while(1) {
00217 int c2 = z->c;
00218 while(1) {
00219 int c3 = z->c;
00220 if (in_grouping_U(z, g_v, 97, 232, 0)) goto lab3;
00221 z->bra = z->c;
00222 { int c4 = z->c;
00223 if (!(eq_s(z, 1, s_7))) goto lab5;
00224 z->ket = z->c;
00225 if (in_grouping_U(z, g_v, 97, 232, 0)) goto lab5;
00226 { int ret = slice_from_s(z, 1, s_8);
00227 if (ret < 0) return ret;
00228 }
00229 goto lab4;
00230 lab5:
00231 z->c = c4;
00232 if (!(eq_s(z, 1, s_9))) goto lab3;
00233 z->ket = z->c;
00234 { int ret = slice_from_s(z, 1, s_10);
00235 if (ret < 0) return ret;
00236 }
00237 }
00238 lab4:
00239 z->c = c3;
00240 break;
00241 lab3:
00242 z->c = c3;
00243 { int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
00244 if (ret < 0) goto lab2;
00245 z->c = ret;
00246 }
00247 }
00248 continue;
00249 lab2:
00250 z->c = c2;
00251 break;
00252 }
00253 return 1;
00254 }
00255
00256 static int r_mark_regions(struct SN_env * z) {
00257 z->I[0] = z->l;
00258 z->I[1] = z->l;
00259 {
00260 int ret = out_grouping_U(z, g_v, 97, 232, 1);
00261 if (ret < 0) return 0;
00262 z->c += ret;
00263 }
00264 {
00265 int ret = in_grouping_U(z, g_v, 97, 232, 1);
00266 if (ret < 0) return 0;
00267 z->c += ret;
00268 }
00269 z->I[0] = z->c;
00270
00271 if (!(z->I[0] < 3)) goto lab0;
00272 z->I[0] = 3;
00273 lab0:
00274 {
00275 int ret = out_grouping_U(z, g_v, 97, 232, 1);
00276 if (ret < 0) return 0;
00277 z->c += ret;
00278 }
00279 {
00280 int ret = in_grouping_U(z, g_v, 97, 232, 1);
00281 if (ret < 0) return 0;
00282 z->c += ret;
00283 }
00284 z->I[1] = z->c;
00285 return 1;
00286 }
00287
00288 static int r_postlude(struct SN_env * z) {
00289 int among_var;
00290 while(1) {
00291 int c1 = z->c;
00292 z->bra = z->c;
00293 if (z->c >= z->l || (z->p[z->c + 0] != 73 && z->p[z->c + 0] != 89)) among_var = 3; else
00294 among_var = find_among(z, a_1, 3);
00295 if (!(among_var)) goto lab0;
00296 z->ket = z->c;
00297 switch(among_var) {
00298 case 0: goto lab0;
00299 case 1:
00300 { int ret = slice_from_s(z, 1, s_11);
00301 if (ret < 0) return ret;
00302 }
00303 break;
00304 case 2:
00305 { int ret = slice_from_s(z, 1, s_12);
00306 if (ret < 0) return ret;
00307 }
00308 break;
00309 case 3:
00310 { int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
00311 if (ret < 0) goto lab0;
00312 z->c = ret;
00313 }
00314 break;
00315 }
00316 continue;
00317 lab0:
00318 z->c = c1;
00319 break;
00320 }
00321 return 1;
00322 }
00323
00324 static int r_R1(struct SN_env * z) {
00325 if (!(z->I[0] <= z->c)) return 0;
00326 return 1;
00327 }
00328
00329 static int r_R2(struct SN_env * z) {
00330 if (!(z->I[1] <= z->c)) return 0;
00331 return 1;
00332 }
00333
00334 static int r_undouble(struct SN_env * z) {
00335 { int m_test = z->l - z->c;
00336 if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1050640 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
00337 if (!(find_among_b(z, a_2, 3))) return 0;
00338 z->c = z->l - m_test;
00339 }
00340 z->ket = z->c;
00341 { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
00342 if (ret < 0) return 0;
00343 z->c = ret;
00344 }
00345 z->bra = z->c;
00346 { int ret = slice_del(z);
00347 if (ret < 0) return ret;
00348 }
00349 return 1;
00350 }
00351
00352 static int r_e_ending(struct SN_env * z) {
00353 z->B[0] = 0;
00354 z->ket = z->c;
00355 if (!(eq_s_b(z, 1, s_13))) return 0;
00356 z->bra = z->c;
00357 { int ret = r_R1(z);
00358 if (ret == 0) return 0;
00359 if (ret < 0) return ret;
00360 }
00361 { int m_test = z->l - z->c;
00362 if (out_grouping_b_U(z, g_v, 97, 232, 0)) return 0;
00363 z->c = z->l - m_test;
00364 }
00365 { int ret = slice_del(z);
00366 if (ret < 0) return ret;
00367 }
00368 z->B[0] = 1;
00369 { int ret = r_undouble(z);
00370 if (ret == 0) return 0;
00371 if (ret < 0) return ret;
00372 }
00373 return 1;
00374 }
00375
00376 static int r_en_ending(struct SN_env * z) {
00377 { int ret = r_R1(z);
00378 if (ret == 0) return 0;
00379 if (ret < 0) return ret;
00380 }
00381 { int m1 = z->l - z->c; (void)m1;
00382 if (out_grouping_b_U(z, g_v, 97, 232, 0)) return 0;
00383 z->c = z->l - m1;
00384 { int m2 = z->l - z->c; (void)m2;
00385 if (!(eq_s_b(z, 3, s_14))) goto lab0;
00386 return 0;
00387 lab0:
00388 z->c = z->l - m2;
00389 }
00390 }
00391 { int ret = slice_del(z);
00392 if (ret < 0) return ret;
00393 }
00394 { int ret = r_undouble(z);
00395 if (ret == 0) return 0;
00396 if (ret < 0) return ret;
00397 }
00398 return 1;
00399 }
00400
00401 static int r_standard_suffix(struct SN_env * z) {
00402 int among_var;
00403 { int m1 = z->l - z->c; (void)m1;
00404 z->ket = z->c;
00405 if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((540704 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab0;
00406 among_var = find_among_b(z, a_3, 5);
00407 if (!(among_var)) goto lab0;
00408 z->bra = z->c;
00409 switch(among_var) {
00410 case 0: goto lab0;
00411 case 1:
00412 { int ret = r_R1(z);
00413 if (ret == 0) goto lab0;
00414 if (ret < 0) return ret;
00415 }
00416 { int ret = slice_from_s(z, 4, s_15);
00417 if (ret < 0) return ret;
00418 }
00419 break;
00420 case 2:
00421 { int ret = r_en_ending(z);
00422 if (ret == 0) goto lab0;
00423 if (ret < 0) return ret;
00424 }
00425 break;
00426 case 3:
00427 { int ret = r_R1(z);
00428 if (ret == 0) goto lab0;
00429 if (ret < 0) return ret;
00430 }
00431 if (out_grouping_b_U(z, g_v_j, 97, 232, 0)) goto lab0;
00432 { int ret = slice_del(z);
00433 if (ret < 0) return ret;
00434 }
00435 break;
00436 }
00437 lab0:
00438 z->c = z->l - m1;
00439 }
00440 { int m2 = z->l - z->c; (void)m2;
00441 { int ret = r_e_ending(z);
00442 if (ret == 0) goto lab1;
00443 if (ret < 0) return ret;
00444 }
00445 lab1:
00446 z->c = z->l - m2;
00447 }
00448 { int m3 = z->l - z->c; (void)m3;
00449 z->ket = z->c;
00450 if (!(eq_s_b(z, 4, s_16))) goto lab2;
00451 z->bra = z->c;
00452 { int ret = r_R2(z);
00453 if (ret == 0) goto lab2;
00454 if (ret < 0) return ret;
00455 }
00456 { int m4 = z->l - z->c; (void)m4;
00457 if (!(eq_s_b(z, 1, s_17))) goto lab3;
00458 goto lab2;
00459 lab3:
00460 z->c = z->l - m4;
00461 }
00462 { int ret = slice_del(z);
00463 if (ret < 0) return ret;
00464 }
00465 z->ket = z->c;
00466 if (!(eq_s_b(z, 2, s_18))) goto lab2;
00467 z->bra = z->c;
00468 { int ret = r_en_ending(z);
00469 if (ret == 0) goto lab2;
00470 if (ret < 0) return ret;
00471 }
00472 lab2:
00473 z->c = z->l - m3;
00474 }
00475 { int m5 = z->l - z->c; (void)m5;
00476 z->ket = z->c;
00477 if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((264336 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab4;
00478 among_var = find_among_b(z, a_4, 6);
00479 if (!(among_var)) goto lab4;
00480 z->bra = z->c;
00481 switch(among_var) {
00482 case 0: goto lab4;
00483 case 1:
00484 { int ret = r_R2(z);
00485 if (ret == 0) goto lab4;
00486 if (ret < 0) return ret;
00487 }
00488 { int ret = slice_del(z);
00489 if (ret < 0) return ret;
00490 }
00491 { int m6 = z->l - z->c; (void)m6;
00492 z->ket = z->c;
00493 if (!(eq_s_b(z, 2, s_19))) goto lab6;
00494 z->bra = z->c;
00495 { int ret = r_R2(z);
00496 if (ret == 0) goto lab6;
00497 if (ret < 0) return ret;
00498 }
00499 { int m7 = z->l - z->c; (void)m7;
00500 if (!(eq_s_b(z, 1, s_20))) goto lab7;
00501 goto lab6;
00502 lab7:
00503 z->c = z->l - m7;
00504 }
00505 { int ret = slice_del(z);
00506 if (ret < 0) return ret;
00507 }
00508 goto lab5;
00509 lab6:
00510 z->c = z->l - m6;
00511 { int ret = r_undouble(z);
00512 if (ret == 0) goto lab4;
00513 if (ret < 0) return ret;
00514 }
00515 }
00516 lab5:
00517 break;
00518 case 2:
00519 { int ret = r_R2(z);
00520 if (ret == 0) goto lab4;
00521 if (ret < 0) return ret;
00522 }
00523 { int m8 = z->l - z->c; (void)m8;
00524 if (!(eq_s_b(z, 1, s_21))) goto lab8;
00525 goto lab4;
00526 lab8:
00527 z->c = z->l - m8;
00528 }
00529 { int ret = slice_del(z);
00530 if (ret < 0) return ret;
00531 }
00532 break;
00533 case 3:
00534 { int ret = r_R2(z);
00535 if (ret == 0) goto lab4;
00536 if (ret < 0) return ret;
00537 }
00538 { int ret = slice_del(z);
00539 if (ret < 0) return ret;
00540 }
00541 { int ret = r_e_ending(z);
00542 if (ret == 0) goto lab4;
00543 if (ret < 0) return ret;
00544 }
00545 break;
00546 case 4:
00547 { int ret = r_R2(z);
00548 if (ret == 0) goto lab4;
00549 if (ret < 0) return ret;
00550 }
00551 { int ret = slice_del(z);
00552 if (ret < 0) return ret;
00553 }
00554 break;
00555 case 5:
00556 { int ret = r_R2(z);
00557 if (ret == 0) goto lab4;
00558 if (ret < 0) return ret;
00559 }
00560 if (!(z->B[0])) goto lab4;
00561 { int ret = slice_del(z);
00562 if (ret < 0) return ret;
00563 }
00564 break;
00565 }
00566 lab4:
00567 z->c = z->l - m5;
00568 }
00569 { int m9 = z->l - z->c; (void)m9;
00570 if (out_grouping_b_U(z, g_v_I, 73, 232, 0)) goto lab9;
00571 { int m_test = z->l - z->c;
00572 if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((2129954 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab9;
00573 if (!(find_among_b(z, a_5, 4))) goto lab9;
00574 if (out_grouping_b_U(z, g_v, 97, 232, 0)) goto lab9;
00575 z->c = z->l - m_test;
00576 }
00577 z->ket = z->c;
00578 { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
00579 if (ret < 0) goto lab9;
00580 z->c = ret;
00581 }
00582 z->bra = z->c;
00583 { int ret = slice_del(z);
00584 if (ret < 0) return ret;
00585 }
00586 lab9:
00587 z->c = z->l - m9;
00588 }
00589 return 1;
00590 }
00591
00592 extern int dutch_UTF_8_stem(struct SN_env * z) {
00593 { int c1 = z->c;
00594 { int ret = r_prelude(z);
00595 if (ret == 0) goto lab0;
00596 if (ret < 0) return ret;
00597 }
00598 lab0:
00599 z->c = c1;
00600 }
00601 { int c2 = z->c;
00602 { int ret = r_mark_regions(z);
00603 if (ret == 0) goto lab1;
00604 if (ret < 0) return ret;
00605 }
00606 lab1:
00607 z->c = c2;
00608 }
00609 z->lb = z->c; z->c = z->l;
00610
00611 { int m3 = z->l - z->c; (void)m3;
00612 { int ret = r_standard_suffix(z);
00613 if (ret == 0) goto lab2;
00614 if (ret < 0) return ret;
00615 }
00616 lab2:
00617 z->c = z->l - m3;
00618 }
00619 z->c = z->lb;
00620 { int c4 = z->c;
00621 { int ret = r_postlude(z);
00622 if (ret == 0) goto lab3;
00623 if (ret < 0) return ret;
00624 }
00625 lab3:
00626 z->c = c4;
00627 }
00628 return 1;
00629 }
00630
00631 extern struct SN_env * dutch_UTF_8_create_env(void) { return SN_create_env(0, 2, 1); }
00632
00633 extern void dutch_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); }
00634