in lucene/analysis/common/src/java/org/apache/lucene/analysis/hu/HungarianLightStemmer.java [150:202]
private int removePossessive(char[] s, int len) {
if (len > 6) {
if (!isVowel(s[len - 5])
&& (endsWith(s, len, "atok") || endsWith(s, len, "otok") || endsWith(s, len, "etek")))
return len - 4;
if (endsWith(s, len, "itek") || endsWith(s, len, "itok")) return len - 4;
}
if (len > 5) {
if (!isVowel(s[len - 4])
&& (endsWith(s, len, "unk") || endsWith(s, len, "tok") || endsWith(s, len, "tek")))
return len - 3;
if (isVowel(s[len - 4]) && endsWith(s, len, "juk")) return len - 3;
if (endsWith(s, len, "ink")) return len - 3;
}
if (len > 4) {
if (!isVowel(s[len - 3])
&& (endsWith(s, len, "am")
|| endsWith(s, len, "em")
|| endsWith(s, len, "om")
|| endsWith(s, len, "ad")
|| endsWith(s, len, "ed")
|| endsWith(s, len, "od")
|| endsWith(s, len, "uk"))) return len - 2;
if (isVowel(s[len - 3])
&& (endsWith(s, len, "nk") || endsWith(s, len, "ja") || endsWith(s, len, "je")))
return len - 2;
if (endsWith(s, len, "im") || endsWith(s, len, "id") || endsWith(s, len, "ik"))
return len - 2;
}
if (len > 3)
switch (s[len - 1]) {
case 'a':
case 'e':
if (!isVowel(s[len - 2])) return len - 1;
break;
case 'm':
case 'd':
if (isVowel(s[len - 2])) return len - 1;
break;
case 'i':
return len - 1;
}
return len;
}