// CHECKSTYLE:OFF
/*

Copyright (c) 2001, Dr Martin Porter
Copyright (c) 2002, Richard Boulton
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
    * this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
    * notice, this list of conditions and the following disclaimer in the
    * documentation and/or other materials provided with the distribution.
    * Neither the name of the copyright holders nor the names of its contributors
    * may be used to endorse or promote products derived from this software
    * without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

 */

// This file was generated automatically by the Snowball to Java compiler

package opennlp.tools.stemmer.snowball;


 /**
  * This class was automatically generated by a Snowball to Java compiler
  * It implements the stemming algorithm defined by a snowball script.
  */
class italianStemmer extends opennlp.tools.stemmer.snowball.AbstractSnowballStemmer {

        private final static italianStemmer methodObject = new italianStemmer ();

                private final static Among a_0[] = {
                    new Among ( "", -1, 7, "", methodObject ),
                    new Among ( "qu", 0, 6, "", methodObject ),
                    new Among ( "\u00E1", 0, 1, "", methodObject ),
                    new Among ( "\u00E9", 0, 2, "", methodObject ),
                    new Among ( "\u00ED", 0, 3, "", methodObject ),
                    new Among ( "\u00F3", 0, 4, "", methodObject ),
                    new Among ( "\u00FA", 0, 5, "", methodObject )
                };

                private final static Among a_1[] = {
                    new Among ( "", -1, 3, "", methodObject ),
                    new Among ( "I", 0, 1, "", methodObject ),
                    new Among ( "U", 0, 2, "", methodObject )
                };

                private final static Among a_2[] = {
                    new Among ( "la", -1, -1, "", methodObject ),
                    new Among ( "cela", 0, -1, "", methodObject ),
                    new Among ( "gliela", 0, -1, "", methodObject ),
                    new Among ( "mela", 0, -1, "", methodObject ),
                    new Among ( "tela", 0, -1, "", methodObject ),
                    new Among ( "vela", 0, -1, "", methodObject ),
                    new Among ( "le", -1, -1, "", methodObject ),
                    new Among ( "cele", 6, -1, "", methodObject ),
                    new Among ( "gliele", 6, -1, "", methodObject ),
                    new Among ( "mele", 6, -1, "", methodObject ),
                    new Among ( "tele", 6, -1, "", methodObject ),
                    new Among ( "vele", 6, -1, "", methodObject ),
                    new Among ( "ne", -1, -1, "", methodObject ),
                    new Among ( "cene", 12, -1, "", methodObject ),
                    new Among ( "gliene", 12, -1, "", methodObject ),
                    new Among ( "mene", 12, -1, "", methodObject ),
                    new Among ( "sene", 12, -1, "", methodObject ),
                    new Among ( "tene", 12, -1, "", methodObject ),
                    new Among ( "vene", 12, -1, "", methodObject ),
                    new Among ( "ci", -1, -1, "", methodObject ),
                    new Among ( "li", -1, -1, "", methodObject ),
                    new Among ( "celi", 20, -1, "", methodObject ),
                    new Among ( "glieli", 20, -1, "", methodObject ),
                    new Among ( "meli", 20, -1, "", methodObject ),
                    new Among ( "teli", 20, -1, "", methodObject ),
                    new Among ( "veli", 20, -1, "", methodObject ),
                    new Among ( "gli", 20, -1, "", methodObject ),
                    new Among ( "mi", -1, -1, "", methodObject ),
                    new Among ( "si", -1, -1, "", methodObject ),
                    new Among ( "ti", -1, -1, "", methodObject ),
                    new Among ( "vi", -1, -1, "", methodObject ),
                    new Among ( "lo", -1, -1, "", methodObject ),
                    new Among ( "celo", 31, -1, "", methodObject ),
                    new Among ( "glielo", 31, -1, "", methodObject ),
                    new Among ( "melo", 31, -1, "", methodObject ),
                    new Among ( "telo", 31, -1, "", methodObject ),
                    new Among ( "velo", 31, -1, "", methodObject )
                };

                private final static Among a_3[] = {
                    new Among ( "ando", -1, 1, "", methodObject ),
                    new Among ( "endo", -1, 1, "", methodObject ),
                    new Among ( "ar", -1, 2, "", methodObject ),
                    new Among ( "er", -1, 2, "", methodObject ),
                    new Among ( "ir", -1, 2, "", methodObject )
                };

