languages/porter.cc

Go to the documentation of this file.
00001 /* This file was generated automatically by the Snowball to ISO C++ compiler */
00002 
00003 #include <limits.h>
00004 #include "porter.h"
00005 
00006 static const symbol s_0_0[1] = { 's' };
00007 static const symbol s_0_1[3] = { 'i', 'e', 's' };
00008 static const symbol s_0_2[4] = { 's', 's', 'e', 's' };
00009 static const symbol s_0_3[2] = { 's', 's' };
00010 
00011 static const struct among a_0[4] =
00012 {
00013 /*  0 */ { 1, s_0_0, -1, 3},
00014 /*  1 */ { 3, s_0_1, 0, 2},
00015 /*  2 */ { 4, s_0_2, 0, 1},
00016 /*  3 */ { 2, s_0_3, 0, -1}
00017 };
00018 
00019 static const symbol s_1_1[2] = { 'b', 'b' };
00020 static const symbol s_1_2[2] = { 'd', 'd' };
00021 static const symbol s_1_3[2] = { 'f', 'f' };
00022 static const symbol s_1_4[2] = { 'g', 'g' };
00023 static const symbol s_1_5[2] = { 'b', 'l' };
00024 static const symbol s_1_6[2] = { 'm', 'm' };
00025 static const symbol s_1_7[2] = { 'n', 'n' };
00026 static const symbol s_1_8[2] = { 'p', 'p' };
00027 static const symbol s_1_9[2] = { 'r', 'r' };
00028 static const symbol s_1_10[2] = { 'a', 't' };
00029 static const symbol s_1_11[2] = { 't', 't' };
00030 static const symbol s_1_12[2] = { 'i', 'z' };
00031 
00032 static const struct among a_1[13] =
00033 {
00034 /*  0 */ { 0, 0, -1, 3},
00035 /*  1 */ { 2, s_1_1, 0, 2},
00036 /*  2 */ { 2, s_1_2, 0, 2},
00037 /*  3 */ { 2, s_1_3, 0, 2},
00038 /*  4 */ { 2, s_1_4, 0, 2},
00039 /*  5 */ { 2, s_1_5, 0, 1},
00040 /*  6 */ { 2, s_1_6, 0, 2},
00041 /*  7 */ { 2, s_1_7, 0, 2},
00042 /*  8 */ { 2, s_1_8, 0, 2},
00043 /*  9 */ { 2, s_1_9, 0, 2},
00044 /* 10 */ { 2, s_1_10, 0, 1},
00045 /* 11 */ { 2, s_1_11, 0, 2},
00046 /* 12 */ { 2, s_1_12, 0, 1}
00047 };
00048 
00049 static const symbol s_2_0[2] = { 'e', 'd' };
00050 static const symbol s_2_1[3] = { 'e', 'e', 'd' };
00051 static const symbol s_2_2[3] = { 'i', 'n', 'g' };
00052 
00053 static const struct among a_2[3] =
00054 {
00055 /*  0 */ { 2, s_2_0, -1, 2},
00056 /*  1 */ { 3, s_2_1, 0, 1},
00057 /*  2 */ { 3, s_2_2, -1, 2}
00058 };
00059 
00060 static const symbol s_3_0[4] = { 'a', 'n', 'c', 'i' };
00061 static const symbol s_3_1[4] = { 'e', 'n', 'c', 'i' };
00062 static const symbol s_3_2[4] = { 'a', 'b', 'l', 'i' };
00063 static const symbol s_3_3[3] = { 'e', 'l', 'i' };
00064 static const symbol s_3_4[4] = { 'a', 'l', 'l', 'i' };
00065 static const symbol s_3_5[5] = { 'o', 'u', 's', 'l', 'i' };
00066 static const symbol s_3_6[5] = { 'e', 'n', 't', 'l', 'i' };
00067 static const symbol s_3_7[5] = { 'a', 'l', 'i', 't', 'i' };
00068 static const symbol s_3_8[6] = { 'b', 'i', 'l', 'i', 't', 'i' };
00069 static const symbol s_3_9[5] = { 'i', 'v', 'i', 't', 'i' };
00070 static const symbol s_3_10[6] = { 't', 'i', 'o', 'n', 'a', 'l' };
00071 static const symbol s_3_11[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' };
00072 static const symbol s_3_12[5] = { 'a', 'l', 'i', 's', 'm' };
00073 static const symbol s_3_13[5] = { 'a', 't', 'i', 'o', 'n' };
00074 static const symbol s_3_14[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' };
00075 static const symbol s_3_15[4] = { 'i', 'z', 'e', 'r' };
00076 static const symbol s_3_16[4] = { 'a', 't', 'o', 'r' };
00077 static const symbol s_3_17[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' };
00078 static const symbol s_3_18[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' };
00079 static const symbol s_3_19[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' };
00080 
00081 static const struct among a_3[20] =
00082 {
00083 /*  0 */ { 4, s_3_0, -1, 3},
00084 /*  1 */ { 4, s_3_1, -1, 2},
00085 /*  2 */ { 4, s_3_2, -1, 4},
00086 /*  3 */ { 3, s_3_3, -1, 6},
00087 /*  4 */ { 4, s_3_4, -1, 9},
00088 /*  5 */ { 5, s_3_5, -1, 12},
00089 /*  6 */ { 5, s_3_6, -1, 5},
00090 /*  7 */ { 5, s_3_7, -1, 10},
00091 /*  8 */ { 6, s_3_8, -1, 14},
00092 /*  9 */ { 5, s_3_9, -1, 13},
00093 /* 10 */ { 6, s_3_10, -1, 1},
00094 /* 11 */ { 7, s_3_11, 10, 8},
00095 /* 12 */ { 5, s_3_12, -1, 10},
00096 /* 13 */ { 5, s_3_13, -1, 8},
00097 /* 14 */ { 7, s_3_14, 13, 7},
00098 /* 15 */ { 4, s_3_15, -1, 7},
00099 /* 16 */ { 4, s_3_16, -1, 8},
00100 /* 17 */ { 7, s_3_17, -1, 13},
00101 /* 18 */ { 7, s_3_18, -1, 11},
00102 /* 19 */ { 7, s_3_19, -1, 12}
00103 };
00104 
00105 static const symbol s_4_0[5] = { 'i', 'c', 'a', 't', 'e' };
00106 static const symbol s_4_1[5] = { 'a', 't', 'i', 'v', 'e' };
00107 static const symbol s_4_2[5] = { 'a', 'l', 'i', 'z', 'e' };
00108 static const symbol s_4_3[5] = { 'i', 'c', 'i', 't', 'i' };
00109 static const symbol s_4_4[4] = { 'i', 'c', 'a', 'l' };
00110 static const symbol s_4_5[3] = { 'f', 'u', 'l' };
00111 static const symbol s_4_6[4] = { 'n', 'e', 's', 's' };
00112 
00113 static const struct among a_4[7] =
00114 {
00115 /*  0 */ { 5, s_4_0, -1, 2},
00116 /*  1 */ { 5, s_4_1, -1, 3},
00117 /*  2 */ { 5, s_4_2, -1, 1},
00118 /*  3 */ { 5, s_4_3, -1, 2},
00119 /*  4 */ { 4, s_4_4, -1, 2},
00120 /*  5 */ { 3, s_4_5, -1, 3},
00121 /*  6 */ { 4, s_4_6, -1, 3}
00122 };
00123 
00124 static const symbol s_5_0[2] = { 'i', 'c' };
00125 static const symbol s_5_1[4] = { 'a', 'n', 'c', 'e' };
00126 static const symbol s_5_2[4] = { 'e', 'n', 'c', 'e' };
00127 static const symbol s_5_3[4] = { 'a', 'b', 'l', 'e' };
00128 static const symbol s_5_4[4] = { 'i', 'b', 'l', 'e' };
00129 static const symbol s_5_5[3] = { 'a', 't', 'e' };
00130 static const symbol s_5_6[3] = { 'i', 'v', 'e' };
00131 static const symbol s_5_7[3] = { 'i', 'z', 'e' };
00132 static const symbol s_5_8[3] = { 'i', 't', 'i' };
00133 static const symbol s_5_9[2] = { 'a', 'l' };
00134 static const symbol s_5_10[3] = { 'i', 's', 'm' };
00135 static const symbol s_5_11[3] = { 'i', 'o', 'n' };
00136 static const symbol s_5_12[2] = { 'e', 'r' };
00137 static const symbol s_5_13[3] = { 'o', 'u', 's' };
00138 static const symbol s_5_14[3] = { 'a', 'n', 't' };
00139 static const symbol s_5_15[3] = { 'e', 'n', 't' };
00140 static const symbol s_5_16[4] = { 'm', 'e', 'n', 't' };
00141 static const symbol s_5_17[5] = { 'e', 'm', 'e', 'n', 't' };
00142 static const symbol s_5_18[2] = { 'o', 'u' };
00143 
00144 static const struct among a_5[19] =
00145 {
00146 /*  0 */ { 2, s_5_0, -1, 1},
00147 /*  1 */ { 4, s_5_1, -1, 1},
00148 /*  2 */ { 4, s_5_2, -1, 1},
00149 /*  3 */ { 4, s_5_3, -1, 1},
00150 /*  4 */ { 4, s_5_4, -1, 1},
00151 /*  5 */ { 3, s_5_5, -1, 1},
00152 /*  6 */ { 3, s_5_6, -1, 1},
00153 /*  7 */ { 3, s_5_7, -1, 1},
00154 /*  8 */ { 3, s_5_8, -1, 1},
00155 /*  9 */ { 2, s_5_9, -1, 1},
00156 /* 10 */ { 3, s_5_10, -1, 1},
00157 /* 11 */ { 3, s_5_11, -1, 2},
00158 /* 12 */ { 2, s_5_12, -1, 1},
00159 /* 13 */ { 3, s_5_13, -1, 1},
00160 /* 14 */ { 3, s_5_14, -1, 1},
00161 /* 15 */ { 3, s_5_15, -1, 1},
00162 /* 16 */ { 4, s_5_16, 15, 1},
00163 /* 17 */ { 5, s_5_17, 16, 1},
00164 /* 18 */ { 2, s_5_18, -1, 1}
00165 };
00166 
00167 static const unsigned char g_v[] = { 17, 65, 16, 1 };
00168 
00169 static const unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 };
00170 
00171 static const symbol s_0[] = { 's', 's' };
00172 static const symbol s_1[] = { 'i' };
00173 static const symbol s_2[] = { 'e', 'e' };
00174 static const symbol s_3[] = { 'e' };
00175 static const symbol s_4[] = { 'e' };
00176 static const symbol s_5[] = { 'i' };
00177 static const symbol s_6[] = { 't', 'i', 'o', 'n' };
00178 static const symbol s_7[] = { 'e', 'n', 'c', 'e' };
00179 static const symbol s_8[] = { 'a', 'n', 'c', 'e' };
00180 static const symbol s_9[] = { 'a', 'b', 'l', 'e' };
00181 static const symbol s_10[] = { 'e', 'n', 't' };
00182 static const symbol s_11[] = { 'e' };
00183 static const symbol s_12[] = { 'i', 'z', 'e' };
00184 static const symbol s_13[] = { 'a', 't', 'e' };
00185 static const symbol s_14[] = { 'a', 'l' };
00186 static const symbol s_15[] = { 'a', 'l' };
00187 static const symbol s_16[] = { 'f', 'u', 'l' };
00188 static const symbol s_17[] = { 'o', 'u', 's' };
00189 static const symbol s_18[] = { 'i', 'v', 'e' };
00190 static const symbol s_19[] = { 'b', 'l', 'e' };
00191 static const symbol s_20[] = { 'a', 'l' };
00192 static const symbol s_21[] = { 'i', 'c' };
00193 static const symbol s_22[] = { 'Y' };
00194 static const symbol s_23[] = { 'Y' };
00195 static const symbol s_24[] = { 'y' };
00196 
00197 int Xapian::InternalStemPorter::r_shortv() { /* backwardmode */
00198     if (out_grouping_b_U(g_v_WXY, 89, 121, 0)) return 0; /* non v_WXY, line 19 */
00199     if (in_grouping_b_U(g_v, 97, 121, 0)) return 0; /* grouping v, line 19 */
00200     if (out_grouping_b_U(g_v, 97, 121, 0)) return 0; /* non v, line 19 */
00201     return 1;
00202 }
00203 
00204 int Xapian::InternalStemPorter::r_R1() { /* backwardmode */
00205     if (!(I_p1 <= c)) return 0; /* p1 <= <integer expression>, line 21 */
00206     return 1;
00207 }
00208 
00209 int Xapian::InternalStemPorter::r_R2() { /* backwardmode */
00210     if (!(I_p2 <= c)) return 0; /* p2 <= <integer expression>, line 22 */
00211     return 1;
00212 }
00213 
00214 int Xapian::InternalStemPorter::r_Step_1a() { /* backwardmode */
00215     int among_var;
00216     ket = c; /* [, line 25 */
00217     if (c <= lb || p[c - 1] != 115) return 0; /* substring, line 25 */
00218     among_var = find_among_b(a_0, 4, 0, 0);
00219     if (!(among_var)) return 0;
00220     bra = c; /* ], line 25 */
00221     switch(among_var) { /* among, line 25 */
00222         case 0: return 0;
00223         case 1:
00224             {   int ret = slice_from_s(2, s_0); /* <-, line 26 */
00225                 if (ret < 0) return ret;
00226             }
00227             break;
00228         case 2:
00229             {   int ret = slice_from_s(1, s_1); /* <-, line 27 */
00230                 if (ret < 0) return ret;
00231             }
00232             break;
00233         case 3:
00234             if (slice_del() == -1) return -1; /* delete, line 29 */
00235             break;
00236     }
00237     return 1;
00238 }
00239 
00240 int Xapian::InternalStemPorter::r_Step_1b() { /* backwardmode */
00241     int among_var;
00242     ket = c; /* [, line 34 */
00243     if (c - 1 <= lb || (p[c - 1] != 100 && p[c - 1] != 103)) return 0; /* substring, line 34 */
00244     among_var = find_among_b(a_2, 3, 0, 0);
00245     if (!(among_var)) return 0;
00246     bra = c; /* ], line 34 */
00247     switch(among_var) { /* among, line 34 */
00248         case 0: return 0;
00249         case 1:
00250             {   int ret = r_R1(); /* call R1, line 35 */
00251                 if (ret <= 0) return ret;
00252             }
00253             {   int ret = slice_from_s(2, s_2); /* <-, line 35 */
00254                 if (ret < 0) return ret;
00255             }
00256             break;
00257         case 2:
00258             {   int m_test1 = l - c; /* test, line 38 */
00259                 {   int ret = out_grouping_b_U(g_v, 97, 121, 1); /* gopast */ /* grouping v, line 38 */
00260                     if (ret < 0) return 0;
00261                     c -= ret;
00262                 }
00263                 c = l - m_test1;
00264             }
00265             if (slice_del() == -1) return -1; /* delete, line 38 */
00266             {   int m_test2 = l - c; /* test, line 39 */
00267                 if (c - 1 <= lb || p[c - 1] >> 5 != 3 || !((68514004 >> (p[c - 1] & 0x1f)) & 1)) among_var = 3; else /* substring, line 39 */
00268                 among_var = find_among_b(a_1, 13, 0, 0);
00269                 if (!(among_var)) return 0;
00270                 c = l - m_test2;
00271             }
00272             switch(among_var) { /* among, line 39 */
00273                 case 0: return 0;
00274                 case 1:
00275                     {   int saved_c = c;
00276                         insert_s(c, c, 1, s_3); /* <+, line 41 */
00277                         c = saved_c;
00278                     }
00279                     break;
00280                 case 2:
00281                     ket = c; /* [, line 44 */
00282                     {   int ret = skip_utf8(p, c, lb, 0, -1);
00283                         if (ret < 0) return 0;
00284                         c = ret; /* next, line 44 */
00285                     }
00286                     bra = c; /* ], line 44 */
00287                     if (slice_del() == -1) return -1; /* delete, line 44 */
00288                     break;
00289                 case 3:
00290                     if (c != I_p1) return 0; /* atmark, line 45 */
00291                     {   int m_test3 = l - c; /* test, line 45 */
00292                         {   int ret = r_shortv(); /* call shortv, line 45 */
00293                             if (ret <= 0) return ret;
00294                         }
00295                         c = l - m_test3;
00296                     }
00297                     {   int saved_c = c;
00298                         insert_s(c, c, 1, s_4); /* <+, line 45 */
00299                         c = saved_c;
00300                     }
00301                     break;
00302             }
00303             break;
00304     }
00305     return 1;
00306 }
00307 
00308 int Xapian::InternalStemPorter::r_Step_1c() { /* backwardmode */
00309     ket = c; /* [, line 52 */
00310     {   int m1 = l - c; (void)m1; /* or, line 52 */
00311         if (c <= lb || p[c - 1] != 'y') goto lab1;
00312         c--;
00313         goto lab0;
00314     lab1:
00315         c = l - m1;
00316         if (c <= lb || p[c - 1] != 'Y') return 0;
00317         c--;
00318     }
00319 lab0:
00320     bra = c; /* ], line 52 */
00321     {   int ret = out_grouping_b_U(g_v, 97, 121, 1); /* gopast */ /* grouping v, line 53 */
00322         if (ret < 0) return 0;
00323         c -= ret;
00324     }
00325     {   int ret = slice_from_s(1, s_5); /* <-, line 54 */
00326         if (ret < 0) return ret;
00327     }
00328     return 1;
00329 }
00330 
00331 int Xapian::InternalStemPorter::r_Step_2() { /* backwardmode */
00332     int among_var;
00333     ket = c; /* [, line 58 */
00334     if (c - 2 <= lb || p[c - 1] >> 5 != 3 || !((815616 >> (p[c - 1] & 0x1f)) & 1)) return 0; /* substring, line 58 */
00335     among_var = find_among_b(a_3, 20, 0, 0);
00336     if (!(among_var)) return 0;
00337     bra = c; /* ], line 58 */
00338     {   int ret = r_R1(); /* call R1, line 58 */
00339         if (ret <= 0) return ret;
00340     }
00341     switch(among_var) { /* among, line 58 */
00342         case 0: return 0;
00343         case 1:
00344             {   int ret = slice_from_s(4, s_6); /* <-, line 59 */
00345                 if (ret < 0) return ret;
00346             }
00347             break;
00348         case 2:
00349             {   int ret = slice_from_s(4, s_7); /* <-, line 60 */
00350                 if (ret < 0) return ret;
00351             }
00352             break;
00353         case 3:
00354             {   int ret = slice_from_s(4, s_8); /* <-, line 61 */
00355                 if (ret < 0) return ret;
00356             }
00357             break;
00358         case 4:
00359             {   int ret = slice_from_s(4, s_9); /* <-, line 62 */
00360                 if (ret < 0) return ret;
00361             }
00362             break;
00363         case 5:
00364             {   int ret = slice_from_s(3, s_10); /* <-, line 63 */
00365                 if (ret < 0) return ret;
00366             }
00367             break;
00368         case 6:
00369             {   int ret = slice_from_s(1, s_11); /* <-, line 64 */
00370                 if (ret < 0) return ret;
00371             }
00372             break;
00373         case 7:
00374             {   int ret = slice_from_s(3, s_12); /* <-, line 66 */
00375                 if (ret < 0) return ret;
00376             }
00377             break;
00378         case 8:
00379             {   int ret = slice_from_s(3, s_13); /* <-, line 68 */
00380                 if (ret < 0) return ret;
00381             }
00382             break;
00383         case 9:
00384             {   int ret = slice_from_s(2, s_14); /* <-, line 69 */
00385                 if (ret < 0) return ret;
00386             }
00387             break;
00388         case 10:
00389             {   int ret = slice_from_s(2, s_15); /* <-, line 71 */
00390                 if (ret < 0) return ret;
00391             }
00392             break;
00393         case 11:
00394             {   int ret = slice_from_s(3, s_16); /* <-, line 72 */
00395                 if (ret < 0) return ret;
00396             }
00397             break;
00398         case 12:
00399             {   int ret = slice_from_s(3, s_17); /* <-, line 74 */
00400                 if (ret < 0) return ret;
00401             }
00402             break;
00403         case 13:
00404             {   int ret = slice_from_s(3, s_18); /* <-, line 76 */
00405                 if (ret < 0) return ret;
00406             }
00407             break;
00408         case 14:
00409             {   int ret = slice_from_s(3, s_19); /* <-, line 77 */
00410                 if (ret < 0) return ret;
00411             }
00412             break;
00413     }
00414     return 1;
00415 }
00416 
00417 int Xapian::InternalStemPorter::r_Step_3() { /* backwardmode */
00418     int among_var;
00419     ket = c; /* [, line 82 */
00420     if (c - 2 <= lb || p[c - 1] >> 5 != 3 || !((528928 >> (p[c - 1] & 0x1f)) & 1)) return 0; /* substring, line 82 */
00421     among_var = find_among_b(a_4, 7, 0, 0);
00422     if (!(among_var)) return 0;
00423     bra = c; /* ], line 82 */
00424     {   int ret = r_R1(); /* call R1, line 82 */
00425         if (ret <= 0) return ret;
00426     }
00427     switch(among_var) { /* among, line 82 */
00428         case 0: return 0;
00429         case 1:
00430             {   int ret = slice_from_s(2, s_20); /* <-, line 83 */
00431                 if (ret < 0) return ret;
00432             }
00433             break;
00434         case 2:
00435             {   int ret = slice_from_s(2, s_21); /* <-, line 85 */
00436                 if (ret < 0) return ret;
00437             }
00438             break;
00439         case 3:
00440             if (slice_del() == -1) return -1; /* delete, line 87 */
00441             break;
00442     }
00443     return 1;
00444 }
00445 
00446 int Xapian::InternalStemPorter::r_Step_4() { /* backwardmode */
00447     int among_var;
00448     ket = c; /* [, line 92 */
00449     if (c - 1 <= lb || p[c - 1] >> 5 != 3 || !((3961384 >> (p[c - 1] & 0x1f)) & 1)) return 0; /* substring, line 92 */
00450     among_var = find_among_b(a_5, 19, 0, 0);
00451     if (!(among_var)) return 0;
00452     bra = c; /* ], line 92 */
00453     {   int ret = r_R2(); /* call R2, line 92 */
00454         if (ret <= 0) return ret;
00455     }
00456     switch(among_var) { /* among, line 92 */
00457         case 0: return 0;
00458         case 1:
00459             if (slice_del() == -1) return -1; /* delete, line 95 */
00460             break;
00461         case 2:
00462             {   int m1 = l - c; (void)m1; /* or, line 96 */
00463                 if (c <= lb || p[c - 1] != 's') goto lab1;
00464                 c--;
00465                 goto lab0;
00466             lab1:
00467                 c = l - m1;
00468                 if (c <= lb || p[c - 1] != 't') return 0;
00469                 c--;
00470             }
00471         lab0:
00472             if (slice_del() == -1) return -1; /* delete, line 96 */
00473             break;
00474     }
00475     return 1;
00476 }
00477 
00478 int Xapian::InternalStemPorter::r_Step_5a() { /* backwardmode */
00479     ket = c; /* [, line 101 */
00480     if (c <= lb || p[c - 1] != 'e') return 0;
00481     c--;
00482     bra = c; /* ], line 101 */
00483     {   int m1 = l - c; (void)m1; /* or, line 102 */
00484         {   int ret = r_R2(); /* call R2, line 102 */
00485             if (ret == 0) goto lab1;
00486             if (ret < 0) return ret;
00487         }
00488         goto lab0;
00489     lab1:
00490         c = l - m1;
00491         {   int ret = r_R1(); /* call R1, line 102 */
00492             if (ret <= 0) return ret;
00493         }
00494         {   int m2 = l - c; (void)m2; /* not, line 102 */
00495             {   int ret = r_shortv(); /* call shortv, line 102 */
00496                 if (ret == 0) goto lab2;
00497                 if (ret < 0) return ret;
00498             }
00499             return 0;
00500         lab2:
00501             c = l - m2;
00502         }
00503     }
00504 lab0:
00505     if (slice_del() == -1) return -1; /* delete, line 103 */
00506     return 1;
00507 }
00508 
00509 int Xapian::InternalStemPorter::r_Step_5b() { /* backwardmode */
00510     ket = c; /* [, line 107 */
00511     if (c <= lb || p[c - 1] != 'l') return 0;
00512     c--;
00513     bra = c; /* ], line 107 */
00514     {   int ret = r_R2(); /* call R2, line 108 */
00515         if (ret <= 0) return ret;
00516     }
00517     if (c <= lb || p[c - 1] != 'l') return 0;
00518     c--;
00519     if (slice_del() == -1) return -1; /* delete, line 109 */
00520     return 1;
00521 }
00522 
00523 int Xapian::InternalStemPorter::stem() { /* forwardmode */
00524     B_Y_found = 0; /* unset Y_found, line 115 */
00525     {   int c1 = c; /* do, line 116 */
00526         bra = c; /* [, line 116 */
00527         if (c == l || p[c] != 'y') goto lab0;
00528         c++;
00529         ket = c; /* ], line 116 */
00530         {   int ret = slice_from_s(1, s_22); /* <-, line 116 */
00531             if (ret < 0) return ret;
00532         }
00533         B_Y_found = 1; /* set Y_found, line 116 */
00534     lab0:
00535         c = c1;
00536     }
00537     {   int c2 = c; /* do, line 117 */
00538         while(1) { /* repeat, line 117 */
00539             int c3 = c;
00540             while(1) { /* goto, line 117 */
00541                 int c4 = c;
00542                 if (in_grouping_U(g_v, 97, 121, 0)) goto lab3; /* grouping v, line 117 */
00543                 bra = c; /* [, line 117 */
00544                 if (c == l || p[c] != 'y') goto lab3;
00545                 c++;
00546                 ket = c; /* ], line 117 */
00547                 c = c4;
00548                 break;
00549             lab3:
00550                 c = c4;
00551                 {   int ret = skip_utf8(p, c, 0, l, 1);
00552                     if (ret < 0) goto lab2;
00553                     c = ret; /* goto, line 117 */
00554                 }
00555             }
00556             {   int ret = slice_from_s(1, s_23); /* <-, line 117 */
00557                 if (ret < 0) return ret;
00558             }
00559             B_Y_found = 1; /* set Y_found, line 117 */
00560             continue;
00561         lab2:
00562             c = c3;
00563             break;
00564         }
00565         c = c2;
00566     }
00567     I_p1 = l; /* p1 = <integer expression>, line 119 */
00568     I_p2 = l; /* p2 = <integer expression>, line 120 */
00569     {   int c5 = c; /* do, line 121 */
00570         {   int ret = out_grouping_U(g_v, 97, 121, 1); /* gopast */ /* grouping v, line 122 */
00571             if (ret < 0) goto lab4;
00572             c += ret;
00573         }
00574         {   int ret = in_grouping_U(g_v, 97, 121, 1); /* gopast */ /* non v, line 122 */
00575             if (ret < 0) goto lab4;
00576             c += ret;
00577         }
00578         I_p1 = c; /* setmark p1, line 122 */
00579         {   int ret = out_grouping_U(g_v, 97, 121, 1); /* gopast */ /* grouping v, line 123 */
00580             if (ret < 0) goto lab4;
00581             c += ret;
00582         }
00583         {   int ret = in_grouping_U(g_v, 97, 121, 1); /* gopast */ /* non v, line 123 */
00584             if (ret < 0) goto lab4;
00585             c += ret;
00586         }
00587         I_p2 = c; /* setmark p2, line 123 */
00588     lab4:
00589         c = c5;
00590     }
00591     lb = c; c = l; /* backwards, line 126 */
00592 
00593     {   int m6 = l - c; (void)m6; /* do, line 127 */
00594         {   int ret = r_Step_1a(); /* call Step_1a, line 127 */
00595             if (ret == 0) goto lab5;
00596             if (ret < 0) return ret;
00597         }
00598     lab5:
00599         c = l - m6;
00600     }
00601     {   int m7 = l - c; (void)m7; /* do, line 128 */
00602         {   int ret = r_Step_1b(); /* call Step_1b, line 128 */
00603             if (ret == 0) goto lab6;
00604             if (ret < 0) return ret;
00605         }
00606     lab6:
00607         c = l - m7;
00608     }
00609     {   int m8 = l - c; (void)m8; /* do, line 129 */
00610         {   int ret = r_Step_1c(); /* call Step_1c, line 129 */
00611             if (ret == 0) goto lab7;
00612             if (ret < 0) return ret;
00613         }
00614     lab7:
00615         c = l - m8;
00616     }
00617     {   int m9 = l - c; (void)m9; /* do, line 130 */
00618         {   int ret = r_Step_2(); /* call Step_2, line 130 */
00619             if (ret == 0) goto lab8;
00620             if (ret < 0) return ret;
00621         }
00622     lab8:
00623         c = l - m9;
00624     }
00625     {   int m10 = l - c; (void)m10; /* do, line 131 */
00626         {   int ret = r_Step_3(); /* call Step_3, line 131 */
00627             if (ret == 0) goto lab9;
00628             if (ret < 0) return ret;
00629         }
00630     lab9:
00631         c = l - m10;
00632     }
00633     {   int m11 = l - c; (void)m11; /* do, line 132 */
00634         {   int ret = r_Step_4(); /* call Step_4, line 132 */
00635             if (ret == 0) goto lab10;
00636             if (ret < 0) return ret;
00637         }
00638     lab10:
00639         c = l - m11;
00640     }
00641     {   int m12 = l - c; (void)m12; /* do, line 133 */
00642         {   int ret = r_Step_5a(); /* call Step_5a, line 133 */
00643             if (ret == 0) goto lab11;
00644             if (ret < 0) return ret;
00645         }
00646     lab11:
00647         c = l - m12;
00648     }
00649     {   int m13 = l - c; (void)m13; /* do, line 134 */
00650         {   int ret = r_Step_5b(); /* call Step_5b, line 134 */
00651             if (ret == 0) goto lab12;
00652             if (ret < 0) return ret;
00653         }
00654     lab12:
00655         c = l - m13;
00656     }
00657     c = lb;
00658     {   int c14 = c; /* do, line 137 */
00659         if (!(B_Y_found)) goto lab13; /* Boolean test Y_found, line 137 */
00660         while(1) { /* repeat, line 137 */
00661             int c15 = c;
00662             while(1) { /* goto, line 137 */
00663                 int c16 = c;
00664                 bra = c; /* [, line 137 */
00665                 if (c == l || p[c] != 'Y') goto lab15;
00666                 c++;
00667                 ket = c; /* ], line 137 */
00668                 c = c16;
00669                 break;
00670             lab15:
00671                 c = c16;
00672                 {   int ret = skip_utf8(p, c, 0, l, 1);
00673                     if (ret < 0) goto lab14;
00674                     c = ret; /* goto, line 137 */
00675                 }
00676             }
00677             {   int ret = slice_from_s(1, s_24); /* <-, line 137 */
00678                 if (ret < 0) return ret;
00679             }
00680             continue;
00681         lab14:
00682             c = c15;
00683             break;
00684         }
00685     lab13:
00686         c = c14;
00687     }
00688     return 1;
00689 }
00690 
00691 Xapian::InternalStemPorter::InternalStemPorter()
00692     : B_Y_found(0), I_p2(0), I_p1(0)
00693 {
00694 }
00695 
00696 Xapian::InternalStemPorter::~InternalStemPorter()
00697 {
00698 }
00699 
00700 const char *
00701 Xapian::InternalStemPorter::get_description() const
00702 {
00703     return "porter";
00704 }

Documentation for Xapian (version 1.0.10).
Generated on 24 Dec 2008 by Doxygen 1.5.2.