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;
}