                private final static Among a_4[] = {
                    new Among ( "ic", -1, -1, "", methodObject ),
                    new Among ( "abil", -1, -1, "", methodObject ),
                    new Among ( "os", -1, -1, "", methodObject ),
                    new Among ( "iv", -1, 1, "", methodObject )
                };

                private final static Among a_5[] = {
                    new Among ( "ic", -1, 1, "", methodObject ),
                    new Among ( "abil", -1, 1, "", methodObject ),
                    new Among ( "iv", -1, 1, "", methodObject )
                };

                private final static Among a_6[] = {
                    new Among ( "ica", -1, 1, "", methodObject ),
                    new Among ( "logia", -1, 3, "", methodObject ),
                    new Among ( "osa", -1, 1, "", methodObject ),
                    new Among ( "ista", -1, 1, "", methodObject ),
                    new Among ( "iva", -1, 9, "", methodObject ),
                    new Among ( "anza", -1, 1, "", methodObject ),
                    new Among ( "enza", -1, 5, "", methodObject ),
                    new Among ( "ice", -1, 1, "", methodObject ),
                    new Among ( "atrice", 7, 1, "", methodObject ),
                    new Among ( "iche", -1, 1, "", methodObject ),
                    new Among ( "logie", -1, 3, "", methodObject ),
                    new Among ( "abile", -1, 1, "", methodObject ),
                    new Among ( "ibile", -1, 1, "", methodObject ),
                    new Among ( "usione", -1, 4, "", methodObject ),
                    new Among ( "azione", -1, 2, "", methodObject ),
                    new Among ( "uzione", -1, 4, "", methodObject ),
                    new Among ( "atore", -1, 2, "", methodObject ),
                    new Among ( "ose", -1, 1, "", methodObject ),
                    new Among ( "ante", -1, 1, "", methodObject ),
                    new Among ( "mente", -1, 1, "", methodObject ),
                    new Among ( "amente", 19, 7, "", methodObject ),
                    new Among ( "iste", -1, 1, "", methodObject ),
                    new Among ( "ive", -1, 9, "", methodObject ),
                    new Among ( "anze", -1, 1, "", methodObject ),
                    new Among ( "enze", -1, 5, "", methodObject ),
                    new Among ( "ici", -1, 1, "", methodObject ),
                    new Among ( "atrici", 25, 1, "", methodObject ),
                    new Among ( "ichi", -1, 1, "", methodObject ),
                    new Among ( "abili", -1, 1, "", methodObject ),
                    new Among ( "ibili", -1, 1, "", methodObject ),
                    new Among ( "ismi", -1, 1, "", methodObject ),
                    new Among ( "usioni", -1, 4, "", methodObject ),
                    new Among ( "azioni", -1, 2, "", methodObject ),
                    new Among ( "uzioni", -1, 4, "", methodObject ),
                    new Among ( "atori", -1, 2, "", methodObject ),
                    new Among ( "osi", -1, 1, "", methodObject ),
                    new Among ( "anti", -1, 1, "", methodObject ),
                    new Among ( "amenti", -1, 6, "", methodObject ),
                    new Among ( "imenti", -1, 6, "", methodObject ),
                    new Among ( "isti", -1, 1, "", methodObject ),
                    new Among ( "ivi", -1, 9, "", methodObject ),
                    new Among ( "ico", -1, 1, "", methodObject ),
                    new Among ( "ismo", -1, 1, "", methodObject ),
                    new Among ( "oso", -1, 1, "", methodObject ),
                    new Among ( "amento", -1, 6, "", methodObject ),
                    new Among ( "imento", -1, 6, "", methodObject ),
                    new Among ( "ivo", -1, 9, "", methodObject ),
                    new Among ( "it\u00E0", -1, 8, "", methodObject ),
                    new Among ( "ist\u00E0", -1, 1, "", methodObject ),
                    new Among ( "ist\u00E8", -1, 1, "", methodObject ),
                    new Among ( "ist\u00EC", -1, 1, "", methodObject )
                };

