| // Generated by Snowball 2.1.0 - https://snowballstem.org/ |
| |
| /**@constructor*/ |
| GermanStemmer = function() { |
| var base = new BaseStemmer(); |
| /** @const */ var a_0 = [ |
| ["", -1, 5], |
| ["U", 0, 2], |
| ["Y", 0, 1], |
| ["\u00E4", 0, 3], |
| ["\u00F6", 0, 4], |
| ["\u00FC", 0, 2] |
| ]; |
| |
| /** @const */ var a_1 = [ |
| ["e", -1, 2], |
| ["em", -1, 1], |
| ["en", -1, 2], |
| ["ern", -1, 1], |
| ["er", -1, 1], |
| ["s", -1, 3], |
| ["es", 5, 2] |
| ]; |
| |
| /** @const */ var a_2 = [ |
| ["en", -1, 1], |
| ["er", -1, 1], |
| ["st", -1, 2], |
| ["est", 2, 1] |
| ]; |
| |
| /** @const */ var a_3 = [ |
| ["ig", -1, 1], |
| ["lich", -1, 1] |
| ]; |
| |
| /** @const */ var a_4 = [ |
| ["end", -1, 1], |
| ["ig", -1, 2], |
| ["ung", -1, 1], |
| ["lich", -1, 3], |
| ["isch", -1, 2], |
| ["ik", -1, 2], |
| ["heit", -1, 3], |
| ["keit", -1, 4] |
| ]; |
| |
| /** @const */ var /** Array<int> */ g_v = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8]; |
| |
| /** @const */ var /** Array<int> */ g_s_ending = [117, 30, 5]; |
| |
| /** @const */ var /** Array<int> */ g_st_ending = [117, 30, 4]; |
| |
| var /** number */ I_x = 0; |
| var /** number */ I_p2 = 0; |
| var /** number */ I_p1 = 0; |
| |
| |
| /** @return {boolean} */ |
| function r_prelude() { |
| var /** number */ v_1 = base.cursor; |
| while(true) |
| { |
| var /** number */ v_2 = base.cursor; |
| lab0: { |
| lab1: { |
| var /** number */ v_3 = base.cursor; |
| lab2: { |
| base.bra = base.cursor; |
| if (!(base.eq_s("\u00DF"))) |
| { |
| break lab2; |
| } |
| base.ket = base.cursor; |
| if (!base.slice_from("ss")) |
| { |
| return false; |
| } |
| break lab1; |
| } |
| base.cursor = v_3; |
| if (base.cursor >= base.limit) |
| { |
| break lab0; |
| } |
| base.cursor++; |
| } |
| continue; |
| } |
| base.cursor = v_2; |
| break; |
| } |
| base.cursor = v_1; |
| while(true) |
| { |
| var /** number */ v_4 = base.cursor; |
| lab3: { |
| golab4: while(true) |
| { |
| var /** number */ v_5 = base.cursor; |
| lab5: { |
| if (!(base.in_grouping(g_v, 97, 252))) |
| { |
| break lab5; |
| } |
| base.bra = base.cursor; |
| lab6: { |
| var /** number */ v_6 = base.cursor; |
| lab7: { |
| if (!(base.eq_s("u"))) |
| { |
| break lab7; |
| } |
| base.ket = base.cursor; |
| if (!(base.in_grouping(g_v, 97, 252))) |
| { |
| break lab7; |
| } |
| if (!base.slice_from("U")) |
| { |
| return false; |
| } |
| break lab6; |
| } |
| base.cursor = v_6; |
| if (!(base.eq_s("y"))) |
| { |
| break lab5; |
| } |
| base.ket = base.cursor; |
| if (!(base.in_grouping(g_v, 97, 252))) |
| { |
| break lab5; |
| } |
| if (!base.slice_from("Y")) |
| { |
| return false; |
| } |
| } |
| base.cursor = v_5; |
| break golab4; |
| } |
| base.cursor = v_5; |
| if (base.cursor >= base.limit) |
| { |
| break lab3; |
| } |
| base.cursor++; |
| } |
| continue; |
| } |
| base.cursor = v_4; |
| break; |
| } |
| return true; |
| }; |
| |
| /** @return {boolean} */ |
| function r_mark_regions() { |
| I_p1 = base.limit; |
| I_p2 = base.limit; |
| var /** number */ v_1 = base.cursor; |
| { |
| var /** number */ c1 = base.cursor + 3; |
| if (c1 > base.limit) |
| { |
| return false; |
| } |
| base.cursor = c1; |
| } |
| I_x = base.cursor; |
| base.cursor = v_1; |
| golab0: while(true) |
| { |
| lab1: { |
| if (!(base.in_grouping(g_v, 97, 252))) |
| { |
| break lab1; |
| } |
| break golab0; |
| } |
| if (base.cursor >= base.limit) |
| { |
| return false; |
| } |
| base.cursor++; |
| } |
| golab2: while(true) |
| { |
| lab3: { |
| if (!(base.out_grouping(g_v, 97, 252))) |
| { |
| break lab3; |
| } |
| break golab2; |
| } |
| if (base.cursor >= base.limit) |
| { |
| return false; |
| } |
| base.cursor++; |
| } |
| I_p1 = base.cursor; |
| lab4: { |
| if (!(I_p1 < I_x)) |
| { |
| break lab4; |
| } |
| I_p1 = I_x; |
| } |
| golab5: while(true) |
| { |
| lab6: { |
| if (!(base.in_grouping(g_v, 97, 252))) |
| { |
| break lab6; |
| } |
| break golab5; |
| } |
| if (base.cursor >= base.limit) |
| { |
| return false; |
| } |
| base.cursor++; |
| } |
| golab7: while(true) |
| { |
| lab8: { |
| if (!(base.out_grouping(g_v, 97, 252))) |
| { |
| break lab8; |
| } |
| break golab7; |
| } |
| if (base.cursor >= base.limit) |
| { |
| return false; |
| } |
| base.cursor++; |
| } |
| I_p2 = base.cursor; |
| return true; |
| }; |
| |
| /** @return {boolean} */ |
| function r_postlude() { |
| var /** number */ among_var; |
| while(true) |
| { |
| var /** number */ v_1 = base.cursor; |
| lab0: { |
| base.bra = base.cursor; |
| among_var = base.find_among(a_0); |
| if (among_var == 0) |
| { |
| break lab0; |
| } |
| base.ket = base.cursor; |
| switch (among_var) { |
| case 1: |
| if (!base.slice_from("y")) |
| { |
| return false; |
| } |
| break; |
| case 2: |
| if (!base.slice_from("u")) |
| { |
| return false; |
| } |
| break; |
| case 3: |
| if (!base.slice_from("a")) |
| { |
| return false; |
| } |
| break; |
| case 4: |
| if (!base.slice_from("o")) |
| { |
| return false; |
| } |
| break; |
| case 5: |
| if (base.cursor >= base.limit) |
| { |
| break lab0; |
| } |
| base.cursor++; |
| break; |
| } |
| continue; |
| } |
| base.cursor = v_1; |
| break; |
| } |
| return true; |
| }; |
| |
| /** @return {boolean} */ |
| function r_R1() { |
| if (!(I_p1 <= base.cursor)) |
| { |
| return false; |
| } |
| return true; |
| }; |
| |
| /** @return {boolean} */ |
| function r_R2() { |
| if (!(I_p2 <= base.cursor)) |
| { |
| return false; |
| } |
| return true; |
| }; |
| |
| /** @return {boolean} */ |
| function r_standard_suffix() { |
| var /** number */ among_var; |
| var /** number */ v_1 = base.limit - base.cursor; |
| lab0: { |
| base.ket = base.cursor; |
| among_var = base.find_among_b(a_1); |
| if (among_var == 0) |
| { |
| break lab0; |
| } |
| base.bra = base.cursor; |
| if (!r_R1()) |
| { |
| break lab0; |
| } |
| switch (among_var) { |
| case 1: |
| if (!base.slice_del()) |
| { |
| return false; |
| } |
| break; |
| case 2: |
| if (!base.slice_del()) |
| { |
| return false; |
| } |
| var /** number */ v_2 = base.limit - base.cursor; |
| lab1: { |
| base.ket = base.cursor; |
| if (!(base.eq_s_b("s"))) |
| { |
| base.cursor = base.limit - v_2; |
| break lab1; |
| } |
| base.bra = base.cursor; |
| if (!(base.eq_s_b("nis"))) |
| { |
| base.cursor = base.limit - v_2; |
| break lab1; |
| } |
| if (!base.slice_del()) |
| { |
| return false; |
| } |
| } |
| break; |
| case 3: |
| if (!(base.in_grouping_b(g_s_ending, 98, 116))) |
| { |
| break lab0; |
| } |
| if (!base.slice_del()) |
| { |
| return false; |
| } |
| break; |
| } |
| } |
| base.cursor = base.limit - v_1; |
| var /** number */ v_3 = base.limit - base.cursor; |
| lab2: { |
| base.ket = base.cursor; |
| among_var = base.find_among_b(a_2); |
| if (among_var == 0) |
| { |
| break lab2; |
| } |
| base.bra = base.cursor; |
| if (!r_R1()) |
| { |
| break lab2; |
| } |
| switch (among_var) { |
| case 1: |
| if (!base.slice_del()) |
| { |
| return false; |
| } |
| break; |
| case 2: |
| if (!(base.in_grouping_b(g_st_ending, 98, 116))) |
| { |
| break lab2; |
| } |
| { |
| var /** number */ c1 = base.cursor - 3; |
| if (c1 < base.limit_backward) |
| { |
| break lab2; |
| } |
| base.cursor = c1; |
| } |
| if (!base.slice_del()) |
| { |
| return false; |
| } |
| break; |
| } |
| } |
| base.cursor = base.limit - v_3; |
| var /** number */ v_4 = base.limit - base.cursor; |
| lab3: { |
| base.ket = base.cursor; |
| among_var = base.find_among_b(a_4); |
| if (among_var == 0) |
| { |
| break lab3; |
| } |
| base.bra = base.cursor; |
| if (!r_R2()) |
| { |
| break lab3; |
| } |
| switch (among_var) { |
| case 1: |
| if (!base.slice_del()) |
| { |
| return false; |
| } |
| var /** number */ v_5 = base.limit - base.cursor; |
| lab4: { |
| base.ket = base.cursor; |
| if (!(base.eq_s_b("ig"))) |
| { |
| base.cursor = base.limit - v_5; |
| break lab4; |
| } |
| base.bra = base.cursor; |
| { |
| var /** number */ v_6 = base.limit - base.cursor; |
| lab5: { |
| if (!(base.eq_s_b("e"))) |
| { |
| break lab5; |
| } |
| base.cursor = base.limit - v_5; |
| break lab4; |
| } |
| base.cursor = base.limit - v_6; |
| } |
| if (!r_R2()) |
| { |
| base.cursor = base.limit - v_5; |
| break lab4; |
| } |
| if (!base.slice_del()) |
| { |
| return false; |
| } |
| } |
| break; |
| case 2: |
| { |
| var /** number */ v_7 = base.limit - base.cursor; |
| lab6: { |
| if (!(base.eq_s_b("e"))) |
| { |
| break lab6; |
| } |
| break lab3; |
| } |
| base.cursor = base.limit - v_7; |
| } |
| if (!base.slice_del()) |
| { |
| return false; |
| } |
| break; |
| case 3: |
| if (!base.slice_del()) |
| { |
| return false; |
| } |
| var /** number */ v_8 = base.limit - base.cursor; |
| lab7: { |
| base.ket = base.cursor; |
| lab8: { |
| var /** number */ v_9 = base.limit - base.cursor; |
| lab9: { |
| if (!(base.eq_s_b("er"))) |
| { |
| break lab9; |
| } |
| break lab8; |
| } |
| base.cursor = base.limit - v_9; |
| if (!(base.eq_s_b("en"))) |
| { |
| base.cursor = base.limit - v_8; |
| break lab7; |
| } |
| } |
| base.bra = base.cursor; |
| if (!r_R1()) |
| { |
| base.cursor = base.limit - v_8; |
| break lab7; |
| } |
| if (!base.slice_del()) |
| { |
| return false; |
| } |
| } |
| break; |
| case 4: |
| if (!base.slice_del()) |
| { |
| return false; |
| } |
| var /** number */ v_10 = base.limit - base.cursor; |
| lab10: { |
| base.ket = base.cursor; |
| if (base.find_among_b(a_3) == 0) |
| { |
| base.cursor = base.limit - v_10; |
| break lab10; |
| } |
| base.bra = base.cursor; |
| if (!r_R2()) |
| { |
| base.cursor = base.limit - v_10; |
| break lab10; |
| } |
| if (!base.slice_del()) |
| { |
| return false; |
| } |
| } |
| break; |
| } |
| } |
| base.cursor = base.limit - v_4; |
| return true; |
| }; |
| |
| this.stem = /** @return {boolean} */ function() { |
| var /** number */ v_1 = base.cursor; |
| r_prelude(); |
| base.cursor = v_1; |
| var /** number */ v_2 = base.cursor; |
| r_mark_regions(); |
| base.cursor = v_2; |
| base.limit_backward = base.cursor; base.cursor = base.limit; |
| r_standard_suffix(); |
| base.cursor = base.limit_backward; |
| var /** number */ v_4 = base.cursor; |
| r_postlude(); |
| base.cursor = v_4; |
| return true; |
| }; |
| |
| /**@return{string}*/ |
| this['stemWord'] = function(/**string*/word) { |
| base.setCurrent(word); |
| this.stem(); |
| return base.getCurrent(); |
| }; |
| }; |