protected int indexOfLastVowel(int pos, String strContent) { int beg = Math.max(0, pos - 3); for (int i = pos - 1; i >= beg; i--) { char c = strContent.charAt(i); if (encoding.isVowel(c)) return i; } return -1; }
protected int indexOfToneCarrier(int pos, String strContent) { int idx = indexOfLastVowel(pos, strContent); if (idx <= 0) return idx; char c = strContent.charAt(idx - 1); if (!encoding.isVowel(c) && !eq(c, 'q')) return idx; if (encoding.hasDiacritic(strContent.charAt(idx))) return idx; if (encoding.hasDiacritic(c)) return idx - 1; if (eq(c, 'q') && eq(strContent.charAt(idx), 'u')) return -1; if (eq(c, 'o') && eq(strContent.charAt(idx), 'a')) return idx; if (eq(c, 'o') && eq(strContent.charAt(idx), 'e')) return idx; if (eq(c, 'u') && eq(strContent.charAt(idx), 'y')) return idx; if ((idx >= 2) && eq(c, 'u') && eq(strContent.charAt(idx - 2), 'q')) return idx; if ((idx >= 2) && eq(c, 'i') && eq(strContent.charAt(idx - 2), 'g')) return idx; return idx - 1; }