                private final static Among a_7[] = {
                    new Among ( "isca", -1, 1, "", methodObject ),
                    new Among ( "enda", -1, 1, "", methodObject ),
                    new Among ( "ata", -1, 1, "", methodObject ),
                    new Among ( "ita", -1, 1, "", methodObject ),
                    new Among ( "uta", -1, 1, "", methodObject ),
                    new Among ( "ava", -1, 1, "", methodObject ),
                    new Among ( "eva", -1, 1, "", methodObject ),
                    new Among ( "iva", -1, 1, "", methodObject ),
                    new Among ( "erebbe", -1, 1, "", methodObject ),
                    new Among ( "irebbe", -1, 1, "", methodObject ),
                    new Among ( "isce", -1, 1, "", methodObject ),
                    new Among ( "ende", -1, 1, "", methodObject ),
                    new Among ( "are", -1, 1, "", methodObject ),
                    new Among ( "ere", -1, 1, "", methodObject ),
                    new Among ( "ire", -1, 1, "", methodObject ),
                    new Among ( "asse", -1, 1, "", methodObject ),
                    new Among ( "ate", -1, 1, "", methodObject ),
                    new Among ( "avate", 16, 1, "", methodObject ),
                    new Among ( "evate", 16, 1, "", methodObject ),
                    new Among ( "ivate", 16, 1, "", methodObject ),
                    new Among ( "ete", -1, 1, "", methodObject ),
                    new Among ( "erete", 20, 1, "", methodObject ),
                    new Among ( "irete", 20, 1, "", methodObject ),
                    new Among ( "ite", -1, 1, "", methodObject ),
                    new Among ( "ereste", -1, 1, "", methodObject ),
                    new Among ( "ireste", -1, 1, "", methodObject ),
                    new Among ( "ute", -1, 1, "", methodObject ),
                    new Among ( "erai", -1, 1, "", methodObject ),
                    new Among ( "irai", -1, 1, "", methodObject ),
                    new Among ( "isci", -1, 1, "", methodObject ),
                    new Among ( "endi", -1, 1, "", methodObject ),
                    new Among ( "erei", -1, 1, "", methodObject ),
                    new Among ( "irei", -1, 1, "", methodObject ),
                    new Among ( "assi", -1, 1, "", methodObject ),
                    new Among ( "ati", -1, 1, "", methodObject ),
                    new Among ( "iti", -1, 1, "", methodObject ),
                    new Among ( "eresti", -1, 1, "", methodObject ),
                    new Among ( "iresti", -1, 1, "", methodObject ),
                    new Among ( "uti", -1, 1, "", methodObject ),
                    new Among ( "avi", -1, 1, "", methodObject ),
                    new Among ( "evi", -1, 1, "", methodObject ),
                    new Among ( "ivi", -1, 1, "", methodObject ),
                    new Among ( "isco", -1, 1, "", methodObject ),
                    new Among ( "ando", -1, 1, "", methodObject ),
                    new Among ( "endo", -1, 1, "", methodObject ),
                    new Among ( "Yamo", -1, 1, "", methodObject ),
                    new Among ( "iamo", -1, 1, "", methodObject ),
                    new Among ( "avamo", -1, 1, "", methodObject ),
                    new Among ( "evamo", -1, 1, "", methodObject ),
                    new Among ( "ivamo", -1, 1, "", methodObject ),
                    new Among ( "eremo", -1, 1, "", methodObject ),
                    new Among ( "iremo", -1, 1, "", methodObject ),
                    new Among ( "assimo", -1, 1, "", methodObject ),
                    new Among ( "ammo", -1, 1, "", methodObject ),
                    new Among ( "emmo", -1, 1, "", methodObject ),
                    new Among ( "eremmo", 54, 1, "", methodObject ),
                    new Among ( "iremmo", 54, 1, "", methodObject ),
                    new Among ( "immo", -1, 1, "", methodObject ),
                    new Among ( "ano", -1, 1, "", methodObject ),
                    new Among ( "iscano", 58, 1, "", methodObject ),
                    new Among ( "avano", 58, 1, "", methodObject ),
                    new Among ( "evano", 58, 1, "", methodObject ),
                    new Among ( "ivano", 58, 1, "", methodObject ),
                    new Among ( "eranno", -1, 1, "", methodObject ),
                    new Among ( "iranno", -1, 1, "", methodObject ),
                    new Among ( "ono", -1, 1, "", methodObject ),
                    new Among ( "iscono", 65, 1, "", methodObject ),
                    new Among ( "arono", 65, 1, "", methodObject ),
                    new Among ( "erono", 65, 1, "", methodObject ),
                    new Among ( "irono", 65, 1, "", methodObject ),
                    new Among ( "erebbero", -1, 1, "", methodObject ),
                    new Among ( "irebbero", -1, 1, "", methodObject ),
                    new Among ( "assero", -1, 1, "", methodObject ),
                    new Among ( "essero", -1, 1, "", methodObject ),
                    new Among ( "issero", -1, 1, "", methodObject ),
                    new Among ( "ato", -1, 1, "", methodObject ),
                    new Among ( "ito", -1, 1, "", methodObject ),
                    new Among ( "uto", -1, 1, "", methodObject ),
                    new Among ( "avo", -1, 1, "", methodObject ),
                    new Among ( "evo", -1, 1, "", methodObject ),
                    new Among ( "ivo", -1, 1, "", methodObject ),
                    new Among ( "ar", -1, 1, "", methodObject ),
                    new Among ( "ir", -1, 1, "", methodObject ),
                    new Among ( "er\u00E0", -1, 1, "", methodObject ),
                    new Among ( "ir\u00E0", -1, 1, "", methodObject ),
                    new Among ( "er\u00F2", -1, 1, "", methodObject ),
                    new Among ( "ir\u00F2", -1, 1, "", methodObject )
                };

