1 // Generated by Snowball 2.0.0 - https://snowballstem.org/ 2 3 package org.tartarus.snowball.ext; 4 5 import org.tartarus.snowball.Among; 6 7 /** 8 * This class implements the stemming algorithm defined by a snowball script. 9 * 10 * <p>Generated by Snowball 2.0.0 - https://snowballstem.org/ 11 */ 12 @SuppressWarnings("unused") 13 public class EstonianStemmer extends org.tartarus.snowball.SnowballStemmer { 14 15 private static final long serialVersionUID = 1L; 16 private static final java.lang.invoke.MethodHandles.Lookup methodObject = 17 java.lang.invoke.MethodHandles.lookup(); 18 19 private static final Among a_0[] = {new Among("gi", -1, 1), new Among("ki", -1, 2)}; 20 21 private static final Among a_1[] = { 22 new Among("da", -1, 3), 23 new Among("mata", -1, 1), 24 new Among("b", -1, 3), 25 new Among("ksid", -1, 1), 26 new Among("nuksid", 3, 1), 27 new Among("me", -1, 3), 28 new Among("sime", 5, 1), 29 new Among("ksime", 6, 1), 30 new Among("nuksime", 7, 1), 31 new Among("akse", -1, 2), 32 new Among("dakse", 9, 1), 33 new Among("takse", 9, 1), 34 new Among("site", -1, 1), 35 new Among("ksite", 12, 1), 36 new Among("nuksite", 13, 1), 37 new Among("n", -1, 3), 38 new Among("sin", 15, 1), 39 new Among("ksin", 16, 1), 40 new Among("nuksin", 17, 1), 41 new Among("daks", -1, 1), 42 new Among("taks", -1, 1) 43 }; 44 45 private static final Among a_2[] = { 46 new Among("aa", -1, -1), 47 new Among("ee", -1, -1), 48 new Among("ii", -1, -1), 49 new Among("oo", -1, -1), 50 new Among("uu", -1, -1), 51 new Among("\u00E4\u00E4", -1, -1), 52 new Among("\u00F5\u00F5", -1, -1), 53 new Among("\u00F6\u00F6", -1, -1), 54 new Among("\u00FC\u00FC", -1, -1) 55 }; 56 57 private static final Among a_3[] = {new Among("i", -1, 1)}; 58 59 private static final Among a_4[] = { 60 new Among("lane", -1, 1), 61 new Among("line", -1, 3), 62 new Among("mine", -1, 2), 63 new Among("lasse", -1, 1), 64 new Among("lisse", -1, 3), 65 new Among("misse", -1, 2), 66 new Among("lasi", -1, 1), 67 new Among("lisi", -1, 3), 68 new Among("misi", -1, 2), 69 new Among("last", -1, 1), 70 new Among("list", -1, 3), 71 new Among("mist", -1, 2) 72 }; 73 74 private static final Among a_5[] = { 75 new Among("ga", -1, 1), 76 new Among("ta", -1, 1), 77 new Among("le", -1, 1), 78 new Among("sse", -1, 1), 79 new Among("l", -1, 1), 80 new Among("s", -1, 1), 81 new Among("ks", 5, 1), 82 new Among("t", -1, 1), 83 new Among("lt", 7, 1), 84 new Among("st", 7, 1) 85 }; 86 87 private static final Among a_6[] = { 88 new Among("d", -1, 4), 89 new Among("sid", 0, 2), 90 new Among("de", -1, 4), 91 new Among("ikkude", 2, 1), 92 new Among("ike", -1, 1), 93 new Among("ikke", -1, 1), 94 new Among("te", -1, 3) 95 }; 96 97 private static final Among a_7[] = { 98 new Among("kk", -1, -1), new Among("pp", -1, -1), new Among("tt", -1, -1) 99 }; 100 101 private static final Among a_8[] = { 102 new Among("va", -1, -1), 103 new Among("du", -1, -1), 104 new Among("nu", -1, -1), 105 new Among("tu", -1, -1) 106 }; 107 108 private static final Among a_9[] = { 109 new Among("ma", -1, 2), new Among("mai", -1, 1), new Among("m", -1, 1) 110 }; 111 112 private static final Among a_10[] = { 113 new Among("joob", -1, 1), 114 new Among("jood", -1, 1), 115 new Among("joodakse", 1, 1), 116 new Among("jooma", -1, 1), 117 new Among("joomata", 3, 1), 118 new Among("joome", -1, 1), 119 new Among("joon", -1, 1), 120 new Among("joote", -1, 1), 121 new Among("joovad", -1, 1), 122 new Among("juua", -1, 1), 123 new Among("juuakse", 9, 1), 124 new Among("j\u00E4i", -1, 12), 125 new Among("j\u00E4id", 11, 12), 126 new Among("j\u00E4ime", 11, 12), 127 new Among("j\u00E4in", 11, 12), 128 new Among("j\u00E4ite", 11, 12), 129 new Among("j\u00E4\u00E4b", -1, 12), 130 new Among("j\u00E4\u00E4d", -1, 12), 131 new Among("j\u00E4\u00E4da", 17, 12), 132 new Among("j\u00E4\u00E4dakse", 18, 12), 133 new Among("j\u00E4\u00E4di", 17, 12), 134 new Among("j\u00E4\u00E4ks", -1, 12), 135 new Among("j\u00E4\u00E4ksid", 21, 12), 136 new Among("j\u00E4\u00E4ksime", 21, 12), 137 new Among("j\u00E4\u00E4ksin", 21, 12), 138 new Among("j\u00E4\u00E4ksite", 21, 12), 139 new Among("j\u00E4\u00E4ma", -1, 12), 140 new Among("j\u00E4\u00E4mata", 26, 12), 141 new Among("j\u00E4\u00E4me", -1, 12), 142 new Among("j\u00E4\u00E4n", -1, 12), 143 new Among("j\u00E4\u00E4te", -1, 12), 144 new Among("j\u00E4\u00E4vad", -1, 12), 145 new Among("j\u00F5i", -1, 1), 146 new Among("j\u00F5id", 32, 1), 147 new Among("j\u00F5ime", 32, 1), 148 new Among("j\u00F5in", 32, 1), 149 new Among("j\u00F5ite", 32, 1), 150 new Among("keeb", -1, 4), 151 new Among("keed", -1, 4), 152 new Among("keedakse", 38, 4), 153 new Among("keeks", -1, 4), 154 new Among("keeksid", 40, 4), 155 new Among("keeksime", 40, 4), 156 new Among("keeksin", 40, 4), 157 new Among("keeksite", 40, 4), 158 new Among("keema", -1, 4), 159 new Among("keemata", 45, 4), 160 new Among("keeme", -1, 4), 161 new Among("keen", -1, 4), 162 new Among("kees", -1, 4), 163 new Among("keeta", -1, 4), 164 new Among("keete", -1, 4), 165 new Among("keevad", -1, 4), 166 new Among("k\u00E4ia", -1, 8), 167 new Among("k\u00E4iakse", 53, 8), 168 new Among("k\u00E4ib", -1, 8), 169 new Among("k\u00E4id", -1, 8), 170 new Among("k\u00E4idi", 56, 8), 171 new Among("k\u00E4iks", -1, 8), 172 new Among("k\u00E4iksid", 58, 8), 173 new Among("k\u00E4iksime", 58, 8), 174 new Among("k\u00E4iksin", 58, 8), 175 new Among("k\u00E4iksite", 58, 8), 176 new Among("k\u00E4ima", -1, 8), 177 new Among("k\u00E4imata", 63, 8), 178 new Among("k\u00E4ime", -1, 8), 179 new Among("k\u00E4in", -1, 8), 180 new Among("k\u00E4is", -1, 8), 181 new Among("k\u00E4ite", -1, 8), 182 new Among("k\u00E4ivad", -1, 8), 183 new Among("laob", -1, 16), 184 new Among("laod", -1, 16), 185 new Among("laoks", -1, 16), 186 new Among("laoksid", 72, 16), 187 new Among("laoksime", 72, 16), 188 new Among("laoksin", 72, 16), 189 new Among("laoksite", 72, 16), 190 new Among("laome", -1, 16), 191 new Among("laon", -1, 16), 192 new Among("laote", -1, 16), 193 new Among("laovad", -1, 16), 194 new Among("loeb", -1, 14), 195 new Among("loed", -1, 14), 196 new Among("loeks", -1, 14), 197 new Among("loeksid", 83, 14), 198 new Among("loeksime", 83, 14), 199 new Among("loeksin", 83, 14), 200 new Among("loeksite", 83, 14), 201 new Among("loeme", -1, 14), 202 new Among("loen", -1, 14), 203 new Among("loete", -1, 14), 204 new Among("loevad", -1, 14), 205 new Among("loob", -1, 7), 206 new Among("lood", -1, 7), 207 new Among("loodi", 93, 7), 208 new Among("looks", -1, 7), 209 new Among("looksid", 95, 7), 210 new Among("looksime", 95, 7), 211 new Among("looksin", 95, 7), 212 new Among("looksite", 95, 7), 213 new Among("looma", -1, 7), 214 new Among("loomata", 100, 7), 215 new Among("loome", -1, 7), 216 new Among("loon", -1, 7), 217 new Among("loote", -1, 7), 218 new Among("loovad", -1, 7), 219 new Among("luua", -1, 7), 220 new Among("luuakse", 106, 7), 221 new Among("l\u00F5i", -1, 6), 222 new Among("l\u00F5id", 108, 6), 223 new Among("l\u00F5ime", 108, 6), 224 new Among("l\u00F5in", 108, 6), 225 new Among("l\u00F5ite", 108, 6), 226 new Among("l\u00F6\u00F6b", -1, 5), 227 new Among("l\u00F6\u00F6d", -1, 5), 228 new Among("l\u00F6\u00F6dakse", 114, 5), 229 new Among("l\u00F6\u00F6di", 114, 5), 230 new Among("l\u00F6\u00F6ks", -1, 5), 231 new Among("l\u00F6\u00F6ksid", 117, 5), 232 new Among("l\u00F6\u00F6ksime", 117, 5), 233 new Among("l\u00F6\u00F6ksin", 117, 5), 234 new Among("l\u00F6\u00F6ksite", 117, 5), 235 new Among("l\u00F6\u00F6ma", -1, 5), 236 new Among("l\u00F6\u00F6mata", 122, 5), 237 new Among("l\u00F6\u00F6me", -1, 5), 238 new Among("l\u00F6\u00F6n", -1, 5), 239 new Among("l\u00F6\u00F6te", -1, 5), 240 new Among("l\u00F6\u00F6vad", -1, 5), 241 new Among("l\u00FC\u00FCa", -1, 5), 242 new Among("l\u00FC\u00FCakse", 128, 5), 243 new Among("m\u00FC\u00FCa", -1, 13), 244 new Among("m\u00FC\u00FCakse", 130, 13), 245 new Among("m\u00FC\u00FCb", -1, 13), 246 new Among("m\u00FC\u00FCd", -1, 13), 247 new Among("m\u00FC\u00FCdi", 133, 13), 248 new Among("m\u00FC\u00FCks", -1, 13), 249 new Among("m\u00FC\u00FCksid", 135, 13), 250 new Among("m\u00FC\u00FCksime", 135, 13), 251 new Among("m\u00FC\u00FCksin", 135, 13), 252 new Among("m\u00FC\u00FCksite", 135, 13), 253 new Among("m\u00FC\u00FCma", -1, 13), 254 new Among("m\u00FC\u00FCmata", 140, 13), 255 new Among("m\u00FC\u00FCme", -1, 13), 256 new Among("m\u00FC\u00FCn", -1, 13), 257 new Among("m\u00FC\u00FCs", -1, 13), 258 new Among("m\u00FC\u00FCte", -1, 13), 259 new Among("m\u00FC\u00FCvad", -1, 13), 260 new Among("n\u00E4eb", -1, 18), 261 new Among("n\u00E4ed", -1, 18), 262 new Among("n\u00E4eks", -1, 18), 263 new Among("n\u00E4eksid", 149, 18), 264 new Among("n\u00E4eksime", 149, 18), 265 new Among("n\u00E4eksin", 149, 18), 266 new Among("n\u00E4eksite", 149, 18), 267 new Among("n\u00E4eme", -1, 18), 268 new Among("n\u00E4en", -1, 18), 269 new Among("n\u00E4ete", -1, 18), 270 new Among("n\u00E4evad", -1, 18), 271 new Among("n\u00E4gema", -1, 18), 272 new Among("n\u00E4gemata", 158, 18), 273 new Among("n\u00E4ha", -1, 18), 274 new Among("n\u00E4hakse", 160, 18), 275 new Among("n\u00E4hti", -1, 18), 276 new Among("p\u00F5eb", -1, 15), 277 new Among("p\u00F5ed", -1, 15), 278 new Among("p\u00F5eks", -1, 15), 279 new Among("p\u00F5eksid", 165, 15), 280 new Among("p\u00F5eksime", 165, 15), 281 new Among("p\u00F5eksin", 165, 15), 282 new Among("p\u00F5eksite", 165, 15), 283 new Among("p\u00F5eme", -1, 15), 284 new Among("p\u00F5en", -1, 15), 285 new Among("p\u00F5ete", -1, 15), 286 new Among("p\u00F5evad", -1, 15), 287 new Among("saab", -1, 2), 288 new Among("saad", -1, 2), 289 new Among("saada", 175, 2), 290 new Among("saadakse", 176, 2), 291 new Among("saadi", 175, 2), 292 new Among("saaks", -1, 2), 293 new Among("saaksid", 179, 2), 294 new Among("saaksime", 179, 2), 295 new Among("saaksin", 179, 2), 296 new Among("saaksite", 179, 2), 297 new Among("saama", -1, 2), 298 new Among("saamata", 184, 2), 299 new Among("saame", -1, 2), 300 new Among("saan", -1, 2), 301 new Among("saate", -1, 2), 302 new Among("saavad", -1, 2), 303 new Among("sai", -1, 2), 304 new Among("said", 190, 2), 305 new Among("saime", 190, 2), 306 new Among("sain", 190, 2), 307 new Among("saite", 190, 2), 308 new Among("s\u00F5i", -1, 9), 309 new Among("s\u00F5id", 195, 9), 310 new Among("s\u00F5ime", 195, 9), 311 new Among("s\u00F5in", 195, 9), 312 new Among("s\u00F5ite", 195, 9), 313 new Among("s\u00F6\u00F6b", -1, 9), 314 new Among("s\u00F6\u00F6d", -1, 9), 315 new Among("s\u00F6\u00F6dakse", 201, 9), 316 new Among("s\u00F6\u00F6di", 201, 9), 317 new Among("s\u00F6\u00F6ks", -1, 9), 318 new Among("s\u00F6\u00F6ksid", 204, 9), 319 new Among("s\u00F6\u00F6ksime", 204, 9), 320 new Among("s\u00F6\u00F6ksin", 204, 9), 321 new Among("s\u00F6\u00F6ksite", 204, 9), 322 new Among("s\u00F6\u00F6ma", -1, 9), 323 new Among("s\u00F6\u00F6mata", 209, 9), 324 new Among("s\u00F6\u00F6me", -1, 9), 325 new Among("s\u00F6\u00F6n", -1, 9), 326 new Among("s\u00F6\u00F6te", -1, 9), 327 new Among("s\u00F6\u00F6vad", -1, 9), 328 new Among("s\u00FC\u00FCa", -1, 9), 329 new Among("s\u00FC\u00FCakse", 215, 9), 330 new Among("teeb", -1, 17), 331 new Among("teed", -1, 17), 332 new Among("teeks", -1, 17), 333 new Among("teeksid", 219, 17), 334 new Among("teeksime", 219, 17), 335 new Among("teeksin", 219, 17), 336 new Among("teeksite", 219, 17), 337 new Among("teeme", -1, 17), 338 new Among("teen", -1, 17), 339 new Among("teete", -1, 17), 340 new Among("teevad", -1, 17), 341 new Among("tegema", -1, 17), 342 new Among("tegemata", 228, 17), 343 new Among("teha", -1, 17), 344 new Among("tehakse", 230, 17), 345 new Among("tehti", -1, 17), 346 new Among("toob", -1, 10), 347 new Among("tood", -1, 10), 348 new Among("toodi", 234, 10), 349 new Among("tooks", -1, 10), 350 new Among("tooksid", 236, 10), 351 new Among("tooksime", 236, 10), 352 new Among("tooksin", 236, 10), 353 new Among("tooksite", 236, 10), 354 new Among("tooma", -1, 10), 355 new Among("toomata", 241, 10), 356 new Among("toome", -1, 10), 357 new Among("toon", -1, 10), 358 new Among("toote", -1, 10), 359 new Among("toovad", -1, 10), 360 new Among("tuua", -1, 10), 361 new Among("tuuakse", 247, 10), 362 new Among("t\u00F5i", -1, 10), 363 new Among("t\u00F5id", 249, 10), 364 new Among("t\u00F5ime", 249, 10), 365 new Among("t\u00F5in", 249, 10), 366 new Among("t\u00F5ite", 249, 10), 367 new Among("viia", -1, 3), 368 new Among("viiakse", 254, 3), 369 new Among("viib", -1, 3), 370 new Among("viid", -1, 3), 371 new Among("viidi", 257, 3), 372 new Among("viiks", -1, 3), 373 new Among("viiksid", 259, 3), 374 new Among("viiksime", 259, 3), 375 new Among("viiksin", 259, 3), 376 new Among("viiksite", 259, 3), 377 new Among("viima", -1, 3), 378 new Among("viimata", 264, 3), 379 new Among("viime", -1, 3), 380 new Among("viin", -1, 3), 381 new Among("viisime", -1, 3), 382 new Among("viisin", -1, 3), 383 new Among("viisite", -1, 3), 384 new Among("viite", -1, 3), 385 new Among("viivad", -1, 3), 386 new Among("v\u00F5ib", -1, 11), 387 new Among("v\u00F5id", -1, 11), 388 new Among("v\u00F5ida", 274, 11), 389 new Among("v\u00F5idakse", 275, 11), 390 new Among("v\u00F5idi", 274, 11), 391 new Among("v\u00F5iks", -1, 11), 392 new Among("v\u00F5iksid", 278, 11), 393 new Among("v\u00F5iksime", 278, 11), 394 new Among("v\u00F5iksin", 278, 11), 395 new Among("v\u00F5iksite", 278, 11), 396 new Among("v\u00F5ima", -1, 11), 397 new Among("v\u00F5imata", 283, 11), 398 new Among("v\u00F5ime", -1, 11), 399 new Among("v\u00F5in", -1, 11), 400 new Among("v\u00F5is", -1, 11), 401 new Among("v\u00F5ite", -1, 11), 402 new Among("v\u00F5ivad", -1, 11) 403 }; 404 405 private static final char g_V1[] = { 406 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 48, 8 407 }; 408 409 private static final char g_RV[] = {17, 65, 16}; 410 411 private static final char g_KI[] = { 412 117, 66, 6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413 128, 0, 0, 0, 16 414 }; 415 416 private static final char g_GI[] = { 417 21, 123, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 48, 8 418 }; 419 420 private int I_p1; 421 private boolean B_is_verb; 422 r_mark_regions()423 private boolean r_mark_regions() { 424 I_p1 = limit; 425 golab0: 426 while (true) { 427 int v_1 = cursor; 428 lab1: 429 { 430 if (!(in_grouping(g_V1, 97, 252))) { 431 break lab1; 432 } 433 cursor = v_1; 434 break golab0; 435 } 436 cursor = v_1; 437 if (cursor >= limit) { 438 return false; 439 } 440 cursor++; 441 } 442 golab2: 443 while (true) { 444 lab3: 445 { 446 if (!(out_grouping(g_V1, 97, 252))) { 447 break lab3; 448 } 449 break golab2; 450 } 451 if (cursor >= limit) { 452 return false; 453 } 454 cursor++; 455 } 456 I_p1 = cursor; 457 return true; 458 } 459 r_emphasis()460 private boolean r_emphasis() { 461 int among_var; 462 if (cursor < I_p1) { 463 return false; 464 } 465 int v_2 = limit_backward; 466 limit_backward = I_p1; 467 ket = cursor; 468 among_var = find_among_b(a_0); 469 if (among_var == 0) { 470 limit_backward = v_2; 471 return false; 472 } 473 bra = cursor; 474 limit_backward = v_2; 475 int v_3 = limit - cursor; 476 { 477 int c = cursor - 4; 478 if (limit_backward > c || c > limit) { 479 return false; 480 } 481 cursor = c; 482 } 483 cursor = limit - v_3; 484 switch (among_var) { 485 case 1: 486 int v_4 = limit - cursor; 487 if (!(in_grouping_b(g_GI, 97, 252))) { 488 return false; 489 } 490 cursor = limit - v_4; 491 { 492 int v_5 = limit - cursor; 493 lab0: 494 { 495 if (!r_LONGV()) { 496 break lab0; 497 } 498 return false; 499 } 500 cursor = limit - v_5; 501 } 502 slice_del(); 503 break; 504 case 2: 505 if (!(in_grouping_b(g_KI, 98, 382))) { 506 return false; 507 } 508 slice_del(); 509 break; 510 } 511 return true; 512 } 513 r_verb()514 private boolean r_verb() { 515 int among_var; 516 if (cursor < I_p1) { 517 return false; 518 } 519 int v_2 = limit_backward; 520 limit_backward = I_p1; 521 ket = cursor; 522 among_var = find_among_b(a_1); 523 if (among_var == 0) { 524 limit_backward = v_2; 525 return false; 526 } 527 bra = cursor; 528 limit_backward = v_2; 529 switch (among_var) { 530 case 1: 531 slice_del(); 532 break; 533 case 2: 534 slice_from("a"); 535 break; 536 case 3: 537 if (!(in_grouping_b(g_V1, 97, 252))) { 538 return false; 539 } 540 slice_del(); 541 break; 542 } 543 B_is_verb = true; 544 return true; 545 } 546 r_LONGV()547 private boolean r_LONGV() { 548 if (find_among_b(a_2) == 0) { 549 return false; 550 } 551 return true; 552 } 553 r_i_plural()554 private boolean r_i_plural() { 555 if (cursor < I_p1) { 556 return false; 557 } 558 int v_2 = limit_backward; 559 limit_backward = I_p1; 560 ket = cursor; 561 if (find_among_b(a_3) == 0) { 562 limit_backward = v_2; 563 return false; 564 } 565 bra = cursor; 566 limit_backward = v_2; 567 if (!(in_grouping_b(g_RV, 97, 117))) { 568 return false; 569 } 570 slice_del(); 571 return true; 572 } 573 r_special_noun_endings()574 private boolean r_special_noun_endings() { 575 int among_var; 576 if (cursor < I_p1) { 577 return false; 578 } 579 int v_2 = limit_backward; 580 limit_backward = I_p1; 581 ket = cursor; 582 among_var = find_among_b(a_4); 583 if (among_var == 0) { 584 limit_backward = v_2; 585 return false; 586 } 587 bra = cursor; 588 limit_backward = v_2; 589 switch (among_var) { 590 case 1: 591 slice_from("lase"); 592 break; 593 case 2: 594 slice_from("mise"); 595 break; 596 case 3: 597 slice_from("lise"); 598 break; 599 } 600 return true; 601 } 602 r_case_ending()603 private boolean r_case_ending() { 604 if (cursor < I_p1) { 605 return false; 606 } 607 int v_2 = limit_backward; 608 limit_backward = I_p1; 609 ket = cursor; 610 if (find_among_b(a_5) == 0) { 611 limit_backward = v_2; 612 return false; 613 } 614 bra = cursor; 615 limit_backward = v_2; 616 lab0: 617 { 618 int v_3 = limit - cursor; 619 lab1: 620 { 621 if (!(in_grouping_b(g_RV, 97, 117))) { 622 break lab1; 623 } 624 break lab0; 625 } 626 cursor = limit - v_3; 627 if (!r_LONGV()) { 628 return false; 629 } 630 } 631 slice_del(); 632 return true; 633 } 634 r_plural_three_first_cases()635 private boolean r_plural_three_first_cases() { 636 int among_var; 637 if (cursor < I_p1) { 638 return false; 639 } 640 int v_2 = limit_backward; 641 limit_backward = I_p1; 642 ket = cursor; 643 among_var = find_among_b(a_6); 644 if (among_var == 0) { 645 limit_backward = v_2; 646 return false; 647 } 648 bra = cursor; 649 limit_backward = v_2; 650 switch (among_var) { 651 case 1: 652 slice_from("iku"); 653 break; 654 case 2: 655 { 656 int v_3 = limit - cursor; 657 lab0: 658 { 659 if (!r_LONGV()) { 660 break lab0; 661 } 662 return false; 663 } 664 cursor = limit - v_3; 665 } 666 slice_del(); 667 break; 668 case 3: 669 lab1: 670 { 671 int v_4 = limit - cursor; 672 lab2: 673 { 674 int v_5 = limit - cursor; 675 { 676 int c = cursor - 4; 677 if (limit_backward > c || c > limit) { 678 break lab2; 679 } 680 cursor = c; 681 } 682 cursor = limit - v_5; 683 lab3: 684 { 685 int v_6 = limit - cursor; 686 lab4: 687 { 688 if (!(eq_s_b("mis"))) { 689 break lab4; 690 } 691 slice_from("e"); 692 break lab3; 693 } 694 cursor = limit - v_6; 695 lab5: 696 { 697 if (!(eq_s_b("las"))) { 698 break lab5; 699 } 700 slice_from("e"); 701 break lab3; 702 } 703 cursor = limit - v_6; 704 lab6: 705 { 706 if (!(eq_s_b("lis"))) { 707 break lab6; 708 } 709 slice_from("e"); 710 break lab3; 711 } 712 cursor = limit - v_6; 713 { 714 int v_7 = limit - cursor; 715 lab7: 716 { 717 if (!(eq_s_b("t"))) { 718 break lab7; 719 } 720 break lab2; 721 } 722 cursor = limit - v_7; 723 } 724 slice_del(); 725 } 726 break lab1; 727 } 728 cursor = limit - v_4; 729 { 730 int v_8 = limit - cursor; 731 lab8: 732 { 733 if (!(eq_s_b("t"))) { 734 break lab8; 735 } 736 return false; 737 } 738 cursor = limit - v_8; 739 } 740 slice_from("t"); 741 } 742 break; 743 case 4: 744 lab9: 745 { 746 int v_9 = limit - cursor; 747 lab10: 748 { 749 if (!(in_grouping_b(g_RV, 97, 117))) { 750 break lab10; 751 } 752 break lab9; 753 } 754 cursor = limit - v_9; 755 if (!r_LONGV()) { 756 return false; 757 } 758 } 759 slice_del(); 760 break; 761 } 762 return true; 763 } 764 r_double()765 private boolean r_double() { 766 int v_1 = limit - cursor; 767 if (find_among_b(a_7) == 0) { 768 return false; 769 } 770 cursor = limit - v_1; 771 return true; 772 } 773 r_undouble()774 private boolean r_undouble() { 775 if (cursor <= limit_backward) { 776 return false; 777 } 778 cursor--; 779 ket = cursor; 780 { 781 int c = cursor - 1; 782 if (limit_backward > c || c > limit) { 783 return false; 784 } 785 cursor = c; 786 } 787 bra = cursor; 788 slice_del(); 789 return true; 790 } 791 r_nu()792 private boolean r_nu() { 793 if (cursor < I_p1) { 794 return false; 795 } 796 int v_2 = limit_backward; 797 limit_backward = I_p1; 798 ket = cursor; 799 if (find_among_b(a_8) == 0) { 800 limit_backward = v_2; 801 return false; 802 } 803 bra = cursor; 804 limit_backward = v_2; 805 slice_del(); 806 return true; 807 } 808 r_remove_double_kpt()809 private boolean r_remove_double_kpt() { 810 if (!(in_grouping_b(g_V1, 97, 252))) { 811 return false; 812 } 813 int v_1 = limit - cursor; 814 if (!r_double()) { 815 return false; 816 } 817 cursor = limit - v_1; 818 if (!r_undouble()) { 819 return false; 820 } 821 return true; 822 } 823 r_degrees()824 private boolean r_degrees() { 825 int among_var; 826 if (cursor < I_p1) { 827 return false; 828 } 829 int v_2 = limit_backward; 830 limit_backward = I_p1; 831 ket = cursor; 832 among_var = find_among_b(a_9); 833 if (among_var == 0) { 834 limit_backward = v_2; 835 return false; 836 } 837 bra = cursor; 838 limit_backward = v_2; 839 switch (among_var) { 840 case 1: 841 if (!(in_grouping_b(g_RV, 97, 117))) { 842 return false; 843 } 844 slice_del(); 845 break; 846 case 2: 847 slice_del(); 848 break; 849 } 850 return true; 851 } 852 r_substantive()853 private boolean r_substantive() { 854 int v_1 = limit - cursor; 855 r_special_noun_endings(); 856 cursor = limit - v_1; 857 int v_2 = limit - cursor; 858 r_case_ending(); 859 cursor = limit - v_2; 860 int v_3 = limit - cursor; 861 r_plural_three_first_cases(); 862 cursor = limit - v_3; 863 int v_4 = limit - cursor; 864 r_degrees(); 865 cursor = limit - v_4; 866 int v_5 = limit - cursor; 867 r_i_plural(); 868 cursor = limit - v_5; 869 int v_6 = limit - cursor; 870 r_nu(); 871 cursor = limit - v_6; 872 return true; 873 } 874 r_verb_exceptions()875 private boolean r_verb_exceptions() { 876 int among_var; 877 bra = cursor; 878 among_var = find_among(a_10); 879 if (among_var == 0) { 880 return false; 881 } 882 ket = cursor; 883 if (cursor < limit) { 884 return false; 885 } 886 switch (among_var) { 887 case 1: 888 slice_from("joo"); 889 break; 890 case 2: 891 slice_from("saa"); 892 break; 893 case 3: 894 slice_from("viima"); 895 break; 896 case 4: 897 slice_from("keesi"); 898 break; 899 case 5: 900 slice_from("l\u00F6\u00F6"); 901 break; 902 case 6: 903 slice_from("l\u00F6i"); 904 break; 905 case 7: 906 slice_from("loo"); 907 break; 908 case 8: 909 slice_from("k\u00E4isi"); 910 break; 911 case 9: 912 slice_from("s\u00F6\u00F6"); 913 break; 914 case 10: 915 slice_from("too"); 916 break; 917 case 11: 918 slice_from("v\u00F5isi"); 919 break; 920 case 12: 921 slice_from("j\u00E4\u00E4ma"); 922 break; 923 case 13: 924 slice_from("m\u00FC\u00FCsi"); 925 break; 926 case 14: 927 slice_from("luge"); 928 break; 929 case 15: 930 slice_from("p\u00F5de"); 931 break; 932 case 16: 933 slice_from("ladu"); 934 break; 935 case 17: 936 slice_from("tegi"); 937 break; 938 case 18: 939 slice_from("n\u00E4gi"); 940 break; 941 } 942 return true; 943 } 944 945 @Override stem()946 public boolean stem() { 947 int v_1 = cursor; 948 r_mark_regions(); 949 cursor = v_1; 950 { 951 int v_2 = cursor; 952 lab0: 953 { 954 if (!r_verb_exceptions()) { 955 break lab0; 956 } 957 return false; 958 } 959 cursor = v_2; 960 } 961 B_is_verb = false; 962 limit_backward = cursor; 963 cursor = limit; 964 int v_3 = limit - cursor; 965 r_emphasis(); 966 cursor = limit - v_3; 967 int v_4 = limit - cursor; 968 r_verb(); 969 cursor = limit - v_4; 970 int v_5 = limit - cursor; 971 lab1: 972 { 973 lab2: 974 { 975 if (!(B_is_verb)) { 976 break lab2; 977 } 978 cursor = limit - v_5; 979 break lab1; 980 } 981 r_substantive(); 982 } 983 int v_8 = limit - cursor; 984 r_remove_double_kpt(); 985 cursor = limit - v_8; 986 cursor = limit_backward; 987 return true; 988 } 989 990 @Override equals(Object o)991 public boolean equals(Object o) { 992 return o instanceof EstonianStemmer; 993 } 994 995 @Override hashCode()996 public int hashCode() { 997 return EstonianStemmer.class.getName().hashCode(); 998 } 999 } 1000