00001
00002
00003 #include <limits.h>
00004 #include "english.h"
00005
00006 static const symbol s_pool[] = {
00007 #define s_0_0 0
00008 'a', 'r', 's', 'e', 'n',
00009 #define s_0_1 5
00010 'c', 'o', 'm', 'm', 'u', 'n',
00011 #define s_0_2 11
00012 'g', 'e', 'n', 'e', 'r',
00013 #define s_1_0 16
00014 '\'',
00015 #define s_1_1 17
00016 '\'', 's', '\'',
00017 #define s_1_2 20
00018 '\'', 's',
00019 #define s_2_0 22
00020 'i', 'e', 'd',
00021 #define s_2_1 25
00022 's',
00023 #define s_2_2 26
00024 'i', 'e', 's',
00025 #define s_2_3 29
00026 's', 's', 'e', 's',
00027 #define s_2_4 33
00028 's', 's',
00029 #define s_2_5 35
00030 'u', 's',
00031 #define s_3_1 37
00032 'b', 'b',
00033 #define s_3_2 39
00034 'd', 'd',
00035 #define s_3_3 41
00036 'f', 'f',
00037 #define s_3_4 43
00038 'g', 'g',
00039 #define s_3_5 45
00040 'b', 'l',
00041 #define s_3_6 47
00042 'm', 'm',
00043 #define s_3_7 49
00044 'n', 'n',
00045 #define s_3_8 51
00046 'p', 'p',
00047 #define s_3_9 53
00048 'r', 'r',
00049 #define s_3_10 55
00050 'a', 't',
00051 #define s_3_11 57
00052 't', 't',
00053 #define s_3_12 59
00054 'i', 'z',
00055 #define s_4_0 61
00056 'e', 'd',
00057 #define s_4_1 63
00058 'e', 'e', 'd',
00059 #define s_4_2 66
00060 'i', 'n', 'g',
00061 #define s_4_3 69
00062 'e', 'd', 'l', 'y',
00063 #define s_4_4 73
00064 'e', 'e', 'd', 'l', 'y',
00065 #define s_4_5 78
00066 'i', 'n', 'g', 'l', 'y',
00067 #define s_5_0 83
00068 'a', 'n', 'c', 'i',
00069 #define s_5_1 87
00070 'e', 'n', 'c', 'i',
00071 #define s_5_2 91
00072 'o', 'g', 'i',
00073 #define s_5_3 94
00074 'l', 'i',
00075 #define s_5_4 96
00076 'b', 'l', 'i',
00077 #define s_5_5 99
00078 'a', 'b', 'l', 'i',
00079 #define s_5_6 103
00080 'a', 'l', 'l', 'i',
00081 #define s_5_7 107
00082 'f', 'u', 'l', 'l', 'i',
00083 #define s_5_8 112
00084 'l', 'e', 's', 's', 'l', 'i',
00085 #define s_5_9 118
00086 'o', 'u', 's', 'l', 'i',
00087 #define s_5_10 123
00088 'e', 'n', 't', 'l', 'i',
00089 #define s_5_11 128
00090 'a', 'l', 'i', 't', 'i',
00091 #define s_5_12 133
00092 'b', 'i', 'l', 'i', 't', 'i',
00093 #define s_5_13 139
00094 'i', 'v', 'i', 't', 'i',
00095 #define s_5_14 144
00096 't', 'i', 'o', 'n', 'a', 'l',
00097 #define s_5_15 150
00098 'a', 't', 'i', 'o', 'n', 'a', 'l',
00099 #define s_5_16 157
00100 'a', 'l', 'i', 's', 'm',
00101 #define s_5_17 162
00102 'a', 't', 'i', 'o', 'n',
00103 #define s_5_18 167
00104 'i', 'z', 'a', 't', 'i', 'o', 'n',
00105 #define s_5_19 174
00106 'i', 'z', 'e', 'r',
00107 #define s_5_20 178
00108 'a', 't', 'o', 'r',
00109 #define s_5_21 182
00110 'i', 'v', 'e', 'n', 'e', 's', 's',
00111 #define s_5_22 189
00112 'f', 'u', 'l', 'n', 'e', 's', 's',
00113 #define s_5_23 196
00114 'o', 'u', 's', 'n', 'e', 's', 's',
00115 #define s_6_0 203
00116 'i', 'c', 'a', 't', 'e',
00117 #define s_6_1 208
00118 'a', 't', 'i', 'v', 'e',
00119 #define s_6_2 213
00120 'a', 'l', 'i', 'z', 'e',
00121 #define s_6_3 218
00122 'i', 'c', 'i', 't', 'i',
00123 #define s_6_4 223
00124 'i', 'c', 'a', 'l',
00125 #define s_6_5 227
00126 't', 'i', 'o', 'n', 'a', 'l',
00127 #define s_6_6 233
00128 'a', 't', 'i', 'o', 'n', 'a', 'l',
00129 #define s_6_7 240
00130 'f', 'u', 'l',
00131 #define s_6_8 243
00132 'n', 'e', 's', 's',
00133 #define s_7_0 247
00134 'i', 'c',
00135 #define s_7_1 249
00136 'a', 'n', 'c', 'e',
00137 #define s_7_2 253
00138 'e', 'n', 'c', 'e',
00139 #define s_7_3 257
00140 'a', 'b', 'l', 'e',
00141 #define s_7_4 261
00142 'i', 'b', 'l', 'e',
00143 #define s_7_5 265
00144 'a', 't', 'e',
00145 #define s_7_6 268
00146 'i', 'v', 'e',
00147 #define s_7_7 271
00148 'i', 'z', 'e',
00149 #define s_7_8 274
00150 'i', 't', 'i',
00151 #define s_7_9 277
00152 'a', 'l',
00153 #define s_7_10 279
00154 'i', 's', 'm',
00155 #define s_7_11 282
00156 'i', 'o', 'n',
00157 #define s_7_12 285
00158 'e', 'r',
00159 #define s_7_13 287
00160 'o', 'u', 's',
00161 #define s_7_14 290
00162 'a', 'n', 't',
00163 #define s_7_15 293
00164 'e', 'n', 't',
00165 #define s_7_16 296
00166 'm', 'e', 'n', 't',
00167 #define s_7_17 300
00168 'e', 'm', 'e', 'n', 't',
00169 #define s_8_0 305
00170 'e',
00171 #define s_8_1 306
00172 'l',
00173 #define s_9_0 307
00174 's', 'u', 'c', 'c', 'e', 'e', 'd',
00175 #define s_9_1 314
00176 'p', 'r', 'o', 'c', 'e', 'e', 'd',
00177 #define s_9_2 321
00178 'e', 'x', 'c', 'e', 'e', 'd',
00179 #define s_9_3 327
00180 'c', 'a', 'n', 'n', 'i', 'n', 'g',
00181 #define s_9_4 334
00182 'i', 'n', 'n', 'i', 'n', 'g',
00183 #define s_9_5 340
00184 'e', 'a', 'r', 'r', 'i', 'n', 'g',
00185 #define s_9_6 347
00186 'h', 'e', 'r', 'r', 'i', 'n', 'g',
00187 #define s_9_7 354
00188 'o', 'u', 't', 'i', 'n', 'g',
00189 #define s_10_0 360
00190 'a', 'n', 'd', 'e', 's',
00191 #define s_10_1 365
00192 'a', 't', 'l', 'a', 's',
00193 #define s_10_2 370
00194 'b', 'i', 'a', 's',
00195 #define s_10_3 374
00196 'c', 'o', 's', 'm', 'o', 's',
00197 #define s_10_4 380
00198 'd', 'y', 'i', 'n', 'g',
00199 #define s_10_5 385
00200 'e', 'a', 'r', 'l', 'y',
00201 #define s_10_6 390
00202 'g', 'e', 'n', 't', 'l', 'y',
00203 #define s_10_7 396
00204 'h', 'o', 'w', 'e',
00205 #define s_10_8 400
00206 'i', 'd', 'l', 'y',
00207 #define s_10_9 404
00208 'l', 'y', 'i', 'n', 'g',
00209 #define s_10_10 409
00210 'n', 'e', 'w', 's',
00211 #define s_10_11 413
00212 'o', 'n', 'l', 'y',
00213 #define s_10_12 417
00214 's', 'i', 'n', 'g', 'l', 'y',
00215 #define s_10_13 423
00216 's', 'k', 'i', 'e', 's',
00217 #define s_10_14 428
00218 's', 'k', 'i', 's',
00219 #define s_10_15 432
00220 's', 'k', 'y',
00221 #define s_10_16 435
00222 't', 'y', 'i', 'n', 'g',
00223 #define s_10_17 440
00224 'u', 'g', 'l', 'y',
00225 };
00226
00227
00228 static const struct among a_0[3] =
00229 {
00230 { 5, s_0_0, -1, -1},
00231 { 6, s_0_1, -1, -1},
00232 { 5, s_0_2, -1, -1}
00233 };
00234
00235
00236 static const struct among a_1[3] =
00237 {
00238 { 1, s_1_0, -1, 1},
00239 { 3, s_1_1, 0, 1},
00240 { 2, s_1_2, -1, 1}
00241 };
00242
00243
00244 static const struct among a_2[6] =
00245 {
00246 { 3, s_2_0, -1, 2},
00247 { 1, s_2_1, -1, 3},
00248 { 3, s_2_2, 1, 2},
00249 { 4, s_2_3, 1, 1},
00250 { 2, s_2_4, 1, -1},
00251 { 2, s_2_5, 1, -1}
00252 };
00253
00254
00255 static const struct among a_3[13] =
00256 {
00257 { 0, 0, -1, 3},
00258 { 2, s_3_1, 0, 2},
00259 { 2, s_3_2, 0, 2},
00260 { 2, s_3_3, 0, 2},
00261 { 2, s_3_4, 0, 2},
00262 { 2, s_3_5, 0, 1},
00263 { 2, s_3_6, 0, 2},
00264 { 2, s_3_7, 0, 2},
00265 { 2, s_3_8, 0, 2},
00266 { 2, s_3_9, 0, 2},
00267 { 2, s_3_10, 0, 1},
00268 { 2, s_3_11, 0, 2},
00269 { 2, s_3_12, 0, 1}
00270 };
00271
00272
00273 static const struct among a_4[6] =
00274 {
00275 { 2, s_4_0, -1, 2},
00276 { 3, s_4_1, 0, 1},
00277 { 3, s_4_2, -1, 2},
00278 { 4, s_4_3, -1, 2},
00279 { 5, s_4_4, 3, 1},
00280 { 5, s_4_5, -1, 2}
00281 };
00282
00283
00284 static const struct among a_5[24] =
00285 {
00286 { 4, s_5_0, -1, 3},
00287 { 4, s_5_1, -1, 2},
00288 { 3, s_5_2, -1, 13},
00289 { 2, s_5_3, -1, 16},
00290 { 3, s_5_4, 3, 12},
00291 { 4, s_5_5, 4, 4},
00292 { 4, s_5_6, 3, 8},
00293 { 5, s_5_7, 3, 14},
00294 { 6, s_5_8, 3, 15},
00295 { 5, s_5_9, 3, 10},
00296 { 5, s_5_10, 3, 5},
00297 { 5, s_5_11, -1, 8},
00298 { 6, s_5_12, -1, 12},
00299 { 5, s_5_13, -1, 11},
00300 { 6, s_5_14, -1, 1},
00301 { 7, s_5_15, 14, 7},
00302 { 5, s_5_16, -1, 8},
00303 { 5, s_5_17, -1, 7},
00304 { 7, s_5_18, 17, 6},
00305 { 4, s_5_19, -1, 6},
00306 { 4, s_5_20, -1, 7},
00307 { 7, s_5_21, -1, 11},
00308 { 7, s_5_22, -1, 9},
00309 { 7, s_5_23, -1, 10}
00310 };
00311
00312
00313 static const struct among a_6[9] =
00314 {
00315 { 5, s_6_0, -1, 4},
00316 { 5, s_6_1, -1, 6},
00317 { 5, s_6_2, -1, 3},
00318 { 5, s_6_3, -1, 4},
00319 { 4, s_6_4, -1, 4},
00320 { 6, s_6_5, -1, 1},
00321 { 7, s_6_6, 5, 2},
00322 { 3, s_6_7, -1, 5},
00323 { 4, s_6_8, -1, 5}
00324 };
00325
00326
00327 static const struct among a_7[18] =
00328 {
00329 { 2, s_7_0, -1, 1},
00330 { 4, s_7_1, -1, 1},
00331 { 4, s_7_2, -1, 1},
00332 { 4, s_7_3, -1, 1},
00333 { 4, s_7_4, -1, 1},
00334 { 3, s_7_5, -1, 1},
00335 { 3, s_7_6, -1, 1},
00336 { 3, s_7_7, -1, 1},
00337 { 3, s_7_8, -1, 1},
00338 { 2, s_7_9, -1, 1},
00339 { 3, s_7_10, -1, 1},
00340 { 3, s_7_11, -1, 2},
00341 { 2, s_7_12, -1, 1},
00342 { 3, s_7_13, -1, 1},
00343 { 3, s_7_14, -1, 1},
00344 { 3, s_7_15, -1, 1},
00345 { 4, s_7_16, 15, 1},
00346 { 5, s_7_17, 16, 1}
00347 };
00348
00349
00350 static const struct among a_8[2] =
00351 {
00352 { 1, s_8_0, -1, 1},
00353 { 1, s_8_1, -1, 2}
00354 };
00355
00356
00357 static const struct among a_9[8] =
00358 {
00359 { 7, s_9_0, -1, -1},
00360 { 7, s_9_1, -1, -1},
00361 { 6, s_9_2, -1, -1},
00362 { 7, s_9_3, -1, -1},
00363 { 6, s_9_4, -1, -1},
00364 { 7, s_9_5, -1, -1},
00365 { 7, s_9_6, -1, -1},
00366 { 6, s_9_7, -1, -1}
00367 };
00368
00369
00370 static const struct among a_10[18] =
00371 {
00372 { 5, s_10_0, -1, -1},
00373 { 5, s_10_1, -1, -1},
00374 { 4, s_10_2, -1, -1},
00375 { 6, s_10_3, -1, -1},
00376 { 5, s_10_4, -1, 3},
00377 { 5, s_10_5, -1, 9},
00378 { 6, s_10_6, -1, 7},
00379 { 4, s_10_7, -1, -1},
00380 { 4, s_10_8, -1, 6},
00381 { 5, s_10_9, -1, 4},
00382 { 4, s_10_10, -1, -1},
00383 { 4, s_10_11, -1, 10},
00384 { 6, s_10_12, -1, 11},
00385 { 5, s_10_13, -1, 2},
00386 { 4, s_10_14, -1, 1},
00387 { 3, s_10_15, -1, -1},
00388 { 5, s_10_16, -1, 5},
00389 { 4, s_10_17, -1, 8}
00390 };
00391
00392 static const unsigned char g_v[] = { 17, 65, 16, 1 };
00393
00394 static const unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 };
00395
00396 static const unsigned char g_valid_LI[] = { 55, 141, 2 };
00397
00398 static const symbol s_0[] = { 'Y' };
00399 static const symbol s_1[] = { 'Y' };
00400 static const symbol s_2[] = { 's', 's' };
00401 static const symbol s_3[] = { 'i' };
00402 static const symbol s_4[] = { 'i', 'e' };
00403 static const symbol s_5[] = { 'e', 'e' };
00404 static const symbol s_6[] = { 'e' };
00405 static const symbol s_7[] = { 'e' };
00406 static const symbol s_8[] = { 'i' };
00407 static const symbol s_9[] = { 't', 'i', 'o', 'n' };
00408 static const symbol s_10[] = { 'e', 'n', 'c', 'e' };
00409 static const symbol s_11[] = { 'a', 'n', 'c', 'e' };
00410 static const symbol s_12[] = { 'a', 'b', 'l', 'e' };
00411 static const symbol s_13[] = { 'e', 'n', 't' };
00412 static const symbol s_14[] = { 'i', 'z', 'e' };
00413 static const symbol s_15[] = { 'a', 't', 'e' };
00414 static const symbol s_16[] = { 'a', 'l' };
00415 static const symbol s_17[] = { 'f', 'u', 'l' };
00416 static const symbol s_18[] = { 'o', 'u', 's' };
00417 static const symbol s_19[] = { 'i', 'v', 'e' };
00418 static const symbol s_20[] = { 'b', 'l', 'e' };
00419 static const symbol s_21[] = { 'o', 'g' };
00420 static const symbol s_22[] = { 'f', 'u', 'l' };
00421 static const symbol s_23[] = { 'l', 'e', 's', 's' };
00422 static const symbol s_24[] = { 't', 'i', 'o', 'n' };
00423 static const symbol s_25[] = { 'a', 't', 'e' };
00424 static const symbol s_26[] = { 'a', 'l' };
00425 static const symbol s_27[] = { 'i', 'c' };
00426 static const symbol s_28[] = { 's', 'k', 'i' };
00427 static const symbol s_29[] = { 's', 'k', 'y' };
00428 static const symbol s_30[] = { 'd', 'i', 'e' };
00429 static const symbol s_31[] = { 'l', 'i', 'e' };
00430 static const symbol s_32[] = { 't', 'i', 'e' };
00431 static const symbol s_33[] = { 'i', 'd', 'l' };
00432 static const symbol s_34[] = { 'g', 'e', 'n', 't', 'l' };
00433 static const symbol s_35[] = { 'u', 'g', 'l', 'i' };
00434 static const symbol s_36[] = { 'e', 'a', 'r', 'l', 'i' };
00435 static const symbol s_37[] = { 'o', 'n', 'l', 'i' };
00436 static const symbol s_38[] = { 's', 'i', 'n', 'g', 'l' };
00437 static const symbol s_39[] = { 'y' };
00438
00439 int Xapian::InternalStemEnglish::r_prelude() {
00440 B_Y_found = 0;
00441 { int c1 = c;
00442 bra = c;
00443 if (c == l || p[c] != 39) goto lab0;
00444 c++;
00445 ket = c;
00446 if (slice_del() == -1) return -1;
00447 lab0:
00448 c = c1;
00449 }
00450 { int c2 = c;
00451 bra = c;
00452 if (c == l || p[c] != 'y') goto lab1;
00453 c++;
00454 ket = c;
00455 { int ret = slice_from_s(1, s_0);
00456 if (ret < 0) return ret;
00457 }
00458 B_Y_found = 1;
00459 lab1:
00460 c = c2;
00461 }
00462 { int c3 = c;
00463 while(1) {
00464 int c4 = c;
00465 while(1) {
00466 int c5 = c;
00467 if (in_grouping_U(g_v, 97, 121, 0)) goto lab4;
00468 bra = c;
00469 if (c == l || p[c] != 'y') goto lab4;
00470 c++;
00471 ket = c;
00472 c = c5;
00473 break;
00474 lab4:
00475 c = c5;
00476 { int ret = skip_utf8(p, c, 0, l, 1);
00477 if (ret < 0) goto lab3;
00478 c = ret;
00479 }
00480 }
00481 { int ret = slice_from_s(1, s_1);
00482 if (ret < 0) return ret;
00483 }
00484 B_Y_found = 1;
00485 continue;
00486 lab3:
00487 c = c4;
00488 break;
00489 }
00490 c = c3;
00491 }
00492 return 1;
00493 }
00494
00495 int Xapian::InternalStemEnglish::r_mark_regions() {
00496 I_p1 = l;
00497 I_p2 = l;
00498 { int c1 = c;
00499 { int c2 = c;
00500 if (c + 4 >= l || p[c + 4] >> 5 != 3 || !((2375680 >> (p[c + 4] & 0x1f)) & 1)) goto lab2;
00501 if (!(find_among(s_pool, a_0, 3, 0, 0))) goto lab2;
00502 goto lab1;
00503 lab2:
00504 c = c2;
00505 { int ret = out_grouping_U(g_v, 97, 121, 1);
00506 if (ret < 0) goto lab0;
00507 c += ret;
00508 }
00509 { int ret = in_grouping_U(g_v, 97, 121, 1);
00510 if (ret < 0) goto lab0;
00511 c += ret;
00512 }
00513 }
00514 lab1:
00515 I_p1 = c;
00516 { int ret = out_grouping_U(g_v, 97, 121, 1);
00517 if (ret < 0) goto lab0;
00518 c += ret;
00519 }
00520 { int ret = in_grouping_U(g_v, 97, 121, 1);
00521 if (ret < 0) goto lab0;
00522 c += ret;
00523 }
00524 I_p2 = c;
00525 lab0:
00526 c = c1;
00527 }
00528 return 1;
00529 }
00530
00531 int Xapian::InternalStemEnglish::r_shortv() {
00532 { int m1 = l - c; (void)m1;
00533 if (out_grouping_b_U(g_v_WXY, 89, 121, 0)) goto lab1;
00534 if (in_grouping_b_U(g_v, 97, 121, 0)) goto lab1;
00535 if (out_grouping_b_U(g_v, 97, 121, 0)) goto lab1;
00536 goto lab0;
00537 lab1:
00538 c = l - m1;
00539 if (out_grouping_b_U(g_v, 97, 121, 0)) return 0;
00540 if (in_grouping_b_U(g_v, 97, 121, 0)) return 0;
00541 if (c > lb) return 0;
00542 }
00543 lab0:
00544 return 1;
00545 }
00546
00547 int Xapian::InternalStemEnglish::r_R1() {
00548 if (!(I_p1 <= c)) return 0;
00549 return 1;
00550 }
00551
00552 int Xapian::InternalStemEnglish::r_R2() {
00553 if (!(I_p2 <= c)) return 0;
00554 return 1;
00555 }
00556
00557 int Xapian::InternalStemEnglish::r_Step_1a() {
00558 int among_var;
00559 { int m1 = l - c; (void)m1;
00560 ket = c;
00561 if (c <= lb || (p[c - 1] != 39 && p[c - 1] != 115)) { c = l - m1; goto lab0; }
00562 among_var = find_among_b(s_pool, a_1, 3, 0, 0);
00563 if (!(among_var)) { c = l - m1; goto lab0; }
00564 bra = c;
00565 switch(among_var) {
00566 case 0: { c = l - m1; goto lab0; }
00567 case 1:
00568 if (slice_del() == -1) return -1;
00569 break;
00570 }
00571 lab0:
00572 ;
00573 }
00574 ket = c;
00575 if (c <= lb || (p[c - 1] != 100 && p[c - 1] != 115)) return 0;
00576 among_var = find_among_b(s_pool, a_2, 6, 0, 0);
00577 if (!(among_var)) return 0;
00578 bra = c;
00579 switch(among_var) {
00580 case 0: return 0;
00581 case 1:
00582 { int ret = slice_from_s(2, s_2);
00583 if (ret < 0) return ret;
00584 }
00585 break;
00586 case 2:
00587 { int m2 = l - c; (void)m2;
00588 { int ret = skip_utf8(p, c, lb, l, - 2);
00589 if (ret < 0) goto lab2;
00590 c = ret;
00591 }
00592 { int ret = slice_from_s(1, s_3);
00593 if (ret < 0) return ret;
00594 }
00595 goto lab1;
00596 lab2:
00597 c = l - m2;
00598 { int ret = slice_from_s(2, s_4);
00599 if (ret < 0) return ret;
00600 }
00601 }
00602 lab1:
00603 break;
00604 case 3:
00605 { int ret = skip_utf8(p, c, lb, 0, -1);
00606 if (ret < 0) return 0;
00607 c = ret;
00608 }
00609 { int ret = out_grouping_b_U(g_v, 97, 121, 1);
00610 if (ret < 0) return 0;
00611 c -= ret;
00612 }
00613 if (slice_del() == -1) return -1;
00614 break;
00615 }
00616 return 1;
00617 }
00618
00619 int Xapian::InternalStemEnglish::r_Step_1b() {
00620 int among_var;
00621 ket = c;
00622 if (c - 1 <= lb || p[c - 1] >> 5 != 3 || !((33554576 >> (p[c - 1] & 0x1f)) & 1)) return 0;
00623 among_var = find_among_b(s_pool, a_4, 6, 0, 0);
00624 if (!(among_var)) return 0;
00625 bra = c;
00626 switch(among_var) {
00627 case 0: return 0;
00628 case 1:
00629 { int ret = r_R1();
00630 if (ret <= 0) return ret;
00631 }
00632 { int ret = slice_from_s(2, s_5);
00633 if (ret < 0) return ret;
00634 }
00635 break;
00636 case 2:
00637 { int m_test1 = l - c;
00638 { int ret = out_grouping_b_U(g_v, 97, 121, 1);
00639 if (ret < 0) return 0;
00640 c -= ret;
00641 }
00642 c = l - m_test1;
00643 }
00644 if (slice_del() == -1) return -1;
00645 { int m_test2 = l - c;
00646 if (c - 1 <= lb || p[c - 1] >> 5 != 3 || !((68514004 >> (p[c - 1] & 0x1f)) & 1)) among_var = 3; else
00647 among_var = find_among_b(s_pool, a_3, 13, 0, 0);
00648 if (!(among_var)) return 0;
00649 c = l - m_test2;
00650 }
00651 switch(among_var) {
00652 case 0: return 0;
00653 case 1:
00654 { int saved_c = c;
00655 insert_s(c, c, 1, s_6);
00656 c = saved_c;
00657 }
00658 break;
00659 case 2:
00660 ket = c;
00661 { int ret = skip_utf8(p, c, lb, 0, -1);
00662 if (ret < 0) return 0;
00663 c = ret;
00664 }
00665 bra = c;
00666 if (slice_del() == -1) return -1;
00667 break;
00668 case 3:
00669 if (c != I_p1) return 0;
00670 { int m_test3 = l - c;
00671 { int ret = r_shortv();
00672 if (ret <= 0) return ret;
00673 }
00674 c = l - m_test3;
00675 }
00676 { int saved_c = c;
00677 insert_s(c, c, 1, s_7);
00678 c = saved_c;
00679 }
00680 break;
00681 }
00682 break;
00683 }
00684 return 1;
00685 }
00686
00687 int Xapian::InternalStemEnglish::r_Step_1c() {
00688 ket = c;
00689 { int m1 = l - c; (void)m1;
00690 if (c <= lb || p[c - 1] != 'y') goto lab1;
00691 c--;
00692 goto lab0;
00693 lab1:
00694 c = l - m1;
00695 if (c <= lb || p[c - 1] != 'Y') return 0;
00696 c--;
00697 }
00698 lab0:
00699 bra = c;
00700 if (out_grouping_b_U(g_v, 97, 121, 0)) return 0;
00701 { int m2 = l - c; (void)m2;
00702 if (c > lb) goto lab2;
00703 return 0;
00704 lab2:
00705 c = l - m2;
00706 }
00707 { int ret = slice_from_s(1, s_8);
00708 if (ret < 0) return ret;
00709 }
00710 return 1;
00711 }
00712
00713 int Xapian::InternalStemEnglish::r_Step_2() {
00714 int among_var;
00715 ket = c;
00716 if (c - 1 <= lb || p[c - 1] >> 5 != 3 || !((815616 >> (p[c - 1] & 0x1f)) & 1)) return 0;
00717 among_var = find_among_b(s_pool, a_5, 24, 0, 0);
00718 if (!(among_var)) return 0;
00719 bra = c;
00720 { int ret = r_R1();
00721 if (ret <= 0) return ret;
00722 }
00723 switch(among_var) {
00724 case 0: return 0;
00725 case 1:
00726 { int ret = slice_from_s(4, s_9);
00727 if (ret < 0) return ret;
00728 }
00729 break;
00730 case 2:
00731 { int ret = slice_from_s(4, s_10);
00732 if (ret < 0) return ret;
00733 }
00734 break;
00735 case 3:
00736 { int ret = slice_from_s(4, s_11);
00737 if (ret < 0) return ret;
00738 }
00739 break;
00740 case 4:
00741 { int ret = slice_from_s(4, s_12);
00742 if (ret < 0) return ret;
00743 }
00744 break;
00745 case 5:
00746 { int ret = slice_from_s(3, s_13);
00747 if (ret < 0) return ret;
00748 }
00749 break;
00750 case 6:
00751 { int ret = slice_from_s(3, s_14);
00752 if (ret < 0) return ret;
00753 }
00754 break;
00755 case 7:
00756 { int ret = slice_from_s(3, s_15);
00757 if (ret < 0) return ret;
00758 }
00759 break;
00760 case 8:
00761 { int ret = slice_from_s(2, s_16);
00762 if (ret < 0) return ret;
00763 }
00764 break;
00765 case 9:
00766 { int ret = slice_from_s(3, s_17);
00767 if (ret < 0) return ret;
00768 }
00769 break;
00770 case 10:
00771 { int ret = slice_from_s(3, s_18);
00772 if (ret < 0) return ret;
00773 }
00774 break;
00775 case 11:
00776 { int ret = slice_from_s(3, s_19);
00777 if (ret < 0) return ret;
00778 }
00779 break;
00780 case 12:
00781 { int ret = slice_from_s(3, s_20);
00782 if (ret < 0) return ret;
00783 }
00784 break;
00785 case 13:
00786 if (c <= lb || p[c - 1] != 'l') return 0;
00787 c--;
00788 { int ret = slice_from_s(2, s_21);
00789 if (ret < 0) return ret;
00790 }
00791 break;
00792 case 14:
00793 { int ret = slice_from_s(3, s_22);
00794 if (ret < 0) return ret;
00795 }
00796 break;
00797 case 15:
00798 { int ret = slice_from_s(4, s_23);
00799 if (ret < 0) return ret;
00800 }
00801 break;
00802 case 16:
00803 if (in_grouping_b_U(g_valid_LI, 99, 116, 0)) return 0;
00804 if (slice_del() == -1) return -1;
00805 break;
00806 }
00807 return 1;
00808 }
00809
00810 int Xapian::InternalStemEnglish::r_Step_3() {
00811 int among_var;
00812 ket = c;
00813 if (c - 2 <= lb || p[c - 1] >> 5 != 3 || !((528928 >> (p[c - 1] & 0x1f)) & 1)) return 0;
00814 among_var = find_among_b(s_pool, a_6, 9, 0, 0);
00815 if (!(among_var)) return 0;
00816 bra = c;
00817 { int ret = r_R1();
00818 if (ret <= 0) return ret;
00819 }
00820 switch(among_var) {
00821 case 0: return 0;
00822 case 1:
00823 { int ret = slice_from_s(4, s_24);
00824 if (ret < 0) return ret;
00825 }
00826 break;
00827 case 2:
00828 { int ret = slice_from_s(3, s_25);
00829 if (ret < 0) return ret;
00830 }
00831 break;
00832 case 3:
00833 { int ret = slice_from_s(2, s_26);
00834 if (ret < 0) return ret;
00835 }
00836 break;
00837 case 4:
00838 { int ret = slice_from_s(2, s_27);
00839 if (ret < 0) return ret;
00840 }
00841 break;
00842 case 5:
00843 if (slice_del() == -1) return -1;
00844 break;
00845 case 6:
00846 { int ret = r_R2();
00847 if (ret <= 0) return ret;
00848 }
00849 if (slice_del() == -1) return -1;
00850 break;
00851 }
00852 return 1;
00853 }
00854
00855 int Xapian::InternalStemEnglish::r_Step_4() {
00856 int among_var;
00857 ket = c;
00858 if (c - 1 <= lb || p[c - 1] >> 5 != 3 || !((1864232 >> (p[c - 1] & 0x1f)) & 1)) return 0;
00859 among_var = find_among_b(s_pool, a_7, 18, 0, 0);
00860 if (!(among_var)) return 0;
00861 bra = c;
00862 { int ret = r_R2();
00863 if (ret <= 0) return ret;
00864 }
00865 switch(among_var) {
00866 case 0: return 0;
00867 case 1:
00868 if (slice_del() == -1) return -1;
00869 break;
00870 case 2:
00871 { int m1 = l - c; (void)m1;
00872 if (c <= lb || p[c - 1] != 's') goto lab1;
00873 c--;
00874 goto lab0;
00875 lab1:
00876 c = l - m1;
00877 if (c <= lb || p[c - 1] != 't') return 0;
00878 c--;
00879 }
00880 lab0:
00881 if (slice_del() == -1) return -1;
00882 break;
00883 }
00884 return 1;
00885 }
00886
00887 int Xapian::InternalStemEnglish::r_Step_5() {
00888 int among_var;
00889 ket = c;
00890 if (c <= lb || (p[c - 1] != 101 && p[c - 1] != 108)) return 0;
00891 among_var = find_among_b(s_pool, a_8, 2, 0, 0);
00892 if (!(among_var)) return 0;
00893 bra = c;
00894 switch(among_var) {
00895 case 0: return 0;
00896 case 1:
00897 { int m1 = l - c; (void)m1;
00898 { int ret = r_R2();
00899 if (ret == 0) goto lab1;
00900 if (ret < 0) return ret;
00901 }
00902 goto lab0;
00903 lab1:
00904 c = l - m1;
00905 { int ret = r_R1();
00906 if (ret <= 0) return ret;
00907 }
00908 { int m2 = l - c; (void)m2;
00909 { int ret = r_shortv();
00910 if (ret == 0) goto lab2;
00911 if (ret < 0) return ret;
00912 }
00913 return 0;
00914 lab2:
00915 c = l - m2;
00916 }
00917 }
00918 lab0:
00919 if (slice_del() == -1) return -1;
00920 break;
00921 case 2:
00922 { int ret = r_R2();
00923 if (ret <= 0) return ret;
00924 }
00925 if (c <= lb || p[c - 1] != 'l') return 0;
00926 c--;
00927 if (slice_del() == -1) return -1;
00928 break;
00929 }
00930 return 1;
00931 }
00932
00933 int Xapian::InternalStemEnglish::r_exception2() {
00934 ket = c;
00935 if (c - 5 <= lb || (p[c - 1] != 100 && p[c - 1] != 103)) return 0;
00936 if (!(find_among_b(s_pool, a_9, 8, 0, 0))) return 0;
00937 bra = c;
00938 if (c > lb) return 0;
00939 return 1;
00940 }
00941
00942 int Xapian::InternalStemEnglish::r_exception1() {
00943 int among_var;
00944 bra = c;
00945 if (c + 2 >= l || p[c + 2] >> 5 != 3 || !((42750482 >> (p[c + 2] & 0x1f)) & 1)) return 0;
00946 among_var = find_among(s_pool, a_10, 18, 0, 0);
00947 if (!(among_var)) return 0;
00948 ket = c;
00949 if (c < l) return 0;
00950 switch(among_var) {
00951 case 0: return 0;
00952 case 1:
00953 { int ret = slice_from_s(3, s_28);
00954 if (ret < 0) return ret;
00955 }
00956 break;
00957 case 2:
00958 { int ret = slice_from_s(3, s_29);
00959 if (ret < 0) return ret;
00960 }
00961 break;
00962 case 3:
00963 { int ret = slice_from_s(3, s_30);
00964 if (ret < 0) return ret;
00965 }
00966 break;
00967 case 4:
00968 { int ret = slice_from_s(3, s_31);
00969 if (ret < 0) return ret;
00970 }
00971 break;
00972 case 5:
00973 { int ret = slice_from_s(3, s_32);
00974 if (ret < 0) return ret;
00975 }
00976 break;
00977 case 6:
00978 { int ret = slice_from_s(3, s_33);
00979 if (ret < 0) return ret;
00980 }
00981 break;
00982 case 7:
00983 { int ret = slice_from_s(5, s_34);
00984 if (ret < 0) return ret;
00985 }
00986 break;
00987 case 8:
00988 { int ret = slice_from_s(4, s_35);
00989 if (ret < 0) return ret;
00990 }
00991 break;
00992 case 9:
00993 { int ret = slice_from_s(5, s_36);
00994 if (ret < 0) return ret;
00995 }
00996 break;
00997 case 10:
00998 { int ret = slice_from_s(4, s_37);
00999 if (ret < 0) return ret;
01000 }
01001 break;
01002 case 11:
01003 { int ret = slice_from_s(5, s_38);
01004 if (ret < 0) return ret;
01005 }
01006 break;
01007 }
01008 return 1;
01009 }
01010
01011 int Xapian::InternalStemEnglish::r_postlude() {
01012 if (!(B_Y_found)) return 0;
01013 while(1) {
01014 int c1 = c;
01015 while(1) {
01016 int c2 = c;
01017 bra = c;
01018 if (c == l || p[c] != 'Y') goto lab1;
01019 c++;
01020 ket = c;
01021 c = c2;
01022 break;
01023 lab1:
01024 c = c2;
01025 { int ret = skip_utf8(p, c, 0, l, 1);
01026 if (ret < 0) goto lab0;
01027 c = ret;
01028 }
01029 }
01030 { int ret = slice_from_s(1, s_39);
01031 if (ret < 0) return ret;
01032 }
01033 continue;
01034 lab0:
01035 c = c1;
01036 break;
01037 }
01038 return 1;
01039 }
01040
01041 int Xapian::InternalStemEnglish::stem() {
01042 { int c1 = c;
01043 { int ret = r_exception1();
01044 if (ret == 0) goto lab1;
01045 if (ret < 0) return ret;
01046 }
01047 goto lab0;
01048 lab1:
01049 c = c1;
01050 { int c2 = c;
01051 { int ret = skip_utf8(p, c, 0, l, + 3);
01052 if (ret < 0) goto lab3;
01053 c = ret;
01054 }
01055 goto lab2;
01056 lab3:
01057 c = c2;
01058 }
01059 goto lab0;
01060 lab2:
01061 c = c1;
01062 { int c3 = c;
01063 { int ret = r_prelude();
01064 if (ret == 0) goto lab4;
01065 if (ret < 0) return ret;
01066 }
01067 lab4:
01068 c = c3;
01069 }
01070 { int c4 = c;
01071 { int ret = r_mark_regions();
01072 if (ret == 0) goto lab5;
01073 if (ret < 0) return ret;
01074 }
01075 lab5:
01076 c = c4;
01077 }
01078 lb = c; c = l;
01079
01080 { int m5 = l - c; (void)m5;
01081 { int ret = r_Step_1a();
01082 if (ret == 0) goto lab6;
01083 if (ret < 0) return ret;
01084 }
01085 lab6:
01086 c = l - m5;
01087 }
01088 { int m6 = l - c; (void)m6;
01089 { int ret = r_exception2();
01090 if (ret == 0) goto lab8;
01091 if (ret < 0) return ret;
01092 }
01093 goto lab7;
01094 lab8:
01095 c = l - m6;
01096 { int m7 = l - c; (void)m7;
01097 { int ret = r_Step_1b();
01098 if (ret == 0) goto lab9;
01099 if (ret < 0) return ret;
01100 }
01101 lab9:
01102 c = l - m7;
01103 }
01104 { int m8 = l - c; (void)m8;
01105 { int ret = r_Step_1c();
01106 if (ret == 0) goto lab10;
01107 if (ret < 0) return ret;
01108 }
01109 lab10:
01110 c = l - m8;
01111 }
01112 { int m9 = l - c; (void)m9;
01113 { int ret = r_Step_2();
01114 if (ret == 0) goto lab11;
01115 if (ret < 0) return ret;
01116 }
01117 lab11:
01118 c = l - m9;
01119 }
01120 { int m10 = l - c; (void)m10;
01121 { int ret = r_Step_3();
01122 if (ret == 0) goto lab12;
01123 if (ret < 0) return ret;
01124 }
01125 lab12:
01126 c = l - m10;
01127 }
01128 { int m11 = l - c; (void)m11;
01129 { int ret = r_Step_4();
01130 if (ret == 0) goto lab13;
01131 if (ret < 0) return ret;
01132 }
01133 lab13:
01134 c = l - m11;
01135 }
01136 { int m12 = l - c; (void)m12;
01137 { int ret = r_Step_5();
01138 if (ret == 0) goto lab14;
01139 if (ret < 0) return ret;
01140 }
01141 lab14:
01142 c = l - m12;
01143 }
01144 }
01145 lab7:
01146 c = lb;
01147 { int c13 = c;
01148 { int ret = r_postlude();
01149 if (ret == 0) goto lab15;
01150 if (ret < 0) return ret;
01151 }
01152 lab15:
01153 c = c13;
01154 }
01155 }
01156 lab0:
01157 return 1;
01158 }
01159
01160 Xapian::InternalStemEnglish::InternalStemEnglish()
01161 : B_Y_found(0), I_p2(0), I_p1(0)
01162 {
01163 }
01164
01165 Xapian::InternalStemEnglish::~InternalStemEnglish()
01166 {
01167 }
01168
01169 const char *
01170 Xapian::InternalStemEnglish::get_description() const
01171 {
01172 return "english";
01173 }