public virtual int Stem()

in src/Lucene.Net.Analysis.Common/Analysis/Fr/FrenchLightStemmer.cs [68:276]


        public virtual int Stem(char[] s, int len)
        {
            if (len > 5 && s[len - 1] == 'x')
            {
                if (s[len - 3] == 'a' && s[len - 2] == 'u' && s[len - 4] != 'e')
                {
                    s[len - 2] = 'l';
                }
                len--;
            }

            if (len > 3 && s[len - 1] == 'x')
            {
                len--;
            }

            if (len > 3 && s[len - 1] == 's')
            {
                len--;
            }

            if (len > 9 && StemmerUtil.EndsWith(s, len, "issement"))
            {
                len -= 6;
                s[len - 1] = 'r';
                return Norm(s, len);
            }

            if (len > 8 && StemmerUtil.EndsWith(s, len, "issant"))
            {
                len -= 4;
                s[len - 1] = 'r';
                return Norm(s, len);
            }

            if (len > 6 && StemmerUtil.EndsWith(s, len, "ement"))
            {
                len -= 4;
                if (len > 3 && StemmerUtil.EndsWith(s, len, "ive"))
                {
                    len--;
                    s[len - 1] = 'f';
                }
                return Norm(s, len);
            }

            if (len > 11 && StemmerUtil.EndsWith(s, len, "ficatrice"))
            {
                len -= 5;
                s[len - 2] = 'e';
                s[len - 1] = 'r';
                return Norm(s, len);
            }

            if (len > 10 && StemmerUtil.EndsWith(s, len, "ficateur"))
            {
                len -= 4;
                s[len - 2] = 'e';
                s[len - 1] = 'r';
                return Norm(s, len);
            }

            if (len > 9 && StemmerUtil.EndsWith(s, len, "catrice"))
            {
                len -= 3;
                s[len - 4] = 'q';
                s[len - 3] = 'u';
                s[len - 2] = 'e';
                //s[len-1] = 'r' <-- unnecessary, already 'r'.
                return Norm(s, len);
            }

            if (len > 8 && StemmerUtil.EndsWith(s, len, "cateur"))
            {
                len -= 2;
                s[len - 4] = 'q';
                s[len - 3] = 'u';
                s[len - 2] = 'e';
                s[len - 1] = 'r';
                return Norm(s, len);
            }

            if (len > 8 && StemmerUtil.EndsWith(s, len, "atrice"))
            {
                len -= 4;
                s[len - 2] = 'e';
                s[len - 1] = 'r';
                return Norm(s, len);
            }

            if (len > 7 && StemmerUtil.EndsWith(s, len, "ateur"))
            {
                len -= 3;
                s[len - 2] = 'e';
                s[len - 1] = 'r';
                return Norm(s, len);
            }

            if (len > 6 && StemmerUtil.EndsWith(s, len, "trice"))
            {
                len--;
                s[len - 3] = 'e';
                s[len - 2] = 'u';
                s[len - 1] = 'r';
            }

            if (len > 5 && StemmerUtil.EndsWith(s, len, "ième"))
            {
                return Norm(s, len - 4);
            }

            if (len > 7 && StemmerUtil.EndsWith(s, len, "teuse"))
            {
                len -= 2;
                s[len - 1] = 'r';
                return Norm(s, len);
            }

            if (len > 6 && StemmerUtil.EndsWith(s, len, "teur"))
            {
                len--;
                s[len - 1] = 'r';
                return Norm(s, len);
            }

            if (len > 5 && StemmerUtil.EndsWith(s, len, "euse"))
            {
                return Norm(s, len - 2);
            }

            if (len > 8 && StemmerUtil.EndsWith(s, len, "ère"))
            {
                len--;
                s[len - 2] = 'e';
                return Norm(s, len);
            }

            if (len > 7 && StemmerUtil.EndsWith(s, len, "ive"))
            {
                len--;
                s[len - 1] = 'f';
                return Norm(s, len);
            }

            if (len > 4 && (StemmerUtil.EndsWith(s, len, "folle") || StemmerUtil.EndsWith(s, len, "molle")))
            {
                len -= 2;
                s[len - 1] = 'u';
                return Norm(s, len);
            }

            if (len > 9 && StemmerUtil.EndsWith(s, len, "nnelle"))
            {
                return Norm(s, len - 5);
            }

            if (len > 9 && StemmerUtil.EndsWith(s, len, "nnel"))
            {
                return Norm(s, len - 3);
            }

            if (len > 4 && StemmerUtil.EndsWith(s, len, "ète"))
            {
                len--;
                s[len - 2] = 'e';
            }

            if (len > 8 && StemmerUtil.EndsWith(s, len, "ique"))
            {
                len -= 4;
            }

            if (len > 8 && StemmerUtil.EndsWith(s, len, "esse"))
            {
                return Norm(s, len - 3);
            }

            if (len > 7 && StemmerUtil.EndsWith(s, len, "inage"))
            {
                return Norm(s, len - 3);
            }

            if (len > 9 && StemmerUtil.EndsWith(s, len, "isation"))
            {
                len -= 7;
                if (len > 5 && StemmerUtil.EndsWith(s, len, "ual"))
                {
                    s[len - 2] = 'e';
                }
                return Norm(s, len);
            }

            if (len > 9 && StemmerUtil.EndsWith(s, len, "isateur"))
            {
                return Norm(s, len - 7);
            }

            if (len > 8 && StemmerUtil.EndsWith(s, len, "ation"))
            {
                return Norm(s, len - 5);
            }

            if (len > 8 && StemmerUtil.EndsWith(s, len, "ition"))
            {
                return Norm(s, len - 5);
            }

            return Norm(s, len);
        }