00001
00002
00003 #include <limits.h>
00004 #include "french.h"
00005
00006 static const symbol s_pool[] = {
00007 #define s_0_0 0
00008 'c', 'o', 'l',
00009 #define s_0_1 3
00010 'p', 'a', 'r',
00011 #define s_0_2 6
00012 't', 'a', 'p',
00013 #define s_1_1 9
00014 'I',
00015 #define s_1_2 10
00016 'U',
00017 #define s_1_3 11
00018 'Y',
00019 #define s_2_0 12
00020 'i', 'q', 'U',
00021 #define s_2_1 15
00022 'a', 'b', 'l',
00023 #define s_2_2 18
00024 'I', 0xC3, 0xA8, 'r',
00025 #define s_2_3 22
00026 'i', 0xC3, 0xA8, 'r',
00027 #define s_2_4 26
00028 'e', 'u', 's',
00029 #define s_2_5 29
00030 'i', 'v',
00031 #define s_3_0 31
00032 'i', 'c',
00033 #define s_3_1 33
00034 'a', 'b', 'i', 'l',
00035 #define s_3_2 37
00036 'i', 'v',
00037 #define s_4_0 39
00038 'i', 'q', 'U', 'e',
00039 #define s_4_1 43
00040 'a', 't', 'r', 'i', 'c', 'e',
00041 #define s_4_2 49
00042 'a', 'n', 'c', 'e',
00043 #define s_4_3 53
00044 'e', 'n', 'c', 'e',
00045 #define s_4_4 57
00046 'l', 'o', 'g', 'i', 'e',
00047 #define s_4_5 62
00048 'a', 'b', 'l', 'e',
00049 #define s_4_6 66
00050 'i', 's', 'm', 'e',
00051 #define s_4_7 70
00052 'e', 'u', 's', 'e',
00053 #define s_4_8 74
00054 'i', 's', 't', 'e',
00055 #define s_4_9 78
00056 'i', 'v', 'e',
00057 #define s_4_10 81
00058 'i', 'f',
00059 #define s_4_11 83
00060 'u', 's', 'i', 'o', 'n',
00061 #define s_4_12 88
00062 'a', 't', 'i', 'o', 'n',
00063 #define s_4_13 93
00064 'u', 't', 'i', 'o', 'n',
00065 #define s_4_14 98
00066 'a', 't', 'e', 'u', 'r',
00067 #define s_4_15 103
00068 'i', 'q', 'U', 'e', 's',
00069 #define s_4_16 108
00070 'a', 't', 'r', 'i', 'c', 'e', 's',
00071 #define s_4_17 115
00072 'a', 'n', 'c', 'e', 's',
00073 #define s_4_18 120
00074 'e', 'n', 'c', 'e', 's',
00075 #define s_4_19 125
00076 'l', 'o', 'g', 'i', 'e', 's',
00077 #define s_4_20 131
00078 'a', 'b', 'l', 'e', 's',
00079 #define s_4_21 136
00080 'i', 's', 'm', 'e', 's',
00081 #define s_4_22 141
00082 'e', 'u', 's', 'e', 's',
00083 #define s_4_23 146
00084 'i', 's', 't', 'e', 's',
00085 #define s_4_24 151
00086 'i', 'v', 'e', 's',
00087 #define s_4_25 155
00088 'i', 'f', 's',
00089 #define s_4_26 158
00090 'u', 's', 'i', 'o', 'n', 's',
00091 #define s_4_27 164
00092 'a', 't', 'i', 'o', 'n', 's',
00093 #define s_4_28 170
00094 'u', 't', 'i', 'o', 'n', 's',
00095 #define s_4_29 176
00096 'a', 't', 'e', 'u', 'r', 's',
00097 #define s_4_30 182
00098 'm', 'e', 'n', 't', 's',
00099 #define s_4_31 187
00100 'e', 'm', 'e', 'n', 't', 's',
00101 #define s_4_32 193
00102 'i', 's', 's', 'e', 'm', 'e', 'n', 't', 's',
00103 #define s_4_33 202
00104 'i', 't', 0xC3, 0xA9, 's',
00105 #define s_4_34 207
00106 'm', 'e', 'n', 't',
00107 #define s_4_35 211
00108 'e', 'm', 'e', 'n', 't',
00109 #define s_4_36 216
00110 'i', 's', 's', 'e', 'm', 'e', 'n', 't',
00111 #define s_4_37 224
00112 'a', 'm', 'm', 'e', 'n', 't',
00113 #define s_4_38 230
00114 'e', 'm', 'm', 'e', 'n', 't',
00115 #define s_4_39 236
00116 'a', 'u', 'x',
00117 #define s_4_40 239
00118 'e', 'a', 'u', 'x',
00119 #define s_4_41 243
00120 'e', 'u', 'x',
00121 #define s_4_42 246
00122 'i', 't', 0xC3, 0xA9,
00123 #define s_5_0 250
00124 'i', 'r', 'a',
00125 #define s_5_1 253
00126 'i', 'e',
00127 #define s_5_2 255
00128 'i', 's', 's', 'e',
00129 #define s_5_3 259
00130 'i', 's', 's', 'a', 'n', 't', 'e',
00131 #define s_5_4 266
00132 'i',
00133 #define s_5_5 267
00134 'i', 'r', 'a', 'i',
00135 #define s_5_6 271
00136 'i', 'r',
00137 #define s_5_7 273
00138 'i', 'r', 'a', 's',
00139 #define s_5_8 277
00140 'i', 'e', 's',
00141 #define s_5_9 280
00142 0xC3, 0xAE, 'm', 'e', 's',
00143 #define s_5_10 285
00144 'i', 's', 's', 'e', 's',
00145 #define s_5_11 290
00146 'i', 's', 's', 'a', 'n', 't', 'e', 's',
00147 #define s_5_12 298
00148 0xC3, 0xAE, 't', 'e', 's',
00149 #define s_5_13 303
00150 'i', 's',
00151 #define s_5_14 305
00152 'i', 'r', 'a', 'i', 's',
00153 #define s_5_15 310
00154 'i', 's', 's', 'a', 'i', 's',
00155 #define s_5_16 316
00156 'i', 'r', 'i', 'o', 'n', 's',
00157 #define s_5_17 322
00158 'i', 's', 's', 'i', 'o', 'n', 's',
00159 #define s_5_18 329
00160 'i', 'r', 'o', 'n', 's',
00161 #define s_5_19 334
00162 'i', 's', 's', 'o', 'n', 's',
00163 #define s_5_20 340
00164 'i', 's', 's', 'a', 'n', 't', 's',
00165 #define s_5_21 347
00166 'i', 't',
00167 #define s_5_22 349
00168 'i', 'r', 'a', 'i', 't',
00169 #define s_5_23 354
00170 'i', 's', 's', 'a', 'i', 't',
00171 #define s_5_24 360
00172 'i', 's', 's', 'a', 'n', 't',
00173 #define s_5_25 366
00174 'i', 'r', 'a', 'I', 'e', 'n', 't',
00175 #define s_5_26 373
00176 'i', 's', 's', 'a', 'I', 'e', 'n', 't',
00177 #define s_5_27 381
00178 'i', 'r', 'e', 'n', 't',
00179 #define s_5_28 386
00180 'i', 's', 's', 'e', 'n', 't',
00181 #define s_5_29 392
00182 'i', 'r', 'o', 'n', 't',
00183 #define s_5_30 397
00184 0xC3, 0xAE, 't',
00185 #define s_5_31 400
00186 'i', 'r', 'i', 'e', 'z',
00187 #define s_5_32 405
00188 'i', 's', 's', 'i', 'e', 'z',
00189 #define s_5_33 411
00190 'i', 'r', 'e', 'z',
00191 #define s_5_34 415
00192 'i', 's', 's', 'e', 'z',
00193 #define s_6_0 420
00194 'a',
00195 #define s_6_1 421
00196 'e', 'r', 'a',
00197 #define s_6_2 424
00198 'a', 's', 's', 'e',
00199 #define s_6_3 428
00200 'a', 'n', 't', 'e',
00201 #define s_6_4 432
00202 0xC3, 0xA9, 'e',
00203 #define s_6_5 435
00204 'a', 'i',
00205 #define s_6_6 437
00206 'e', 'r', 'a', 'i',
00207 #define s_6_7 441
00208 'e', 'r',
00209 #define s_6_8 443
00210 'a', 's',
00211 #define s_6_9 445
00212 'e', 'r', 'a', 's',
00213 #define s_6_10 449
00214 0xC3, 0xA2, 'm', 'e', 's',
00215 #define s_6_11 454
00216 'a', 's', 's', 'e', 's',
00217 #define s_6_12 459
00218 'a', 'n', 't', 'e', 's',
00219 #define s_6_13 464
00220 0xC3, 0xA2, 't', 'e', 's',
00221 #define s_6_14 469
00222 0xC3, 0xA9, 'e', 's',
00223 #define s_6_15 473
00224 'a', 'i', 's',
00225 #define s_6_16 476
00226 'e', 'r', 'a', 'i', 's',
00227 #define s_6_17 481
00228 'i', 'o', 'n', 's',
00229 #define s_6_18 485
00230 'e', 'r', 'i', 'o', 'n', 's',
00231 #define s_6_19 491
00232 'a', 's', 's', 'i', 'o', 'n', 's',
00233 #define s_6_20 498
00234 'e', 'r', 'o', 'n', 's',
00235 #define s_6_21 503
00236 'a', 'n', 't', 's',
00237 #define s_6_22 507
00238 0xC3, 0xA9, 's',
00239 #define s_6_23 510
00240 'a', 'i', 't',
00241 #define s_6_24 513
00242 'e', 'r', 'a', 'i', 't',
00243 #define s_6_25 518
00244 'a', 'n', 't',
00245 #define s_6_26 521
00246 'a', 'I', 'e', 'n', 't',
00247 #define s_6_27 526
00248 'e', 'r', 'a', 'I', 'e', 'n', 't',
00249 #define s_6_28 533
00250 0xC3, 0xA8, 'r', 'e', 'n', 't',
00251 #define s_6_29 539
00252 'a', 's', 's', 'e', 'n', 't',
00253 #define s_6_30 545
00254 'e', 'r', 'o', 'n', 't',
00255 #define s_6_31 550
00256 0xC3, 0xA2, 't',
00257 #define s_6_32 553
00258 'e', 'z',
00259 #define s_6_33 555
00260 'i', 'e', 'z',
00261 #define s_6_34 558
00262 'e', 'r', 'i', 'e', 'z',
00263 #define s_6_35 563
00264 'a', 's', 's', 'i', 'e', 'z',
00265 #define s_6_36 569
00266 'e', 'r', 'e', 'z',
00267 #define s_6_37 573
00268 0xC3, 0xA9,
00269 #define s_7_0 575
00270 'e',
00271 #define s_7_1 576
00272 'I', 0xC3, 0xA8, 'r', 'e',
00273 #define s_7_2 581
00274 'i', 0xC3, 0xA8, 'r', 'e',
00275 #define s_7_3 586
00276 'i', 'o', 'n',
00277 #define s_7_4 589
00278 'I', 'e', 'r',
00279 #define s_7_5 592
00280 'i', 'e', 'r',
00281 #define s_7_6 595
00282 0xC3, 0xAB,
00283 #define s_8_0 597
00284 'e', 'l', 'l',
00285 #define s_8_1 600
00286 'e', 'i', 'l', 'l',
00287 #define s_8_2 604
00288 'e', 'n', 'n',
00289 #define s_8_3 607
00290 'o', 'n', 'n',
00291 #define s_8_4 610
00292 'e', 't', 't',
00293 };
00294
00295
00296 static const struct among a_0[3] =
00297 {
00298 { 3, s_0_0, -1, -1},
00299 { 3, s_0_1, -1, -1},
00300 { 3, s_0_2, -1, -1}
00301 };
00302
00303
00304 static const struct among a_1[4] =
00305 {
00306 { 0, 0, -1, 4},
00307 { 1, s_1_1, 0, 1},
00308 { 1, s_1_2, 0, 2},
00309 { 1, s_1_3, 0, 3}
00310 };
00311
00312
00313 static const struct among a_2[6] =
00314 {
00315 { 3, s_2_0, -1, 3},
00316 { 3, s_2_1, -1, 3},
00317 { 4, s_2_2, -1, 4},
00318 { 4, s_2_3, -1, 4},
00319 { 3, s_2_4, -1, 2},
00320 { 2, s_2_5, -1, 1}
00321 };
00322
00323
00324 static const struct among a_3[3] =
00325 {
00326 { 2, s_3_0, -1, 2},
00327 { 4, s_3_1, -1, 1},
00328 { 2, s_3_2, -1, 3}
00329 };
00330
00331
00332 static const struct among a_4[43] =
00333 {
00334 { 4, s_4_0, -1, 1},
00335 { 6, s_4_1, -1, 2},
00336 { 4, s_4_2, -1, 1},
00337 { 4, s_4_3, -1, 5},
00338 { 5, s_4_4, -1, 3},
00339 { 4, s_4_5, -1, 1},
00340 { 4, s_4_6, -1, 1},
00341 { 4, s_4_7, -1, 11},
00342 { 4, s_4_8, -1, 1},
00343 { 3, s_4_9, -1, 8},
00344 { 2, s_4_10, -1, 8},
00345 { 5, s_4_11, -1, 4},
00346 { 5, s_4_12, -1, 2},
00347 { 5, s_4_13, -1, 4},
00348 { 5, s_4_14, -1, 2},
00349 { 5, s_4_15, -1, 1},
00350 { 7, s_4_16, -1, 2},
00351 { 5, s_4_17, -1, 1},
00352 { 5, s_4_18, -1, 5},
00353 { 6, s_4_19, -1, 3},
00354 { 5, s_4_20, -1, 1},
00355 { 5, s_4_21, -1, 1},
00356 { 5, s_4_22, -1, 11},
00357 { 5, s_4_23, -1, 1},
00358 { 4, s_4_24, -1, 8},
00359 { 3, s_4_25, -1, 8},
00360 { 6, s_4_26, -1, 4},
00361 { 6, s_4_27, -1, 2},
00362 { 6, s_4_28, -1, 4},
00363 { 6, s_4_29, -1, 2},
00364 { 5, s_4_30, -1, 15},
00365 { 6, s_4_31, 30, 6},
00366 { 9, s_4_32, 31, 12},
00367 { 5, s_4_33, -1, 7},
00368 { 4, s_4_34, -1, 15},
00369 { 5, s_4_35, 34, 6},
00370 { 8, s_4_36, 35, 12},
00371 { 6, s_4_37, 34, 13},
00372 { 6, s_4_38, 34, 14},
00373 { 3, s_4_39, -1, 10},
00374 { 4, s_4_40, 39, 9},
00375 { 3, s_4_41, -1, 1},
00376 { 4, s_4_42, -1, 7}
00377 };
00378
00379
00380 static const struct among a_5[35] =
00381 {
00382 { 3, s_5_0, -1, 1},
00383 { 2, s_5_1, -1, 1},
00384 { 4, s_5_2, -1, 1},
00385 { 7, s_5_3, -1, 1},
00386 { 1, s_5_4, -1, 1},
00387 { 4, s_5_5, 4, 1},
00388 { 2, s_5_6, -1, 1},
00389 { 4, s_5_7, -1, 1},
00390 { 3, s_5_8, -1, 1},
00391 { 5, s_5_9, -1, 1},
00392 { 5, s_5_10, -1, 1},
00393 { 8, s_5_11, -1, 1},
00394 { 5, s_5_12, -1, 1},
00395 { 2, s_5_13, -1, 1},
00396 { 5, s_5_14, 13, 1},
00397 { 6, s_5_15, 13, 1},
00398 { 6, s_5_16, -1, 1},
00399 { 7, s_5_17, -1, 1},
00400 { 5, s_5_18, -1, 1},
00401 { 6, s_5_19, -1, 1},
00402 { 7, s_5_20, -1, 1},
00403 { 2, s_5_21, -1, 1},
00404 { 5, s_5_22, 21, 1},
00405 { 6, s_5_23, 21, 1},
00406 { 6, s_5_24, -1, 1},
00407 { 7, s_5_25, -1, 1},
00408 { 8, s_5_26, -1, 1},
00409 { 5, s_5_27, -1, 1},
00410 { 6, s_5_28, -1, 1},
00411 { 5, s_5_29, -1, 1},
00412 { 3, s_5_30, -1, 1},
00413 { 5, s_5_31, -1, 1},
00414 { 6, s_5_32, -1, 1},
00415 { 4, s_5_33, -1, 1},
00416 { 5, s_5_34, -1, 1}
00417 };
00418
00419
00420 static const struct among a_6[38] =
00421 {
00422 { 1, s_6_0, -1, 3},
00423 { 3, s_6_1, 0, 2},
00424 { 4, s_6_2, -1, 3},
00425 { 4, s_6_3, -1, 3},
00426 { 3, s_6_4, -1, 2},
00427 { 2, s_6_5, -1, 3},
00428 { 4, s_6_6, 5, 2},
00429 { 2, s_6_7, -1, 2},
00430 { 2, s_6_8, -1, 3},
00431 { 4, s_6_9, 8, 2},
00432 { 5, s_6_10, -1, 3},
00433 { 5, s_6_11, -1, 3},
00434 { 5, s_6_12, -1, 3},
00435 { 5, s_6_13, -1, 3},
00436 { 4, s_6_14, -1, 2},
00437 { 3, s_6_15, -1, 3},
00438 { 5, s_6_16, 15, 2},
00439 { 4, s_6_17, -1, 1},
00440 { 6, s_6_18, 17, 2},
00441 { 7, s_6_19, 17, 3},
00442 { 5, s_6_20, -1, 2},
00443 { 4, s_6_21, -1, 3},
00444 { 3, s_6_22, -1, 2},
00445 { 3, s_6_23, -1, 3},
00446 { 5, s_6_24, 23, 2},
00447 { 3, s_6_25, -1, 3},
00448 { 5, s_6_26, -1, 3},
00449 { 7, s_6_27, 26, 2},
00450 { 6, s_6_28, -1, 2},
00451 { 6, s_6_29, -1, 3},
00452 { 5, s_6_30, -1, 2},
00453 { 3, s_6_31, -1, 3},
00454 { 2, s_6_32, -1, 2},
00455 { 3, s_6_33, 32, 2},
00456 { 5, s_6_34, 33, 2},
00457 { 6, s_6_35, 33, 3},
00458 { 4, s_6_36, 32, 2},
00459 { 2, s_6_37, -1, 2}
00460 };
00461
00462
00463 static const struct among a_7[7] =
00464 {
00465 { 1, s_7_0, -1, 3},
00466 { 5, s_7_1, 0, 2},
00467 { 5, s_7_2, 0, 2},
00468 { 3, s_7_3, -1, 1},
00469 { 3, s_7_4, -1, 2},
00470 { 3, s_7_5, -1, 2},
00471 { 2, s_7_6, -1, 4}
00472 };
00473
00474
00475 static const struct among a_8[5] =
00476 {
00477 { 3, s_8_0, -1, -1},
00478 { 4, s_8_1, -1, -1},
00479 { 3, s_8_2, -1, -1},
00480 { 3, s_8_3, -1, -1},
00481 { 3, s_8_4, -1, -1}
00482 };
00483
00484 static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 130, 103, 8, 5 };
00485
00486 static const unsigned char g_keep_with_s[] = { 1, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
00487
00488 static const symbol s_0[] = { 'U' };
00489 static const symbol s_1[] = { 'I' };
00490 static const symbol s_2[] = { 'Y' };
00491 static const symbol s_3[] = { 'Y' };
00492 static const symbol s_4[] = { 'U' };
00493 static const symbol s_5[] = { 'i' };
00494 static const symbol s_6[] = { 'u' };
00495 static const symbol s_7[] = { 'y' };
00496 static const symbol s_8[] = { 'i', 'c' };
00497 static const symbol s_9[] = { 'i', 'q', 'U' };
00498 static const symbol s_10[] = { 'l', 'o', 'g' };
00499 static const symbol s_11[] = { 'u' };
00500 static const symbol s_12[] = { 'e', 'n', 't' };
00501 static const symbol s_13[] = { 'a', 't' };
00502 static const symbol s_14[] = { 'e', 'u', 'x' };
00503 static const symbol s_15[] = { 'i' };
00504 static const symbol s_16[] = { 'a', 'b', 'l' };
00505 static const symbol s_17[] = { 'i', 'q', 'U' };
00506 static const symbol s_18[] = { 'a', 't' };
00507 static const symbol s_19[] = { 'i', 'c' };
00508 static const symbol s_20[] = { 'i', 'q', 'U' };
00509 static const symbol s_21[] = { 'e', 'a', 'u' };
00510 static const symbol s_22[] = { 'a', 'l' };
00511 static const symbol s_23[] = { 'e', 'u', 'x' };
00512 static const symbol s_24[] = { 'a', 'n', 't' };
00513 static const symbol s_25[] = { 'e', 'n', 't' };
00514 static const symbol s_26[] = { 'i' };
00515 static const symbol s_27[] = { 'g', 'u' };
00516 static const symbol s_28[] = { 0xC3, 0xA9 };
00517 static const symbol s_29[] = { 0xC3, 0xA8 };
00518 static const symbol s_30[] = { 'e' };
00519 static const symbol s_31[] = { 'i' };
00520 static const symbol s_32[] = { 0xC3, 0xA7 };
00521 static const symbol s_33[] = { 'c' };
00522
00523 int Xapian::InternalStemFrench::r_prelude() {
00524 while(1) {
00525 int c1 = c;
00526 while(1) {
00527 int c2 = c;
00528 { int c3 = c;
00529 if (in_grouping_U(g_v, 97, 251, 0)) goto lab3;
00530 bra = c;
00531 { int c4 = c;
00532 if (c == l || p[c] != 'u') goto lab5;
00533 c++;
00534 ket = c;
00535 if (in_grouping_U(g_v, 97, 251, 0)) goto lab5;
00536 { int ret = slice_from_s(1, s_0);
00537 if (ret < 0) return ret;
00538 }
00539 goto lab4;
00540 lab5:
00541 c = c4;
00542 if (c == l || p[c] != 'i') goto lab6;
00543 c++;
00544 ket = c;
00545 if (in_grouping_U(g_v, 97, 251, 0)) goto lab6;
00546 { int ret = slice_from_s(1, s_1);
00547 if (ret < 0) return ret;
00548 }
00549 goto lab4;
00550 lab6:
00551 c = c4;
00552 if (c == l || p[c] != 'y') goto lab3;
00553 c++;
00554 ket = c;
00555 { int ret = slice_from_s(1, s_2);
00556 if (ret < 0) return ret;
00557 }
00558 }
00559 lab4:
00560 goto lab2;
00561 lab3:
00562 c = c3;
00563 bra = c;
00564 if (c == l || p[c] != 'y') goto lab7;
00565 c++;
00566 ket = c;
00567 if (in_grouping_U(g_v, 97, 251, 0)) goto lab7;
00568 { int ret = slice_from_s(1, s_3);
00569 if (ret < 0) return ret;
00570 }
00571 goto lab2;
00572 lab7:
00573 c = c3;
00574 if (c == l || p[c] != 'q') goto lab1;
00575 c++;
00576 bra = c;
00577 if (c == l || p[c] != 'u') goto lab1;
00578 c++;
00579 ket = c;
00580 { int ret = slice_from_s(1, s_4);
00581 if (ret < 0) return ret;
00582 }
00583 }
00584 lab2:
00585 c = c2;
00586 break;
00587 lab1:
00588 c = c2;
00589 { int ret = skip_utf8(p, c, 0, l, 1);
00590 if (ret < 0) goto lab0;
00591 c = ret;
00592 }
00593 }
00594 continue;
00595 lab0:
00596 c = c1;
00597 break;
00598 }
00599 return 1;
00600 }
00601
00602 int Xapian::InternalStemFrench::r_mark_regions() {
00603 I_pV = l;
00604 I_p1 = l;
00605 I_p2 = l;
00606 { int c1 = c;
00607 { int c2 = c;
00608 if (in_grouping_U(g_v, 97, 251, 0)) goto lab2;
00609 if (in_grouping_U(g_v, 97, 251, 0)) goto lab2;
00610 { int ret = skip_utf8(p, c, 0, l, 1);
00611 if (ret < 0) goto lab2;
00612 c = ret;
00613 }
00614 goto lab1;
00615 lab2:
00616 c = c2;
00617 if (c + 2 >= l || p[c + 2] >> 5 != 3 || !((331776 >> (p[c + 2] & 0x1f)) & 1)) goto lab3;
00618 if (!(find_among(s_pool, a_0, 3, 0, 0))) goto lab3;
00619 goto lab1;
00620 lab3:
00621 c = c2;
00622 { int ret = skip_utf8(p, c, 0, l, 1);
00623 if (ret < 0) goto lab0;
00624 c = ret;
00625 }
00626 { int ret = out_grouping_U(g_v, 97, 251, 1);
00627 if (ret < 0) goto lab0;
00628 c += ret;
00629 }
00630 }
00631 lab1:
00632 I_pV = c;
00633 lab0:
00634 c = c1;
00635 }
00636 { int c3 = c;
00637 { int ret = out_grouping_U(g_v, 97, 251, 1);
00638 if (ret < 0) goto lab4;
00639 c += ret;
00640 }
00641 { int ret = in_grouping_U(g_v, 97, 251, 1);
00642 if (ret < 0) goto lab4;
00643 c += ret;
00644 }
00645 I_p1 = c;
00646 { int ret = out_grouping_U(g_v, 97, 251, 1);
00647 if (ret < 0) goto lab4;
00648 c += ret;
00649 }
00650 { int ret = in_grouping_U(g_v, 97, 251, 1);
00651 if (ret < 0) goto lab4;
00652 c += ret;
00653 }
00654 I_p2 = c;
00655 lab4:
00656 c = c3;
00657 }
00658 return 1;
00659 }
00660
00661 int Xapian::InternalStemFrench::r_postlude() {
00662 int among_var;
00663 while(1) {
00664 int c1 = c;
00665 bra = c;
00666 if (c >= l || p[c + 0] >> 5 != 2 || !((35652096 >> (p[c + 0] & 0x1f)) & 1)) among_var = 4; else
00667 among_var = find_among(s_pool, a_1, 4, 0, 0);
00668 if (!(among_var)) goto lab0;
00669 ket = c;
00670 switch(among_var) {
00671 case 0: goto lab0;
00672 case 1:
00673 { int ret = slice_from_s(1, s_5);
00674 if (ret < 0) return ret;
00675 }
00676 break;
00677 case 2:
00678 { int ret = slice_from_s(1, s_6);
00679 if (ret < 0) return ret;
00680 }
00681 break;
00682 case 3:
00683 { int ret = slice_from_s(1, s_7);
00684 if (ret < 0) return ret;
00685 }
00686 break;
00687 case 4:
00688 { int ret = skip_utf8(p, c, 0, l, 1);
00689 if (ret < 0) goto lab0;
00690 c = ret;
00691 }
00692 break;
00693 }
00694 continue;
00695 lab0:
00696 c = c1;
00697 break;
00698 }
00699 return 1;
00700 }
00701
00702 int Xapian::InternalStemFrench::r_RV() {
00703 if (!(I_pV <= c)) return 0;
00704 return 1;
00705 }
00706
00707 int Xapian::InternalStemFrench::r_R1() {
00708 if (!(I_p1 <= c)) return 0;
00709 return 1;
00710 }
00711
00712 int Xapian::InternalStemFrench::r_R2() {
00713 if (!(I_p2 <= c)) return 0;
00714 return 1;
00715 }
00716
00717 int Xapian::InternalStemFrench::r_standard_suffix() {
00718 int among_var;
00719 ket = c;
00720 among_var = find_among_b(s_pool, a_4, 43, 0, 0);
00721 if (!(among_var)) return 0;
00722 bra = c;
00723 switch(among_var) {
00724 case 0: return 0;
00725 case 1:
00726 { int ret = r_R2();
00727 if (ret <= 0) return ret;
00728 }
00729 if (slice_del() == -1) return -1;
00730 break;
00731 case 2:
00732 { int ret = r_R2();
00733 if (ret <= 0) return ret;
00734 }
00735 if (slice_del() == -1) return -1;
00736 { int m1 = l - c; (void)m1;
00737 ket = c;
00738 if (!(eq_s_b(2, s_8))) { c = l - m1; goto lab0; }
00739 bra = c;
00740 { int m2 = l - c; (void)m2;
00741 { int ret = r_R2();
00742 if (ret == 0) goto lab2;
00743 if (ret < 0) return ret;
00744 }
00745 if (slice_del() == -1) return -1;
00746 goto lab1;
00747 lab2:
00748 c = l - m2;
00749 { int ret = slice_from_s(3, s_9);
00750 if (ret < 0) return ret;
00751 }
00752 }
00753 lab1:
00754 lab0:
00755 ;
00756 }
00757 break;
00758 case 3:
00759 { int ret = r_R2();
00760 if (ret <= 0) return ret;
00761 }
00762 { int ret = slice_from_s(3, s_10);
00763 if (ret < 0) return ret;
00764 }
00765 break;
00766 case 4:
00767 { int ret = r_R2();
00768 if (ret <= 0) return ret;
00769 }
00770 { int ret = slice_from_s(1, s_11);
00771 if (ret < 0) return ret;
00772 }
00773 break;
00774 case 5:
00775 { int ret = r_R2();
00776 if (ret <= 0) return ret;
00777 }
00778 { int ret = slice_from_s(3, s_12);
00779 if (ret < 0) return ret;
00780 }
00781 break;
00782 case 6:
00783 { int ret = r_RV();
00784 if (ret <= 0) return ret;
00785 }
00786 if (slice_del() == -1) return -1;
00787 { int m3 = l - c; (void)m3;
00788 ket = c;
00789 among_var = find_among_b(s_pool, a_2, 6, 0, 0);
00790 if (!(among_var)) { c = l - m3; goto lab3; }
00791 bra = c;
00792 switch(among_var) {
00793 case 0: { c = l - m3; goto lab3; }
00794 case 1:
00795 { int ret = r_R2();
00796 if (ret == 0) { c = l - m3; goto lab3; }
00797 if (ret < 0) return ret;
00798 }
00799 if (slice_del() == -1) return -1;
00800 ket = c;
00801 if (!(eq_s_b(2, s_13))) { c = l - m3; goto lab3; }
00802 bra = c;
00803 { int ret = r_R2();
00804 if (ret == 0) { c = l - m3; goto lab3; }
00805 if (ret < 0) return ret;
00806 }
00807 if (slice_del() == -1) return -1;
00808 break;
00809 case 2:
00810 { int m4 = l - c; (void)m4;
00811 { int ret = r_R2();
00812 if (ret == 0) goto lab5;
00813 if (ret < 0) return ret;
00814 }
00815 if (slice_del() == -1) return -1;
00816 goto lab4;
00817 lab5:
00818 c = l - m4;
00819 { int ret = r_R1();
00820 if (ret == 0) { c = l - m3; goto lab3; }
00821 if (ret < 0) return ret;
00822 }
00823 { int ret = slice_from_s(3, s_14);
00824 if (ret < 0) return ret;
00825 }
00826 }
00827 lab4:
00828 break;
00829 case 3:
00830 { int ret = r_R2();
00831 if (ret == 0) { c = l - m3; goto lab3; }
00832 if (ret < 0) return ret;
00833 }
00834 if (slice_del() == -1) return -1;
00835 break;
00836 case 4:
00837 { int ret = r_RV();
00838 if (ret == 0) { c = l - m3; goto lab3; }
00839 if (ret < 0) return ret;
00840 }
00841 { int ret = slice_from_s(1, s_15);
00842 if (ret < 0) return ret;
00843 }
00844 break;
00845 }
00846 lab3:
00847 ;
00848 }
00849 break;
00850 case 7:
00851 { int ret = r_R2();
00852 if (ret <= 0) return ret;
00853 }
00854 if (slice_del() == -1) return -1;
00855 { int m5 = l - c; (void)m5;
00856 ket = c;
00857 if (c - 1 <= lb || p[c - 1] >> 5 != 3 || !((4198408 >> (p[c - 1] & 0x1f)) & 1)) { c = l - m5; goto lab6; }
00858 among_var = find_among_b(s_pool, a_3, 3, 0, 0);
00859 if (!(among_var)) { c = l - m5; goto lab6; }
00860 bra = c;
00861 switch(among_var) {
00862 case 0: { c = l - m5; goto lab6; }
00863 case 1:
00864 { int m6 = l - c; (void)m6;
00865 { int ret = r_R2();
00866 if (ret == 0) goto lab8;
00867 if (ret < 0) return ret;
00868 }
00869 if (slice_del() == -1) return -1;
00870 goto lab7;
00871 lab8:
00872 c = l - m6;
00873 { int ret = slice_from_s(3, s_16);
00874 if (ret < 0) return ret;
00875 }
00876 }
00877 lab7:
00878 break;
00879 case 2:
00880 { int m7 = l - c; (void)m7;
00881 { int ret = r_R2();
00882 if (ret == 0) goto lab10;
00883 if (ret < 0) return ret;
00884 }
00885 if (slice_del() == -1) return -1;
00886 goto lab9;
00887 lab10:
00888 c = l - m7;
00889 { int ret = slice_from_s(3, s_17);
00890 if (ret < 0) return ret;
00891 }
00892 }
00893 lab9:
00894 break;
00895 case 3:
00896 { int ret = r_R2();
00897 if (ret == 0) { c = l - m5; goto lab6; }
00898 if (ret < 0) return ret;
00899 }
00900 if (slice_del() == -1) return -1;
00901 break;
00902 }
00903 lab6:
00904 ;
00905 }
00906 break;
00907 case 8:
00908 { int ret = r_R2();
00909 if (ret <= 0) return ret;
00910 }
00911 if (slice_del() == -1) return -1;
00912 { int m8 = l - c; (void)m8;
00913 ket = c;
00914 if (!(eq_s_b(2, s_18))) { c = l - m8; goto lab11; }
00915 bra = c;
00916 { int ret = r_R2();
00917 if (ret == 0) { c = l - m8; goto lab11; }
00918 if (ret < 0) return ret;
00919 }
00920 if (slice_del() == -1) return -1;
00921 ket = c;
00922 if (!(eq_s_b(2, s_19))) { c = l - m8; goto lab11; }
00923 bra = c;
00924 { int m9 = l - c; (void)m9;
00925 { int ret = r_R2();
00926 if (ret == 0) goto lab13;
00927 if (ret < 0) return ret;
00928 }
00929 if (slice_del() == -1) return -1;
00930 goto lab12;
00931 lab13:
00932 c = l - m9;
00933 { int ret = slice_from_s(3, s_20);
00934 if (ret < 0) return ret;
00935 }
00936 }
00937 lab12:
00938 lab11:
00939 ;
00940 }
00941 break;
00942 case 9:
00943 { int ret = slice_from_s(3, s_21);
00944 if (ret < 0) return ret;
00945 }
00946 break;
00947 case 10:
00948 { int ret = r_R1();
00949 if (ret <= 0) return ret;
00950 }
00951 { int ret = slice_from_s(2, s_22);
00952 if (ret < 0) return ret;
00953 }
00954 break;
00955 case 11:
00956 { int m10 = l - c; (void)m10;
00957 { int ret = r_R2();
00958 if (ret == 0) goto lab15;
00959 if (ret < 0) return ret;
00960 }
00961 if (slice_del() == -1) return -1;
00962 goto lab14;
00963 lab15:
00964 c = l - m10;
00965 { int ret = r_R1();
00966 if (ret <= 0) return ret;
00967 }
00968 { int ret = slice_from_s(3, s_23);
00969 if (ret < 0) return ret;
00970 }
00971 }
00972 lab14:
00973 break;
00974 case 12:
00975 { int ret = r_R1();
00976 if (ret <= 0) return ret;
00977 }
00978 if (out_grouping_b_U(g_v, 97, 251, 0)) return 0;
00979 if (slice_del() == -1) return -1;
00980 break;
00981 case 13:
00982 { int ret = r_RV();
00983 if (ret <= 0) return ret;
00984 }
00985 { int ret = slice_from_s(3, s_24);
00986 if (ret < 0) return ret;
00987 }
00988 return 0;
00989 break;
00990 case 14:
00991 { int ret = r_RV();
00992 if (ret <= 0) return ret;
00993 }
00994 { int ret = slice_from_s(3, s_25);
00995 if (ret < 0) return ret;
00996 }
00997 return 0;
00998 break;
00999 case 15:
01000 { int m_test11 = l - c;
01001 if (in_grouping_b_U(g_v, 97, 251, 0)) return 0;
01002 { int ret = r_RV();
01003 if (ret <= 0) return ret;
01004 }
01005 c = l - m_test11;
01006 }
01007 if (slice_del() == -1) return -1;
01008 return 0;
01009 break;
01010 }
01011 return 1;
01012 }
01013
01014 int Xapian::InternalStemFrench::r_i_verb_suffix() {
01015 int among_var;
01016 { int m1 = l - c; (void)m1;
01017 int mlimit1;
01018 if (c < I_pV) return 0;
01019 c = I_pV;
01020 mlimit1 = lb; lb = c;
01021 c = l - m1;
01022 ket = c;
01023 if (c <= lb || p[c - 1] >> 5 != 3 || !((68944418 >> (p[c - 1] & 0x1f)) & 1)) { lb = mlimit1; return 0; }
01024 among_var = find_among_b(s_pool, a_5, 35, 0, 0);
01025 if (!(among_var)) { lb = mlimit1; return 0; }
01026 bra = c;
01027 switch(among_var) {
01028 case 0: { lb = mlimit1; return 0; }
01029 case 1:
01030 if (out_grouping_b_U(g_v, 97, 251, 0)) { lb = mlimit1; return 0; }
01031 if (slice_del() == -1) return -1;
01032 break;
01033 }
01034 lb = mlimit1;
01035 }
01036 return 1;
01037 }
01038
01039 int Xapian::InternalStemFrench::r_verb_suffix() {
01040 int among_var;
01041 { int m1 = l - c; (void)m1;
01042 int mlimit1;
01043 if (c < I_pV) return 0;
01044 c = I_pV;
01045 mlimit1 = lb; lb = c;
01046 c = l - m1;
01047 ket = c;
01048 among_var = find_among_b(s_pool, a_6, 38, 0, 0);
01049 if (!(among_var)) { lb = mlimit1; return 0; }
01050 bra = c;
01051 switch(among_var) {
01052 case 0: { lb = mlimit1; return 0; }
01053 case 1:
01054 { int ret = r_R2();
01055 if (ret == 0) { lb = mlimit1; return 0; }
01056 if (ret < 0) return ret;
01057 }
01058 if (slice_del() == -1) return -1;
01059 break;
01060 case 2:
01061 if (slice_del() == -1) return -1;
01062 break;
01063 case 3:
01064 if (slice_del() == -1) return -1;
01065 { int m2 = l - c; (void)m2;
01066 ket = c;
01067 if (c <= lb || p[c - 1] != 'e') { c = l - m2; goto lab0; }
01068 c--;
01069 bra = c;
01070 if (slice_del() == -1) return -1;
01071 lab0:
01072 ;
01073 }
01074 break;
01075 }
01076 lb = mlimit1;
01077 }
01078 return 1;
01079 }
01080
01081 int Xapian::InternalStemFrench::r_residual_suffix() {
01082 int among_var;
01083 { int m1 = l - c; (void)m1;
01084 ket = c;
01085 if (c <= lb || p[c - 1] != 's') { c = l - m1; goto lab0; }
01086 c--;
01087 bra = c;
01088 { int m_test2 = l - c;
01089 if (out_grouping_b_U(g_keep_with_s, 97, 232, 0)) { c = l - m1; goto lab0; }
01090 c = l - m_test2;
01091 }
01092 if (slice_del() == -1) return -1;
01093 lab0:
01094 ;
01095 }
01096 { int m3 = l - c; (void)m3;
01097 int mlimit3;
01098 if (c < I_pV) return 0;
01099 c = I_pV;
01100 mlimit3 = lb; lb = c;
01101 c = l - m3;
01102 ket = c;
01103 among_var = find_among_b(s_pool, a_7, 7, 0, 0);
01104 if (!(among_var)) { lb = mlimit3; return 0; }
01105 bra = c;
01106 switch(among_var) {
01107 case 0: { lb = mlimit3; return 0; }
01108 case 1:
01109 { int ret = r_R2();
01110 if (ret == 0) { lb = mlimit3; return 0; }
01111 if (ret < 0) return ret;
01112 }
01113 { int m4 = l - c; (void)m4;
01114 if (c <= lb || p[c - 1] != 's') goto lab2;
01115 c--;
01116 goto lab1;
01117 lab2:
01118 c = l - m4;
01119 if (c <= lb || p[c - 1] != 't') { lb = mlimit3; return 0; }
01120 c--;
01121 }
01122 lab1:
01123 if (slice_del() == -1) return -1;
01124 break;
01125 case 2:
01126 { int ret = slice_from_s(1, s_26);
01127 if (ret < 0) return ret;
01128 }
01129 break;
01130 case 3:
01131 if (slice_del() == -1) return -1;
01132 break;
01133 case 4:
01134 if (!(eq_s_b(2, s_27))) { lb = mlimit3; return 0; }
01135 if (slice_del() == -1) return -1;
01136 break;
01137 }
01138 lb = mlimit3;
01139 }
01140 return 1;
01141 }
01142
01143 int Xapian::InternalStemFrench::r_un_double() {
01144 { int m_test1 = l - c;
01145 if (c - 2 <= lb || p[c - 1] >> 5 != 3 || !((1069056 >> (p[c - 1] & 0x1f)) & 1)) return 0;
01146 if (!(find_among_b(s_pool, a_8, 5, 0, 0))) return 0;
01147 c = l - m_test1;
01148 }
01149 ket = c;
01150 { int ret = skip_utf8(p, c, lb, 0, -1);
01151 if (ret < 0) return 0;
01152 c = ret;
01153 }
01154 bra = c;
01155 if (slice_del() == -1) return -1;
01156 return 1;
01157 }
01158
01159 int Xapian::InternalStemFrench::r_un_accent() {
01160 { int i = 1;
01161 while(1) {
01162 if (out_grouping_b_U(g_v, 97, 251, 0)) goto lab0;
01163 i--;
01164 continue;
01165 lab0:
01166 break;
01167 }
01168 if (i > 0) return 0;
01169 }
01170 ket = c;
01171 { int m1 = l - c; (void)m1;
01172 if (!(eq_s_b(2, s_28))) goto lab2;
01173 goto lab1;
01174 lab2:
01175 c = l - m1;
01176 if (!(eq_s_b(2, s_29))) return 0;
01177 }
01178 lab1:
01179 bra = c;
01180 { int ret = slice_from_s(1, s_30);
01181 if (ret < 0) return ret;
01182 }
01183 return 1;
01184 }
01185
01186 int Xapian::InternalStemFrench::stem() {
01187 { int c1 = c;
01188 { int ret = r_prelude();
01189 if (ret == 0) goto lab0;
01190 if (ret < 0) return ret;
01191 }
01192 lab0:
01193 c = c1;
01194 }
01195 { int c2 = c;
01196 { int ret = r_mark_regions();
01197 if (ret == 0) goto lab1;
01198 if (ret < 0) return ret;
01199 }
01200 lab1:
01201 c = c2;
01202 }
01203 lb = c; c = l;
01204
01205 { int m3 = l - c; (void)m3;
01206 { int m4 = l - c; (void)m4;
01207 { int m5 = l - c; (void)m5;
01208 { int m6 = l - c; (void)m6;
01209 { int ret = r_standard_suffix();
01210 if (ret == 0) goto lab6;
01211 if (ret < 0) return ret;
01212 }
01213 goto lab5;
01214 lab6:
01215 c = l - m6;
01216 { int ret = r_i_verb_suffix();
01217 if (ret == 0) goto lab7;
01218 if (ret < 0) return ret;
01219 }
01220 goto lab5;
01221 lab7:
01222 c = l - m6;
01223 { int ret = r_verb_suffix();
01224 if (ret == 0) goto lab4;
01225 if (ret < 0) return ret;
01226 }
01227 }
01228 lab5:
01229 c = l - m5;
01230 { int m7 = l - c; (void)m7;
01231 ket = c;
01232 { int m8 = l - c; (void)m8;
01233 if (c <= lb || p[c - 1] != 'Y') goto lab10;
01234 c--;
01235 bra = c;
01236 { int ret = slice_from_s(1, s_31);
01237 if (ret < 0) return ret;
01238 }
01239 goto lab9;
01240 lab10:
01241 c = l - m8;
01242 if (!(eq_s_b(2, s_32))) { c = l - m7; goto lab8; }
01243 bra = c;
01244 { int ret = slice_from_s(1, s_33);
01245 if (ret < 0) return ret;
01246 }
01247 }
01248 lab9:
01249 lab8:
01250 ;
01251 }
01252 }
01253 goto lab3;
01254 lab4:
01255 c = l - m4;
01256 { int ret = r_residual_suffix();
01257 if (ret == 0) goto lab2;
01258 if (ret < 0) return ret;
01259 }
01260 }
01261 lab3:
01262 lab2:
01263 c = l - m3;
01264 }
01265 { int m9 = l - c; (void)m9;
01266 { int ret = r_un_double();
01267 if (ret == 0) goto lab11;
01268 if (ret < 0) return ret;
01269 }
01270 lab11:
01271 c = l - m9;
01272 }
01273 { int m10 = l - c; (void)m10;
01274 { int ret = r_un_accent();
01275 if (ret == 0) goto lab12;
01276 if (ret < 0) return ret;
01277 }
01278 lab12:
01279 c = l - m10;
01280 }
01281 c = lb;
01282 { int c11 = c;
01283 { int ret = r_postlude();
01284 if (ret == 0) goto lab13;
01285 if (ret < 0) return ret;
01286 }
01287 lab13:
01288 c = c11;
01289 }
01290 return 1;
01291 }
01292
01293 Xapian::InternalStemFrench::InternalStemFrench()
01294 : I_p2(0), I_p1(0), I_pV(0)
01295 {
01296 }
01297
01298 Xapian::InternalStemFrench::~InternalStemFrench()
01299 {
01300 }
01301
01302 const char *
01303 Xapian::InternalStemFrench::get_description() const
01304 {
01305 return "french";
01306 }