diff options
Diffstat (limited to 'src/backend/snowball/libstemmer/stem_UTF_8_italian.c')
-rw-r--r-- | src/backend/snowball/libstemmer/stem_UTF_8_italian.c | 134 |
1 files changed, 80 insertions, 54 deletions
diff --git a/src/backend/snowball/libstemmer/stem_UTF_8_italian.c b/src/backend/snowball/libstemmer/stem_UTF_8_italian.c index 8a05ce411aa..cd4db27c84d 100644 --- a/src/backend/snowball/libstemmer/stem_UTF_8_italian.c +++ b/src/backend/snowball/libstemmer/stem_UTF_8_italian.c @@ -19,6 +19,7 @@ static int r_RV(struct SN_env * z); static int r_mark_regions(struct SN_env * z); static int r_postlude(struct SN_env * z); static int r_prelude(struct SN_env * z); +static int r_exceptions(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif @@ -487,6 +488,8 @@ static const symbol s_14[] = { 'e', 'n', 't', 'e' }; static const symbol s_15[] = { 'a', 't' }; static const symbol s_16[] = { 'a', 't' }; static const symbol s_17[] = { 'i', 'c' }; +static const symbol s_18[] = { 'd', 'i', 'v', 'a', 'n', 'o' }; +static const symbol s_19[] = { 'd', 'i', 'v', 'a', 'n' }; static int r_prelude(struct SN_env * z) { int among_var; @@ -495,7 +498,6 @@ static int r_prelude(struct SN_env * z) { int c2 = z->c; z->bra = z->c; among_var = find_among(z, a_0, 7); - if (!(among_var)) goto lab0; z->ket = z->c; switch (among_var) { case 1: @@ -594,7 +596,8 @@ static int r_mark_regions(struct SN_env * z) { if (in_grouping_U(z, g_v, 97, 249, 0)) goto lab2; { int c3 = z->c; if (out_grouping_U(z, g_v, 97, 249, 0)) goto lab4; - { + + { int ret = out_grouping_U(z, g_v, 97, 249, 1); if (ret < 0) goto lab4; z->c += ret; @@ -603,7 +606,8 @@ static int r_mark_regions(struct SN_env * z) { lab4: z->c = c3; if (in_grouping_U(z, g_v, 97, 249, 0)) goto lab2; - { + + { int ret = in_grouping_U(z, g_v, 97, 249, 1); if (ret < 0) goto lab2; z->c += ret; @@ -616,7 +620,8 @@ static int r_mark_regions(struct SN_env * z) { if (out_grouping_U(z, g_v, 97, 249, 0)) goto lab0; { int c4 = z->c; if (out_grouping_U(z, g_v, 97, 249, 0)) goto lab6; - { + + { int ret = out_grouping_U(z, g_v, 97, 249, 1); if (ret < 0) goto lab6; z->c += ret; @@ -639,23 +644,27 @@ static int r_mark_regions(struct SN_env * z) { z->c = c1; } { int c5 = z->c; - { + + { int ret = out_grouping_U(z, g_v, 97, 249, 1); if (ret < 0) goto lab7; z->c += ret; } - { + + { int ret = in_grouping_U(z, g_v, 97, 249, 1); if (ret < 0) goto lab7; z->c += ret; } z->I[1] = z->c; - { + + { int ret = out_grouping_U(z, g_v, 97, 249, 1); if (ret < 0) goto lab7; z->c += ret; } - { + + { int ret = in_grouping_U(z, g_v, 97, 249, 1); if (ret < 0) goto lab7; z->c += ret; @@ -674,7 +683,6 @@ static int r_postlude(struct SN_env * z) { z->bra = z->c; if (z->c >= z->l || (z->p[z->c + 0] != 73 && z->p[z->c + 0] != 85)) among_var = 3; else among_var = find_among(z, a_1, 3); - if (!(among_var)) goto lab0; z->ket = z->c; switch (among_var) { case 1: @@ -703,29 +711,26 @@ static int r_postlude(struct SN_env * z) { } static int r_RV(struct SN_env * z) { - if (!(z->I[2] <= z->c)) return 0; - return 1; + return z->I[2] <= z->c; } static int r_R1(struct SN_env * z) { - if (!(z->I[1] <= z->c)) return 0; - return 1; + return z->I[1] <= z->c; } static int r_R2(struct SN_env * z) { - if (!(z->I[0] <= z->c)) return 0; - return 1; + return z->I[0] <= z->c; } static int r_attached_pronoun(struct SN_env * z) { int among_var; z->ket = z->c; if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((33314 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; - if (!(find_among_b(z, a_2, 37))) return 0; + if (!find_among_b(z, a_2, 37)) return 0; z->bra = z->c; if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 111 && z->p[z->c - 1] != 114)) return 0; among_var = find_among_b(z, a_3, 5); - if (!(among_var)) return 0; + if (!among_var) return 0; { int ret = r_RV(z); if (ret <= 0) return ret; } @@ -748,7 +753,7 @@ static int r_standard_suffix(struct SN_env * z) { int among_var; z->ket = z->c; among_var = find_among_b(z, a_6, 51); - if (!(among_var)) return 0; + if (!among_var) return 0; z->bra = z->c; switch (among_var) { case 1: @@ -824,7 +829,7 @@ static int r_standard_suffix(struct SN_env * z) { z->ket = z->c; if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4722696 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m2; goto lab1; } among_var = find_among_b(z, a_4, 4); - if (!(among_var)) { z->c = z->l - m2; goto lab1; } + if (!among_var) { z->c = z->l - m2; goto lab1; } z->bra = z->c; { int ret = r_R2(z); if (ret == 0) { z->c = z->l - m2; goto lab1; } @@ -861,7 +866,7 @@ static int r_standard_suffix(struct SN_env * z) { { int m3 = z->l - z->c; (void)m3; z->ket = z->c; if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4198408 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m3; goto lab2; } - if (!(find_among_b(z, a_5, 3))) { z->c = z->l - m3; goto lab2; } + if (!find_among_b(z, a_5, 3)) { z->c = z->l - m3; goto lab2; } z->bra = z->c; { int ret = r_R2(z); if (ret == 0) { z->c = z->l - m3; goto lab2; } @@ -916,7 +921,7 @@ static int r_verb_suffix(struct SN_env * z) { if (z->c < z->I[2]) return 0; mlimit1 = z->lb; z->lb = z->I[2]; z->ket = z->c; - if (!(find_among_b(z, a_7, 87))) { z->lb = mlimit1; return 0; } + if (!find_among_b(z, a_7, 87)) { z->lb = mlimit1; return 0; } z->bra = z->c; { int ret = slice_del(z); if (ret < 0) return ret; @@ -971,56 +976,77 @@ static int r_vowel_suffix(struct SN_env * z) { return 1; } +static int r_exceptions(struct SN_env * z) { + z->bra = z->c; + if (!(eq_s(z, 6, s_18))) return 0; + if (z->c < z->l) return 0; + z->ket = z->c; + { int ret = slice_from_s(z, 5, s_19); + if (ret < 0) return ret; + } + return 1; +} + extern int italian_UTF_8_stem(struct SN_env * z) { { int c1 = z->c; - { int ret = r_prelude(z); + { int ret = r_exceptions(z); + if (ret == 0) goto lab1; if (ret < 0) return ret; } + goto lab0; + lab1: z->c = c1; - } - - { int ret = r_mark_regions(z); - if (ret < 0) return ret; - } - z->lb = z->c; z->c = z->l; + { int c2 = z->c; + { int ret = r_prelude(z); + if (ret < 0) return ret; + } + z->c = c2; + } - { int m2 = z->l - z->c; (void)m2; - { int ret = r_attached_pronoun(z); + { int ret = r_mark_regions(z); if (ret < 0) return ret; } - z->c = z->l - m2; - } - { int m3 = z->l - z->c; (void)m3; - { int m4 = z->l - z->c; (void)m4; - { int ret = r_standard_suffix(z); - if (ret == 0) goto lab2; + z->lb = z->c; z->c = z->l; + + { int m3 = z->l - z->c; (void)m3; + { int ret = r_attached_pronoun(z); if (ret < 0) return ret; } - goto lab1; + z->c = z->l - m3; + } + { int m4 = z->l - z->c; (void)m4; + { int m5 = z->l - z->c; (void)m5; + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab4; + if (ret < 0) return ret; + } + goto lab3; + lab4: + z->c = z->l - m5; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab2; + if (ret < 0) return ret; + } + } + lab3: lab2: z->c = z->l - m4; - { int ret = r_verb_suffix(z); - if (ret == 0) goto lab0; + } + { int m6 = z->l - z->c; (void)m6; + { int ret = r_vowel_suffix(z); if (ret < 0) return ret; } + z->c = z->l - m6; } - lab1: - lab0: - z->c = z->l - m3; - } - { int m5 = z->l - z->c; (void)m5; - { int ret = r_vowel_suffix(z); - if (ret < 0) return ret; - } - z->c = z->l - m5; - } - z->c = z->lb; - { int c6 = z->c; - { int ret = r_postlude(z); - if (ret < 0) return ret; + z->c = z->lb; + { int c7 = z->c; + { int ret = r_postlude(z); + if (ret < 0) return ret; + } + z->c = c7; } - z->c = c6; } +lab0: return 1; } |