snowball
Version:
snowball word stemming algorithm implementation
860 lines (858 loc) • 23.1 kB
JavaScript
/*!
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
function TurkishStemmer() {
var a_0 = [new Among("m", -1, -1), new Among("n", -1, -1),
new Among("miz", -1, -1), new Among("niz", -1, -1),
new Among("muz", -1, -1), new Among("nuz", -1, -1),
new Among("m\u00FCz", -1, -1), new Among("n\u00FCz", -1, -1),
new Among("m\u0131z", -1, -1), new Among("n\u0131z", -1, -1)], a_1 = [
new Among("leri", -1, -1), new Among("lar\u0131", -1, -1)], a_2 = [
new Among("ni", -1, -1), new Among("nu", -1, -1),
new Among("n\u00FC", -1, -1), new Among("n\u0131", -1, -1)], a_3 = [
new Among("in", -1, -1), new Among("un", -1, -1),
new Among("\u00FCn", -1, -1), new Among("\u0131n", -1, -1)], a_4 = [
new Among("a", -1, -1), new Among("e", -1, -1)], a_5 = [
new Among("na", -1, -1), new Among("ne", -1, -1)], a_6 = [
new Among("da", -1, -1), new Among("ta", -1, -1),
new Among("de", -1, -1), new Among("te", -1, -1)], a_7 = [
new Among("nda", -1, -1), new Among("nde", -1, -1)], a_8 = [
new Among("dan", -1, -1), new Among("tan", -1, -1),
new Among("den", -1, -1), new Among("ten", -1, -1)], a_9 = [
new Among("ndan", -1, -1), new Among("nden", -1, -1)], a_10 = [
new Among("la", -1, -1), new Among("le", -1, -1)], a_11 = [
new Among("ca", -1, -1), new Among("ce", -1, -1)], a_12 = [
new Among("im", -1, -1), new Among("um", -1, -1),
new Among("\u00FCm", -1, -1), new Among("\u0131m", -1, -1)], a_13 = [
new Among("sin", -1, -1), new Among("sun", -1, -1),
new Among("s\u00FCn", -1, -1), new Among("s\u0131n", -1, -1)], a_14 = [
new Among("iz", -1, -1), new Among("uz", -1, -1),
new Among("\u00FCz", -1, -1), new Among("\u0131z", -1, -1)], a_15 = [
new Among("siniz", -1, -1), new Among("sunuz", -1, -1),
new Among("s\u00FCn\u00FCz", -1, -1),
new Among("s\u0131n\u0131z", -1, -1)], a_16 = [
new Among("lar", -1, -1), new Among("ler", -1, -1)], a_17 = [
new Among("niz", -1, -1), new Among("nuz", -1, -1),
new Among("n\u00FCz", -1, -1), new Among("n\u0131z", -1, -1)], a_18 = [
new Among("dir", -1, -1), new Among("tir", -1, -1),
new Among("dur", -1, -1), new Among("tur", -1, -1),
new Among("d\u00FCr", -1, -1), new Among("t\u00FCr", -1, -1),
new Among("d\u0131r", -1, -1), new Among("t\u0131r", -1, -1)], a_19 = [
new Among("cas\u0131na", -1, -1), new Among("cesine", -1, -1)], a_20 = [
new Among("di", -1, -1), new Among("ti", -1, -1),
new Among("dik", -1, -1), new Among("tik", -1, -1),
new Among("duk", -1, -1), new Among("tuk", -1, -1),
new Among("d\u00FCk", -1, -1), new Among("t\u00FCk", -1, -1),
new Among("d\u0131k", -1, -1), new Among("t\u0131k", -1, -1),
new Among("dim", -1, -1), new Among("tim", -1, -1),
new Among("dum", -1, -1), new Among("tum", -1, -1),
new Among("d\u00FCm", -1, -1), new Among("t\u00FCm", -1, -1),
new Among("d\u0131m", -1, -1), new Among("t\u0131m", -1, -1),
new Among("din", -1, -1), new Among("tin", -1, -1),
new Among("dun", -1, -1), new Among("tun", -1, -1),
new Among("d\u00FCn", -1, -1), new Among("t\u00FCn", -1, -1),
new Among("d\u0131n", -1, -1), new Among("t\u0131n", -1, -1),
new Among("du", -1, -1), new Among("tu", -1, -1),
new Among("d\u00FC", -1, -1), new Among("t\u00FC", -1, -1),
new Among("d\u0131", -1, -1), new Among("t\u0131", -1, -1)], a_21 = [
new Among("sa", -1, -1), new Among("se", -1, -1),
new Among("sak", -1, -1), new Among("sek", -1, -1),
new Among("sam", -1, -1), new Among("sem", -1, -1),
new Among("san", -1, -1), new Among("sen", -1, -1)], a_22 = [
new Among("mi\u015F", -1, -1), new Among("mu\u015F", -1, -1),
new Among("m\u00FC\u015F", -1, -1),
new Among("m\u0131\u015F", -1, -1)], a_23 = [new Among("b", -1, 1),
new Among("c", -1, 2), new Among("d", -1, 3),
new Among("\u011F", -1, 4)], g_vowel = [17, 65, 16, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 8, 0, 0, 0, 0, 0, 0, 1], g_U = [
1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0,
0, 0, 0, 1], g_vowel1 = [1, 64, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], g_vowel2 = [17, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130], g_vowel3 = [1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1], g_vowel4 = [17], g_vowel5 = [65], g_vowel6 = [65], B_c_s_n_s, I_strlen, g_habr = [
["a", g_vowel1, 97, 305], ["e", g_vowel2, 101, 252],
["\u0131", g_vowel3, 97, 305], ["i", g_vowel4, 101, 105],
["o", g_vowel5, 111, 117], ["\u00F6", g_vowel6, 246, 252],
["u", g_vowel5, 111, 117]], sbp = new SnowballProgram();
this.setCurrent = function(word) {
sbp.setCurrent(word);
};
this.getCurrent = function() {
return sbp.getCurrent();
};
function habr1(g_v, n1, n2) {
while (true) {
var v_1 = sbp.limit - sbp.cursor;
if (sbp.in_grouping_b(g_v, n1, n2)) {
sbp.cursor = sbp.limit - v_1;
break;
}
sbp.cursor = sbp.limit - v_1;
if (sbp.cursor <= sbp.limit_backward)
return false;
sbp.cursor--;
}
return true;
}
function r_check_vowel_harmony() {
var v_1, v_2;
v_1 = sbp.limit - sbp.cursor;
habr1(g_vowel, 97, 305);
for (var i = 0; i < g_habr.length; i++) {
v_2 = sbp.limit - sbp.cursor;
var habr = g_habr[i];
if (sbp.eq_s_b(1, habr[0]) && habr1(habr[1], habr[2], habr[3])) {
sbp.cursor = sbp.limit - v_1;
return true;
}
sbp.cursor = sbp.limit - v_2;
}
sbp.cursor = sbp.limit - v_2;
if (!sbp.eq_s_b(1, "\u00FC") || !habr1(g_vowel6, 246, 252))
return false;
sbp.cursor = sbp.limit - v_1;
return true;
}
function habr2(f1, f2) {
var v_1 = sbp.limit - sbp.cursor, v_2;
if (f1()) {
sbp.cursor = sbp.limit - v_1;
if (sbp.cursor > sbp.limit_backward) {
sbp.cursor--;
v_2 = sbp.limit - sbp.cursor;
if (f2()) {
sbp.cursor = sbp.limit - v_2;
return true;
}
}
}
sbp.cursor = sbp.limit - v_1;
if (f1()) {
sbp.cursor = sbp.limit - v_1;
return false;
}
sbp.cursor = sbp.limit - v_1;
if (sbp.cursor <= sbp.limit_backward)
return false;
sbp.cursor--;
if (!f2())
return false;
sbp.cursor = sbp.limit - v_1;
return true;
}
function habr3(f1) {
return habr2(f1, function() {
return sbp.in_grouping_b(g_vowel, 97, 305);
});
}
function r_mark_suffix_with_optional_n_consonant() {
return habr3(function() {
return sbp.eq_s_b(1, "n");
});
}
function r_mark_suffix_with_optional_s_consonant() {
return habr3(function() {
return sbp.eq_s_b(1, "s");
});
}
function r_mark_suffix_with_optional_y_consonant() {
return habr3(function() {
return sbp.eq_s_b(1, "y");
});
}
function r_mark_suffix_with_optional_U_vowel() {
return habr2(function() {
return sbp.in_grouping_b(g_U, 105, 305);
}, function() {
return sbp.out_grouping_b(g_vowel, 97, 305);
});
}
function r_mark_possessives() {
return sbp.find_among_b(a_0, 10)
&& r_mark_suffix_with_optional_U_vowel();
}
function r_mark_sU() {
return r_check_vowel_harmony() && sbp.in_grouping_b(g_U, 105, 305)
&& r_mark_suffix_with_optional_s_consonant();
}
function r_mark_lArI() {
return sbp.find_among_b(a_1, 2);
}
function r_mark_yU() {
return r_check_vowel_harmony() && sbp.in_grouping_b(g_U, 105, 305)
&& r_mark_suffix_with_optional_y_consonant();
}
function r_mark_nU() {
return r_check_vowel_harmony() && sbp.find_among_b(a_2, 4);
}
function r_mark_nUn() {
return r_check_vowel_harmony() && sbp.find_among_b(a_3, 4)
&& r_mark_suffix_with_optional_n_consonant();
}
function r_mark_yA() {
return r_check_vowel_harmony() && sbp.find_among_b(a_4, 2)
&& r_mark_suffix_with_optional_y_consonant();
}
function r_mark_nA() {
return r_check_vowel_harmony() && sbp.find_among_b(a_5, 2);
}
function r_mark_DA() {
return r_check_vowel_harmony() && sbp.find_among_b(a_6, 4);
}
function r_mark_ndA() {
return r_check_vowel_harmony() && sbp.find_among_b(a_7, 2);
}
function r_mark_DAn() {
return r_check_vowel_harmony() && sbp.find_among_b(a_8, 4);
}
function r_mark_ndAn() {
return r_check_vowel_harmony() && sbp.find_among_b(a_9, 2);
}
function r_mark_ylA() {
return r_check_vowel_harmony() && sbp.find_among_b(a_10, 2)
&& r_mark_suffix_with_optional_y_consonant();
}
function r_mark_ki() {
return sbp.eq_s_b(2, "ki");
}
function r_mark_ncA() {
return r_check_vowel_harmony() && sbp.find_among_b(a_11, 2)
&& r_mark_suffix_with_optional_n_consonant();
}
function r_mark_yUm() {
return r_check_vowel_harmony() && sbp.find_among_b(a_12, 4)
&& r_mark_suffix_with_optional_y_consonant();
}
function r_mark_sUn() {
return r_check_vowel_harmony() && sbp.find_among_b(a_13, 4);
}
function r_mark_yUz() {
return r_check_vowel_harmony() && sbp.find_among_b(a_14, 4)
&& r_mark_suffix_with_optional_y_consonant();
}
function r_mark_sUnUz() {
return sbp.find_among_b(a_15, 4);
}
function r_mark_lAr() {
return r_check_vowel_harmony() && sbp.find_among_b(a_16, 2);
}
function r_mark_nUz() {
return r_check_vowel_harmony() && sbp.find_among_b(a_17, 4);
}
function r_mark_DUr() {
return r_check_vowel_harmony() && sbp.find_among_b(a_18, 8);
}
function r_mark_cAsInA() {
return sbp.find_among_b(a_19, 2);
}
function r_mark_yDU() {
return r_check_vowel_harmony() && sbp.find_among_b(a_20, 32)
&& r_mark_suffix_with_optional_y_consonant();
}
function r_mark_ysA() {
return sbp.find_among_b(a_21, 8)
&& r_mark_suffix_with_optional_y_consonant();
}
function r_mark_ymUs_() {
return r_check_vowel_harmony() && sbp.find_among_b(a_22, 4)
&& r_mark_suffix_with_optional_y_consonant();
}
function r_mark_yken() {
return sbp.eq_s_b(3, "ken")
&& r_mark_suffix_with_optional_y_consonant();
}
function habr4() {
var v_1 = sbp.limit - sbp.cursor;
if (!r_mark_ymUs_()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_yDU()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_ysA()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_yken())
return true;
}
}
}
return false;
}
function habr5() {
if (r_mark_cAsInA()) {
var v_1 = sbp.limit - sbp.cursor;
if (!r_mark_sUnUz()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_lAr()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_yUm()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_sUn()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_yUz())
sbp.cursor = sbp.limit - v_1;
}
}
}
}
if (r_mark_ymUs_())
return false;
}
return true;
}
function habr6() {
if (r_mark_lAr()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
var v_1 = sbp.limit - sbp.cursor;
sbp.ket = sbp.cursor;
if (!r_mark_DUr()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_yDU()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_ysA()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_ymUs_())
sbp.cursor = sbp.limit - v_1;
}
}
}
B_c_s_n_s = false;
return false;
}
return true;
}
function habr7() {
if (!r_mark_nUz())
return true;
var v_1 = sbp.limit - sbp.cursor;
if (!r_mark_yDU()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_ysA())
return true;
}
return false;
}
function habr8() {
var v_1 = sbp.limit - sbp.cursor, v_2;
if (!r_mark_sUnUz()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_yUz()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_sUn()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_yUm())
return true;
}
}
}
sbp.bra = sbp.cursor;
sbp.slice_del();
v_2 = sbp.limit - sbp.cursor;
sbp.ket = sbp.cursor;
if (!r_mark_ymUs_())
sbp.cursor = sbp.limit - v_2;
return false;
}
function r_stem_nominal_verb_suffixes() {
var v_1 = sbp.limit - sbp.cursor, v_2;
sbp.ket = sbp.cursor;
B_c_s_n_s = true;
if (habr4()) {
sbp.cursor = sbp.limit - v_1;
if (habr5()) {
sbp.cursor = sbp.limit - v_1;
if (habr6()) {
sbp.cursor = sbp.limit - v_1;
if (habr7()) {
sbp.cursor = sbp.limit - v_1;
if (habr8()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_DUr())
return;
sbp.bra = sbp.cursor;
sbp.slice_del();
sbp.ket = sbp.cursor;
v_2 = sbp.limit - sbp.cursor;
if (!r_mark_sUnUz()) {
sbp.cursor = sbp.limit - v_2;
if (!r_mark_lAr()) {
sbp.cursor = sbp.limit - v_2;
if (!r_mark_yUm()) {
sbp.cursor = sbp.limit - v_2;
if (!r_mark_sUn()) {
sbp.cursor = sbp.limit - v_2;
if (!r_mark_yUz())
sbp.cursor = sbp.limit - v_2;
}
}
}
}
if (!r_mark_ymUs_())
sbp.cursor = sbp.limit - v_2;
}
}
}
}
}
sbp.bra = sbp.cursor;
sbp.slice_del();
}
function r_stem_suffix_chain_before_ki() {
var v_1, v_2, v_3, v_4;
sbp.ket = sbp.cursor;
if (r_mark_ki()) {
v_1 = sbp.limit - sbp.cursor;
if (r_mark_DA()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
v_2 = sbp.limit - sbp.cursor;
sbp.ket = sbp.cursor;
if (r_mark_lAr()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
r_stem_suffix_chain_before_ki();
} else {
sbp.cursor = sbp.limit - v_2;
if (r_mark_possessives()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
sbp.ket = sbp.cursor;
if (r_mark_lAr()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
r_stem_suffix_chain_before_ki();
}
}
}
return true;
}
sbp.cursor = sbp.limit - v_1;
if (r_mark_nUn()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
sbp.ket = sbp.cursor;
v_3 = sbp.limit - sbp.cursor;
if (r_mark_lArI()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
} else {
sbp.cursor = sbp.limit - v_3;
sbp.ket = sbp.cursor;
if (!r_mark_possessives()) {
sbp.cursor = sbp.limit - v_3;
if (!r_mark_sU()) {
sbp.cursor = sbp.limit - v_3;
if (!r_stem_suffix_chain_before_ki())
return true;
}
}
sbp.bra = sbp.cursor;
sbp.slice_del();
sbp.ket = sbp.cursor;
if (r_mark_lAr()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
r_stem_suffix_chain_before_ki()
}
}
return true;
}
sbp.cursor = sbp.limit - v_1;
if (r_mark_ndA()) {
v_4 = sbp.limit - sbp.cursor;
if (r_mark_lArI()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
} else {
sbp.cursor = sbp.limit - v_4;
if (r_mark_sU()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
sbp.ket = sbp.cursor;
if (r_mark_lAr()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
r_stem_suffix_chain_before_ki();
}
} else {
sbp.cursor = sbp.limit - v_4;
if (!r_stem_suffix_chain_before_ki())
return false;
}
}
return true;
}
}
return false;
}
function habr9(v_1) {
sbp.ket = sbp.cursor;
if (!r_mark_ndA()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_nA())
return false;
}
var v_2 = sbp.limit - sbp.cursor;
if (r_mark_lArI()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
} else {
sbp.cursor = sbp.limit - v_2;
if (r_mark_sU()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
sbp.ket = sbp.cursor;
if (r_mark_lAr()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
r_stem_suffix_chain_before_ki();
}
} else {
sbp.cursor = sbp.limit - v_2;
if (!r_stem_suffix_chain_before_ki())
return false;
}
}
return true;
}
function habr10(v_1) {
sbp.ket = sbp.cursor;
if (!r_mark_ndAn()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_nU())
return false;
}
var v_2 = sbp.limit - sbp.cursor;
if (!r_mark_sU()) {
sbp.cursor = sbp.limit - v_2;
if (!r_mark_lArI())
return false;
}
sbp.bra = sbp.cursor;
sbp.slice_del();
sbp.ket = sbp.cursor;
if (r_mark_lAr()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
r_stem_suffix_chain_before_ki();
}
return true;
}
function habr11() {
var v_1 = sbp.limit - sbp.cursor, v_2;
sbp.ket = sbp.cursor;
if (!r_mark_nUn()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_ylA())
return false;
}
sbp.bra = sbp.cursor;
sbp.slice_del();
v_2 = sbp.limit - sbp.cursor;
sbp.ket = sbp.cursor;
if (r_mark_lAr()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
if (r_stem_suffix_chain_before_ki())
return true;
}
sbp.cursor = sbp.limit - v_2;
sbp.ket = sbp.cursor;
if (!r_mark_possessives()) {
sbp.cursor = sbp.limit - v_2;
if (!r_mark_sU()) {
sbp.cursor = sbp.limit - v_2;
if (!r_stem_suffix_chain_before_ki())
return true;
}
}
sbp.bra = sbp.cursor;
sbp.slice_del();
sbp.ket = sbp.cursor;
if (r_mark_lAr()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
r_stem_suffix_chain_before_ki();
}
return true;
}
function habr12() {
var v_1 = sbp.limit - sbp.cursor, v_2, v_3;
sbp.ket = sbp.cursor;
if (!r_mark_DA()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_yU()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_yA())
return false;
}
}
sbp.bra = sbp.cursor;
sbp.slice_del();
sbp.ket = sbp.cursor;
v_2 = sbp.limit - sbp.cursor;
if (r_mark_possessives()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
v_3 = sbp.limit - sbp.cursor;
sbp.ket = sbp.cursor;
if (!r_mark_lAr())
sbp.cursor = sbp.limit - v_3;
} else {
sbp.cursor = sbp.limit - v_2;
if (!r_mark_lAr())
return true;
}
sbp.bra = sbp.cursor;
sbp.slice_del();
sbp.ket = sbp.cursor;
r_stem_suffix_chain_before_ki();
return true;
}
function r_stem_noun_suffixes() {
var v_1 = sbp.limit - sbp.cursor, v_2, v_3;
sbp.ket = sbp.cursor;
if (r_mark_lAr()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
r_stem_suffix_chain_before_ki();
return;
}
sbp.cursor = sbp.limit - v_1;
sbp.ket = sbp.cursor;
if (r_mark_ncA()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
v_2 = sbp.limit - sbp.cursor;
sbp.ket = sbp.cursor;
if (r_mark_lArI()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
} else {
sbp.cursor = sbp.limit - v_2;
sbp.ket = sbp.cursor;
if (!r_mark_possessives()) {
sbp.cursor = sbp.limit - v_2;
if (!r_mark_sU()) {
sbp.cursor = sbp.limit - v_2;
sbp.ket = sbp.cursor;
if (!r_mark_lAr())
return;
sbp.bra = sbp.cursor;
sbp.slice_del();
if (!r_stem_suffix_chain_before_ki())
return;
}
}
sbp.bra = sbp.cursor;
sbp.slice_del();
sbp.ket = sbp.cursor;
if (r_mark_lAr()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
r_stem_suffix_chain_before_ki();
}
}
return;
}
sbp.cursor = sbp.limit - v_1;
if (habr9(v_1))
return;
sbp.cursor = sbp.limit - v_1;
if (habr10(v_1))
return;
sbp.cursor = sbp.limit - v_1;
sbp.ket = sbp.cursor;
if (r_mark_DAn()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
sbp.ket = sbp.cursor;
v_3 = sbp.limit - sbp.cursor;
if (r_mark_possessives()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
sbp.ket = sbp.cursor;
if (r_mark_lAr()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
r_stem_suffix_chain_before_ki();
}
} else {
sbp.cursor = sbp.limit - v_3;
if (r_mark_lAr()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
r_stem_suffix_chain_before_ki();
} else {
sbp.cursor = sbp.limit - v_3;
r_stem_suffix_chain_before_ki();
}
}
return;
}
sbp.cursor = sbp.limit - v_1;
if (habr11())
return;
sbp.cursor = sbp.limit - v_1;
if (r_mark_lArI()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
return;
}
sbp.cursor = sbp.limit - v_1;
if (r_stem_suffix_chain_before_ki())
return;
sbp.cursor = sbp.limit - v_1;
if (habr12())
return;
sbp.cursor = sbp.limit - v_1;
sbp.ket = sbp.cursor;
if (!r_mark_possessives()) {
sbp.cursor = sbp.limit - v_1;
if (!r_mark_sU())
return;
}
sbp.bra = sbp.cursor;
sbp.slice_del();
sbp.ket = sbp.cursor;
if (r_mark_lAr()) {
sbp.bra = sbp.cursor;
sbp.slice_del();
r_stem_suffix_chain_before_ki();
}
}
function r_post_process_last_consonants() {
var among_var;
sbp.ket = sbp.cursor;
among_var = sbp.find_among_b(a_23, 4);
if (among_var) {
sbp.bra = sbp.cursor;
switch (among_var) {
case 1 :
sbp.slice_from("p");
break;
case 2 :
sbp.slice_from("\u00E7");
break;
case 3 :
sbp.slice_from("t");
break;
case 4 :
sbp.slice_from("k");
break;
}
}
}
function habr13() {
while (true) {
var v_1 = sbp.limit - sbp.cursor;
if (sbp.in_grouping_b(g_vowel, 97, 305)) {
sbp.cursor = sbp.limit - v_1;
break;
}
sbp.cursor = sbp.limit - v_1;
if (sbp.cursor <= sbp.limit_backward)
return false;
sbp.cursor--;
}
return true;
}
function habr14(v_1, c1, c2) {
sbp.cursor = sbp.limit - v_1;
if (habr13()) {
var v_2 = sbp.limit - sbp.cursor;
if (!sbp.eq_s_b(1, c1)) {
sbp.cursor = sbp.limit - v_2;
if (!sbp.eq_s_b(1, c2))
return true;
}
sbp.cursor = sbp.limit - v_1;
var c = sbp.cursor;
sbp.insert(sbp.cursor, sbp.cursor, c2);
sbp.cursor = c;
return false;
}
return true;
}
function r_append_U_to_stems_ending_with_d_or_g() {
var v_1 = sbp.limit - sbp.cursor;
if (!sbp.eq_s_b(1, "d")) {
sbp.cursor = sbp.limit - v_1;
if (!sbp.eq_s_b(1, "g"))
return;
}
if (habr14(v_1, "a", "\u0131"))
if (habr14(v_1, "e", "i"))
if (habr14(v_1, "o", "u"))
habr14(v_1, "\u00F6", "\u00FC")
}
function r_more_than_one_syllable_word() {
var v_1 = sbp.cursor, v_2 = 2, v_3;
while (true) {
v_3 = sbp.cursor;
while (!sbp.in_grouping(g_vowel, 97, 305)) {
if (sbp.cursor >= sbp.limit) {
sbp.cursor = v_3;
if (v_2 > 0)
return false;
sbp.cursor = v_1;
return true;
}
sbp.cursor++;
}
v_2--;
}
}
function habr15(v_1, n1, c1) {
while (!sbp.eq_s(n1, c1)) {
if (sbp.cursor >= sbp.limit)
return true;
sbp.cursor++;
}
I_strlen = n1;
if (I_strlen != sbp.limit)
return true;
sbp.cursor = v_1;
return false;
}
function r_is_reserved_word() {
var v_1 = sbp.cursor;
if (habr15(v_1, 2, "ad")) {
sbp.cursor = v_1;
if (habr15(v_1, 5, "soyad"))
return false;
}
return true;
}
function r_postlude() {
var v_1 = sbp.cursor;
if (r_is_reserved_word())
return false;
sbp.limit_backward = v_1;
sbp.cursor = sbp.limit;
r_append_U_to_stems_ending_with_d_or_g();
sbp.cursor = sbp.limit;
r_post_process_last_consonants();
return true;
}
this.stem = function() {
if (r_more_than_one_syllable_word()) {
sbp.limit_backward = sbp.cursor;
sbp.cursor = sbp.limit;
r_stem_nominal_verb_suffixes();
sbp.cursor = sbp.limit;
if (B_c_s_n_s) {
r_stem_noun_suffixes();
sbp.cursor = sbp.limit_backward;
if (r_postlude())
return true;
}
}
return false;
}
}