1// Generated by Snowball 2.1.0 - https://snowballstem.org/
2
3/**@constructor*/
4HungarianStemmer = function() {
5    var base = new BaseStemmer();
6    /** @const */ var a_0 = [
7        ["cs", -1, -1],
8        ["dzs", -1, -1],
9        ["gy", -1, -1],
10        ["ly", -1, -1],
11        ["ny", -1, -1],
12        ["sz", -1, -1],
13        ["ty", -1, -1],
14        ["zs", -1, -1]
15    ];
16
17    /** @const */ var a_1 = [
18        ["\u00E1", -1, 1],
19        ["\u00E9", -1, 2]
20    ];
21
22    /** @const */ var a_2 = [
23        ["bb", -1, -1],
24        ["cc", -1, -1],
25        ["dd", -1, -1],
26        ["ff", -1, -1],
27        ["gg", -1, -1],
28        ["jj", -1, -1],
29        ["kk", -1, -1],
30        ["ll", -1, -1],
31        ["mm", -1, -1],
32        ["nn", -1, -1],
33        ["pp", -1, -1],
34        ["rr", -1, -1],
35        ["ccs", -1, -1],
36        ["ss", -1, -1],
37        ["zzs", -1, -1],
38        ["tt", -1, -1],
39        ["vv", -1, -1],
40        ["ggy", -1, -1],
41        ["lly", -1, -1],
42        ["nny", -1, -1],
43        ["tty", -1, -1],
44        ["ssz", -1, -1],
45        ["zz", -1, -1]
46    ];
47
48    /** @const */ var a_3 = [
49        ["al", -1, 1],
50        ["el", -1, 1]
51    ];
52
53    /** @const */ var a_4 = [
54        ["ba", -1, -1],
55        ["ra", -1, -1],
56        ["be", -1, -1],
57        ["re", -1, -1],
58        ["ig", -1, -1],
59        ["nak", -1, -1],
60        ["nek", -1, -1],
61        ["val", -1, -1],
62        ["vel", -1, -1],
63        ["ul", -1, -1],
64        ["n\u00E1l", -1, -1],
65        ["n\u00E9l", -1, -1],
66        ["b\u00F3l", -1, -1],
67        ["r\u00F3l", -1, -1],
68        ["t\u00F3l", -1, -1],
69        ["\u00FCl", -1, -1],
70        ["b\u0151l", -1, -1],
71        ["r\u0151l", -1, -1],
72        ["t\u0151l", -1, -1],
73        ["n", -1, -1],
74        ["an", 19, -1],
75        ["ban", 20, -1],
76        ["en", 19, -1],
77        ["ben", 22, -1],
78        ["k\u00E9ppen", 22, -1],
79        ["on", 19, -1],
80        ["\u00F6n", 19, -1],
81        ["k\u00E9pp", -1, -1],
82        ["kor", -1, -1],
83        ["t", -1, -1],
84        ["at", 29, -1],
85        ["et", 29, -1],
86        ["k\u00E9nt", 29, -1],
87        ["ank\u00E9nt", 32, -1],
88        ["enk\u00E9nt", 32, -1],
89        ["onk\u00E9nt", 32, -1],
90        ["ot", 29, -1],
91        ["\u00E9rt", 29, -1],
92        ["\u00F6t", 29, -1],
93        ["hez", -1, -1],
94        ["hoz", -1, -1],
95        ["h\u00F6z", -1, -1],
96        ["v\u00E1", -1, -1],
97        ["v\u00E9", -1, -1]
98    ];
99
100    /** @const */ var a_5 = [
101        ["\u00E1n", -1, 2],
102        ["\u00E9n", -1, 1],
103        ["\u00E1nk\u00E9nt", -1, 2]
104    ];
105
106    /** @const */ var a_6 = [
107        ["stul", -1, 1],
108        ["astul", 0, 1],
109        ["\u00E1stul", 0, 2],
110        ["st\u00FCl", -1, 1],
111        ["est\u00FCl", 3, 1],
112        ["\u00E9st\u00FCl", 3, 3]
113    ];
114
115    /** @const */ var a_7 = [
116        ["\u00E1", -1, 1],
117        ["\u00E9", -1, 1]
118    ];
119
120    /** @const */ var a_8 = [
121        ["k", -1, 3],
122        ["ak", 0, 3],
123        ["ek", 0, 3],
124        ["ok", 0, 3],
125        ["\u00E1k", 0, 1],
126        ["\u00E9k", 0, 2],
127        ["\u00F6k", 0, 3]
128    ];
129
130    /** @const */ var a_9 = [
131        ["\u00E9i", -1, 1],
132        ["\u00E1\u00E9i", 0, 3],
133        ["\u00E9\u00E9i", 0, 2],
134        ["\u00E9", -1, 1],
135        ["k\u00E9", 3, 1],
136        ["ak\u00E9", 4, 1],
137        ["ek\u00E9", 4, 1],
138        ["ok\u00E9", 4, 1],
139        ["\u00E1k\u00E9", 4, 3],
140        ["\u00E9k\u00E9", 4, 2],
141        ["\u00F6k\u00E9", 4, 1],
142        ["\u00E9\u00E9", 3, 2]
143    ];
144
145    /** @const */ var a_10 = [
146        ["a", -1, 1],
147        ["ja", 0, 1],
148        ["d", -1, 1],
149        ["ad", 2, 1],
150        ["ed", 2, 1],
151        ["od", 2, 1],
152        ["\u00E1d", 2, 2],
153        ["\u00E9d", 2, 3],
154        ["\u00F6d", 2, 1],
155        ["e", -1, 1],
156        ["je", 9, 1],
157        ["nk", -1, 1],
158        ["unk", 11, 1],
159        ["\u00E1nk", 11, 2],
160        ["\u00E9nk", 11, 3],
161        ["\u00FCnk", 11, 1],
162        ["uk", -1, 1],
163        ["juk", 16, 1],
164        ["\u00E1juk", 17, 2],
165        ["\u00FCk", -1, 1],
166        ["j\u00FCk", 19, 1],
167        ["\u00E9j\u00FCk", 20, 3],
168        ["m", -1, 1],
169        ["am", 22, 1],
170        ["em", 22, 1],
171        ["om", 22, 1],
172        ["\u00E1m", 22, 2],
173        ["\u00E9m", 22, 3],
174        ["o", -1, 1],
175        ["\u00E1", -1, 2],
176        ["\u00E9", -1, 3]
177    ];
178
179    /** @const */ var a_11 = [
180        ["id", -1, 1],
181        ["aid", 0, 1],
182        ["jaid", 1, 1],
183        ["eid", 0, 1],
184        ["jeid", 3, 1],
185        ["\u00E1id", 0, 2],
186        ["\u00E9id", 0, 3],
187        ["i", -1, 1],
188        ["ai", 7, 1],
189        ["jai", 8, 1],
190        ["ei", 7, 1],
191        ["jei", 10, 1],
192        ["\u00E1i", 7, 2],
193        ["\u00E9i", 7, 3],
194        ["itek", -1, 1],
195        ["eitek", 14, 1],
196        ["jeitek", 15, 1],
197        ["\u00E9itek", 14, 3],
198        ["ik", -1, 1],
199        ["aik", 18, 1],
200        ["jaik", 19, 1],
201        ["eik", 18, 1],
202        ["jeik", 21, 1],
203        ["\u00E1ik", 18, 2],
204        ["\u00E9ik", 18, 3],
205        ["ink", -1, 1],
206        ["aink", 25, 1],
207        ["jaink", 26, 1],
208        ["eink", 25, 1],
209        ["jeink", 28, 1],
210        ["\u00E1ink", 25, 2],
211        ["\u00E9ink", 25, 3],
212        ["aitok", -1, 1],
213        ["jaitok", 32, 1],
214        ["\u00E1itok", -1, 2],
215        ["im", -1, 1],
216        ["aim", 35, 1],
217        ["jaim", 36, 1],
218        ["eim", 35, 1],
219        ["jeim", 38, 1],
220        ["\u00E1im", 35, 2],
221        ["\u00E9im", 35, 3]
222    ];
223
224    /** @const */ var /** Array<int> */ g_v = [17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 36, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1];
225
226    var /** number */ I_p1 = 0;
227
228
229    /** @return {boolean} */
230    function r_mark_regions() {
231        I_p1 = base.limit;
232        lab0: {
233            var /** number */ v_1 = base.cursor;
234            lab1: {
235                if (!(base.in_grouping(g_v, 97, 369)))
236                {
237                    break lab1;
238                }
239                golab2: while(true)
240                {
241                    var /** number */ v_2 = base.cursor;
242                    lab3: {
243                        if (!(base.out_grouping(g_v, 97, 369)))
244                        {
245                            break lab3;
246                        }
247                        base.cursor = v_2;
248                        break golab2;
249                    }
250                    base.cursor = v_2;
251                    if (base.cursor >= base.limit)
252                    {
253                        break lab1;
254                    }
255                    base.cursor++;
256                }
257                lab4: {
258                    var /** number */ v_3 = base.cursor;
259                    lab5: {
260                        if (base.find_among(a_0) == 0)
261                        {
262                            break lab5;
263                        }
264                        break lab4;
265                    }
266                    base.cursor = v_3;
267                    if (base.cursor >= base.limit)
268                    {
269                        break lab1;
270                    }
271                    base.cursor++;
272                }
273                I_p1 = base.cursor;
274                break lab0;
275            }
276            base.cursor = v_1;
277            if (!(base.out_grouping(g_v, 97, 369)))
278            {
279                return false;
280            }
281            golab6: while(true)
282            {
283                lab7: {
284                    if (!(base.in_grouping(g_v, 97, 369)))
285                    {
286                        break lab7;
287                    }
288                    break golab6;
289                }
290                if (base.cursor >= base.limit)
291                {
292                    return false;
293                }
294                base.cursor++;
295            }
296            I_p1 = base.cursor;
297        }
298        return true;
299    };
300
301    /** @return {boolean} */
302    function r_R1() {
303        if (!(I_p1 <= base.cursor))
304        {
305            return false;
306        }
307        return true;
308    };
309
310    /** @return {boolean} */
311    function r_v_ending() {
312        var /** number */ among_var;
313        base.ket = base.cursor;
314        among_var = base.find_among_b(a_1);
315        if (among_var == 0)
316        {
317            return false;
318        }
319        base.bra = base.cursor;
320        if (!r_R1())
321        {
322            return false;
323        }
324        switch (among_var) {
325            case 1:
326                if (!base.slice_from("a"))
327                {
328                    return false;
329                }
330                break;
331            case 2:
332                if (!base.slice_from("e"))
333                {
334                    return false;
335                }
336                break;
337        }
338        return true;
339    };
340
341    /** @return {boolean} */
342    function r_double() {
343        var /** number */ v_1 = base.limit - base.cursor;
344        if (base.find_among_b(a_2) == 0)
345        {
346            return false;
347        }
348        base.cursor = base.limit - v_1;
349        return true;
350    };
351
352    /** @return {boolean} */
353    function r_undouble() {
354        if (base.cursor <= base.limit_backward)
355        {
356            return false;
357        }
358        base.cursor--;
359        base.ket = base.cursor;
360        {
361            var /** number */ c1 = base.cursor - 1;
362            if (c1 < base.limit_backward)
363            {
364                return false;
365            }
366            base.cursor = c1;
367        }
368        base.bra = base.cursor;
369        if (!base.slice_del())
370        {
371            return false;
372        }
373        return true;
374    };
375
376    /** @return {boolean} */
377    function r_instrum() {
378        base.ket = base.cursor;
379        if (base.find_among_b(a_3) == 0)
380        {
381            return false;
382        }
383        base.bra = base.cursor;
384        if (!r_R1())
385        {
386            return false;
387        }
388        if (!r_double())
389        {
390            return false;
391        }
392        if (!base.slice_del())
393        {
394            return false;
395        }
396        if (!r_undouble())
397        {
398            return false;
399        }
400        return true;
401    };
402
403    /** @return {boolean} */
404    function r_case() {
405        base.ket = base.cursor;
406        if (base.find_among_b(a_4) == 0)
407        {
408            return false;
409        }
410        base.bra = base.cursor;
411        if (!r_R1())
412        {
413            return false;
414        }
415        if (!base.slice_del())
416        {
417            return false;
418        }
419        if (!r_v_ending())
420        {
421            return false;
422        }
423        return true;
424    };
425
426    /** @return {boolean} */
427    function r_case_special() {
428        var /** number */ among_var;
429        base.ket = base.cursor;
430        among_var = base.find_among_b(a_5);
431        if (among_var == 0)
432        {
433            return false;
434        }
435        base.bra = base.cursor;
436        if (!r_R1())
437        {
438            return false;
439        }
440        switch (among_var) {
441            case 1:
442                if (!base.slice_from("e"))
443                {
444                    return false;
445                }
446                break;
447            case 2:
448                if (!base.slice_from("a"))
449                {
450                    return false;
451                }
452                break;
453        }
454        return true;
455    };
456
457    /** @return {boolean} */
458    function r_case_other() {
459        var /** number */ among_var;
460        base.ket = base.cursor;
461        among_var = base.find_among_b(a_6);
462        if (among_var == 0)
463        {
464            return false;
465        }
466        base.bra = base.cursor;
467        if (!r_R1())
468        {
469            return false;
470        }
471        switch (among_var) {
472            case 1:
473                if (!base.slice_del())
474                {
475                    return false;
476                }
477                break;
478            case 2:
479                if (!base.slice_from("a"))
480                {
481                    return false;
482                }
483                break;
484            case 3:
485                if (!base.slice_from("e"))
486                {
487                    return false;
488                }
489                break;
490        }
491        return true;
492    };
493
494    /** @return {boolean} */
495    function r_factive() {
496        base.ket = base.cursor;
497        if (base.find_among_b(a_7) == 0)
498        {
499            return false;
500        }
501        base.bra = base.cursor;
502        if (!r_R1())
503        {
504            return false;
505        }
506        if (!r_double())
507        {
508            return false;
509        }
510        if (!base.slice_del())
511        {
512            return false;
513        }
514        if (!r_undouble())
515        {
516            return false;
517        }
518        return true;
519    };
520
521    /** @return {boolean} */
522    function r_plural() {
523        var /** number */ among_var;
524        base.ket = base.cursor;
525        among_var = base.find_among_b(a_8);
526        if (among_var == 0)
527        {
528            return false;
529        }
530        base.bra = base.cursor;
531        if (!r_R1())
532        {
533            return false;
534        }
535        switch (among_var) {
536            case 1:
537                if (!base.slice_from("a"))
538                {
539                    return false;
540                }
541                break;
542            case 2:
543                if (!base.slice_from("e"))
544                {
545                    return false;
546                }
547                break;
548            case 3:
549                if (!base.slice_del())
550                {
551                    return false;
552                }
553                break;
554        }
555        return true;
556    };
557
558    /** @return {boolean} */
559    function r_owned() {
560        var /** number */ among_var;
561        base.ket = base.cursor;
562        among_var = base.find_among_b(a_9);
563        if (among_var == 0)
564        {
565            return false;
566        }
567        base.bra = base.cursor;
568        if (!r_R1())
569        {
570            return false;
571        }
572        switch (among_var) {
573            case 1:
574                if (!base.slice_del())
575                {
576                    return false;
577                }
578                break;
579            case 2:
580                if (!base.slice_from("e"))
581                {
582                    return false;
583                }
584                break;
585            case 3:
586                if (!base.slice_from("a"))
587                {
588                    return false;
589                }
590                break;
591        }
592        return true;
593    };
594
595    /** @return {boolean} */
596    function r_sing_owner() {
597        var /** number */ among_var;
598        base.ket = base.cursor;
599        among_var = base.find_among_b(a_10);
600        if (among_var == 0)
601        {
602            return false;
603        }
604        base.bra = base.cursor;
605        if (!r_R1())
606        {
607            return false;
608        }
609        switch (among_var) {
610            case 1:
611                if (!base.slice_del())
612                {
613                    return false;
614                }
615                break;
616            case 2:
617                if (!base.slice_from("a"))
618                {
619                    return false;
620                }
621                break;
622            case 3:
623                if (!base.slice_from("e"))
624                {
625                    return false;
626                }
627                break;
628        }
629        return true;
630    };
631
632    /** @return {boolean} */
633    function r_plur_owner() {
634        var /** number */ among_var;
635        base.ket = base.cursor;
636        among_var = base.find_among_b(a_11);
637        if (among_var == 0)
638        {
639            return false;
640        }
641        base.bra = base.cursor;
642        if (!r_R1())
643        {
644            return false;
645        }
646        switch (among_var) {
647            case 1:
648                if (!base.slice_del())
649                {
650                    return false;
651                }
652                break;
653            case 2:
654                if (!base.slice_from("a"))
655                {
656                    return false;
657                }
658                break;
659            case 3:
660                if (!base.slice_from("e"))
661                {
662                    return false;
663                }
664                break;
665        }
666        return true;
667    };
668
669    this.stem = /** @return {boolean} */ function() {
670        var /** number */ v_1 = base.cursor;
671        r_mark_regions();
672        base.cursor = v_1;
673        base.limit_backward = base.cursor; base.cursor = base.limit;
674        var /** number */ v_2 = base.limit - base.cursor;
675        r_instrum();
676        base.cursor = base.limit - v_2;
677        var /** number */ v_3 = base.limit - base.cursor;
678        r_case();
679        base.cursor = base.limit - v_3;
680        var /** number */ v_4 = base.limit - base.cursor;
681        r_case_special();
682        base.cursor = base.limit - v_4;
683        var /** number */ v_5 = base.limit - base.cursor;
684        r_case_other();
685        base.cursor = base.limit - v_5;
686        var /** number */ v_6 = base.limit - base.cursor;
687        r_factive();
688        base.cursor = base.limit - v_6;
689        var /** number */ v_7 = base.limit - base.cursor;
690        r_owned();
691        base.cursor = base.limit - v_7;
692        var /** number */ v_8 = base.limit - base.cursor;
693        r_sing_owner();
694        base.cursor = base.limit - v_8;
695        var /** number */ v_9 = base.limit - base.cursor;
696        r_plur_owner();
697        base.cursor = base.limit - v_9;
698        var /** number */ v_10 = base.limit - base.cursor;
699        r_plural();
700        base.cursor = base.limit - v_10;
701        base.cursor = base.limit_backward;
702        return true;
703    };
704
705    /**@return{string}*/
706    this['stemWord'] = function(/**string*/word) {
707        base.setCurrent(word);
708        this.stem();
709        return base.getCurrent();
710    };
711};
712