                private static final char g_v[] = {17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2, 1 };

                private static final char g_AEIO[] = {17, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2 };

                private static final char g_CG[] = {17 };

        private int I_p2;
        private int I_p1;
        private int I_pV;

                private void copy_from(italianStemmer other) {
                    I_p2 = other.I_p2;
                    I_p1 = other.I_p1;
                    I_pV = other.I_pV;
                    super.copy_from(other);
                }

                private boolean r_prelude() {
            int among_var;
            int v_1;
            int v_2;
            int v_3;
            int v_4;
            int v_5;
                    // (, line 34
                    // test, line 35
                    v_1 = cursor;
                    // repeat, line 35
                    replab0: while(true)
                    {
                        v_2 = cursor;
                        lab1: do {
                            // (, line 35
                            // [, line 36
                            bra = cursor;
                            // substring, line 36
                            among_var = find_among(a_0, 7);
                            if (among_var == 0)
                            {
                                break lab1;
                            }
                            // ], line 36
                            ket = cursor;
                            switch(among_var) {
                                case 0:
                                    break lab1;
                                case 1:
                                    // (, line 37
                                    // <-, line 37
                                    slice_from("\u00E0");
                                    break;
                                case 2:
                                    // (, line 38
                                    // <-, line 38
                                    slice_from("\u00E8");
                                    break;
                                case 3:
                                    // (, line 39
                                    // <-, line 39
                                    slice_from("\u00EC");
                                    break;
                                case 4:
                                    // (, line 40
                                    // <-, line 40
                                    slice_from("\u00F2");
                                    break;
                                case 5:
                                    // (, line 41
                                    // <-, line 41
                                    slice_from("\u00F9");
                                    break;
                                case 6:
                                    // (, line 42
                                    // <-, line 42
                                    slice_from("qU");
                                    break;
                                case 7:
                                    // (, line 43
                                    // next, line 43
                                    if (cursor >= limit)
                                    {
                                        break lab1;
                                    }
                                    cursor++;
                                    break;
                            }
                            continue replab0;
                        } while (false);
                        cursor = v_2;
                        break replab0;
                    }
                    cursor = v_1;
                    // repeat, line 46
                    replab2: while(true)
                    {
                        v_3 = cursor;
                        lab3: do {
                            // goto, line 46
                            golab4: while(true)
                            {
                                v_4 = cursor;
                                lab5: do {
                                    // (, line 46
                                    if (!(in_grouping(g_v, 97, 249)))
                                    {
                                        break lab5;
                                    }
                                    // [, line 47
                                    bra = cursor;
                                    // or, line 47
                                    lab6: do {
                                        v_5 = cursor;
                                        lab7: do {
                                            // (, line 47
                                            // literal, line 47
                                            if (!(eq_s(1, "u")))
                                            {
                                                break lab7;
                                            }
                                            // ], line 47
                                            ket = cursor;
                                            if (!(in_grouping(g_v, 97, 249)))
                                            {
                                                break lab7;
                                            }
                                            // <-, line 47
                                            slice_from("U");
                                            break lab6;
                                        } while (false);
                                        cursor = v_5;
                                        // (, line 48
                                        // literal, line 48
                                        if (!(eq_s(1, "i")))
                                        {
                                            break lab5;
                                        }
                                        // ], line 48
                                        ket = cursor;
                                        if (!(in_grouping(g_v, 97, 249)))
                                        {
                                            break lab5;
                                        }
                                        // <-, line 48
                                        slice_from("I");
                                    } while (false);
                                    cursor = v_4;
                                    break golab4;
                                } while (false);
                                cursor = v_4;
                                if (cursor >= limit)
                                {
                                    break lab3;
                                }
                                cursor++;
                            }
                            continue replab2;
                        } while (false);
                        cursor = v_3;
                        break replab2;
                    }
                    return true;
                }

