private int removePossessive()

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