xref: /Lucene/lucene/analysis/common/src/java/org/tartarus/snowball/ext/EstonianStemmer.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 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