                private boolean r_mark_regions() {
            int v_1;
            int v_2;
            int v_3;
            int v_6;
            int v_8;
                    // (, line 52
                    I_pV = limit;
                    I_p1 = limit;
                    I_p2 = limit;
                    // do, line 58
                    v_1 = cursor;
                    lab0: do {
                        // (, line 58
                        // or, line 60
                        lab1: do {
                            v_2 = cursor;
                            lab2: do {
                                // (, line 59
                                if (!(in_grouping(g_v, 97, 249)))
                                {
                                    break lab2;
                                }
                                // or, line 59
                                lab3: do {
                                    v_3 = cursor;
                                    lab4: do {
                                        // (, line 59
                                        if (!(out_grouping(g_v, 97, 249)))
                                        {
                                            break lab4;
                                        }
                                        // gopast, line 59
                                        golab5: while(true)
                                        {
                                            lab6: do {
                                                if (!(in_grouping(g_v, 97, 249)))
                                                {
                                                    break lab6;
                                                }
                                                break golab5;
                                            } while (false);
                                            if (cursor >= limit)
                                            {
                                                break lab4;
                                            }
                                            cursor++;
                                        }
                                        break lab3;
                                    } while (false);
                                    cursor = v_3;
                                    // (, line 59
                                    if (!(in_grouping(g_v, 97, 249)))
                                    {
                                        break lab2;
                                    }
                                    // gopast, line 59
                                    golab7: while(true)
                                    {
                                        lab8: do {
                                            if (!(out_grouping(g_v, 97, 249)))
                                            {
                                                break lab8;
                                            }
                                            break golab7;
                                        } while (false);
                                        if (cursor >= limit)
                                        {
                                            break lab2;
                                        }
                                        cursor++;
                                    }
                                } while (false);
                                break lab1;
                            } while (false);
                            cursor = v_2;
                            // (, line 61
                            if (!(out_grouping(g_v, 97, 249)))
                            {
                                break lab0;
                            }
                            // or, line 61
                            lab9: do {
                                v_6 = cursor;
                                lab10: do {
                                    // (, line 61
                                    if (!(out_grouping(g_v, 97, 249)))
                                    {
                                        break lab10;
                                    }
                                    // gopast, line 61
                                    golab11: while(true)
                                    {
                                        lab12: do {
                                            if (!(in_grouping(g_v, 97, 249)))
                                            {
                                                break lab12;
                                            }
                                            break golab11;
                                        } while (false);
                                        if (cursor >= limit)
                                        {
                                            break lab10;
                                        }
                                        cursor++;
                                    }
                                    break lab9;
                                } while (false);
                                cursor = v_6;
                                // (, line 61
                                if (!(in_grouping(g_v, 97, 249)))
                                {
                                    break lab0;
                                }
                                // next, line 61
                                if (cursor >= limit)
                                {
                                    break lab0;
                                }
                                cursor++;
                            } while (false);
                        } while (false);
                        // setmark pV, line 62
                        I_pV = cursor;
                    } while (false);
                    cursor = v_1;
                    // do, line 64
                    v_8 = cursor;
                    lab13: do {
                        // (, line 64
                        // gopast, line 65
                        golab14: while(true)
                        {
                            lab15: do {
                                if (!(in_grouping(g_v, 97, 249)))
                                {
                                    break lab15;
                                }
                                break golab14;
                            } while (false);
                            if (cursor >= limit)
                            {
                                break lab13;
                            }
                            cursor++;
                        }
                        // gopast, line 65
                        golab16: while(true)
                        {
                            lab17: do {
                                if (!(out_grouping(g_v, 97, 249)))
                                {
                                    break lab17;
                                }
                                break golab16;
                            } while (false);
                            if (cursor >= limit)
                            {
                                break lab13;
                            }
                            cursor++;
                        }
                        // setmark p1, line 65
                        I_p1 = cursor;
                        // gopast, line 66
                        golab18: while(true)
                        {
                            lab19: do {
                                if (!(in_grouping(g_v, 97, 249)))
                                {
                                    break lab19;
                                }
                                break golab18;
                            } while (false);
                            if (cursor >= limit)
                            {
                                break lab13;
                            }
                            cursor++;
                        }
                        // gopast, line 66
                        golab20: while(true)
                        {
                            lab21: do {
                                if (!(out_grouping(g_v, 97, 249)))
                                {
                                    break lab21;
                                }
                                break golab20;
                            } while (false);
                            if (cursor >= limit)
                            {
                                break lab13;
                            }
                            cursor++;
                        }
                        // setmark p2, line 66
                        I_p2 = cursor;
                    } while (false);
                    cursor = v_8;
                    return true;
                }

