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