int stem()

in lucene/analysis/common/src/java/org/apache/lucene/analysis/es/SpanishPluralStemmer.java [169:229]


  int stem(char s[], int len) {
    if (len < 4) return len; // plural have at least 4 letters (ases,eses,etc.)
    removeAccents(s, len);
    if (invariant(s, len)) return len;
    if (special(s, len)) return len - 2;
    switch (s[len - 1]) {
      case 's':
        if (!isVowel(s[len - 2])) { // no vocals, singular words ending with consonant
          return len - 1;
        }
        if ((s[len - 4] == 'q'
            || (s[len - 4] == 'g')
                && s[len - 3] == 'u'
                && (s[len - 2] == 'i' || s[len - 2] == 'e'))) { // maniquis,caquis, parques
          return len - 1;
        }
        if (isVowel(s[len - 4])
            && (s[len - 3] == 'r')
            && s[len - 2] == 'e') { // escaneres, alfileres, amores, cables
          return len - 2;
        }
        if (isVowel(s[len - 4])
            && (s[len - 3] == 'd' || s[len - 3] == 'l' || s[len - 3] == 'n' || s[len - 3] == 'x')
            && s[len - 2] == 'e') { // abades, comerciales, faxes,  relojes,
          return len - 2;
        }
        if ((s[len - 3] == 'y' || s[len - 3] == 'u') && s[len - 2] == 'e') { // bambues,leyes
          return len - 2;
        }
        if ((s[len - 4] == 'u'
                || s[len - 4] == 'l'
                || s[len - 4] == 'r'
                || s[len - 4] == 't'
                || s[len - 4] == 'n')
            && (s[len - 3] == 'i')
            && s[len - 2] == 'e') { // jabalies,israelies, maniquies
          return len - 2;
        }
        if ((s[len - 3] == 's' && s[len - 2] == 'e')) { // reses
          return len - 2;
        }
        if (isVowel(s[len - 3]) && s[len - 2] == 'i') { // jerseis
          s[len - 2] = 'y';
          return len - 1;
        }
        if (s[len - 3] == 'd' && s[len - 2] == 'i') { // brandis
          s[len - 2] = 'y';
          return len - 1;
        }
        if (s[len - 2] == 'e' && s[len - 3] == 'c') { // voces-->voz
          s[len - 3] = 'z';
          return len - 2;
        }
        if (isVowel(s[len - 2])) // remove last 's': jabalís, casas, coches, etc.
        {
          return len - 1;
        }
        break;
    }
    return len;
  }