                private boolean r_postlude() {
            int among_var;
            int v_1;
                    // repeat, line 70
                    replab0: while(true)
                    {
                        v_1 = cursor;
                        lab1: do {
                            // (, line 70
                            // [, line 72
                            bra = cursor;
                            // substring, line 72
                            among_var = find_among(a_1, 3);
                            if (among_var == 0)
                            {
                                break lab1;
                            }
                            // ], line 72
                            ket = cursor;
                            switch(among_var) {
                                case 0:
                                    break lab1;
                                case 1:
                                    // (, line 73
                                    // <-, line 73
                                    slice_from("i");
                                    break;
                                case 2:
                                    // (, line 74
                                    // <-, line 74
                                    slice_from("u");
                                    break;
                                case 3:
                                    // (, line 75
                                    // next, line 75
                                    if (cursor >= limit)
                                    {
                                        break lab1;
                                    }
                                    cursor++;
                                    break;
                            }
                            continue replab0;
                        } while (false);
                        cursor = v_1;
                        break replab0;
                    }
                    return true;
                }

                private boolean r_RV() {
                    if (!(I_pV <= cursor))
                    {
                        return false;
                    }
                    return true;
                }

                private boolean r_R1() {
                    if (!(I_p1 <= cursor))
                    {
                        return false;
                    }
                    return true;
                }

                private boolean r_R2() {
                    if (!(I_p2 <= cursor))
                    {
                        return false;
                    }
                    return true;
                }

                private boolean r_attached_pronoun() {
            int among_var;
                    // (, line 86
                    // [, line 87
                    ket = cursor;
                    // substring, line 87
                    if (find_among_b(a_2, 37) == 0)
                    {
                        return false;
                    }
                    // ], line 87
                    bra = cursor;
                    // among, line 97
                    among_var = find_among_b(a_3, 5);
                    if (among_var == 0)
                    {
                        return false;
                    }
                    // (, line 97
                    // call RV, line 97
                    if (!r_RV())
                    {
                        return false;
                    }
                    switch(among_var) {
                        case 0:
                            return false;
                        case 1:
                            // (, line 98
                            // delete, line 98
                            slice_del();
                            break;
                        case 2:
                            // (, line 99
                            // <-, line 99
                            slice_from("e");
                            break;
                    }
                    return true;
                }

