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 ArabicStemmer 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[] = { 20 new Among("\u0640", -1, 1), 21 new Among("\u064B", -1, 1), 22 new Among("\u064C", -1, 1), 23 new Among("\u064D", -1, 1), 24 new Among("\u064E", -1, 1), 25 new Among("\u064F", -1, 1), 26 new Among("\u0650", -1, 1), 27 new Among("\u0651", -1, 1), 28 new Among("\u0652", -1, 1), 29 new Among("\u0660", -1, 2), 30 new Among("\u0661", -1, 3), 31 new Among("\u0662", -1, 4), 32 new Among("\u0663", -1, 5), 33 new Among("\u0664", -1, 6), 34 new Among("\u0665", -1, 7), 35 new Among("\u0666", -1, 8), 36 new Among("\u0667", -1, 9), 37 new Among("\u0668", -1, 10), 38 new Among("\u0669", -1, 11), 39 new Among("\uFE80", -1, 12), 40 new Among("\uFE81", -1, 16), 41 new Among("\uFE82", -1, 16), 42 new Among("\uFE83", -1, 13), 43 new Among("\uFE84", -1, 13), 44 new Among("\uFE85", -1, 17), 45 new Among("\uFE86", -1, 17), 46 new Among("\uFE87", -1, 14), 47 new Among("\uFE88", -1, 14), 48 new Among("\uFE89", -1, 15), 49 new Among("\uFE8A", -1, 15), 50 new Among("\uFE8B", -1, 15), 51 new Among("\uFE8C", -1, 15), 52 new Among("\uFE8D", -1, 18), 53 new Among("\uFE8E", -1, 18), 54 new Among("\uFE8F", -1, 19), 55 new Among("\uFE90", -1, 19), 56 new Among("\uFE91", -1, 19), 57 new Among("\uFE92", -1, 19), 58 new Among("\uFE93", -1, 20), 59 new Among("\uFE94", -1, 20), 60 new Among("\uFE95", -1, 21), 61 new Among("\uFE96", -1, 21), 62 new Among("\uFE97", -1, 21), 63 new Among("\uFE98", -1, 21), 64 new Among("\uFE99", -1, 22), 65 new Among("\uFE9A", -1, 22), 66 new Among("\uFE9B", -1, 22), 67 new Among("\uFE9C", -1, 22), 68 new Among("\uFE9D", -1, 23), 69 new Among("\uFE9E", -1, 23), 70 new Among("\uFE9F", -1, 23), 71 new Among("\uFEA0", -1, 23), 72 new Among("\uFEA1", -1, 24), 73 new Among("\uFEA2", -1, 24), 74 new Among("\uFEA3", -1, 24), 75 new Among("\uFEA4", -1, 24), 76 new Among("\uFEA5", -1, 25), 77 new Among("\uFEA6", -1, 25), 78 new Among("\uFEA7", -1, 25), 79 new Among("\uFEA8", -1, 25), 80 new Among("\uFEA9", -1, 26), 81 new Among("\uFEAA", -1, 26), 82 new Among("\uFEAB", -1, 27), 83 new Among("\uFEAC", -1, 27), 84 new Among("\uFEAD", -1, 28), 85 new Among("\uFEAE", -1, 28), 86 new Among("\uFEAF", -1, 29), 87 new Among("\uFEB0", -1, 29), 88 new Among("\uFEB1", -1, 30), 89 new Among("\uFEB2", -1, 30), 90 new Among("\uFEB3", -1, 30), 91 new Among("\uFEB4", -1, 30), 92 new Among("\uFEB5", -1, 31), 93 new Among("\uFEB6", -1, 31), 94 new Among("\uFEB7", -1, 31), 95 new Among("\uFEB8", -1, 31), 96 new Among("\uFEB9", -1, 32), 97 new Among("\uFEBA", -1, 32), 98 new Among("\uFEBB", -1, 32), 99 new Among("\uFEBC", -1, 32), 100 new Among("\uFEBD", -1, 33), 101 new Among("\uFEBE", -1, 33), 102 new Among("\uFEBF", -1, 33), 103 new Among("\uFEC0", -1, 33), 104 new Among("\uFEC1", -1, 34), 105 new Among("\uFEC2", -1, 34), 106 new Among("\uFEC3", -1, 34), 107 new Among("\uFEC4", -1, 34), 108 new Among("\uFEC5", -1, 35), 109 new Among("\uFEC6", -1, 35), 110 new Among("\uFEC7", -1, 35), 111 new Among("\uFEC8", -1, 35), 112 new Among("\uFEC9", -1, 36), 113 new Among("\uFECA", -1, 36), 114 new Among("\uFECB", -1, 36), 115 new Among("\uFECC", -1, 36), 116 new Among("\uFECD", -1, 37), 117 new Among("\uFECE", -1, 37), 118 new Among("\uFECF", -1, 37), 119 new Among("\uFED0", -1, 37), 120 new Among("\uFED1", -1, 38), 121 new Among("\uFED2", -1, 38), 122 new Among("\uFED3", -1, 38), 123 new Among("\uFED4", -1, 38), 124 new Among("\uFED5", -1, 39), 125 new Among("\uFED6", -1, 39), 126 new Among("\uFED7", -1, 39), 127 new Among("\uFED8", -1, 39), 128 new Among("\uFED9", -1, 40), 129 new Among("\uFEDA", -1, 40), 130 new Among("\uFEDB", -1, 40), 131 new Among("\uFEDC", -1, 40), 132 new Among("\uFEDD", -1, 41), 133 new Among("\uFEDE", -1, 41), 134 new Among("\uFEDF", -1, 41), 135 new Among("\uFEE0", -1, 41), 136 new Among("\uFEE1", -1, 42), 137 new Among("\uFEE2", -1, 42), 138 new Among("\uFEE3", -1, 42), 139 new Among("\uFEE4", -1, 42), 140 new Among("\uFEE5", -1, 43), 141 new Among("\uFEE6", -1, 43), 142 new Among("\uFEE7", -1, 43), 143 new Among("\uFEE8", -1, 43), 144 new Among("\uFEE9", -1, 44), 145 new Among("\uFEEA", -1, 44), 146 new Among("\uFEEB", -1, 44), 147 new Among("\uFEEC", -1, 44), 148 new Among("\uFEED", -1, 45), 149 new Among("\uFEEE", -1, 45), 150 new Among("\uFEEF", -1, 46), 151 new Among("\uFEF0", -1, 46), 152 new Among("\uFEF1", -1, 47), 153 new Among("\uFEF2", -1, 47), 154 new Among("\uFEF3", -1, 47), 155 new Among("\uFEF4", -1, 47), 156 new Among("\uFEF5", -1, 51), 157 new Among("\uFEF6", -1, 51), 158 new Among("\uFEF7", -1, 49), 159 new Among("\uFEF8", -1, 49), 160 new Among("\uFEF9", -1, 50), 161 new Among("\uFEFA", -1, 50), 162 new Among("\uFEFB", -1, 48), 163 new Among("\uFEFC", -1, 48) 164 }; 165 166 private static final Among a_1[] = { 167 new Among("\u0622", -1, 1), 168 new Among("\u0623", -1, 1), 169 new Among("\u0624", -1, 1), 170 new Among("\u0625", -1, 1), 171 new Among("\u0626", -1, 1) 172 }; 173 174 private static final Among a_2[] = { 175 new Among("\u0622", -1, 1), 176 new Among("\u0623", -1, 1), 177 new Among("\u0624", -1, 2), 178 new Among("\u0625", -1, 1), 179 new Among("\u0626", -1, 3) 180 }; 181 182 private static final Among a_3[] = { 183 new Among("\u0627\u0644", -1, 2), 184 new Among("\u0628\u0627\u0644", -1, 1), 185 new Among("\u0643\u0627\u0644", -1, 1), 186 new Among("\u0644\u0644", -1, 2) 187 }; 188 189 private static final Among a_4[] = { 190 new Among("\u0623\u0622", -1, 2), 191 new Among("\u0623\u0623", -1, 1), 192 new Among("\u0623\u0624", -1, 1), 193 new Among("\u0623\u0625", -1, 4), 194 new Among("\u0623\u0627", -1, 3) 195 }; 196 197 private static final Among a_5[] = {new Among("\u0641", -1, 1), new Among("\u0648", -1, 1)}; 198 199 private static final Among a_6[] = { 200 new Among("\u0627\u0644", -1, 2), 201 new Among("\u0628\u0627\u0644", -1, 1), 202 new Among("\u0643\u0627\u0644", -1, 1), 203 new Among("\u0644\u0644", -1, 2) 204 }; 205 206 private static final Among a_7[] = { 207 new Among("\u0628", -1, 1), new Among("\u0628\u0628", 0, 2), new Among("\u0643\u0643", -1, 3) 208 }; 209 210 private static final Among a_8[] = { 211 new Among("\u0633\u0623", -1, 4), 212 new Among("\u0633\u062A", -1, 2), 213 new Among("\u0633\u0646", -1, 3), 214 new Among("\u0633\u064A", -1, 1) 215 }; 216 217 private static final Among a_9[] = { 218 new Among("\u062A\u0633\u062A", -1, 1), 219 new Among("\u0646\u0633\u062A", -1, 1), 220 new Among("\u064A\u0633\u062A", -1, 1) 221 }; 222 223 private static final Among a_10[] = { 224 new Among("\u0643\u0645\u0627", -1, 3), 225 new Among("\u0647\u0645\u0627", -1, 3), 226 new Among("\u0646\u0627", -1, 2), 227 new Among("\u0647\u0627", -1, 2), 228 new Among("\u0643", -1, 1), 229 new Among("\u0643\u0645", -1, 2), 230 new Among("\u0647\u0645", -1, 2), 231 new Among("\u0647\u0646", -1, 2), 232 new Among("\u0647", -1, 1), 233 new Among("\u064A", -1, 1) 234 }; 235 236 private static final Among a_11[] = {new Among("\u0646", -1, 1)}; 237 238 private static final Among a_12[] = { 239 new Among("\u0627", -1, 1), new Among("\u0648", -1, 1), new Among("\u064A", -1, 1) 240 }; 241 242 private static final Among a_13[] = {new Among("\u0627\u062A", -1, 1)}; 243 244 private static final Among a_14[] = {new Among("\u062A", -1, 1)}; 245 246 private static final Among a_15[] = {new Among("\u0629", -1, 1)}; 247 248 private static final Among a_16[] = {new Among("\u064A", -1, 1)}; 249 250 private static final Among a_17[] = { 251 new Among("\u0643\u0645\u0627", -1, 3), 252 new Among("\u0647\u0645\u0627", -1, 3), 253 new Among("\u0646\u0627", -1, 2), 254 new Among("\u0647\u0627", -1, 2), 255 new Among("\u0643", -1, 1), 256 new Among("\u0643\u0645", -1, 2), 257 new Among("\u0647\u0645", -1, 2), 258 new Among("\u0643\u0646", -1, 2), 259 new Among("\u0647\u0646", -1, 2), 260 new Among("\u0647", -1, 1), 261 new Among("\u0643\u0645\u0648", -1, 3), 262 new Among("\u0646\u064A", -1, 2) 263 }; 264 265 private static final Among a_18[] = { 266 new Among("\u0627", -1, 1), 267 new Among("\u062A\u0627", 0, 2), 268 new Among("\u062A\u0645\u0627", 0, 4), 269 new Among("\u0646\u0627", 0, 2), 270 new Among("\u062A", -1, 1), 271 new Among("\u0646", -1, 1), 272 new Among("\u0627\u0646", 5, 3), 273 new Among("\u062A\u0646", 5, 2), 274 new Among("\u0648\u0646", 5, 3), 275 new Among("\u064A\u0646", 5, 3), 276 new Among("\u064A", -1, 1) 277 }; 278 279 private static final Among a_19[] = { 280 new Among("\u0648\u0627", -1, 1), new Among("\u062A\u0645", -1, 1) 281 }; 282 283 private static final Among a_20[] = { 284 new Among("\u0648", -1, 1), new Among("\u062A\u0645\u0648", 0, 2) 285 }; 286 287 private static final Among a_21[] = {new Among("\u0649", -1, 1)}; 288 289 private boolean B_is_defined; 290 private boolean B_is_verb; 291 private boolean B_is_noun; 292 r_Normalize_pre()293 private boolean r_Normalize_pre() { 294 int among_var; 295 int v_1 = cursor; 296 lab0: 297 { 298 while (true) { 299 int v_2 = cursor; 300 lab1: 301 { 302 lab2: 303 { 304 int v_3 = cursor; 305 lab3: 306 { 307 bra = cursor; 308 among_var = find_among(a_0); 309 if (among_var == 0) { 310 break lab3; 311 } 312 ket = cursor; 313 switch (among_var) { 314 case 1: 315 slice_del(); 316 break; 317 case 2: 318 slice_from("0"); 319 break; 320 case 3: 321 slice_from("1"); 322 break; 323 case 4: 324 slice_from("2"); 325 break; 326 case 5: 327 slice_from("3"); 328 break; 329 case 6: 330 slice_from("4"); 331 break; 332 case 7: 333 slice_from("5"); 334 break; 335 case 8: 336 slice_from("6"); 337 break; 338 case 9: 339 slice_from("7"); 340 break; 341 case 10: 342 slice_from("8"); 343 break; 344 case 11: 345 slice_from("9"); 346 break; 347 case 12: 348 slice_from("\u0621"); 349 break; 350 case 13: 351 slice_from("\u0623"); 352 break; 353 case 14: 354 slice_from("\u0625"); 355 break; 356 case 15: 357 slice_from("\u0626"); 358 break; 359 case 16: 360 slice_from("\u0622"); 361 break; 362 case 17: 363 slice_from("\u0624"); 364 break; 365 case 18: 366 slice_from("\u0627"); 367 break; 368 case 19: 369 slice_from("\u0628"); 370 break; 371 case 20: 372 slice_from("\u0629"); 373 break; 374 case 21: 375 slice_from("\u062A"); 376 break; 377 case 22: 378 slice_from("\u062B"); 379 break; 380 case 23: 381 slice_from("\u062C"); 382 break; 383 case 24: 384 slice_from("\u062D"); 385 break; 386 case 25: 387 slice_from("\u062E"); 388 break; 389 case 26: 390 slice_from("\u062F"); 391 break; 392 case 27: 393 slice_from("\u0630"); 394 break; 395 case 28: 396 slice_from("\u0631"); 397 break; 398 case 29: 399 slice_from("\u0632"); 400 break; 401 case 30: 402 slice_from("\u0633"); 403 break; 404 case 31: 405 slice_from("\u0634"); 406 break; 407 case 32: 408 slice_from("\u0635"); 409 break; 410 case 33: 411 slice_from("\u0636"); 412 break; 413 case 34: 414 slice_from("\u0637"); 415 break; 416 case 35: 417 slice_from("\u0638"); 418 break; 419 case 36: 420 slice_from("\u0639"); 421 break; 422 case 37: 423 slice_from("\u063A"); 424 break; 425 case 38: 426 slice_from("\u0641"); 427 break; 428 case 39: 429 slice_from("\u0642"); 430 break; 431 case 40: 432 slice_from("\u0643"); 433 break; 434 case 41: 435 slice_from("\u0644"); 436 break; 437 case 42: 438 slice_from("\u0645"); 439 break; 440 case 43: 441 slice_from("\u0646"); 442 break; 443 case 44: 444 slice_from("\u0647"); 445 break; 446 case 45: 447 slice_from("\u0648"); 448 break; 449 case 46: 450 slice_from("\u0649"); 451 break; 452 case 47: 453 slice_from("\u064A"); 454 break; 455 case 48: 456 slice_from("\u0644\u0627"); 457 break; 458 case 49: 459 slice_from("\u0644\u0623"); 460 break; 461 case 50: 462 slice_from("\u0644\u0625"); 463 break; 464 case 51: 465 slice_from("\u0644\u0622"); 466 break; 467 } 468 break lab2; 469 } 470 cursor = v_3; 471 if (cursor >= limit) { 472 break lab1; 473 } 474 cursor++; 475 } 476 continue; 477 } 478 cursor = v_2; 479 break; 480 } 481 } 482 cursor = v_1; 483 return true; 484 } 485 r_Normalize_post()486 private boolean r_Normalize_post() { 487 int among_var; 488 int v_1 = cursor; 489 lab0: 490 { 491 limit_backward = cursor; 492 cursor = limit; 493 ket = cursor; 494 if (find_among_b(a_1) == 0) { 495 break lab0; 496 } 497 bra = cursor; 498 slice_from("\u0621"); 499 cursor = limit_backward; 500 } 501 cursor = v_1; 502 int v_2 = cursor; 503 lab1: 504 { 505 while (true) { 506 int v_3 = cursor; 507 lab2: 508 { 509 lab3: 510 { 511 int v_4 = cursor; 512 lab4: 513 { 514 bra = cursor; 515 among_var = find_among(a_2); 516 if (among_var == 0) { 517 break lab4; 518 } 519 ket = cursor; 520 switch (among_var) { 521 case 1: 522 slice_from("\u0627"); 523 break; 524 case 2: 525 slice_from("\u0648"); 526 break; 527 case 3: 528 slice_from("\u064A"); 529 break; 530 } 531 break lab3; 532 } 533 cursor = v_4; 534 if (cursor >= limit) { 535 break lab2; 536 } 537 cursor++; 538 } 539 continue; 540 } 541 cursor = v_3; 542 break; 543 } 544 } 545 cursor = v_2; 546 return true; 547 } 548 r_Checks1()549 private boolean r_Checks1() { 550 int among_var; 551 bra = cursor; 552 among_var = find_among(a_3); 553 if (among_var == 0) { 554 return false; 555 } 556 ket = cursor; 557 switch (among_var) { 558 case 1: 559 if (!(limit > 4)) { 560 return false; 561 } 562 B_is_noun = true; 563 B_is_verb = false; 564 B_is_defined = true; 565 break; 566 case 2: 567 if (!(limit > 3)) { 568 return false; 569 } 570 B_is_noun = true; 571 B_is_verb = false; 572 B_is_defined = true; 573 break; 574 } 575 return true; 576 } 577 r_Prefix_Step1()578 private boolean r_Prefix_Step1() { 579 int among_var; 580 bra = cursor; 581 among_var = find_among(a_4); 582 if (among_var == 0) { 583 return false; 584 } 585 ket = cursor; 586 switch (among_var) { 587 case 1: 588 if (!(limit > 3)) { 589 return false; 590 } 591 slice_from("\u0623"); 592 break; 593 case 2: 594 if (!(limit > 3)) { 595 return false; 596 } 597 slice_from("\u0622"); 598 break; 599 case 3: 600 if (!(limit > 3)) { 601 return false; 602 } 603 slice_from("\u0627"); 604 break; 605 case 4: 606 if (!(limit > 3)) { 607 return false; 608 } 609 slice_from("\u0625"); 610 break; 611 } 612 return true; 613 } 614 r_Prefix_Step2()615 private boolean r_Prefix_Step2() { 616 { 617 int v_1 = cursor; 618 lab0: 619 { 620 if (!(eq_s("\u0641\u0627"))) { 621 break lab0; 622 } 623 return false; 624 } 625 cursor = v_1; 626 } 627 { 628 int v_2 = cursor; 629 lab1: 630 { 631 if (!(eq_s("\u0648\u0627"))) { 632 break lab1; 633 } 634 return false; 635 } 636 cursor = v_2; 637 } 638 bra = cursor; 639 if (find_among(a_5) == 0) { 640 return false; 641 } 642 ket = cursor; 643 if (!(limit > 3)) { 644 return false; 645 } 646 slice_del(); 647 return true; 648 } 649 r_Prefix_Step3a_Noun()650 private boolean r_Prefix_Step3a_Noun() { 651 int among_var; 652 bra = cursor; 653 among_var = find_among(a_6); 654 if (among_var == 0) { 655 return false; 656 } 657 ket = cursor; 658 switch (among_var) { 659 case 1: 660 if (!(limit > 5)) { 661 return false; 662 } 663 slice_del(); 664 break; 665 case 2: 666 if (!(limit > 4)) { 667 return false; 668 } 669 slice_del(); 670 break; 671 } 672 return true; 673 } 674 r_Prefix_Step3b_Noun()675 private boolean r_Prefix_Step3b_Noun() { 676 int among_var; 677 { 678 int v_1 = cursor; 679 lab0: 680 { 681 if (!(eq_s("\u0628\u0627"))) { 682 break lab0; 683 } 684 return false; 685 } 686 cursor = v_1; 687 } 688 bra = cursor; 689 among_var = find_among(a_7); 690 if (among_var == 0) { 691 return false; 692 } 693 ket = cursor; 694 switch (among_var) { 695 case 1: 696 if (!(limit > 3)) { 697 return false; 698 } 699 slice_del(); 700 break; 701 case 2: 702 if (!(limit > 3)) { 703 return false; 704 } 705 slice_from("\u0628"); 706 break; 707 case 3: 708 if (!(limit > 3)) { 709 return false; 710 } 711 slice_from("\u0643"); 712 break; 713 } 714 return true; 715 } 716 r_Prefix_Step3_Verb()717 private boolean r_Prefix_Step3_Verb() { 718 int among_var; 719 bra = cursor; 720 among_var = find_among(a_8); 721 if (among_var == 0) { 722 return false; 723 } 724 ket = cursor; 725 switch (among_var) { 726 case 1: 727 if (!(limit > 4)) { 728 return false; 729 } 730 slice_from("\u064A"); 731 break; 732 case 2: 733 if (!(limit > 4)) { 734 return false; 735 } 736 slice_from("\u062A"); 737 break; 738 case 3: 739 if (!(limit > 4)) { 740 return false; 741 } 742 slice_from("\u0646"); 743 break; 744 case 4: 745 if (!(limit > 4)) { 746 return false; 747 } 748 slice_from("\u0623"); 749 break; 750 } 751 return true; 752 } 753 r_Prefix_Step4_Verb()754 private boolean r_Prefix_Step4_Verb() { 755 bra = cursor; 756 if (find_among(a_9) == 0) { 757 return false; 758 } 759 ket = cursor; 760 if (!(limit > 4)) { 761 return false; 762 } 763 B_is_verb = true; 764 B_is_noun = false; 765 slice_from("\u0627\u0633\u062A"); 766 return true; 767 } 768 r_Suffix_Noun_Step1a()769 private boolean r_Suffix_Noun_Step1a() { 770 int among_var; 771 ket = cursor; 772 among_var = find_among_b(a_10); 773 if (among_var == 0) { 774 return false; 775 } 776 bra = cursor; 777 switch (among_var) { 778 case 1: 779 if (!(limit >= 4)) { 780 return false; 781 } 782 slice_del(); 783 break; 784 case 2: 785 if (!(limit >= 5)) { 786 return false; 787 } 788 slice_del(); 789 break; 790 case 3: 791 if (!(limit >= 6)) { 792 return false; 793 } 794 slice_del(); 795 break; 796 } 797 return true; 798 } 799 r_Suffix_Noun_Step1b()800 private boolean r_Suffix_Noun_Step1b() { 801 ket = cursor; 802 if (find_among_b(a_11) == 0) { 803 return false; 804 } 805 bra = cursor; 806 if (!(limit > 5)) { 807 return false; 808 } 809 slice_del(); 810 return true; 811 } 812 r_Suffix_Noun_Step2a()813 private boolean r_Suffix_Noun_Step2a() { 814 ket = cursor; 815 if (find_among_b(a_12) == 0) { 816 return false; 817 } 818 bra = cursor; 819 if (!(limit > 4)) { 820 return false; 821 } 822 slice_del(); 823 return true; 824 } 825 r_Suffix_Noun_Step2b()826 private boolean r_Suffix_Noun_Step2b() { 827 ket = cursor; 828 if (find_among_b(a_13) == 0) { 829 return false; 830 } 831 bra = cursor; 832 if (!(limit >= 5)) { 833 return false; 834 } 835 slice_del(); 836 return true; 837 } 838 r_Suffix_Noun_Step2c1()839 private boolean r_Suffix_Noun_Step2c1() { 840 ket = cursor; 841 if (find_among_b(a_14) == 0) { 842 return false; 843 } 844 bra = cursor; 845 if (!(limit >= 4)) { 846 return false; 847 } 848 slice_del(); 849 return true; 850 } 851 r_Suffix_Noun_Step2c2()852 private boolean r_Suffix_Noun_Step2c2() { 853 ket = cursor; 854 if (find_among_b(a_15) == 0) { 855 return false; 856 } 857 bra = cursor; 858 if (!(limit >= 4)) { 859 return false; 860 } 861 slice_del(); 862 return true; 863 } 864 r_Suffix_Noun_Step3()865 private boolean r_Suffix_Noun_Step3() { 866 ket = cursor; 867 if (find_among_b(a_16) == 0) { 868 return false; 869 } 870 bra = cursor; 871 if (!(limit >= 3)) { 872 return false; 873 } 874 slice_del(); 875 return true; 876 } 877 r_Suffix_Verb_Step1()878 private boolean r_Suffix_Verb_Step1() { 879 int among_var; 880 ket = cursor; 881 among_var = find_among_b(a_17); 882 if (among_var == 0) { 883 return false; 884 } 885 bra = cursor; 886 switch (among_var) { 887 case 1: 888 if (!(limit >= 4)) { 889 return false; 890 } 891 slice_del(); 892 break; 893 case 2: 894 if (!(limit >= 5)) { 895 return false; 896 } 897 slice_del(); 898 break; 899 case 3: 900 if (!(limit >= 6)) { 901 return false; 902 } 903 slice_del(); 904 break; 905 } 906 return true; 907 } 908 r_Suffix_Verb_Step2a()909 private boolean r_Suffix_Verb_Step2a() { 910 int among_var; 911 ket = cursor; 912 among_var = find_among_b(a_18); 913 if (among_var == 0) { 914 return false; 915 } 916 bra = cursor; 917 switch (among_var) { 918 case 1: 919 if (!(limit >= 4)) { 920 return false; 921 } 922 slice_del(); 923 break; 924 case 2: 925 if (!(limit >= 5)) { 926 return false; 927 } 928 slice_del(); 929 break; 930 case 3: 931 if (!(limit > 5)) { 932 return false; 933 } 934 slice_del(); 935 break; 936 case 4: 937 if (!(limit >= 6)) { 938 return false; 939 } 940 slice_del(); 941 break; 942 } 943 return true; 944 } 945 r_Suffix_Verb_Step2b()946 private boolean r_Suffix_Verb_Step2b() { 947 ket = cursor; 948 if (find_among_b(a_19) == 0) { 949 return false; 950 } 951 bra = cursor; 952 if (!(limit >= 5)) { 953 return false; 954 } 955 slice_del(); 956 return true; 957 } 958 r_Suffix_Verb_Step2c()959 private boolean r_Suffix_Verb_Step2c() { 960 int among_var; 961 ket = cursor; 962 among_var = find_among_b(a_20); 963 if (among_var == 0) { 964 return false; 965 } 966 bra = cursor; 967 switch (among_var) { 968 case 1: 969 if (!(limit >= 4)) { 970 return false; 971 } 972 slice_del(); 973 break; 974 case 2: 975 if (!(limit >= 6)) { 976 return false; 977 } 978 slice_del(); 979 break; 980 } 981 return true; 982 } 983 r_Suffix_All_alef_maqsura()984 private boolean r_Suffix_All_alef_maqsura() { 985 ket = cursor; 986 if (find_among_b(a_21) == 0) { 987 return false; 988 } 989 bra = cursor; 990 slice_from("\u064A"); 991 return true; 992 } 993 994 @Override stem()995 public boolean stem() { 996 B_is_noun = true; 997 B_is_verb = true; 998 B_is_defined = false; 999 int v_1 = cursor; 1000 r_Checks1(); 1001 cursor = v_1; 1002 r_Normalize_pre(); 1003 limit_backward = cursor; 1004 cursor = limit; 1005 int v_3 = limit - cursor; 1006 lab0: 1007 { 1008 lab1: 1009 { 1010 int v_4 = limit - cursor; 1011 lab2: 1012 { 1013 if (!(B_is_verb)) { 1014 break lab2; 1015 } 1016 lab3: 1017 { 1018 int v_5 = limit - cursor; 1019 lab4: 1020 { 1021 { 1022 int v_6 = 1; 1023 while (true) { 1024 int v_7 = limit - cursor; 1025 lab5: 1026 { 1027 if (!r_Suffix_Verb_Step1()) { 1028 break lab5; 1029 } 1030 v_6--; 1031 continue; 1032 } 1033 cursor = limit - v_7; 1034 break; 1035 } 1036 if (v_6 > 0) { 1037 break lab4; 1038 } 1039 } 1040 lab6: 1041 { 1042 int v_8 = limit - cursor; 1043 lab7: 1044 { 1045 if (!r_Suffix_Verb_Step2a()) { 1046 break lab7; 1047 } 1048 break lab6; 1049 } 1050 cursor = limit - v_8; 1051 lab8: 1052 { 1053 if (!r_Suffix_Verb_Step2c()) { 1054 break lab8; 1055 } 1056 break lab6; 1057 } 1058 cursor = limit - v_8; 1059 if (cursor <= limit_backward) { 1060 break lab4; 1061 } 1062 cursor--; 1063 } 1064 break lab3; 1065 } 1066 cursor = limit - v_5; 1067 lab9: 1068 { 1069 if (!r_Suffix_Verb_Step2b()) { 1070 break lab9; 1071 } 1072 break lab3; 1073 } 1074 cursor = limit - v_5; 1075 if (!r_Suffix_Verb_Step2a()) { 1076 break lab2; 1077 } 1078 } 1079 break lab1; 1080 } 1081 cursor = limit - v_4; 1082 lab10: 1083 { 1084 if (!(B_is_noun)) { 1085 break lab10; 1086 } 1087 int v_9 = limit - cursor; 1088 lab11: 1089 { 1090 lab12: 1091 { 1092 int v_10 = limit - cursor; 1093 lab13: 1094 { 1095 if (!r_Suffix_Noun_Step2c2()) { 1096 break lab13; 1097 } 1098 break lab12; 1099 } 1100 cursor = limit - v_10; 1101 lab14: 1102 { 1103 lab15: 1104 { 1105 if (!(B_is_defined)) { 1106 break lab15; 1107 } 1108 break lab14; 1109 } 1110 if (!r_Suffix_Noun_Step1a()) { 1111 break lab14; 1112 } 1113 lab16: 1114 { 1115 int v_12 = limit - cursor; 1116 lab17: 1117 { 1118 if (!r_Suffix_Noun_Step2a()) { 1119 break lab17; 1120 } 1121 break lab16; 1122 } 1123 cursor = limit - v_12; 1124 lab18: 1125 { 1126 if (!r_Suffix_Noun_Step2b()) { 1127 break lab18; 1128 } 1129 break lab16; 1130 } 1131 cursor = limit - v_12; 1132 lab19: 1133 { 1134 if (!r_Suffix_Noun_Step2c1()) { 1135 break lab19; 1136 } 1137 break lab16; 1138 } 1139 cursor = limit - v_12; 1140 if (cursor <= limit_backward) { 1141 break lab14; 1142 } 1143 cursor--; 1144 } 1145 break lab12; 1146 } 1147 cursor = limit - v_10; 1148 lab20: 1149 { 1150 if (!r_Suffix_Noun_Step1b()) { 1151 break lab20; 1152 } 1153 lab21: 1154 { 1155 int v_13 = limit - cursor; 1156 lab22: 1157 { 1158 if (!r_Suffix_Noun_Step2a()) { 1159 break lab22; 1160 } 1161 break lab21; 1162 } 1163 cursor = limit - v_13; 1164 lab23: 1165 { 1166 if (!r_Suffix_Noun_Step2b()) { 1167 break lab23; 1168 } 1169 break lab21; 1170 } 1171 cursor = limit - v_13; 1172 if (!r_Suffix_Noun_Step2c1()) { 1173 break lab20; 1174 } 1175 } 1176 break lab12; 1177 } 1178 cursor = limit - v_10; 1179 lab24: 1180 { 1181 lab25: 1182 { 1183 if (!(B_is_defined)) { 1184 break lab25; 1185 } 1186 break lab24; 1187 } 1188 if (!r_Suffix_Noun_Step2a()) { 1189 break lab24; 1190 } 1191 break lab12; 1192 } 1193 cursor = limit - v_10; 1194 if (!r_Suffix_Noun_Step2b()) { 1195 cursor = limit - v_9; 1196 break lab11; 1197 } 1198 } 1199 } 1200 if (!r_Suffix_Noun_Step3()) { 1201 break lab10; 1202 } 1203 break lab1; 1204 } 1205 cursor = limit - v_4; 1206 if (!r_Suffix_All_alef_maqsura()) { 1207 break lab0; 1208 } 1209 } 1210 } 1211 cursor = limit - v_3; 1212 cursor = limit_backward; 1213 int v_15 = cursor; 1214 lab26: 1215 { 1216 int v_16 = cursor; 1217 lab27: 1218 { 1219 if (!r_Prefix_Step1()) { 1220 cursor = v_16; 1221 break lab27; 1222 } 1223 } 1224 int v_17 = cursor; 1225 lab28: 1226 { 1227 if (!r_Prefix_Step2()) { 1228 cursor = v_17; 1229 break lab28; 1230 } 1231 } 1232 lab29: 1233 { 1234 int v_18 = cursor; 1235 lab30: 1236 { 1237 if (!r_Prefix_Step3a_Noun()) { 1238 break lab30; 1239 } 1240 break lab29; 1241 } 1242 cursor = v_18; 1243 lab31: 1244 { 1245 if (!(B_is_noun)) { 1246 break lab31; 1247 } 1248 if (!r_Prefix_Step3b_Noun()) { 1249 break lab31; 1250 } 1251 break lab29; 1252 } 1253 cursor = v_18; 1254 if (!(B_is_verb)) { 1255 break lab26; 1256 } 1257 int v_19 = cursor; 1258 lab32: 1259 { 1260 if (!r_Prefix_Step3_Verb()) { 1261 cursor = v_19; 1262 break lab32; 1263 } 1264 } 1265 if (!r_Prefix_Step4_Verb()) { 1266 break lab26; 1267 } 1268 } 1269 } 1270 cursor = v_15; 1271 r_Normalize_post(); 1272 return true; 1273 } 1274 1275 @Override equals(Object o)1276 public boolean equals(Object o) { 1277 return o instanceof ArabicStemmer; 1278 } 1279 1280 @Override hashCode()1281 public int hashCode() { 1282 return ArabicStemmer.class.getName().hashCode(); 1283 } 1284 } 1285