/* * Copyright 2004 The Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // This file was generated automatically by the Snowball to Java compiler using System; using Among = SF.Snowball.Among; using SnowballProgram = SF.Snowball.SnowballProgram; namespace SF.Snowball.Ext { /// Generated class implementing code defined by a snowball script. public class FinnishStemmer:SnowballProgram { public FinnishStemmer() { InitBlock(); } private void InitBlock() { a_0 = new Among[]{new Among("pa", - 1, 1, "", this), new Among("sti", - 1, 2, "", this), new Among("kaan", - 1, 1, "", this), new Among("han", - 1, 1, "", this), new Among("kin", - 1, 1, "", this), new Among("h\u00E4n", - 1, 1, "", this), new Among("k\u00E4\u00E4n", - 1, 1, "", this), new Among("ko", - 1, 1, "", this), new Among("p\u00E4", - 1, 1, "", this), new Among("k\u00F6", - 1, 1, "", this)}; a_1 = new Among[]{new Among("lla", - 1, - 1, "", this), new Among("na", - 1, - 1, "", this), new Among("ssa", - 1, - 1, "", this), new Among("ta", - 1, - 1, "", this), new Among("lta", 3, - 1, "", this), new Among("sta", 3, - 1, "", this)}; a_2 = new Among[]{new Among("ll\u00E4", - 1, - 1, "", this), new Among("n\u00E4", - 1, - 1, "", this), new Among("ss\u00E4", - 1, - 1, "", this), new Among("t\u00E4", - 1, - 1, "", this), new Among("lt\u00E4", 3, - 1, "", this), new Among("st\u00E4", 3, - 1, "", this)}; a_3 = new Among[]{new Among("lle", - 1, - 1, "", this), new Among("ine", - 1, - 1, "", this)}; a_4 = new Among[]{new Among("nsa", - 1, 3, "", this), new Among("mme", - 1, 3, "", this), new Among("nne", - 1, 3, "", this), new Among("ni", - 1, 2, "", this), new Among("si", - 1, 1, "", this), new Among("an", - 1, 4, "", this), new Among("en", - 1, 6, "", this), new Among("\u00E4n", - 1, 5, "", this), new Among("ns\u00E4", - 1, 3, "", this)}; a_5 = new Among[]{new Among("aa", - 1, - 1, "", this), new Among("ee", - 1, - 1, "", this), new Among("ii", - 1, - 1, "", this), new Among("oo", - 1, - 1, "", this), new Among("uu", - 1, - 1, "", this), new Among("\u00E4\u00E4", - 1, - 1, "", this), new Among("\u00F6\u00F6", - 1, - 1, "", this)}; a_6 = new Among[]{new Among("a", - 1, 8, "", this), new Among("lla", 0, - 1, "", this), new Among("na", 0, - 1, "", this), new Among("ssa", 0, - 1, "", this), new Among("ta", 0, - 1, "", this), new Among("lta", 4, - 1, "", this), new Among("sta", 4, - 1, "", this), new Among("tta", 4, 9, "", this), new Among("lle", - 1, - 1, "", this), new Among("ine", - 1, - 1, "", this), new Among("ksi", - 1, - 1, "", this), new Among("n", - 1, 7, "", this), new Among("han", 11, 1, "", this), new Among("den", 11, - 1, "r_VI", this), new Among("seen", 11, - 1, "r_LONG", this), new Among("hen", 11, 2, "", this), new Among("tten", 11, - 1, "r_VI", this), new Among("hin", 11, 3, "", this), new Among("siin", 11, - 1, "r_VI", this), new Among("hon", 11, 4, "", this), new Among("h\u00E4n", 11, 5, "", this), new Among("h\u00F6n", 11, 6, "", this), new Among("\u00E4", - 1, 8, "", this), new Among("ll\u00E4", 22, - 1, "", this), new Among("n\u00E4", 22, - 1, "", this), new Among("ss\u00E4", 22, - 1, "", this), new Among("t\u00E4", 22, - 1, "", this), new Among("lt\u00E4", 26, - 1, "", this), new Among("st\u00E4", 26, - 1, "", this), new Among("tt\u00E4", 26, 9, "", this)}; a_7 = new Among[]{new Among("eja", - 1, - 1, "", this), new Among("mma", - 1, 1, "", this), new Among("imma", 1, - 1, "", this), new Among("mpa", - 1, 1, "", this), new Among("impa", 3, - 1, "", this), new Among("mmi", - 1, 1, "", this), new Among("immi", 5, - 1, "", this), new Among("mpi", - 1, 1, "", this), new Among("impi", 7, - 1, "", this), new Among("ej\u00E4", - 1, - 1, "", this), new Among("mm\u00E4", - 1, 1, "", this), new Among("imm\u00E4", 10, - 1, "", this), new Among("mp\u00E4", - 1, 1, "", this), new Among("imp\u00E4", 12, - 1, "", this)}; a_8 = new Among[]{new Among("i", - 1, - 1, "", this), new Among("j", - 1, - 1, "", this)}; a_9 = new Among[]{new Among("mma", - 1, 1, "", this), new Among("imma", 0, - 1, "", this)}; } private Among[] a_0; private Among[] a_1; private Among[] a_2; private Among[] a_3; private Among[] a_4; private Among[] a_5; private Among[] a_6; private Among[] a_7; private Among[] a_8; private Among[] a_9; private static readonly char[] g_AEI = new char[]{(char) (17), (char) (1), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (8)}; private static readonly char[] g_v = new char[]{(char) (17), (char) (65), (char) (16), (char) (1), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (8), (char) (0), (char) (32)}; private static readonly char[] g_V = new char[]{(char) (17), (char) (65), (char) (16), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (8), (char) (0), (char) (32)}; private static readonly char[] g_particle_end = new char[]{(char) (17), (char) (97), (char) (24), (char) (1), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (8), (char) (0), (char) (32)}; private bool B_ending_removed; private System.Text.StringBuilder S_x = new System.Text.StringBuilder(); private int I_p2; private int I_p1; protected internal virtual void copy_from(FinnishStemmer other) { B_ending_removed = other.B_ending_removed; S_x = other.S_x; I_p2 = other.I_p2; I_p1 = other.I_p1; base.copy_from(other); } private bool r_mark_regions() { int v_1; int v_3; // (, line 41 I_p1 = limit; I_p2 = limit; // goto, line 46 while (true) { v_1 = cursor; do { if (!(in_grouping(g_v, 97, 246))) { goto lab1_brk; } cursor = v_1; goto golab0_brk; } while (false); lab1_brk: ; cursor = v_1; if (cursor >= limit) { return false; } cursor++; } golab0_brk: ; // gopast, line 46 while (true) { do { if (!(out_grouping(g_v, 97, 246))) { goto lab3_brk; } goto golab2_brk; } while (false); lab3_brk: ; if (cursor >= limit) { return false; } cursor++; } golab2_brk: ; // setmark p1, line 46 I_p1 = cursor; // goto, line 47 while (true) { v_3 = cursor; do { if (!(in_grouping(g_v, 97, 246))) { goto lab5_brk; } cursor = v_3; goto golab4_brk; } while (false); lab5_brk: ; cursor = v_3; if (cursor >= limit) { return false; } cursor++; } golab4_brk: ; // gopast, line 47 while (true) { do { if (!(out_grouping(g_v, 97, 246))) { goto lab7_brk; } goto golab6_brk; } while (false); lab7_brk: ; if (cursor >= limit) { return false; } cursor++; } golab6_brk: ; // setmark p2, line 47 I_p2 = cursor; return true; } private bool r_R2() { if (!(I_p2 <= cursor)) { return false; } return true; } private bool r_particle_etc() { int among_var; int v_1; int v_2; // (, line 54 // setlimit, line 55 v_1 = limit - cursor; // tomark, line 55 if (cursor < I_p1) { return false; } cursor = I_p1; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 55 // [, line 55 ket = cursor; // substring, line 55 among_var = find_among_b(a_0, 10); if (among_var == 0) { limit_backward = v_2; return false; } // ], line 55 bra = cursor; limit_backward = v_2; switch (among_var) { case 0: return false; case 1: // (, line 62 if (!(in_grouping_b(g_particle_end, 97, 246))) { return false; } break; case 2: // (, line 64 // call R2, line 64 if (!r_R2()) { return false; } break; } // delete, line 66 slice_del(); return true; } private bool r_possessive() { int among_var; int v_1; int v_2; int v_3; // (, line 68 // setlimit, line 69 v_1 = limit - cursor; // tomark, line 69 if (cursor < I_p1) { return false; } cursor = I_p1; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 69 // [, line 69 ket = cursor; // substring, line 69 among_var = find_among_b(a_4, 9); if (among_var == 0) { limit_backward = v_2; return false; } // ], line 69 bra = cursor; limit_backward = v_2; switch (among_var) { case 0: return false; case 1: // (, line 72 // not, line 72 { v_3 = limit - cursor; do { // literal, line 72 if (!(eq_s_b(1, "k"))) { goto lab0_brk; } return false; } while (false); lab0_brk: ; cursor = limit - v_3; } // delete, line 72 slice_del(); break; case 2: // (, line 74 // delete, line 74 slice_del(); // [, line 74 ket = cursor; // literal, line 74 if (!(eq_s_b(3, "kse"))) { return false; } // ], line 74 bra = cursor; // <-, line 74 slice_from("ksi"); break; case 3: // (, line 78 // delete, line 78 slice_del(); break; case 4: // (, line 81 // among, line 81 if (find_among_b(a_1, 6) == 0) { return false; } // delete, line 81 slice_del(); break; case 5: // (, line 83 // among, line 83 if (find_among_b(a_2, 6) == 0) { return false; } // delete, line 84 slice_del(); break; case 6: // (, line 86 // among, line 86 if (find_among_b(a_3, 2) == 0) { return false; } // delete, line 86 slice_del(); break; } return true; } private bool r_LONG() { // among, line 91 if (find_among_b(a_5, 7) == 0) { return false; } return true; } private bool r_VI() { // (, line 93 // literal, line 93 if (!(eq_s_b(1, "i"))) { return false; } if (!(in_grouping_b(g_V, 97, 246))) { return false; } return true; } private bool r_case() { int among_var; int v_1; int v_2; int v_3; int v_4; int v_5; // (, line 95 // setlimit, line 96 v_1 = limit - cursor; // tomark, line 96 if (cursor < I_p1) { return false; } cursor = I_p1; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 96 // [, line 96 ket = cursor; // substring, line 96 among_var = find_among_b(a_6, 30); if (among_var == 0) { limit_backward = v_2; return false; } // ], line 96 bra = cursor; limit_backward = v_2; switch (among_var) { case 0: return false; case 1: // (, line 98 // literal, line 98 if (!(eq_s_b(1, "a"))) { return false; } break; case 2: // (, line 99 // literal, line 99 if (!(eq_s_b(1, "e"))) { return false; } break; case 3: // (, line 100 // literal, line 100 if (!(eq_s_b(1, "i"))) { return false; } break; case 4: // (, line 101 // literal, line 101 if (!(eq_s_b(1, "o"))) { return false; } break; case 5: // (, line 102 // literal, line 102 if (!(eq_s_b(1, "\u00E4"))) { return false; } break; case 6: // (, line 103 // literal, line 103 if (!(eq_s_b(1, "\u00F6"))) { return false; } break; case 7: // (, line 111 // try, line 111 v_3 = limit - cursor; do { // (, line 111 // and, line 113 v_4 = limit - cursor; // or, line 112 do { v_5 = limit - cursor; do { // call LONG, line 111 if (!r_LONG()) { goto lab2_brk; } goto lab1_brk; } while (false); lab2_brk: ; cursor = limit - v_5; // literal, line 112 if (!(eq_s_b(2, "ie"))) { cursor = limit - v_3; goto lab0_brk; } } while (false); lab1_brk: ; cursor = limit - v_4; // next, line 113 if (cursor <= limit_backward) { cursor = limit - v_3; goto lab0_brk; } cursor--; // ], line 113 bra = cursor; } while (false); lab0_brk: ; break; case 8: // (, line 119 if (!(in_grouping_b(g_v, 97, 246))) { return false; } if (!(out_grouping_b(g_v, 97, 246))) { return false; } break; case 9: // (, line 121 // literal, line 121 if (!(eq_s_b(1, "e"))) { return false; } break; } // delete, line 138 slice_del(); // set ending_removed, line 139 B_ending_removed = true; return true; } private bool r_other_endings() { int among_var; int v_1; int v_2; int v_3; // (, line 141 // setlimit, line 142 v_1 = limit - cursor; // tomark, line 142 if (cursor < I_p2) { return false; } cursor = I_p2; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 142 // [, line 142 ket = cursor; // substring, line 142 among_var = find_among_b(a_7, 14); if (among_var == 0) { limit_backward = v_2; return false; } // ], line 142 bra = cursor; limit_backward = v_2; switch (among_var) { case 0: return false; case 1: // (, line 146 // not, line 146 { v_3 = limit - cursor; do { // literal, line 146 if (!(eq_s_b(2, "po"))) { goto lab4_brk; } return false; } while (false); lab4_brk: ; cursor = limit - v_3; } break; } // delete, line 151 slice_del(); return true; } private bool r_i_plural() { int v_1; int v_2; // (, line 153 // setlimit, line 154 v_1 = limit - cursor; // tomark, line 154 if (cursor < I_p1) { return false; } cursor = I_p1; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 154 // [, line 154 ket = cursor; // substring, line 154 if (find_among_b(a_8, 2) == 0) { limit_backward = v_2; return false; } // ], line 154 bra = cursor; limit_backward = v_2; // delete, line 158 slice_del(); return true; } private bool r_t_plural() { int among_var; int v_1; int v_2; int v_3; int v_4; int v_5; int v_6; // (, line 160 // setlimit, line 161 v_1 = limit - cursor; // tomark, line 161 if (cursor < I_p1) { return false; } cursor = I_p1; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 161 // [, line 162 ket = cursor; // literal, line 162 if (!(eq_s_b(1, "t"))) { limit_backward = v_2; return false; } // ], line 162 bra = cursor; // test, line 162 v_3 = limit - cursor; if (!(in_grouping_b(g_v, 97, 246))) { limit_backward = v_2; return false; } cursor = limit - v_3; // delete, line 163 slice_del(); limit_backward = v_2; // setlimit, line 165 v_4 = limit - cursor; // tomark, line 165 if (cursor < I_p2) { return false; } cursor = I_p2; v_5 = limit_backward; limit_backward = cursor; cursor = limit - v_4; // (, line 165 // [, line 165 ket = cursor; // substring, line 165 among_var = find_among_b(a_9, 2); if (among_var == 0) { limit_backward = v_5; return false; } // ], line 165 bra = cursor; limit_backward = v_5; switch (among_var) { case 0: return false; case 1: // (, line 167 // not, line 167 { v_6 = limit - cursor; do { // literal, line 167 if (!(eq_s_b(2, "po"))) { goto lab4_brk; } return false; } while (false); lab4_brk: ; cursor = limit - v_6; } break; } // delete, line 170 slice_del(); return true; } private bool r_tidy() { int v_1; int v_2; int v_3; int v_4; int v_5; int v_6; int v_7; int v_8; int v_9; // (, line 172 // setlimit, line 173 v_1 = limit - cursor; // tomark, line 173 if (cursor < I_p1) { return false; } cursor = I_p1; v_2 = limit_backward; limit_backward = cursor; cursor = limit - v_1; // (, line 173 // do, line 174 v_3 = limit - cursor; do { // (, line 174 // and, line 174 v_4 = limit - cursor; // call LONG, line 174 if (!r_LONG()) { goto lab0_brk; } cursor = limit - v_4; // (, line 174 // [, line 174 ket = cursor; // next, line 174 if (cursor <= limit_backward) { goto lab0_brk; } cursor--; // ], line 174 bra = cursor; // delete, line 174 slice_del(); } while (false); lab0_brk: ; cursor = limit - v_3; // do, line 175 v_5 = limit - cursor; do { // (, line 175 // [, line 175 ket = cursor; if (!(in_grouping_b(g_AEI, 97, 228))) { goto lab1_brk; } // ], line 175 bra = cursor; if (!(out_grouping_b(g_v, 97, 246))) { goto lab1_brk; } // delete, line 175 slice_del(); } while (false); lab1_brk: ; cursor = limit - v_5; // do, line 176 v_6 = limit - cursor; do { // (, line 176 // [, line 176 ket = cursor; // literal, line 176 if (!(eq_s_b(1, "j"))) { goto lab2_brk; } // ], line 176 bra = cursor; // or, line 176 do { v_7 = limit - cursor; do { // literal, line 176 if (!(eq_s_b(1, "o"))) { goto lab4_brk; } goto lab3_brk; } while (false); lab4_brk: ; cursor = limit - v_7; // literal, line 176 if (!(eq_s_b(1, "u"))) { goto lab2_brk; } } while (false); lab3_brk: ; // delete, line 176 slice_del(); } while (false); lab2_brk: ; cursor = limit - v_6; // do, line 177 v_8 = limit - cursor; do { // (, line 177 // [, line 177 ket = cursor; // literal, line 177 if (!(eq_s_b(1, "o"))) { goto lab5_brk; } // ], line 177 bra = cursor; // literal, line 177 if (!(eq_s_b(1, "j"))) { goto lab5_brk; } // delete, line 177 slice_del(); } while (false); lab5_brk: ; cursor = limit - v_8; limit_backward = v_2; // goto, line 179 while (true) { v_9 = limit - cursor; do { if (!(out_grouping_b(g_v, 97, 246))) { goto lab7_brk; } cursor = limit - v_9; goto golab6_brk; } while (false); lab7_brk: ; cursor = limit - v_9; if (cursor <= limit_backward) { return false; } cursor--; } golab6_brk: ; // [, line 179 ket = cursor; // next, line 179 if (cursor <= limit_backward) { return false; } cursor--; // ], line 179 bra = cursor; // -> x, line 179 S_x = slice_to(S_x); // name x, line 179 if (!(eq_v_b(S_x))) { return false; } // delete, line 179 slice_del(); return true; } public virtual bool Stem() { int v_1; int v_2; int v_3; int v_4; int v_5; int v_6; int v_7; int v_8; int v_9; // (, line 183 // do, line 185 v_1 = cursor; do { // call mark_regions, line 185 if (!r_mark_regions()) { goto lab0_brk; } } while (false); lab0_brk: ; cursor = v_1; // unset ending_removed, line 186 B_ending_removed = false; // backwards, line 187 limit_backward = cursor; cursor = limit; // (, line 187 // do, line 188 v_2 = limit - cursor; do { // call particle_etc, line 188 if (!r_particle_etc()) { goto lab1_brk; } } while (false); lab1_brk: ; cursor = limit - v_2; // do, line 189 v_3 = limit - cursor; do { // call possessive, line 189 if (!r_possessive()) { goto lab2_brk; } } while (false); lab2_brk: ; cursor = limit - v_3; // do, line 190 v_4 = limit - cursor; do { // call case, line 190 if (!r_case()) { goto lab3_brk; } } while (false); lab3_brk: ; cursor = limit - v_4; // do, line 191 v_5 = limit - cursor; do { // call other_endings, line 191 if (!r_other_endings()) { goto lab4_brk; } } while (false); lab4_brk: ; cursor = limit - v_5; // or, line 192 do { v_6 = limit - cursor; do { // (, line 192 // Boolean test ending_removed, line 192 if (!(B_ending_removed)) { goto lab6_brk; } // do, line 192 v_7 = limit - cursor; do { // call i_plural, line 192 if (!r_i_plural()) { goto lab7_brk; } } while (false); lab7_brk: ; cursor = limit - v_7; goto lab6_brk; } while (false); lab6_brk: ; cursor = limit - v_6; // do, line 192 v_8 = limit - cursor; do { // call t_plural, line 192 if (!r_t_plural()) { goto lab8_brk; } } while (false); lab8_brk: ; cursor = limit - v_8; } while (false); lab5_brk: ; // do, line 193 v_9 = limit - cursor; do { // call tidy, line 193 if (!r_tidy()) { goto lab9_brk; } } while (false); lab9_brk: ; cursor = limit - v_9; cursor = limit_backward; return true; } } }