                private boolean r_standard_suffix() {
            int among_var;
            int v_1;
            int v_2;
            int v_3;
            int v_4;
                    // (, line 103
                    // [, line 104
                    ket = cursor;
                    // substring, line 104
                    among_var = find_among_b(a_6, 51);
                    if (among_var == 0)
                    {
                        return false;
                    }
                    // ], line 104
                    bra = cursor;
                    switch(among_var) {
                        case 0:
                            return false;
                        case 1:
                            // (, line 111
                            // call R2, line 111
                            if (!r_R2())
                            {
                                return false;
                            }
                            // delete, line 111
                            slice_del();
                            break;
                        case 2:
                            // (, line 113
                            // call R2, line 113
                            if (!r_R2())
                            {
                                return false;
                            }
                            // delete, line 113
                            slice_del();
                            // try, line 114
                            v_1 = limit - cursor;
                            lab0: do {
                                // (, line 114
                                // [, line 114
                                ket = cursor;
                                // literal, line 114
                                if (!(eq_s_b(2, "ic")))
                                {
                                    cursor = limit - v_1;
                                    break lab0;
                                }
                                // ], line 114
                                bra = cursor;
                                // call R2, line 114
                                if (!r_R2())
                                {
                                    cursor = limit - v_1;
                                    break lab0;
                                }
                                // delete, line 114
                                slice_del();
                            } while (false);
                            break;
                        case 3:
                            // (, line 117
                            // call R2, line 117
                            if (!r_R2())
                            {
                                return false;
                            }
                            // <-, line 117
                            slice_from("log");
                            break;
                        case 4:
                            // (, line 119
                            // call R2, line 119
                            if (!r_R2())
                            {
                                return false;
                            }
                            // <-, line 119
                            slice_from("u");
                            break;
                        case 5:
                            // (, line 121
                            // call R2, line 121
                            if (!r_R2())
                            {
                                return false;
                            }
                            // <-, line 121
                            slice_from("ente");
                            break;
                        case 6:
                            // (, line 123
                            // call RV, line 123
                            if (!r_RV())
                            {
                                return false;
                            }
                            // delete, line 123
                            slice_del();
                            break;
                        case 7:
                            // (, line 124
                            // call R1, line 125
                            if (!r_R1())
                            {
                                return false;
                            }
                            // delete, line 125
                            slice_del();
                            // try, line 126
                            v_2 = limit - cursor;
                            lab1: do {
                                // (, line 126
                                // [, line 127
                                ket = cursor;
                                // substring, line 127
                                among_var = find_among_b(a_4, 4);
                                if (among_var == 0)
                                {
                                    cursor = limit - v_2;
                                    break lab1;
                                }
                                // ], line 127
                                bra = cursor;
                                // call R2, line 127
                                if (!r_R2())
                                {
                                    cursor = limit - v_2;
                                    break lab1;
                                }
                                // delete, line 127
                                slice_del();
                                switch(among_var) {
                                    case 0:
                                        cursor = limit - v_2;
                                        break lab1;
                                    case 1:
                                        // (, line 128
                                        // [, line 128
                                        ket = cursor;
                                        // literal, line 128
                                        if (!(eq_s_b(2, "at")))
                                        {
                                            cursor = limit - v_2;
                                            break lab1;
                                        }
                                        // ], line 128
                                        bra = cursor;
                                        // call R2, line 128
                                        if (!r_R2())
                                        {
                                            cursor = limit - v_2;
                                            break lab1;
                                        }
                                        // delete, line 128
                                        slice_del();
                                        break;
                                }
                            } while (false);
                            break;
                        case 8:
                            // (, line 133
                            // call R2, line 134
                            if (!r_R2())
                            {
                                return false;
                            }
                            // delete, line 134
                            slice_del();
                            // try, line 135
                            v_3 = limit - cursor;
                            lab2: do {
                                // (, line 135
                                // [, line 136
                                ket = cursor;
                                // substring, line 136
                                among_var = find_among_b(a_5, 3);
                                if (among_var == 0)
                                {
                                    cursor = limit - v_3;
                                    break lab2;
                                }
                                // ], line 136
                                bra = cursor;
                                switch(among_var) {
                                    case 0:
                                        cursor = limit - v_3;
                                        break lab2;
                                    case 1:
                                        // (, line 137
                                        // call R2, line 137
                                        if (!r_R2())
                                        {
                                            cursor = limit - v_3;
                                            break lab2;
                                        }
                                        // delete, line 137
                                        slice_del();
                                        break;
                                }
                            } while (false);
                            break;
                        case 9:
                            // (, line 141
                            // call R2, line 142
                            if (!r_R2())
                            {
                                return false;
                            }
                            // delete, line 142
                            slice_del();
                            // try, line 143
                            v_4 = limit - cursor;
                            lab3: do {
                                // (, line 143
                                // [, line 143
                                ket = cursor;
                                // literal, line 143
                                if (!(eq_s_b(2, "at")))
                                {
                                    cursor = limit - v_4;
                                    break lab3;
                                }
                                // ], line 143
                                bra = cursor;
                                // call R2, line 143
                                if (!r_R2())
                                {
                                    cursor = limit - v_4;
                                    break lab3;
                                }
                                // delete, line 143
                                slice_del();
                                // [, line 143
                                ket = cursor;
                                // literal, line 143
                                if (!(eq_s_b(2, "ic")))
                                {
                                    cursor = limit - v_4;
                                    break lab3;
                                }
                                // ], line 143
                                bra = cursor;
                                // call R2, line 143
                                if (!r_R2())
                                {
                                    cursor = limit - v_4;
                                    break lab3;
                                }
                                // delete, line 143
                                slice_del();
                            } while (false);
                            break;
                    }
                    return true;
                }

                private boolean r_verb_suffix() {
            int among_var;
            int v_1;
            int v_2;
                    // setlimit, line 148
                    v_1 = limit - cursor;
                    // tomark, line 148
                    if (cursor < I_pV)
                    {
                        return false;
                    }
                    cursor = I_pV;
                    v_2 = limit_backward;
                    limit_backward = cursor;
                    cursor = limit - v_1;
                    // (, line 148
                    // [, line 149
                    ket = cursor;
                    // substring, line 149
                    among_var = find_among_b(a_7, 87);
                    if (among_var == 0)
                    {
                        limit_backward = v_2;
                        return false;
                    }
                    // ], line 149
                    bra = cursor;
                    switch(among_var) {
                        case 0:
                            limit_backward = v_2;
                            return false;
                        case 1:
                            // (, line 163
                            // delete, line 163
                            slice_del();
                            break;
                    }
                    limit_backward = v_2;
                    return true;
                }

