00001
00002
00003 #include <limits.h>
00004 #include "porter.h"
00005
00006 static const symbol s_pool[] = {
00007 #define s_0_0 0
00008 's',
00009 #define s_0_1 1
00010 'i', 'e', 's',
00011 #define s_0_2 4
00012 's', 's', 'e', 's',
00013 #define s_0_3 8
00014 's', 's',
00015 #define s_1_1 10
00016 'b', 'b',
00017 #define s_1_2 12
00018 'd', 'd',
00019 #define s_1_3 14
00020 'f', 'f',
00021 #define s_1_4 16
00022 'g', 'g',
00023 #define s_1_5 18
00024 'b', 'l',
00025 #define s_1_6 20
00026 'm', 'm',
00027 #define s_1_7 22
00028 'n', 'n',
00029 #define s_1_8 24
00030 'p', 'p',
00031 #define s_1_9 26
00032 'r', 'r',
00033 #define s_1_10 28
00034 'a', 't',
00035 #define s_1_11 30
00036 't', 't',
00037 #define s_1_12 32
00038 'i', 'z',
00039 #define s_2_0 34
00040 'e', 'd',
00041 #define s_2_1 36
00042 'e', 'e', 'd',
00043 #define s_2_2 39
00044 'i', 'n', 'g',
00045 #define s_3_0 42
00046 'a', 'n', 'c', 'i',
00047 #define s_3_1 46
00048 'e', 'n', 'c', 'i',
00049 #define s_3_2 50
00050 'a', 'b', 'l', 'i',
00051 #define s_3_3 54
00052 'e', 'l', 'i',
00053 #define s_3_4 57
00054 'a', 'l', 'l', 'i',
00055 #define s_3_5 61
00056 'o', 'u', 's', 'l', 'i',
00057 #define s_3_6 66
00058 'e', 'n', 't', 'l', 'i',
00059 #define s_3_7 71
00060 'a', 'l', 'i', 't', 'i',
00061 #define s_3_8 76
00062 'b', 'i', 'l', 'i', 't', 'i',
00063 #define s_3_9 82
00064 'i', 'v', 'i', 't', 'i',
00065 #define s_3_10 87
00066 't', 'i', 'o', 'n', 'a', 'l',
00067 #define s_3_11 93
00068 'a', 't', 'i', 'o', 'n', 'a', 'l',
00069 #define s_3_12 100
00070 'a', 'l', 'i', 's', 'm',
00071 #define s_3_13 105
00072 'a', 't', 'i', 'o', 'n',
00073 #define s_3_14 110
00074 'i', 'z', 'a', 't', 'i', 'o', 'n',
00075 #define s_3_15 117
00076 'i', 'z', 'e', 'r',
00077 #define s_3_16 121
00078 'a', 't', 'o', 'r',
00079 #define s_3_17 125
00080 'i', 'v', 'e', 'n', 'e', 's', 's',
00081 #define s_3_18 132
00082 'f', 'u', 'l', 'n', 'e', 's', 's',
00083 #define s_3_19 139
00084 'o', 'u', 's', 'n', 'e', 's', 's',
00085 #define s_4_0 146
00086 'i', 'c', 'a', 't', 'e',
00087 #define s_4_1 151
00088 'a', 't', 'i', 'v', 'e',
00089 #define s_4_2 156
00090 'a', 'l', 'i', 'z', 'e',
00091 #define s_4_3 161
00092 'i', 'c', 'i', 't', 'i',
00093 #define s_4_4 166
00094 'i', 'c', 'a', 'l',
00095 #define s_4_5 170
00096 'f', 'u', 'l',
00097 #define s_4_6 173
00098 'n', 'e', 's', 's',
00099 #define s_5_0 177
00100 'i', 'c',
00101 #define s_5_1 179
00102 'a', 'n', 'c', 'e',
00103 #define s_5_2 183
00104 'e', 'n', 'c', 'e',
00105 #define s_5_3 187
00106 'a', 'b', 'l', 'e',
00107 #define s_5_4 191
00108 'i', 'b', 'l', 'e',
00109 #define s_5_5 195
00110 'a', 't', 'e',
00111 #define s_5_6 198
00112 'i', 'v', 'e',
00113 #define s_5_7 201
00114 'i', 'z', 'e',
00115 #define s_5_8 204
00116 'i', 't', 'i',
00117 #define s_5_9 207
00118 'a', 'l',
00119 #define s_5_10 209
00120 'i', 's', 'm',
00121 #define s_5_11 212
00122 'i', 'o', 'n',
00123 #define s_5_12 215
00124 'e', 'r',
00125 #define s_5_13 217
00126 'o', 'u', 's',
00127 #define s_5_14 220
00128 'a', 'n', 't',
00129 #define s_5_15 223
00130 'e', 'n', 't',
00131 #define s_5_16 226
00132 'm', 'e', 'n', 't',
00133 #define s_5_17 230
00134 'e', 'm', 'e', 'n', 't',
00135 #define s_5_18 235
00136 'o', 'u',
00137 };
00138
00139
00140 static const struct among a_0[4] =
00141 {
00142 { 1, s_0_0, -1, 3},
00143 { 3, s_0_1, 0, 2},
00144 { 4, s_0_2, 0, 1},
00145 { 2, s_0_3, 0, -1}
00146 };
00147
00148
00149 static const struct among a_1[13] =
00150 {
00151 { 0, 0, -1, 3},
00152 { 2, s_1_1, 0, 2},
00153 { 2, s_1_2, 0, 2},
00154 { 2, s_1_3, 0, 2},
00155 { 2, s_1_4, 0, 2},
00156 { 2, s_1_5, 0, 1},
00157 { 2, s_1_6, 0, 2},
00158 { 2, s_1_7, 0, 2},
00159 { 2, s_1_8, 0, 2},
00160 { 2, s_1_9, 0, 2},
00161 { 2, s_1_10, 0, 1},
00162 { 2, s_1_11, 0, 2},
00163 { 2, s_1_12, 0, 1}
00164 };
00165
00166
00167 static const struct among a_2[3] =
00168 {
00169 { 2, s_2_0, -1, 2},
00170 { 3, s_2_1, 0, 1},
00171 { 3, s_2_2, -1, 2}
00172 };
00173
00174
00175 static const struct among a_3[20] =
00176 {
00177 { 4, s_3_0, -1, 3},
00178 { 4, s_3_1, -1, 2},
00179 { 4, s_3_2, -1, 4},
00180 { 3, s_3_3, -1, 6},
00181 { 4, s_3_4, -1, 9},
00182 { 5, s_3_5, -1, 12},
00183 { 5, s_3_6, -1, 5},
00184 { 5, s_3_7, -1, 10},
00185 { 6, s_3_8, -1, 14},
00186 { 5, s_3_9, -1, 13},
00187 { 6, s_3_10, -1, 1},
00188 { 7, s_3_11, 10, 8},
00189 { 5, s_3_12, -1, 10},
00190 { 5, s_3_13, -1, 8},
00191 { 7, s_3_14, 13, 7},
00192 { 4, s_3_15, -1, 7},
00193 { 4, s_3_16, -1, 8},
00194 { 7, s_3_17, -1, 13},
00195 { 7, s_3_18, -1, 11},
00196 { 7, s_3_19, -1, 12}
00197 };
00198
00199
00200 static const struct among a_4[7] =
00201 {
00202 { 5, s_4_0, -1, 2},
00203 { 5, s_4_1, -1, 3},
00204 { 5, s_4_2, -1, 1},
00205 { 5, s_4_3, -1, 2},
00206 { 4, s_4_4, -1, 2},
00207 { 3, s_4_5, -1, 3},
00208 { 4, s_4_6, -1, 3}
00209 };
00210
00211
00212 static const struct among a_5[19] =
00213 {
00214 { 2, s_5_0, -1, 1},
00215 { 4, s_5_1, -1, 1},
00216 { 4, s_5_2, -1, 1},
00217 { 4, s_5_3, -1, 1},
00218 { 4, s_5_4, -1, 1},
00219 { 3, s_5_5, -1, 1},
00220 { 3, s_5_6, -1, 1},
00221 { 3, s_5_7, -1, 1},
00222 { 3, s_5_8, -1, 1},
00223 { 2, s_5_9, -1, 1},
00224 { 3, s_5_10, -1, 1},
00225 { 3, s_5_11, -1, 2},
00226 { 2, s_5_12, -1, 1},
00227 { 3, s_5_13, -1, 1},
00228 { 3, s_5_14, -1, 1},
00229 { 3, s_5_15, -1, 1},
00230 { 4, s_5_16, 15, 1},
00231 { 5, s_5_17, 16, 1},
00232 { 2, s_5_18, -1, 1}
00233 };
00234
00235 static const unsigned char g_v[] = { 17, 65, 16, 1 };
00236
00237 static const unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 };
00238
00239 static const symbol s_0[] = { 's', 's' };
00240 static const symbol s_1[] = { 'i' };
00241 static const symbol s_2[] = { 'e', 'e' };
00242 static const symbol s_3[] = { 'e' };
00243 static const symbol s_4[] = { 'e' };
00244 static const symbol s_5[] = { 'i' };
00245 static const symbol s_6[] = { 't', 'i', 'o', 'n' };
00246 static const symbol s_7[] = { 'e', 'n', 'c', 'e' };
00247 static const symbol s_8[] = { 'a', 'n', 'c', 'e' };
00248 static const symbol s_9[] = { 'a', 'b', 'l', 'e' };
00249 static const symbol s_10[] = { 'e', 'n', 't' };
00250 static const symbol s_11[] = { 'e' };
00251 static const symbol s_12[] = { 'i', 'z', 'e' };
00252 static const symbol s_13[] = { 'a', 't', 'e' };
00253 static const symbol s_14[] = { 'a', 'l' };
00254 static const symbol s_15[] = { 'a', 'l' };
00255 static const symbol s_16[] = { 'f', 'u', 'l' };
00256 static const symbol s_17[] = { 'o', 'u', 's' };
00257 static const symbol s_18[] = { 'i', 'v', 'e' };
00258 static const symbol s_19[] = { 'b', 'l', 'e' };
00259 static const symbol s_20[] = { 'a', 'l' };
00260 static const symbol s_21[] = { 'i', 'c' };
00261 static const symbol s_22[] = { 'Y' };
00262 static const symbol s_23[] = { 'Y' };
00263 static const symbol s_24[] = { 'y' };
00264
00265 int Xapian::InternalStemPorter::r_shortv() {
00266 if (out_grouping_b_U(g_v_WXY, 89, 121, 0)) return 0;
00267 if (in_grouping_b_U(g_v, 97, 121, 0)) return 0;
00268 if (out_grouping_b_U(g_v, 97, 121, 0)) return 0;
00269 return 1;
00270 }
00271
00272 int Xapian::InternalStemPorter::r_R1() {
00273 if (!(I_p1 <= c)) return 0;
00274 return 1;
00275 }
00276
00277 int Xapian::InternalStemPorter::r_R2() {
00278 if (!(I_p2 <= c)) return 0;
00279 return 1;
00280 }
00281
00282 int Xapian::InternalStemPorter::r_Step_1a() {
00283 int among_var;
00284 ket = c;
00285 if (c <= lb || p[c - 1] != 115) return 0;
00286 among_var = find_among_b(s_pool, a_0, 4, 0, 0);
00287 if (!(among_var)) return 0;
00288 bra = c;
00289 switch(among_var) {
00290 case 0: return 0;
00291 case 1:
00292 { int ret = slice_from_s(2, s_0);
00293 if (ret < 0) return ret;
00294 }
00295 break;
00296 case 2:
00297 { int ret = slice_from_s(1, s_1);
00298 if (ret < 0) return ret;
00299 }
00300 break;
00301 case 3:
00302 if (slice_del() == -1) return -1;
00303 break;
00304 }
00305 return 1;
00306 }
00307
00308 int Xapian::InternalStemPorter::r_Step_1b() {
00309 int among_var;
00310 ket = c;
00311 if (c - 1 <= lb || (p[c - 1] != 100 && p[c - 1] != 103)) return 0;
00312 among_var = find_among_b(s_pool, a_2, 3, 0, 0);
00313 if (!(among_var)) return 0;
00314 bra = c;
00315 switch(among_var) {
00316 case 0: return 0;
00317 case 1:
00318 { int ret = r_R1();
00319 if (ret <= 0) return ret;
00320 }
00321 { int ret = slice_from_s(2, s_2);
00322 if (ret < 0) return ret;
00323 }
00324 break;
00325 case 2:
00326 { int m_test1 = l - c;
00327 { int ret = out_grouping_b_U(g_v, 97, 121, 1);
00328 if (ret < 0) return 0;
00329 c -= ret;
00330 }
00331 c = l - m_test1;
00332 }
00333 if (slice_del() == -1) return -1;
00334 { int m_test2 = l - c;
00335 if (c - 1 <= lb || p[c - 1] >> 5 != 3 || !((68514004 >> (p[c - 1] & 0x1f)) & 1)) among_var = 3; else
00336 among_var = find_among_b(s_pool, a_1, 13, 0, 0);
00337 if (!(among_var)) return 0;
00338 c = l - m_test2;
00339 }
00340 switch(among_var) {
00341 case 0: return 0;
00342 case 1:
00343 { int saved_c = c;
00344 insert_s(c, c, 1, s_3);
00345 c = saved_c;
00346 }
00347 break;
00348 case 2:
00349 ket = c;
00350 { int ret = skip_utf8(p, c, lb, 0, -1);
00351 if (ret < 0) return 0;
00352 c = ret;
00353 }
00354 bra = c;
00355 if (slice_del() == -1) return -1;
00356 break;
00357 case 3:
00358 if (c != I_p1) return 0;
00359 { int m_test3 = l - c;
00360 { int ret = r_shortv();
00361 if (ret <= 0) return ret;
00362 }
00363 c = l - m_test3;
00364 }
00365 { int saved_c = c;
00366 insert_s(c, c, 1, s_4);
00367 c = saved_c;
00368 }
00369 break;
00370 }
00371 break;
00372 }
00373 return 1;
00374 }
00375
00376 int Xapian::InternalStemPorter::r_Step_1c() {
00377 ket = c;
00378 { int m1 = l - c; (void)m1;
00379 if (c <= lb || p[c - 1] != 'y') goto lab1;
00380 c--;
00381 goto lab0;
00382 lab1:
00383 c = l - m1;
00384 if (c <= lb || p[c - 1] != 'Y') return 0;
00385 c--;
00386 }
00387 lab0:
00388 bra = c;
00389 { int ret = out_grouping_b_U(g_v, 97, 121, 1);
00390 if (ret < 0) return 0;
00391 c -= ret;
00392 }
00393 { int ret = slice_from_s(1, s_5);
00394 if (ret < 0) return ret;
00395 }
00396 return 1;
00397 }
00398
00399 int Xapian::InternalStemPorter::r_Step_2() {
00400 int among_var;
00401 ket = c;
00402 if (c - 2 <= lb || p[c - 1] >> 5 != 3 || !((815616 >> (p[c - 1] & 0x1f)) & 1)) return 0;
00403 among_var = find_among_b(s_pool, a_3, 20, 0, 0);
00404 if (!(among_var)) return 0;
00405 bra = c;
00406 { int ret = r_R1();
00407 if (ret <= 0) return ret;
00408 }
00409 switch(among_var) {
00410 case 0: return 0;
00411 case 1:
00412 { int ret = slice_from_s(4, s_6);
00413 if (ret < 0) return ret;
00414 }
00415 break;
00416 case 2:
00417 { int ret = slice_from_s(4, s_7);
00418 if (ret < 0) return ret;
00419 }
00420 break;
00421 case 3:
00422 { int ret = slice_from_s(4, s_8);
00423 if (ret < 0) return ret;
00424 }
00425 break;
00426 case 4:
00427 { int ret = slice_from_s(4, s_9);
00428 if (ret < 0) return ret;
00429 }
00430 break;
00431 case 5:
00432 { int ret = slice_from_s(3, s_10);
00433 if (ret < 0) return ret;
00434 }
00435 break;
00436 case 6:
00437 { int ret = slice_from_s(1, s_11);
00438 if (ret < 0) return ret;
00439 }
00440 break;
00441 case 7:
00442 { int ret = slice_from_s(3, s_12);
00443 if (ret < 0) return ret;
00444 }
00445 break;
00446 case 8:
00447 { int ret = slice_from_s(3, s_13);
00448 if (ret < 0) return ret;
00449 }
00450 break;
00451 case 9:
00452 { int ret = slice_from_s(2, s_14);
00453 if (ret < 0) return ret;
00454 }
00455 break;
00456 case 10:
00457 { int ret = slice_from_s(2, s_15);
00458 if (ret < 0) return ret;
00459 }
00460 break;
00461 case 11:
00462 { int ret = slice_from_s(3, s_16);
00463 if (ret < 0) return ret;
00464 }
00465 break;
00466 case 12:
00467 { int ret = slice_from_s(3, s_17);
00468 if (ret < 0) return ret;
00469 }
00470 break;
00471 case 13:
00472 { int ret = slice_from_s(3, s_18);
00473 if (ret < 0) return ret;
00474 }
00475 break;
00476 case 14:
00477 { int ret = slice_from_s(3, s_19);
00478 if (ret < 0) return ret;
00479 }
00480 break;
00481 }
00482 return 1;
00483 }
00484
00485 int Xapian::InternalStemPorter::r_Step_3() {
00486 int among_var;
00487 ket = c;
00488 if (c - 2 <= lb || p[c - 1] >> 5 != 3 || !((528928 >> (p[c - 1] & 0x1f)) & 1)) return 0;
00489 among_var = find_among_b(s_pool, a_4, 7, 0, 0);
00490 if (!(among_var)) return 0;
00491 bra = c;
00492 { int ret = r_R1();
00493 if (ret <= 0) return ret;
00494 }
00495 switch(among_var) {
00496 case 0: return 0;
00497 case 1:
00498 { int ret = slice_from_s(2, s_20);
00499 if (ret < 0) return ret;
00500 }
00501 break;
00502 case 2:
00503 { int ret = slice_from_s(2, s_21);
00504 if (ret < 0) return ret;
00505 }
00506 break;
00507 case 3:
00508 if (slice_del() == -1) return -1;
00509 break;
00510 }
00511 return 1;
00512 }
00513
00514 int Xapian::InternalStemPorter::r_Step_4() {
00515 int among_var;
00516 ket = c;
00517 if (c - 1 <= lb || p[c - 1] >> 5 != 3 || !((3961384 >> (p[c - 1] & 0x1f)) & 1)) return 0;
00518 among_var = find_among_b(s_pool, a_5, 19, 0, 0);
00519 if (!(among_var)) return 0;
00520 bra = c;
00521 { int ret = r_R2();
00522 if (ret <= 0) return ret;
00523 }
00524 switch(among_var) {
00525 case 0: return 0;
00526 case 1:
00527 if (slice_del() == -1) return -1;
00528 break;
00529 case 2:
00530 { int m1 = l - c; (void)m1;
00531 if (c <= lb || p[c - 1] != 's') goto lab1;
00532 c--;
00533 goto lab0;
00534 lab1:
00535 c = l - m1;
00536 if (c <= lb || p[c - 1] != 't') return 0;
00537 c--;
00538 }
00539 lab0:
00540 if (slice_del() == -1) return -1;
00541 break;
00542 }
00543 return 1;
00544 }
00545
00546 int Xapian::InternalStemPorter::r_Step_5a() {
00547 ket = c;
00548 if (c <= lb || p[c - 1] != 'e') return 0;
00549 c--;
00550 bra = c;
00551 { int m1 = l - c; (void)m1;
00552 { int ret = r_R2();
00553 if (ret == 0) goto lab1;
00554 if (ret < 0) return ret;
00555 }
00556 goto lab0;
00557 lab1:
00558 c = l - m1;
00559 { int ret = r_R1();
00560 if (ret <= 0) return ret;
00561 }
00562 { int m2 = l - c; (void)m2;
00563 { int ret = r_shortv();
00564 if (ret == 0) goto lab2;
00565 if (ret < 0) return ret;
00566 }
00567 return 0;
00568 lab2:
00569 c = l - m2;
00570 }
00571 }
00572 lab0:
00573 if (slice_del() == -1) return -1;
00574 return 1;
00575 }
00576
00577 int Xapian::InternalStemPorter::r_Step_5b() {
00578 ket = c;
00579 if (c <= lb || p[c - 1] != 'l') return 0;
00580 c--;
00581 bra = c;
00582 { int ret = r_R2();
00583 if (ret <= 0) return ret;
00584 }
00585 if (c <= lb || p[c - 1] != 'l') return 0;
00586 c--;
00587 if (slice_del() == -1) return -1;
00588 return 1;
00589 }
00590
00591 int Xapian::InternalStemPorter::stem() {
00592 B_Y_found = 0;
00593 { int c1 = c;
00594 bra = c;
00595 if (c == l || p[c] != 'y') goto lab0;
00596 c++;
00597 ket = c;
00598 { int ret = slice_from_s(1, s_22);
00599 if (ret < 0) return ret;
00600 }
00601 B_Y_found = 1;
00602 lab0:
00603 c = c1;
00604 }
00605 { int c2 = c;
00606 while(1) {
00607 int c3 = c;
00608 while(1) {
00609 int c4 = c;
00610 if (in_grouping_U(g_v, 97, 121, 0)) goto lab3;
00611 bra = c;
00612 if (c == l || p[c] != 'y') goto lab3;
00613 c++;
00614 ket = c;
00615 c = c4;
00616 break;
00617 lab3:
00618 c = c4;
00619 { int ret = skip_utf8(p, c, 0, l, 1);
00620 if (ret < 0) goto lab2;
00621 c = ret;
00622 }
00623 }
00624 { int ret = slice_from_s(1, s_23);
00625 if (ret < 0) return ret;
00626 }
00627 B_Y_found = 1;
00628 continue;
00629 lab2:
00630 c = c3;
00631 break;
00632 }
00633 c = c2;
00634 }
00635 I_p1 = l;
00636 I_p2 = l;
00637 { int c5 = c;
00638 { int ret = out_grouping_U(g_v, 97, 121, 1);
00639 if (ret < 0) goto lab4;
00640 c += ret;
00641 }
00642 { int ret = in_grouping_U(g_v, 97, 121, 1);
00643 if (ret < 0) goto lab4;
00644 c += ret;
00645 }
00646 I_p1 = c;
00647 { int ret = out_grouping_U(g_v, 97, 121, 1);
00648 if (ret < 0) goto lab4;
00649 c += ret;
00650 }
00651 { int ret = in_grouping_U(g_v, 97, 121, 1);
00652 if (ret < 0) goto lab4;
00653 c += ret;
00654 }
00655 I_p2 = c;
00656 lab4:
00657 c = c5;
00658 }
00659 lb = c; c = l;
00660
00661 { int m6 = l - c; (void)m6;
00662 { int ret = r_Step_1a();
00663 if (ret == 0) goto lab5;
00664 if (ret < 0) return ret;
00665 }
00666 lab5:
00667 c = l - m6;
00668 }
00669 { int m7 = l - c; (void)m7;
00670 { int ret = r_Step_1b();
00671 if (ret == 0) goto lab6;
00672 if (ret < 0) return ret;
00673 }
00674 lab6:
00675 c = l - m7;
00676 }
00677 { int m8 = l - c; (void)m8;
00678 { int ret = r_Step_1c();
00679 if (ret == 0) goto lab7;
00680 if (ret < 0) return ret;
00681 }
00682 lab7:
00683 c = l - m8;
00684 }
00685 { int m9 = l - c; (void)m9;
00686 { int ret = r_Step_2();
00687 if (ret == 0) goto lab8;
00688 if (ret < 0) return ret;
00689 }
00690 lab8:
00691 c = l - m9;
00692 }
00693 { int m10 = l - c; (void)m10;
00694 { int ret = r_Step_3();
00695 if (ret == 0) goto lab9;
00696 if (ret < 0) return ret;
00697 }
00698 lab9:
00699 c = l - m10;
00700 }
00701 { int m11 = l - c; (void)m11;
00702 { int ret = r_Step_4();
00703 if (ret == 0) goto lab10;
00704 if (ret < 0) return ret;
00705 }
00706 lab10:
00707 c = l - m11;
00708 }
00709 { int m12 = l - c; (void)m12;
00710 { int ret = r_Step_5a();
00711 if (ret == 0) goto lab11;
00712 if (ret < 0) return ret;
00713 }
00714 lab11:
00715 c = l - m12;
00716 }
00717 { int m13 = l - c; (void)m13;
00718 { int ret = r_Step_5b();
00719 if (ret == 0) goto lab12;
00720 if (ret < 0) return ret;
00721 }
00722 lab12:
00723 c = l - m13;
00724 }
00725 c = lb;
00726 { int c14 = c;
00727 if (!(B_Y_found)) goto lab13;
00728 while(1) {
00729 int c15 = c;
00730 while(1) {
00731 int c16 = c;
00732 bra = c;
00733 if (c == l || p[c] != 'Y') goto lab15;
00734 c++;
00735 ket = c;
00736 c = c16;
00737 break;
00738 lab15:
00739 c = c16;
00740 { int ret = skip_utf8(p, c, 0, l, 1);
00741 if (ret < 0) goto lab14;
00742 c = ret;
00743 }
00744 }
00745 { int ret = slice_from_s(1, s_24);
00746 if (ret < 0) return ret;
00747 }
00748 continue;
00749 lab14:
00750 c = c15;
00751 break;
00752 }
00753 lab13:
00754 c = c14;
00755 }
00756 return 1;
00757 }
00758
00759 Xapian::InternalStemPorter::InternalStemPorter()
00760 : B_Y_found(0), I_p2(0), I_p1(0)
00761 {
00762 }
00763
00764 Xapian::InternalStemPorter::~InternalStemPorter()
00765 {
00766 }
00767
00768 const char *
00769 Xapian::InternalStemPorter::get_description() const
00770 {
00771 return "porter";
00772 }