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