00001
00002
00003 #include <limits.h>
00004 #include "russian.h"
00005
00006 static const symbol s_pool[] = {
00007 #define s_0_0 0
00008 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C,
00009 #define s_0_1 10
00010 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C,
00011 #define s_0_2 22
00012 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C,
00013 #define s_0_3 34
00014 0xD0, 0xB2,
00015 #define s_0_4 36
00016 0xD1, 0x8B, 0xD0, 0xB2,
00017 #define s_0_5 40
00018 0xD0, 0xB8, 0xD0, 0xB2,
00019 #define s_0_6 44
00020 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8,
00021 #define s_0_7 50
00022 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8,
00023 #define s_0_8 58
00024 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8,
00025 #define s_1_0 66
00026 0xD0, 0xB5, 0xD0, 0xBC, 0xD1, 0x83,
00027 #define s_1_1 72
00028 0xD0, 0xBE, 0xD0, 0xBC, 0xD1, 0x83,
00029 #define s_1_2 78
00030 0xD1, 0x8B, 0xD1, 0x85,
00031 #define s_1_3 82
00032 0xD0, 0xB8, 0xD1, 0x85,
00033 #define s_1_4 86
00034 0xD1, 0x83, 0xD1, 0x8E,
00035 #define s_1_5 90
00036 0xD1, 0x8E, 0xD1, 0x8E,
00037 #define s_1_6 94
00038 0xD0, 0xB5, 0xD1, 0x8E,
00039 #define s_1_7 98
00040 0xD0, 0xBE, 0xD1, 0x8E,
00041 #define s_1_8 102
00042 0xD1, 0x8F, 0xD1, 0x8F,
00043 #define s_1_9 106
00044 0xD0, 0xB0, 0xD1, 0x8F,
00045 #define s_1_10 110
00046 0xD1, 0x8B, 0xD0, 0xB5,
00047 #define s_1_11 114
00048 0xD0, 0xB5, 0xD0, 0xB5,
00049 #define s_1_12 118
00050 0xD0, 0xB8, 0xD0, 0xB5,
00051 #define s_1_13 122
00052 0xD0, 0xBE, 0xD0, 0xB5,
00053 #define s_1_14 126
00054 0xD1, 0x8B, 0xD0, 0xBC, 0xD0, 0xB8,
00055 #define s_1_15 132
00056 0xD0, 0xB8, 0xD0, 0xBC, 0xD0, 0xB8,
00057 #define s_1_16 138
00058 0xD1, 0x8B, 0xD0, 0xB9,
00059 #define s_1_17 142
00060 0xD0, 0xB5, 0xD0, 0xB9,
00061 #define s_1_18 146
00062 0xD0, 0xB8, 0xD0, 0xB9,
00063 #define s_1_19 150
00064 0xD0, 0xBE, 0xD0, 0xB9,
00065 #define s_1_20 154
00066 0xD1, 0x8B, 0xD0, 0xBC,
00067 #define s_1_21 158
00068 0xD0, 0xB5, 0xD0, 0xBC,
00069 #define s_1_22 162
00070 0xD0, 0xB8, 0xD0, 0xBC,
00071 #define s_1_23 166
00072 0xD0, 0xBE, 0xD0, 0xBC,
00073 #define s_1_24 170
00074 0xD0, 0xB5, 0xD0, 0xB3, 0xD0, 0xBE,
00075 #define s_1_25 176
00076 0xD0, 0xBE, 0xD0, 0xB3, 0xD0, 0xBE,
00077 #define s_2_0 182
00078 0xD0, 0xB2, 0xD1, 0x88,
00079 #define s_2_1 186
00080 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88,
00081 #define s_2_2 192
00082 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88,
00083 #define s_2_3 198
00084 0xD1, 0x89,
00085 #define s_2_4 200
00086 0xD1, 0x8E, 0xD1, 0x89,
00087 #define s_2_5 204
00088 0xD1, 0x83, 0xD1, 0x8E, 0xD1, 0x89,
00089 #define s_2_6 210
00090 0xD0, 0xB5, 0xD0, 0xBC,
00091 #define s_2_7 214
00092 0xD0, 0xBD, 0xD0, 0xBD,
00093 #define s_3_0 218
00094 0xD1, 0x81, 0xD1, 0x8C,
00095 #define s_3_1 222
00096 0xD1, 0x81, 0xD1, 0x8F,
00097 #define s_4_0 226
00098 0xD1, 0x8B, 0xD1, 0x82,
00099 #define s_4_1 230
00100 0xD1, 0x8E, 0xD1, 0x82,
00101 #define s_4_2 234
00102 0xD1, 0x83, 0xD1, 0x8E, 0xD1, 0x82,
00103 #define s_4_3 240
00104 0xD1, 0x8F, 0xD1, 0x82,
00105 #define s_4_4 244
00106 0xD0, 0xB5, 0xD1, 0x82,
00107 #define s_4_5 248
00108 0xD1, 0x83, 0xD0, 0xB5, 0xD1, 0x82,
00109 #define s_4_6 254
00110 0xD0, 0xB8, 0xD1, 0x82,
00111 #define s_4_7 258
00112 0xD0, 0xBD, 0xD1, 0x8B,
00113 #define s_4_8 262
00114 0xD0, 0xB5, 0xD0, 0xBD, 0xD1, 0x8B,
00115 #define s_4_9 268
00116 0xD1, 0x82, 0xD1, 0x8C,
00117 #define s_4_10 272
00118 0xD1, 0x8B, 0xD1, 0x82, 0xD1, 0x8C,
00119 #define s_4_11 278
00120 0xD0, 0xB8, 0xD1, 0x82, 0xD1, 0x8C,
00121 #define s_4_12 284
00122 0xD0, 0xB5, 0xD1, 0x88, 0xD1, 0x8C,
00123 #define s_4_13 290
00124 0xD0, 0xB8, 0xD1, 0x88, 0xD1, 0x8C,
00125 #define s_4_14 296
00126 0xD1, 0x8E,
00127 #define s_4_15 298
00128 0xD1, 0x83, 0xD1, 0x8E,
00129 #define s_4_16 302
00130 0xD0, 0xBB, 0xD0, 0xB0,
00131 #define s_4_17 306
00132 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xB0,
00133 #define s_4_18 312
00134 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xB0,
00135 #define s_4_19 318
00136 0xD0, 0xBD, 0xD0, 0xB0,
00137 #define s_4_20 322
00138 0xD0, 0xB5, 0xD0, 0xBD, 0xD0, 0xB0,
00139 #define s_4_21 328
00140 0xD0, 0xB5, 0xD1, 0x82, 0xD0, 0xB5,
00141 #define s_4_22 334
00142 0xD0, 0xB8, 0xD1, 0x82, 0xD0, 0xB5,
00143 #define s_4_23 340
00144 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5,
00145 #define s_4_24 346
00146 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5,
00147 #define s_4_25 354
00148 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5,
00149 #define s_4_26 362
00150 0xD0, 0xBB, 0xD0, 0xB8,
00151 #define s_4_27 366
00152 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xB8,
00153 #define s_4_28 372
00154 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xB8,
00155 #define s_4_29 378
00156 0xD0, 0xB9,
00157 #define s_4_30 380
00158 0xD1, 0x83, 0xD0, 0xB9,
00159 #define s_4_31 384
00160 0xD0, 0xB5, 0xD0, 0xB9,
00161 #define s_4_32 388
00162 0xD0, 0xBB,
00163 #define s_4_33 390
00164 0xD1, 0x8B, 0xD0, 0xBB,
00165 #define s_4_34 394
00166 0xD0, 0xB8, 0xD0, 0xBB,
00167 #define s_4_35 398
00168 0xD1, 0x8B, 0xD0, 0xBC,
00169 #define s_4_36 402
00170 0xD0, 0xB5, 0xD0, 0xBC,
00171 #define s_4_37 406
00172 0xD0, 0xB8, 0xD0, 0xBC,
00173 #define s_4_38 410
00174 0xD0, 0xBD,
00175 #define s_4_39 412
00176 0xD0, 0xB5, 0xD0, 0xBD,
00177 #define s_4_40 416
00178 0xD0, 0xBB, 0xD0, 0xBE,
00179 #define s_4_41 420
00180 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xBE,
00181 #define s_4_42 426
00182 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xBE,
00183 #define s_4_43 432
00184 0xD0, 0xBD, 0xD0, 0xBE,
00185 #define s_4_44 436
00186 0xD0, 0xB5, 0xD0, 0xBD, 0xD0, 0xBE,
00187 #define s_4_45 442
00188 0xD0, 0xBD, 0xD0, 0xBD, 0xD0, 0xBE,
00189 #define s_5_0 448
00190 0xD1, 0x83,
00191 #define s_5_1 450
00192 0xD1, 0x8F, 0xD1, 0x85,
00193 #define s_5_2 454
00194 0xD0, 0xB8, 0xD1, 0x8F, 0xD1, 0x85,
00195 #define s_5_3 460
00196 0xD0, 0xB0, 0xD1, 0x85,
00197 #define s_5_4 464
00198 0xD1, 0x8B,
00199 #define s_5_5 466
00200 0xD1, 0x8C,
00201 #define s_5_6 468
00202 0xD1, 0x8E,
00203 #define s_5_7 470
00204 0xD1, 0x8C, 0xD1, 0x8E,
00205 #define s_5_8 474
00206 0xD0, 0xB8, 0xD1, 0x8E,
00207 #define s_5_9 478
00208 0xD1, 0x8F,
00209 #define s_5_10 480
00210 0xD1, 0x8C, 0xD1, 0x8F,
00211 #define s_5_11 484
00212 0xD0, 0xB8, 0xD1, 0x8F,
00213 #define s_5_12 488
00214 0xD0, 0xB0,
00215 #define s_5_13 490
00216 0xD0, 0xB5, 0xD0, 0xB2,
00217 #define s_5_14 494
00218 0xD0, 0xBE, 0xD0, 0xB2,
00219 #define s_5_15 498
00220 0xD0, 0xB5,
00221 #define s_5_16 500
00222 0xD1, 0x8C, 0xD0, 0xB5,
00223 #define s_5_17 504
00224 0xD0, 0xB8, 0xD0, 0xB5,
00225 #define s_5_18 508
00226 0xD0, 0xB8,
00227 #define s_5_19 510
00228 0xD0, 0xB5, 0xD0, 0xB8,
00229 #define s_5_20 514
00230 0xD0, 0xB8, 0xD0, 0xB8,
00231 #define s_5_21 518
00232 0xD1, 0x8F, 0xD0, 0xBC, 0xD0, 0xB8,
00233 #define s_5_22 524
00234 0xD0, 0xB8, 0xD1, 0x8F, 0xD0, 0xBC, 0xD0, 0xB8,
00235 #define s_5_23 532
00236 0xD0, 0xB0, 0xD0, 0xBC, 0xD0, 0xB8,
00237 #define s_5_24 538
00238 0xD0, 0xB9,
00239 #define s_5_25 540
00240 0xD0, 0xB5, 0xD0, 0xB9,
00241 #define s_5_26 544
00242 0xD0, 0xB8, 0xD0, 0xB5, 0xD0, 0xB9,
00243 #define s_5_27 550
00244 0xD0, 0xB8, 0xD0, 0xB9,
00245 #define s_5_28 554
00246 0xD0, 0xBE, 0xD0, 0xB9,
00247 #define s_5_29 558
00248 0xD1, 0x8F, 0xD0, 0xBC,
00249 #define s_5_30 562
00250 0xD0, 0xB8, 0xD1, 0x8F, 0xD0, 0xBC,
00251 #define s_5_31 568
00252 0xD0, 0xB0, 0xD0, 0xBC,
00253 #define s_5_32 572
00254 0xD0, 0xB5, 0xD0, 0xBC,
00255 #define s_5_33 576
00256 0xD0, 0xB8, 0xD0, 0xB5, 0xD0, 0xBC,
00257 #define s_5_34 582
00258 0xD0, 0xBE, 0xD0, 0xBC,
00259 #define s_5_35 586
00260 0xD0, 0xBE,
00261 #define s_6_0 588
00262 0xD0, 0xBE, 0xD1, 0x81, 0xD1, 0x82,
00263 #define s_6_1 594
00264 0xD0, 0xBE, 0xD1, 0x81, 0xD1, 0x82, 0xD1, 0x8C,
00265 #define s_7_0 602
00266 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x88,
00267 #define s_7_1 608
00268 0xD1, 0x8C,
00269 #define s_7_2 610
00270 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x88, 0xD0, 0xB5,
00271 #define s_7_3 618
00272 0xD0, 0xBD,
00273 };
00274
00275
00276 static const struct among a_0[9] =
00277 {
00278 { 10, s_0_0, -1, 1},
00279 { 12, s_0_1, 0, 2},
00280 { 12, s_0_2, 0, 2},
00281 { 2, s_0_3, -1, 1},
00282 { 4, s_0_4, 3, 2},
00283 { 4, s_0_5, 3, 2},
00284 { 6, s_0_6, -1, 1},
00285 { 8, s_0_7, 6, 2},
00286 { 8, s_0_8, 6, 2}
00287 };
00288
00289
00290 static const struct among a_1[26] =
00291 {
00292 { 6, s_1_0, -1, 1},
00293 { 6, s_1_1, -1, 1},
00294 { 4, s_1_2, -1, 1},
00295 { 4, s_1_3, -1, 1},
00296 { 4, s_1_4, -1, 1},
00297 { 4, s_1_5, -1, 1},
00298 { 4, s_1_6, -1, 1},
00299 { 4, s_1_7, -1, 1},
00300 { 4, s_1_8, -1, 1},
00301 { 4, s_1_9, -1, 1},
00302 { 4, s_1_10, -1, 1},
00303 { 4, s_1_11, -1, 1},
00304 { 4, s_1_12, -1, 1},
00305 { 4, s_1_13, -1, 1},
00306 { 6, s_1_14, -1, 1},
00307 { 6, s_1_15, -1, 1},
00308 { 4, s_1_16, -1, 1},
00309 { 4, s_1_17, -1, 1},
00310 { 4, s_1_18, -1, 1},
00311 { 4, s_1_19, -1, 1},
00312 { 4, s_1_20, -1, 1},
00313 { 4, s_1_21, -1, 1},
00314 { 4, s_1_22, -1, 1},
00315 { 4, s_1_23, -1, 1},
00316 { 6, s_1_24, -1, 1},
00317 { 6, s_1_25, -1, 1}
00318 };
00319
00320
00321 static const struct among a_2[8] =
00322 {
00323 { 4, s_2_0, -1, 1},
00324 { 6, s_2_1, 0, 2},
00325 { 6, s_2_2, 0, 2},
00326 { 2, s_2_3, -1, 1},
00327 { 4, s_2_4, 3, 1},
00328 { 6, s_2_5, 4, 2},
00329 { 4, s_2_6, -1, 1},
00330 { 4, s_2_7, -1, 1}
00331 };
00332
00333
00334 static const struct among a_3[2] =
00335 {
00336 { 4, s_3_0, -1, 1},
00337 { 4, s_3_1, -1, 1}
00338 };
00339
00340
00341 static const struct among a_4[46] =
00342 {
00343 { 4, s_4_0, -1, 2},
00344 { 4, s_4_1, -1, 1},
00345 { 6, s_4_2, 1, 2},
00346 { 4, s_4_3, -1, 2},
00347 { 4, s_4_4, -1, 1},
00348 { 6, s_4_5, 4, 2},
00349 { 4, s_4_6, -1, 2},
00350 { 4, s_4_7, -1, 1},
00351 { 6, s_4_8, 7, 2},
00352 { 4, s_4_9, -1, 1},
00353 { 6, s_4_10, 9, 2},
00354 { 6, s_4_11, 9, 2},
00355 { 6, s_4_12, -1, 1},
00356 { 6, s_4_13, -1, 2},
00357 { 2, s_4_14, -1, 2},
00358 { 4, s_4_15, 14, 2},
00359 { 4, s_4_16, -1, 1},
00360 { 6, s_4_17, 16, 2},
00361 { 6, s_4_18, 16, 2},
00362 { 4, s_4_19, -1, 1},
00363 { 6, s_4_20, 19, 2},
00364 { 6, s_4_21, -1, 1},
00365 { 6, s_4_22, -1, 2},
00366 { 6, s_4_23, -1, 1},
00367 { 8, s_4_24, 23, 2},
00368 { 8, s_4_25, 23, 2},
00369 { 4, s_4_26, -1, 1},
00370 { 6, s_4_27, 26, 2},
00371 { 6, s_4_28, 26, 2},
00372 { 2, s_4_29, -1, 1},
00373 { 4, s_4_30, 29, 2},
00374 { 4, s_4_31, 29, 2},
00375 { 2, s_4_32, -1, 1},
00376 { 4, s_4_33, 32, 2},
00377 { 4, s_4_34, 32, 2},
00378 { 4, s_4_35, -1, 2},
00379 { 4, s_4_36, -1, 1},
00380 { 4, s_4_37, -1, 2},
00381 { 2, s_4_38, -1, 1},
00382 { 4, s_4_39, 38, 2},
00383 { 4, s_4_40, -1, 1},
00384 { 6, s_4_41, 40, 2},
00385 { 6, s_4_42, 40, 2},
00386 { 4, s_4_43, -1, 1},
00387 { 6, s_4_44, 43, 2},
00388 { 6, s_4_45, 43, 1}
00389 };
00390
00391
00392 static const struct among a_5[36] =
00393 {
00394 { 2, s_5_0, -1, 1},
00395 { 4, s_5_1, -1, 1},
00396 { 6, s_5_2, 1, 1},
00397 { 4, s_5_3, -1, 1},
00398 { 2, s_5_4, -1, 1},
00399 { 2, s_5_5, -1, 1},
00400 { 2, s_5_6, -1, 1},
00401 { 4, s_5_7, 6, 1},
00402 { 4, s_5_8, 6, 1},
00403 { 2, s_5_9, -1, 1},
00404 { 4, s_5_10, 9, 1},
00405 { 4, s_5_11, 9, 1},
00406 { 2, s_5_12, -1, 1},
00407 { 4, s_5_13, -1, 1},
00408 { 4, s_5_14, -1, 1},
00409 { 2, s_5_15, -1, 1},
00410 { 4, s_5_16, 15, 1},
00411 { 4, s_5_17, 15, 1},
00412 { 2, s_5_18, -1, 1},
00413 { 4, s_5_19, 18, 1},
00414 { 4, s_5_20, 18, 1},
00415 { 6, s_5_21, 18, 1},
00416 { 8, s_5_22, 21, 1},
00417 { 6, s_5_23, 18, 1},
00418 { 2, s_5_24, -1, 1},
00419 { 4, s_5_25, 24, 1},
00420 { 6, s_5_26, 25, 1},
00421 { 4, s_5_27, 24, 1},
00422 { 4, s_5_28, 24, 1},
00423 { 4, s_5_29, -1, 1},
00424 { 6, s_5_30, 29, 1},
00425 { 4, s_5_31, -1, 1},
00426 { 4, s_5_32, -1, 1},
00427 { 6, s_5_33, 32, 1},
00428 { 4, s_5_34, -1, 1},
00429 { 2, s_5_35, -1, 1}
00430 };
00431
00432
00433 static const struct among a_6[2] =
00434 {
00435 { 6, s_6_0, -1, 1},
00436 { 8, s_6_1, -1, 1}
00437 };
00438
00439
00440 static const struct among a_7[4] =
00441 {
00442 { 6, s_7_0, -1, 1},
00443 { 2, s_7_1, -1, 3},
00444 { 8, s_7_2, -1, 1},
00445 { 2, s_7_3, -1, 2}
00446 };
00447
00448 static const unsigned char g_v[] = { 33, 65, 8, 232 };
00449
00450 static const symbol s_0[] = { 0xD0, 0xB0 };
00451 static const symbol s_1[] = { 0xD1, 0x8F };
00452 static const symbol s_2[] = { 0xD0, 0xB0 };
00453 static const symbol s_3[] = { 0xD1, 0x8F };
00454 static const symbol s_4[] = { 0xD0, 0xB0 };
00455 static const symbol s_5[] = { 0xD1, 0x8F };
00456 static const symbol s_6[] = { 0xD0, 0xBD };
00457 static const symbol s_7[] = { 0xD0, 0xBD };
00458 static const symbol s_8[] = { 0xD0, 0xBD };
00459 static const symbol s_9[] = { 0xD0, 0xB8 };
00460
00461 int Xapian::InternalStemRussian::r_mark_regions() {
00462 I_pV = l;
00463 I_p2 = l;
00464 { int c1 = c;
00465 { int ret = out_grouping_U(g_v, 1072, 1103, 1);
00466 if (ret < 0) goto lab0;
00467 c += ret;
00468 }
00469 I_pV = c;
00470 { int ret = in_grouping_U(g_v, 1072, 1103, 1);
00471 if (ret < 0) goto lab0;
00472 c += ret;
00473 }
00474 { int ret = out_grouping_U(g_v, 1072, 1103, 1);
00475 if (ret < 0) goto lab0;
00476 c += ret;
00477 }
00478 { int ret = in_grouping_U(g_v, 1072, 1103, 1);
00479 if (ret < 0) goto lab0;
00480 c += ret;
00481 }
00482 I_p2 = c;
00483 lab0:
00484 c = c1;
00485 }
00486 return 1;
00487 }
00488
00489 int Xapian::InternalStemRussian::r_R2() {
00490 if (!(I_p2 <= c)) return 0;
00491 return 1;
00492 }
00493
00494 int Xapian::InternalStemRussian::r_perfective_gerund() {
00495 int among_var;
00496 ket = c;
00497 among_var = find_among_b(s_pool, a_0, 9, 0, 0);
00498 if (!(among_var)) return 0;
00499 bra = c;
00500 switch(among_var) {
00501 case 0: return 0;
00502 case 1:
00503 { int m1 = l - c; (void)m1;
00504 if (!(eq_s_b(2, s_0))) goto lab1;
00505 goto lab0;
00506 lab1:
00507 c = l - m1;
00508 if (!(eq_s_b(2, s_1))) return 0;
00509 }
00510 lab0:
00511 if (slice_del() == -1) return -1;
00512 break;
00513 case 2:
00514 if (slice_del() == -1) return -1;
00515 break;
00516 }
00517 return 1;
00518 }
00519
00520 int Xapian::InternalStemRussian::r_adjective() {
00521 int among_var;
00522 ket = c;
00523 among_var = find_among_b(s_pool, a_1, 26, 0, 0);
00524 if (!(among_var)) return 0;
00525 bra = c;
00526 switch(among_var) {
00527 case 0: return 0;
00528 case 1:
00529 if (slice_del() == -1) return -1;
00530 break;
00531 }
00532 return 1;
00533 }
00534
00535 int Xapian::InternalStemRussian::r_adjectival() {
00536 int among_var;
00537 { int ret = r_adjective();
00538 if (ret <= 0) return ret;
00539 }
00540 { int m1 = l - c; (void)m1;
00541 ket = c;
00542 among_var = find_among_b(s_pool, a_2, 8, 0, 0);
00543 if (!(among_var)) { c = l - m1; goto lab0; }
00544 bra = c;
00545 switch(among_var) {
00546 case 0: { c = l - m1; goto lab0; }
00547 case 1:
00548 { int m2 = l - c; (void)m2;
00549 if (!(eq_s_b(2, s_2))) goto lab2;
00550 goto lab1;
00551 lab2:
00552 c = l - m2;
00553 if (!(eq_s_b(2, s_3))) { c = l - m1; goto lab0; }
00554 }
00555 lab1:
00556 if (slice_del() == -1) return -1;
00557 break;
00558 case 2:
00559 if (slice_del() == -1) return -1;
00560 break;
00561 }
00562 lab0:
00563 ;
00564 }
00565 return 1;
00566 }
00567
00568 int Xapian::InternalStemRussian::r_reflexive() {
00569 int among_var;
00570 ket = c;
00571 if (c - 3 <= lb || (p[c - 1] != 140 && p[c - 1] != 143)) return 0;
00572 among_var = find_among_b(s_pool, a_3, 2, 0, 0);
00573 if (!(among_var)) return 0;
00574 bra = c;
00575 switch(among_var) {
00576 case 0: return 0;
00577 case 1:
00578 if (slice_del() == -1) return -1;
00579 break;
00580 }
00581 return 1;
00582 }
00583
00584 int Xapian::InternalStemRussian::r_verb() {
00585 int among_var;
00586 ket = c;
00587 among_var = find_among_b(s_pool, a_4, 46, 0, 0);
00588 if (!(among_var)) return 0;
00589 bra = c;
00590 switch(among_var) {
00591 case 0: return 0;
00592 case 1:
00593 { int m1 = l - c; (void)m1;
00594 if (!(eq_s_b(2, s_4))) goto lab1;
00595 goto lab0;
00596 lab1:
00597 c = l - m1;
00598 if (!(eq_s_b(2, s_5))) return 0;
00599 }
00600 lab0:
00601 if (slice_del() == -1) return -1;
00602 break;
00603 case 2:
00604 if (slice_del() == -1) return -1;
00605 break;
00606 }
00607 return 1;
00608 }
00609
00610 int Xapian::InternalStemRussian::r_noun() {
00611 int among_var;
00612 ket = c;
00613 among_var = find_among_b(s_pool, a_5, 36, 0, 0);
00614 if (!(among_var)) return 0;
00615 bra = c;
00616 switch(among_var) {
00617 case 0: return 0;
00618 case 1:
00619 if (slice_del() == -1) return -1;
00620 break;
00621 }
00622 return 1;
00623 }
00624
00625 int Xapian::InternalStemRussian::r_derivational() {
00626 int among_var;
00627 ket = c;
00628 if (c - 5 <= lb || (p[c - 1] != 130 && p[c - 1] != 140)) return 0;
00629 among_var = find_among_b(s_pool, a_6, 2, 0, 0);
00630 if (!(among_var)) return 0;
00631 bra = c;
00632 { int ret = r_R2();
00633 if (ret <= 0) return ret;
00634 }
00635 switch(among_var) {
00636 case 0: return 0;
00637 case 1:
00638 if (slice_del() == -1) return -1;
00639 break;
00640 }
00641 return 1;
00642 }
00643
00644 int Xapian::InternalStemRussian::r_tidy_up() {
00645 int among_var;
00646 ket = c;
00647 among_var = find_among_b(s_pool, a_7, 4, 0, 0);
00648 if (!(among_var)) return 0;
00649 bra = c;
00650 switch(among_var) {
00651 case 0: return 0;
00652 case 1:
00653 if (slice_del() == -1) return -1;
00654 ket = c;
00655 if (!(eq_s_b(2, s_6))) return 0;
00656 bra = c;
00657 if (!(eq_s_b(2, s_7))) return 0;
00658 if (slice_del() == -1) return -1;
00659 break;
00660 case 2:
00661 if (!(eq_s_b(2, s_8))) return 0;
00662 if (slice_del() == -1) return -1;
00663 break;
00664 case 3:
00665 if (slice_del() == -1) return -1;
00666 break;
00667 }
00668 return 1;
00669 }
00670
00671 int Xapian::InternalStemRussian::stem() {
00672 { int c1 = c;
00673 { int ret = r_mark_regions();
00674 if (ret == 0) goto lab0;
00675 if (ret < 0) return ret;
00676 }
00677 lab0:
00678 c = c1;
00679 }
00680 lb = c; c = l;
00681
00682 { int m2 = l - c; (void)m2;
00683 int mlimit2;
00684 if (c < I_pV) return 0;
00685 c = I_pV;
00686 mlimit2 = lb; lb = c;
00687 c = l - m2;
00688 { int m3 = l - c; (void)m3;
00689 { int m4 = l - c; (void)m4;
00690 { int ret = r_perfective_gerund();
00691 if (ret == 0) goto lab3;
00692 if (ret < 0) return ret;
00693 }
00694 goto lab2;
00695 lab3:
00696 c = l - m4;
00697 { int m5 = l - c; (void)m5;
00698 { int ret = r_reflexive();
00699 if (ret == 0) { c = l - m5; goto lab4; }
00700 if (ret < 0) return ret;
00701 }
00702 lab4:
00703 ;
00704 }
00705 { int m6 = l - c; (void)m6;
00706 { int ret = r_adjectival();
00707 if (ret == 0) goto lab6;
00708 if (ret < 0) return ret;
00709 }
00710 goto lab5;
00711 lab6:
00712 c = l - m6;
00713 { int ret = r_verb();
00714 if (ret == 0) goto lab7;
00715 if (ret < 0) return ret;
00716 }
00717 goto lab5;
00718 lab7:
00719 c = l - m6;
00720 { int ret = r_noun();
00721 if (ret == 0) goto lab1;
00722 if (ret < 0) return ret;
00723 }
00724 }
00725 lab5:
00726 ;
00727 }
00728 lab2:
00729 lab1:
00730 c = l - m3;
00731 }
00732 { int m7 = l - c; (void)m7;
00733 ket = c;
00734 if (!(eq_s_b(2, s_9))) { c = l - m7; goto lab8; }
00735 bra = c;
00736 if (slice_del() == -1) return -1;
00737 lab8:
00738 ;
00739 }
00740 { int m8 = l - c; (void)m8;
00741 { int ret = r_derivational();
00742 if (ret == 0) goto lab9;
00743 if (ret < 0) return ret;
00744 }
00745 lab9:
00746 c = l - m8;
00747 }
00748 { int m9 = l - c; (void)m9;
00749 { int ret = r_tidy_up();
00750 if (ret == 0) goto lab10;
00751 if (ret < 0) return ret;
00752 }
00753 lab10:
00754 c = l - m9;
00755 }
00756 lb = mlimit2;
00757 }
00758 c = lb;
00759 return 1;
00760 }
00761
00762 Xapian::InternalStemRussian::InternalStemRussian()
00763 : I_p2(0), I_pV(0)
00764 {
00765 }
00766
00767 Xapian::InternalStemRussian::~InternalStemRussian()
00768 {
00769 }
00770
00771 const char *
00772 Xapian::InternalStemRussian::get_description() const
00773 {
00774 return "russian";
00775 }