                private boolean r_vowel_suffix() {
            int v_1;
            int v_2;
                    // (, line 170
                    // try, line 171
                    v_1 = limit - cursor;
                    lab0: do {
                        // (, line 171
                        // [, line 172
                        ket = cursor;
                        if (!(in_grouping_b(g_AEIO, 97, 242)))
                        {
                            cursor = limit - v_1;
                            break lab0;
                        }
                        // ], line 172
                        bra = cursor;
                        // call RV, line 172
                        if (!r_RV())
                        {
                            cursor = limit - v_1;
                            break lab0;
                        }
                        // delete, line 172
                        slice_del();
                        // [, line 173
                        ket = cursor;
                        // literal, line 173
                        if (!(eq_s_b(1, "i")))
                        {
                            cursor = limit - v_1;
                            break lab0;
                        }
                        // ], line 173
                        bra = cursor;
                        // call RV, line 173
                        if (!r_RV())
                        {
                            cursor = limit - v_1;
                            break lab0;
                        }
                        // delete, line 173
                        slice_del();
                    } while (false);
                    // try, line 175
                    v_2 = limit - cursor;
                    lab1: do {
                        // (, line 175
                        // [, line 176
                        ket = cursor;
                        // literal, line 176
                        if (!(eq_s_b(1, "h")))
                        {
                            cursor = limit - v_2;
                            break lab1;
                        }
                        // ], line 176
                        bra = cursor;
                        if (!(in_grouping_b(g_CG, 99, 103)))
                        {
                            cursor = limit - v_2;
                            break lab1;
                        }
                        // call RV, line 176
                        if (!r_RV())
                        {
                            cursor = limit - v_2;
                            break lab1;
                        }
                        // delete, line 176
                        slice_del();
                    } while (false);
                    return true;
                }

                public boolean stem() {
            int v_1;
            int v_2;
            int v_3;
            int v_4;
            int v_5;
            int v_6;
            int v_7;
                    // (, line 181
                    // do, line 182
                    v_1 = cursor;
                    lab0: do {
                        // call prelude, line 182
                        if (!r_prelude())
                        {
                            break lab0;
                        }
                    } while (false);
                    cursor = v_1;
                    // do, line 183
                    v_2 = cursor;
                    lab1: do {
                        // call mark_regions, line 183
                        if (!r_mark_regions())
                        {
                            break lab1;
                        }
                    } while (false);
                    cursor = v_2;
                    // backwards, line 184
                    limit_backward = cursor; cursor = limit;
                    // (, line 184
                    // do, line 185
                    v_3 = limit - cursor;
                    lab2: do {
                        // call attached_pronoun, line 185
                        if (!r_attached_pronoun())
                        {
                            break lab2;
                        }
                    } while (false);
                    cursor = limit - v_3;
                    // do, line 186
                    v_4 = limit - cursor;
                    lab3: do {
                        // (, line 186
                        // or, line 186
                        lab4: do {
                            v_5 = limit - cursor;
                            lab5: do {
                                // call standard_suffix, line 186
                                if (!r_standard_suffix())
                                {
                                    break lab5;
                                }
                                break lab4;
                            } while (false);
                            cursor = limit - v_5;
                            // call verb_suffix, line 186
                            if (!r_verb_suffix())
                            {
                                break lab3;
                            }
                        } while (false);
                    } while (false);
                    cursor = limit - v_4;
                    // do, line 187
                    v_6 = limit - cursor;
                    lab6: do {
                        // call vowel_suffix, line 187
                        if (!r_vowel_suffix())
                        {
                            break lab6;
                        }
                    } while (false);
                    cursor = limit - v_6;
                    cursor = limit_backward;                    // do, line 189
                    v_7 = cursor;
                    lab7: do {
                        // call postlude, line 189
                        if (!r_postlude())
                        {
                            break lab7;
                        }
                    } while (false);
                    cursor = v_7;
                    return true;
                }

        public boolean equals( Object o ) {
            return o instanceof italianStemmer;
        }

        public int hashCode() {
            return italianStemmer.class.getName().hashCode();
        }



}

