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