languages/german2.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 "german2.h"
00005 
00006 static const symbol s_pool[] = {
00007 #define s_0_1 0
00008 'a', 'e',
00009 #define s_0_2 2
00010 'o', 'e',
00011 #define s_0_3 4
00012 'q', 'u',
00013 #define s_0_4 6
00014 'u', 'e',
00015 #define s_0_5 8
00016 0xC3, 0x9F,
00017 #define s_1_1 10
00018 'U',
00019 #define s_1_2 11
00020 'Y',
00021 #define s_1_3 12
00022 0xC3, 0xA4,
00023 #define s_1_4 14
00024 0xC3, 0xB6,
00025 #define s_1_5 16
00026 0xC3, 0xBC,
00027 #define s_2_0 18
00028 'e',
00029 #define s_2_1 19
00030 'e', 'm',
00031 #define s_2_2 21
00032 'e', 'n',
00033 #define s_2_3 23
00034 'e', 'r', 'n',
00035 #define s_2_4 26
00036 'e', 'r',
00037 #define s_2_5 28
00038 's',
00039 #define s_2_6 29
00040 'e', 's',
00041 #define s_3_0 31
00042 'e', 'n',
00043 #define s_3_1 33
00044 'e', 'r',
00045 #define s_3_2 35
00046 's', 't',
00047 #define s_3_3 37
00048 'e', 's', 't',
00049 #define s_4_0 40
00050 'i', 'g',
00051 #define s_4_1 42
00052 'l', 'i', 'c', 'h',
00053 #define s_5_0 46
00054 'e', 'n', 'd',
00055 #define s_5_1 49
00056 'i', 'g',
00057 #define s_5_2 51
00058 'u', 'n', 'g',
00059 #define s_5_3 54
00060 'l', 'i', 'c', 'h',
00061 #define s_5_4 58
00062 'i', 's', 'c', 'h',
00063 #define s_5_5 62
00064 'i', 'k',
00065 #define s_5_6 64
00066 'h', 'e', 'i', 't',
00067 #define s_5_7 68
00068 'k', 'e', 'i', 't',
00069 };
00070 
00071 
00072 static const struct among a_0[6] =
00073 {
00074 /*  0 */ { 0, 0, -1, 6},
00075 /*  1 */ { 2, s_0_1, 0, 2},
00076 /*  2 */ { 2, s_0_2, 0, 3},
00077 /*  3 */ { 2, s_0_3, 0, 5},
00078 /*  4 */ { 2, s_0_4, 0, 4},
00079 /*  5 */ { 2, s_0_5, 0, 1}
00080 };
00081 
00082 
00083 static const struct among a_1[6] =
00084 {
00085 /*  0 */ { 0, 0, -1, 6},
00086 /*  1 */ { 1, s_1_1, 0, 2},
00087 /*  2 */ { 1, s_1_2, 0, 1},
00088 /*  3 */ { 2, s_1_3, 0, 3},
00089 /*  4 */ { 2, s_1_4, 0, 4},
00090 /*  5 */ { 2, s_1_5, 0, 5}
00091 };
00092 
00093 
00094 static const struct among a_2[7] =
00095 {
00096 /*  0 */ { 1, s_2_0, -1, 1},
00097 /*  1 */ { 2, s_2_1, -1, 1},
00098 /*  2 */ { 2, s_2_2, -1, 1},
00099 /*  3 */ { 3, s_2_3, -1, 1},
00100 /*  4 */ { 2, s_2_4, -1, 1},
00101 /*  5 */ { 1, s_2_5, -1, 2},
00102 /*  6 */ { 2, s_2_6, 5, 1}
00103 };
00104 
00105 
00106 static const struct among a_3[4] =
00107 {
00108 /*  0 */ { 2, s_3_0, -1, 1},
00109 /*  1 */ { 2, s_3_1, -1, 1},
00110 /*  2 */ { 2, s_3_2, -1, 2},
00111 /*  3 */ { 3, s_3_3, 2, 1}
00112 };
00113 
00114 
00115 static const struct among a_4[2] =
00116 {
00117 /*  0 */ { 2, s_4_0, -1, 1},
00118 /*  1 */ { 4, s_4_1, -1, 1}
00119 };
00120 
00121 
00122 static const struct among a_5[8] =
00123 {
00124 /*  0 */ { 3, s_5_0, -1, 1},
00125 /*  1 */ { 2, s_5_1, -1, 2},
00126 /*  2 */ { 3, s_5_2, -1, 1},
00127 /*  3 */ { 4, s_5_3, -1, 3},
00128 /*  4 */ { 4, s_5_4, -1, 2},
00129 /*  5 */ { 2, s_5_5, -1, 2},
00130 /*  6 */ { 4, s_5_6, -1, 3},
00131 /*  7 */ { 4, s_5_7, -1, 4}
00132 };
00133 
00134 static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8 };
00135 
00136 static const unsigned char g_s_ending[] = { 117, 30, 5 };
00137 
00138 static const unsigned char g_st_ending[] = { 117, 30, 4 };
00139 
00140 static const symbol s_0[] = { 'U' };
00141 static const symbol s_1[] = { 'Y' };
00142 static const symbol s_2[] = { 's', 's' };
00143 static const symbol s_3[] = { 0xC3, 0xA4 };
00144 static const symbol s_4[] = { 0xC3, 0xB6 };
00145 static const symbol s_5[] = { 0xC3, 0xBC };
00146 static const symbol s_6[] = { 'y' };
00147 static const symbol s_7[] = { 'u' };
00148 static const symbol s_8[] = { 'a' };
00149 static const symbol s_9[] = { 'o' };
00150 static const symbol s_10[] = { 'u' };
00151 static const symbol s_11[] = { 'i', 'g' };
00152 static const symbol s_12[] = { 'e', 'r' };
00153 static const symbol s_13[] = { 'e', 'n' };
00154 
00155 int Xapian::InternalStemGerman2::r_prelude() { /* forwardmode */
00156     int among_var;
00157     {   int c_test1 = c; /* test, line 30 */
00158         while(1) { /* repeat, line 30 */
00159             int c2 = c;
00160             while(1) { /* goto, line 30 */
00161                 int c3 = c;
00162                 if (in_grouping_U(g_v, 97, 252, 0)) goto lab1; /* grouping v, line 31 */
00163                 bra = c; /* [, line 31 */
00164                 {   int c4 = c; /* or, line 31 */
00165                     if (c == l || p[c] != 'u') goto lab3;
00166                     c++;
00167                     ket = c; /* ], line 31 */
00168                     if (in_grouping_U(g_v, 97, 252, 0)) goto lab3; /* grouping v, line 31 */
00169                     {   int ret = slice_from_s(1, s_0); /* <-, line 31 */
00170                         if (ret < 0) return ret;
00171                     }
00172                     goto lab2;
00173                 lab3:
00174                     c = c4;
00175                     if (c == l || p[c] != 'y') goto lab1;
00176                     c++;
00177                     ket = c; /* ], line 32 */
00178                     if (in_grouping_U(g_v, 97, 252, 0)) goto lab1; /* grouping v, line 32 */
00179                     {   int ret = slice_from_s(1, s_1); /* <-, line 32 */
00180                         if (ret < 0) return ret;
00181                     }
00182                 }
00183             lab2:
00184                 c = c3;
00185                 break;
00186             lab1:
00187                 c = c3;
00188                 {   int ret = skip_utf8(p, c, 0, l, 1);
00189                     if (ret < 0) goto lab0;
00190                     c = ret; /* goto, line 30 */
00191                 }
00192             }
00193             continue;
00194         lab0:
00195             c = c2;
00196             break;
00197         }
00198         c = c_test1;
00199     }
00200     while(1) { /* repeat, line 35 */
00201         int c5 = c;
00202         bra = c; /* [, line 36 */
00203         among_var = find_among(s_pool, a_0, 6, 0, 0); /* substring, line 36 */
00204         if (!(among_var)) goto lab4;
00205         ket = c; /* ], line 36 */
00206         switch(among_var) { /* among, line 36 */
00207             case 0: goto lab4;
00208             case 1:
00209                 {   int ret = slice_from_s(2, s_2); /* <-, line 37 */
00210                     if (ret < 0) return ret;
00211                 }
00212                 break;
00213             case 2:
00214                 {   int ret = slice_from_s(2, s_3); /* <-, line 38 */
00215                     if (ret < 0) return ret;
00216                 }
00217                 break;
00218             case 3:
00219                 {   int ret = slice_from_s(2, s_4); /* <-, line 39 */
00220                     if (ret < 0) return ret;
00221                 }
00222                 break;
00223             case 4:
00224                 {   int ret = slice_from_s(2, s_5); /* <-, line 40 */
00225                     if (ret < 0) return ret;
00226                 }
00227                 break;
00228             case 5:
00229                 {   int ret = skip_utf8(p, c, 0, l, + 2); /* hop, line 41 */
00230                     if (ret < 0) goto lab4;
00231                     c = ret;
00232                 }
00233                 break;
00234             case 6:
00235                 {   int ret = skip_utf8(p, c, 0, l, 1);
00236                     if (ret < 0) goto lab4;
00237                     c = ret; /* next, line 42 */
00238                 }
00239                 break;
00240         }
00241         continue;
00242     lab4:
00243         c = c5;
00244         break;
00245     }
00246     return 1;
00247 }
00248 
00249 int Xapian::InternalStemGerman2::r_mark_regions() { /* forwardmode */
00250     I_p1 = l; /* p1 = <integer expression>, line 50 */
00251     I_p2 = l; /* p2 = <integer expression>, line 51 */
00252     {   int c_test1 = c; /* test, line 53 */
00253         {   int ret = skip_utf8(p, c, 0, l, + 3); /* hop, line 53 */
00254             if (ret < 0) return 0;
00255             c = ret;
00256         }
00257         I_x = c; /* setmark x, line 53 */
00258         c = c_test1;
00259     }
00260     {   int ret = out_grouping_U(g_v, 97, 252, 1); /* gopast */ /* grouping v, line 55 */
00261         if (ret < 0) return 0;
00262         c += ret;
00263     }
00264     {   int ret = in_grouping_U(g_v, 97, 252, 1); /* gopast */ /* non v, line 55 */
00265         if (ret < 0) return 0;
00266         c += ret;
00267     }
00268     I_p1 = c; /* setmark p1, line 55 */
00269     /* try, line 56 */
00270     if (!(I_p1 < I_x)) goto lab0; /* p1 < <integer expression>, line 56 */
00271     I_p1 = I_x; /* p1 = <integer expression>, line 56 */
00272 lab0:
00273     {   int ret = out_grouping_U(g_v, 97, 252, 1); /* gopast */ /* grouping v, line 57 */
00274         if (ret < 0) return 0;
00275         c += ret;
00276     }
00277     {   int ret = in_grouping_U(g_v, 97, 252, 1); /* gopast */ /* non v, line 57 */
00278         if (ret < 0) return 0;
00279         c += ret;
00280     }
00281     I_p2 = c; /* setmark p2, line 57 */
00282     return 1;
00283 }
00284 
00285 int Xapian::InternalStemGerman2::r_postlude() { /* forwardmode */
00286     int among_var;
00287     while(1) { /* repeat, line 61 */
00288         int c1 = c;
00289         bra = c; /* [, line 63 */
00290         among_var = find_among(s_pool, a_1, 6, 0, 0); /* substring, line 63 */
00291         if (!(among_var)) goto lab0;
00292         ket = c; /* ], line 63 */
00293         switch(among_var) { /* among, line 63 */
00294             case 0: goto lab0;
00295             case 1:
00296                 {   int ret = slice_from_s(1, s_6); /* <-, line 64 */
00297                     if (ret < 0) return ret;
00298                 }
00299                 break;
00300             case 2:
00301                 {   int ret = slice_from_s(1, s_7); /* <-, line 65 */
00302                     if (ret < 0) return ret;
00303                 }
00304                 break;
00305             case 3:
00306                 {   int ret = slice_from_s(1, s_8); /* <-, line 66 */
00307                     if (ret < 0) return ret;
00308                 }
00309                 break;
00310             case 4:
00311                 {   int ret = slice_from_s(1, s_9); /* <-, line 67 */
00312                     if (ret < 0) return ret;
00313                 }
00314                 break;
00315             case 5:
00316                 {   int ret = slice_from_s(1, s_10); /* <-, line 68 */
00317                     if (ret < 0) return ret;
00318                 }
00319                 break;
00320             case 6:
00321                 {   int ret = skip_utf8(p, c, 0, l, 1);
00322                     if (ret < 0) goto lab0;
00323                     c = ret; /* next, line 69 */
00324                 }
00325                 break;
00326         }
00327         continue;
00328     lab0:
00329         c = c1;
00330         break;
00331     }
00332     return 1;
00333 }
00334 
00335 int Xapian::InternalStemGerman2::r_R1() { /* backwardmode */
00336     if (!(I_p1 <= c)) return 0; /* p1 <= <integer expression>, line 76 */
00337     return 1;
00338 }
00339 
00340 int Xapian::InternalStemGerman2::r_R2() { /* backwardmode */
00341     if (!(I_p2 <= c)) return 0; /* p2 <= <integer expression>, line 77 */
00342     return 1;
00343 }
00344 
00345 int Xapian::InternalStemGerman2::r_standard_suffix() { /* backwardmode */
00346     int among_var;
00347     {   int m1 = l - c; (void)m1; /* do, line 80 */
00348         ket = c; /* [, line 81 */
00349         if (c <= lb || p[c - 1] >> 5 != 3 || !((811040 >> (p[c - 1] & 0x1f)) & 1)) goto lab0; /* substring, line 81 */
00350         among_var = find_among_b(s_pool, a_2, 7, 0, 0);
00351         if (!(among_var)) goto lab0;
00352         bra = c; /* ], line 81 */
00353         {   int ret = r_R1(); /* call R1, line 81 */
00354             if (ret == 0) goto lab0;
00355             if (ret < 0) return ret;
00356         }
00357         switch(among_var) { /* among, line 81 */
00358             case 0: goto lab0;
00359             case 1:
00360                 if (slice_del() == -1) return -1; /* delete, line 83 */
00361                 break;
00362             case 2:
00363                 if (in_grouping_b_U(g_s_ending, 98, 116, 0)) goto lab0; /* grouping s_ending, line 86 */
00364                 if (slice_del() == -1) return -1; /* delete, line 86 */
00365                 break;
00366         }
00367     lab0:
00368         c = l - m1;
00369     }
00370     {   int m2 = l - c; (void)m2; /* do, line 90 */
00371         ket = c; /* [, line 91 */
00372         if (c - 1 <= lb || p[c - 1] >> 5 != 3 || !((1327104 >> (p[c - 1] & 0x1f)) & 1)) goto lab1; /* substring, line 91 */
00373         among_var = find_among_b(s_pool, a_3, 4, 0, 0);
00374         if (!(among_var)) goto lab1;
00375         bra = c; /* ], line 91 */
00376         {   int ret = r_R1(); /* call R1, line 91 */
00377             if (ret == 0) goto lab1;
00378             if (ret < 0) return ret;
00379         }
00380         switch(among_var) { /* among, line 91 */
00381             case 0: goto lab1;
00382             case 1:
00383                 if (slice_del() == -1) return -1; /* delete, line 93 */
00384                 break;
00385             case 2:
00386                 if (in_grouping_b_U(g_st_ending, 98, 116, 0)) goto lab1; /* grouping st_ending, line 96 */
00387                 {   int ret = skip_utf8(p, c, lb, l, - 3); /* hop, line 96 */
00388                     if (ret < 0) goto lab1;
00389                     c = ret;
00390                 }
00391                 if (slice_del() == -1) return -1; /* delete, line 96 */
00392                 break;
00393         }
00394     lab1:
00395         c = l - m2;
00396     }
00397     {   int m3 = l - c; (void)m3; /* do, line 100 */
00398         ket = c; /* [, line 101 */
00399         if (c - 1 <= lb || p[c - 1] >> 5 != 3 || !((1051024 >> (p[c - 1] & 0x1f)) & 1)) goto lab2; /* substring, line 101 */
00400         among_var = find_among_b(s_pool, a_5, 8, 0, 0);
00401         if (!(among_var)) goto lab2;
00402         bra = c; /* ], line 101 */
00403         {   int ret = r_R2(); /* call R2, line 101 */
00404             if (ret == 0) goto lab2;
00405             if (ret < 0) return ret;
00406         }
00407         switch(among_var) { /* among, line 101 */
00408             case 0: goto lab2;
00409             case 1:
00410                 if (slice_del() == -1) return -1; /* delete, line 103 */
00411                 {   int m4 = l - c; (void)m4; /* try, line 104 */
00412                     ket = c; /* [, line 104 */
00413                     if (!(eq_s_b(2, s_11))) { c = l - m4; goto lab3; } /* literal, line 104 */
00414                     bra = c; /* ], line 104 */
00415                     {   int m5 = l - c; (void)m5; /* not, line 104 */
00416                         if (c <= lb || p[c - 1] != 'e') goto lab4;
00417                         c--;
00418                         { c = l - m4; goto lab3; }
00419                     lab4:
00420                         c = l - m5;
00421                     }
00422                     {   int ret = r_R2(); /* call R2, line 104 */
00423                         if (ret == 0) { c = l - m4; goto lab3; }
00424                         if (ret < 0) return ret;
00425                     }
00426                     if (slice_del() == -1) return -1; /* delete, line 104 */
00427                 lab3:
00428                     ;
00429                 }
00430                 break;
00431             case 2:
00432                 {   int m6 = l - c; (void)m6; /* not, line 107 */
00433                     if (c <= lb || p[c - 1] != 'e') goto lab5;
00434                     c--;
00435                     goto lab2;
00436                 lab5:
00437                     c = l - m6;
00438                 }
00439                 if (slice_del() == -1) return -1; /* delete, line 107 */
00440                 break;
00441             case 3:
00442                 if (slice_del() == -1) return -1; /* delete, line 110 */
00443                 {   int m7 = l - c; (void)m7; /* try, line 111 */
00444                     ket = c; /* [, line 112 */
00445                     {   int m8 = l - c; (void)m8; /* or, line 112 */
00446                         if (!(eq_s_b(2, s_12))) goto lab8; /* literal, line 112 */
00447                         goto lab7;
00448                     lab8:
00449                         c = l - m8;
00450                         if (!(eq_s_b(2, s_13))) { c = l - m7; goto lab6; } /* literal, line 112 */
00451                     }
00452                 lab7:
00453                     bra = c; /* ], line 112 */
00454                     {   int ret = r_R1(); /* call R1, line 112 */
00455                         if (ret == 0) { c = l - m7; goto lab6; }
00456                         if (ret < 0) return ret;
00457                     }
00458                     if (slice_del() == -1) return -1; /* delete, line 112 */
00459                 lab6:
00460                     ;
00461                 }
00462                 break;
00463             case 4:
00464                 if (slice_del() == -1) return -1; /* delete, line 116 */
00465                 {   int m9 = l - c; (void)m9; /* try, line 117 */
00466                     ket = c; /* [, line 118 */
00467                     if (c - 1 <= lb || (p[c - 1] != 103 && p[c - 1] != 104)) { c = l - m9; goto lab9; } /* substring, line 118 */
00468                     among_var = find_among_b(s_pool, a_4, 2, 0, 0);
00469                     if (!(among_var)) { c = l - m9; goto lab9; }
00470                     bra = c; /* ], line 118 */
00471                     {   int ret = r_R2(); /* call R2, line 118 */
00472                         if (ret == 0) { c = l - m9; goto lab9; }
00473                         if (ret < 0) return ret;
00474                     }
00475                     switch(among_var) { /* among, line 118 */
00476                         case 0: { c = l - m9; goto lab9; }
00477                         case 1:
00478                             if (slice_del() == -1) return -1; /* delete, line 120 */
00479                             break;
00480                     }
00481                 lab9:
00482                     ;
00483                 }
00484                 break;
00485         }
00486     lab2:
00487         c = l - m3;
00488     }
00489     return 1;
00490 }
00491 
00492 int Xapian::InternalStemGerman2::stem() { /* forwardmode */
00493     {   int c1 = c; /* do, line 131 */
00494         {   int ret = r_prelude(); /* call prelude, line 131 */
00495             if (ret == 0) goto lab0;
00496             if (ret < 0) return ret;
00497         }
00498     lab0:
00499         c = c1;
00500     }
00501     {   int c2 = c; /* do, line 132 */
00502         {   int ret = r_mark_regions(); /* call mark_regions, line 132 */
00503             if (ret == 0) goto lab1;
00504             if (ret < 0) return ret;
00505         }
00506     lab1:
00507         c = c2;
00508     }
00509     lb = c; c = l; /* backwards, line 133 */
00510 
00511     {   int m3 = l - c; (void)m3; /* do, line 134 */
00512         {   int ret = r_standard_suffix(); /* call standard_suffix, line 134 */
00513             if (ret == 0) goto lab2;
00514             if (ret < 0) return ret;
00515         }
00516     lab2:
00517         c = l - m3;
00518     }
00519     c = lb;
00520     {   int c4 = c; /* do, line 135 */
00521         {   int ret = r_postlude(); /* call postlude, line 135 */
00522             if (ret == 0) goto lab3;
00523             if (ret < 0) return ret;
00524         }
00525     lab3:
00526         c = c4;
00527     }
00528     return 1;
00529 }
00530 
00531 Xapian::InternalStemGerman2::InternalStemGerman2()
00532     : I_x(0), I_p2(0), I_p1(0)
00533 {
00534 }
00535 
00536 Xapian::InternalStemGerman2::~InternalStemGerman2()
00537 {
00538 }
00539 
00540 const char *
00541 Xapian::InternalStemGerman2::get_description() const
00542 {
00543     return "german2";
00544 }

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