2 /* This file was generated automatically by the Snowball to ANSI C compiler */
9 extern int swedish_UTF_8_stem(struct SN_env
* z
);
13 static int r_other_suffix(struct SN_env
* z
);
14 static int r_consonant_pair(struct SN_env
* z
);
15 static int r_main_suffix(struct SN_env
* z
);
16 static int r_mark_regions(struct SN_env
* z
);
22 extern struct SN_env
* swedish_UTF_8_create_env(void);
23 extern void swedish_UTF_8_close_env(struct SN_env
* z
);
29 static const symbol s_0_0
[1] = { 'a' };
30 static const symbol s_0_1
[4] = { 'a', 'r', 'n', 'a' };
31 static const symbol s_0_2
[4] = { 'e', 'r', 'n', 'a' };
32 static const symbol s_0_3
[7] = { 'h', 'e', 't', 'e', 'r', 'n', 'a' };
33 static const symbol s_0_4
[4] = { 'o', 'r', 'n', 'a' };
34 static const symbol s_0_5
[2] = { 'a', 'd' };
35 static const symbol s_0_6
[1] = { 'e' };
36 static const symbol s_0_7
[3] = { 'a', 'd', 'e' };
37 static const symbol s_0_8
[4] = { 'a', 'n', 'd', 'e' };
38 static const symbol s_0_9
[4] = { 'a', 'r', 'n', 'e' };
39 static const symbol s_0_10
[3] = { 'a', 'r', 'e' };
40 static const symbol s_0_11
[4] = { 'a', 's', 't', 'e' };
41 static const symbol s_0_12
[2] = { 'e', 'n' };
42 static const symbol s_0_13
[5] = { 'a', 'n', 'd', 'e', 'n' };
43 static const symbol s_0_14
[4] = { 'a', 'r', 'e', 'n' };
44 static const symbol s_0_15
[5] = { 'h', 'e', 't', 'e', 'n' };
45 static const symbol s_0_16
[3] = { 'e', 'r', 'n' };
46 static const symbol s_0_17
[2] = { 'a', 'r' };
47 static const symbol s_0_18
[2] = { 'e', 'r' };
48 static const symbol s_0_19
[5] = { 'h', 'e', 't', 'e', 'r' };
49 static const symbol s_0_20
[2] = { 'o', 'r' };
50 static const symbol s_0_21
[1] = { 's' };
51 static const symbol s_0_22
[2] = { 'a', 's' };
52 static const symbol s_0_23
[5] = { 'a', 'r', 'n', 'a', 's' };
53 static const symbol s_0_24
[5] = { 'e', 'r', 'n', 'a', 's' };
54 static const symbol s_0_25
[5] = { 'o', 'r', 'n', 'a', 's' };
55 static const symbol s_0_26
[2] = { 'e', 's' };
56 static const symbol s_0_27
[4] = { 'a', 'd', 'e', 's' };
57 static const symbol s_0_28
[5] = { 'a', 'n', 'd', 'e', 's' };
58 static const symbol s_0_29
[3] = { 'e', 'n', 's' };
59 static const symbol s_0_30
[5] = { 'a', 'r', 'e', 'n', 's' };
60 static const symbol s_0_31
[6] = { 'h', 'e', 't', 'e', 'n', 's' };
61 static const symbol s_0_32
[4] = { 'e', 'r', 'n', 's' };
62 static const symbol s_0_33
[2] = { 'a', 't' };
63 static const symbol s_0_34
[5] = { 'a', 'n', 'd', 'e', 't' };
64 static const symbol s_0_35
[3] = { 'h', 'e', 't' };
65 static const symbol s_0_36
[3] = { 'a', 's', 't' };
67 static const struct among a_0
[37] =
69 /* 0 */ { 1, s_0_0
, -1, 1, 0},
70 /* 1 */ { 4, s_0_1
, 0, 1, 0},
71 /* 2 */ { 4, s_0_2
, 0, 1, 0},
72 /* 3 */ { 7, s_0_3
, 2, 1, 0},
73 /* 4 */ { 4, s_0_4
, 0, 1, 0},
74 /* 5 */ { 2, s_0_5
, -1, 1, 0},
75 /* 6 */ { 1, s_0_6
, -1, 1, 0},
76 /* 7 */ { 3, s_0_7
, 6, 1, 0},
77 /* 8 */ { 4, s_0_8
, 6, 1, 0},
78 /* 9 */ { 4, s_0_9
, 6, 1, 0},
79 /* 10 */ { 3, s_0_10
, 6, 1, 0},
80 /* 11 */ { 4, s_0_11
, 6, 1, 0},
81 /* 12 */ { 2, s_0_12
, -1, 1, 0},
82 /* 13 */ { 5, s_0_13
, 12, 1, 0},
83 /* 14 */ { 4, s_0_14
, 12, 1, 0},
84 /* 15 */ { 5, s_0_15
, 12, 1, 0},
85 /* 16 */ { 3, s_0_16
, -1, 1, 0},
86 /* 17 */ { 2, s_0_17
, -1, 1, 0},
87 /* 18 */ { 2, s_0_18
, -1, 1, 0},
88 /* 19 */ { 5, s_0_19
, 18, 1, 0},
89 /* 20 */ { 2, s_0_20
, -1, 1, 0},
90 /* 21 */ { 1, s_0_21
, -1, 2, 0},
91 /* 22 */ { 2, s_0_22
, 21, 1, 0},
92 /* 23 */ { 5, s_0_23
, 22, 1, 0},
93 /* 24 */ { 5, s_0_24
, 22, 1, 0},
94 /* 25 */ { 5, s_0_25
, 22, 1, 0},
95 /* 26 */ { 2, s_0_26
, 21, 1, 0},
96 /* 27 */ { 4, s_0_27
, 26, 1, 0},
97 /* 28 */ { 5, s_0_28
, 26, 1, 0},
98 /* 29 */ { 3, s_0_29
, 21, 1, 0},
99 /* 30 */ { 5, s_0_30
, 29, 1, 0},
100 /* 31 */ { 6, s_0_31
, 29, 1, 0},
101 /* 32 */ { 4, s_0_32
, 21, 1, 0},
102 /* 33 */ { 2, s_0_33
, -1, 1, 0},
103 /* 34 */ { 5, s_0_34
, -1, 1, 0},
104 /* 35 */ { 3, s_0_35
, -1, 1, 0},
105 /* 36 */ { 3, s_0_36
, -1, 1, 0}
108 static const symbol s_1_0
[2] = { 'd', 'd' };
109 static const symbol s_1_1
[2] = { 'g', 'd' };
110 static const symbol s_1_2
[2] = { 'n', 'n' };
111 static const symbol s_1_3
[2] = { 'd', 't' };
112 static const symbol s_1_4
[2] = { 'g', 't' };
113 static const symbol s_1_5
[2] = { 'k', 't' };
114 static const symbol s_1_6
[2] = { 't', 't' };
116 static const struct among a_1
[7] =
118 /* 0 */ { 2, s_1_0
, -1, -1, 0},
119 /* 1 */ { 2, s_1_1
, -1, -1, 0},
120 /* 2 */ { 2, s_1_2
, -1, -1, 0},
121 /* 3 */ { 2, s_1_3
, -1, -1, 0},
122 /* 4 */ { 2, s_1_4
, -1, -1, 0},
123 /* 5 */ { 2, s_1_5
, -1, -1, 0},
124 /* 6 */ { 2, s_1_6
, -1, -1, 0}
127 static const symbol s_2_0
[2] = { 'i', 'g' };
128 static const symbol s_2_1
[3] = { 'l', 'i', 'g' };
129 static const symbol s_2_2
[3] = { 'e', 'l', 's' };
130 static const symbol s_2_3
[5] = { 'f', 'u', 'l', 'l', 't' };
131 static const symbol s_2_4
[5] = { 'l', 0xC3, 0xB6, 's', 't' };
133 static const struct among a_2
[5] =
135 /* 0 */ { 2, s_2_0
, -1, 1, 0},
136 /* 1 */ { 3, s_2_1
, 0, 1, 0},
137 /* 2 */ { 3, s_2_2
, -1, 1, 0},
138 /* 3 */ { 5, s_2_3
, -1, 3, 0},
139 /* 4 */ { 5, s_2_4
, -1, 2, 0}
142 static const unsigned char g_v
[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 32 };
144 static const unsigned char g_s_ending
[] = { 119, 127, 149 };
146 static const symbol s_0
[] = { 'l', 0xC3, 0xB6, 's' };
147 static const symbol s_1
[] = { 'f', 'u', 'l', 'l' };
149 static int r_mark_regions(struct SN_env
* z
) {
151 { int c_test
= z
->c
; /* test, line 29 */
152 { int ret
= skip_utf8(z
->p
, z
->c
, 0, z
->l
, + 3);
153 if (ret
< 0) return 0;
154 z
->c
= ret
; /* hop, line 29 */
156 z
->I
[1] = z
->c
; /* setmark x, line 29 */
159 if (out_grouping_U(z
, g_v
, 97, 246, 1) < 0) return 0; /* goto */ /* grouping v, line 30 */
160 { /* gopast */ /* non v, line 30 */
161 int ret
= in_grouping_U(z
, g_v
, 97, 246, 1);
162 if (ret
< 0) return 0;
165 z
->I
[0] = z
->c
; /* setmark p1, line 30 */
167 if (!(z
->I
[0] < z
->I
[1])) goto lab0
;
173 static int r_main_suffix(struct SN_env
* z
) {
175 { int mlimit
; /* setlimit, line 37 */
176 int m1
= z
->l
- z
->c
; (void)m1
;
177 if (z
->c
< z
->I
[0]) return 0;
178 z
->c
= z
->I
[0]; /* tomark, line 37 */
179 mlimit
= z
->lb
; z
->lb
= z
->c
;
181 z
->ket
= z
->c
; /* [, line 37 */
182 if (z
->c
<= z
->lb
|| z
->p
[z
->c
- 1] >> 5 != 3 || !((1851442 >> (z
->p
[z
->c
- 1] & 0x1f)) & 1)) { z
->lb
= mlimit
; return 0; }
183 among_var
= find_among_b(z
, a_0
, 37); /* substring, line 37 */
184 if (!(among_var
)) { z
->lb
= mlimit
; return 0; }
185 z
->bra
= z
->c
; /* ], line 37 */
191 { int ret
= slice_del(z
); /* delete, line 44 */
192 if (ret
< 0) return ret
;
196 if (in_grouping_b_U(z
, g_s_ending
, 98, 121, 0)) return 0;
197 { int ret
= slice_del(z
); /* delete, line 46 */
198 if (ret
< 0) return ret
;
205 static int r_consonant_pair(struct SN_env
* z
) {
206 { int mlimit
; /* setlimit, line 50 */
207 int m1
= z
->l
- z
->c
; (void)m1
;
208 if (z
->c
< z
->I
[0]) return 0;
209 z
->c
= z
->I
[0]; /* tomark, line 50 */
210 mlimit
= z
->lb
; z
->lb
= z
->c
;
212 { int m2
= z
->l
- z
->c
; (void)m2
; /* and, line 52 */
213 if (z
->c
- 1 <= z
->lb
|| z
->p
[z
->c
- 1] >> 5 != 3 || !((1064976 >> (z
->p
[z
->c
- 1] & 0x1f)) & 1)) { z
->lb
= mlimit
; return 0; }
214 if (!(find_among_b(z
, a_1
, 7))) { z
->lb
= mlimit
; return 0; } /* among, line 51 */
216 z
->ket
= z
->c
; /* [, line 52 */
217 { int ret
= skip_utf8(z
->p
, z
->c
, z
->lb
, 0, -1);
218 if (ret
< 0) { z
->lb
= mlimit
; return 0; }
219 z
->c
= ret
; /* next, line 52 */
221 z
->bra
= z
->c
; /* ], line 52 */
222 { int ret
= slice_del(z
); /* delete, line 52 */
223 if (ret
< 0) return ret
;
231 static int r_other_suffix(struct SN_env
* z
) {
233 { int mlimit
; /* setlimit, line 55 */
234 int m1
= z
->l
- z
->c
; (void)m1
;
235 if (z
->c
< z
->I
[0]) return 0;
236 z
->c
= z
->I
[0]; /* tomark, line 55 */
237 mlimit
= z
->lb
; z
->lb
= z
->c
;
239 z
->ket
= z
->c
; /* [, line 56 */
240 if (z
->c
- 1 <= z
->lb
|| z
->p
[z
->c
- 1] >> 5 != 3 || !((1572992 >> (z
->p
[z
->c
- 1] & 0x1f)) & 1)) { z
->lb
= mlimit
; return 0; }
241 among_var
= find_among_b(z
, a_2
, 5); /* substring, line 56 */
242 if (!(among_var
)) { z
->lb
= mlimit
; return 0; }
243 z
->bra
= z
->c
; /* ], line 56 */
245 case 0: { z
->lb
= mlimit
; return 0; }
247 { int ret
= slice_del(z
); /* delete, line 57 */
248 if (ret
< 0) return ret
;
252 { int ret
= slice_from_s(z
, 4, s_0
); /* <-, line 58 */
253 if (ret
< 0) return ret
;
257 { int ret
= slice_from_s(z
, 4, s_1
); /* <-, line 59 */
258 if (ret
< 0) return ret
;
267 extern int swedish_UTF_8_stem(struct SN_env
* z
) {
268 { int c1
= z
->c
; /* do, line 66 */
269 { int ret
= r_mark_regions(z
);
270 if (ret
== 0) goto lab0
; /* call mark_regions, line 66 */
271 if (ret
< 0) return ret
;
276 z
->lb
= z
->c
; z
->c
= z
->l
; /* backwards, line 67 */
278 { int m2
= z
->l
- z
->c
; (void)m2
; /* do, line 68 */
279 { int ret
= r_main_suffix(z
);
280 if (ret
== 0) goto lab1
; /* call main_suffix, line 68 */
281 if (ret
< 0) return ret
;
286 { int m3
= z
->l
- z
->c
; (void)m3
; /* do, line 69 */
287 { int ret
= r_consonant_pair(z
);
288 if (ret
== 0) goto lab2
; /* call consonant_pair, line 69 */
289 if (ret
< 0) return ret
;
294 { int m4
= z
->l
- z
->c
; (void)m4
; /* do, line 70 */
295 { int ret
= r_other_suffix(z
);
296 if (ret
== 0) goto lab3
; /* call other_suffix, line 70 */
297 if (ret
< 0) return ret
;
306 extern struct SN_env
* swedish_UTF_8_create_env(void) { return SN_create_env(0, 2, 0); }
308 extern void swedish_UTF_8_close_env(struct SN_env
* z
) { SN_close_env(z
, 0); }