xref: /Lucene/lucene/analysis/common/src/java/org/tartarus/snowball/ext/ArabicStemmer.java (revision 0b1d8ccba6cf394f707a09217813a25ec1504e50)
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