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

Documentation for Xapian (version 1.0.20).
Generated on 28 Apr 2010 by Doxygen 1.5.2.