2 /* This file was generated automatically by the Snowball to ANSI C compiler */
9 extern int norwegian_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
* norwegian_UTF_8_create_env(void);
23 extern void norwegian_UTF_8_close_env(struct SN_env
* z
);
29 static const symbol s_0_0
[1] = { 'a' };
30 static const symbol s_0_1
[1] = { 'e' };
31 static const symbol s_0_2
[3] = { 'e', 'd', 'e' };
32 static const symbol s_0_3
[4] = { 'a', 'n', 'd', 'e' };
33 static const symbol s_0_4
[4] = { 'e', 'n', 'd', 'e' };
34 static const symbol s_0_5
[3] = { 'a', 'n', 'e' };
35 static const symbol s_0_6
[3] = { 'e', 'n', 'e' };
36 static const symbol s_0_7
[6] = { 'h', 'e', 't', 'e', 'n', 'e' };
37 static const symbol s_0_8
[4] = { 'e', 'r', 't', 'e' };
38 static const symbol s_0_9
[2] = { 'e', 'n' };
39 static const symbol s_0_10
[5] = { 'h', 'e', 't', 'e', 'n' };
40 static const symbol s_0_11
[2] = { 'a', 'r' };
41 static const symbol s_0_12
[2] = { 'e', 'r' };
42 static const symbol s_0_13
[5] = { 'h', 'e', 't', 'e', 'r' };
43 static const symbol s_0_14
[1] = { 's' };
44 static const symbol s_0_15
[2] = { 'a', 's' };
45 static const symbol s_0_16
[2] = { 'e', 's' };
46 static const symbol s_0_17
[4] = { 'e', 'd', 'e', 's' };
47 static const symbol s_0_18
[5] = { 'e', 'n', 'd', 'e', 's' };
48 static const symbol s_0_19
[4] = { 'e', 'n', 'e', 's' };
49 static const symbol s_0_20
[7] = { 'h', 'e', 't', 'e', 'n', 'e', 's' };
50 static const symbol s_0_21
[3] = { 'e', 'n', 's' };
51 static const symbol s_0_22
[6] = { 'h', 'e', 't', 'e', 'n', 's' };
52 static const symbol s_0_23
[3] = { 'e', 'r', 's' };
53 static const symbol s_0_24
[3] = { 'e', 't', 's' };
54 static const symbol s_0_25
[2] = { 'e', 't' };
55 static const symbol s_0_26
[3] = { 'h', 'e', 't' };
56 static const symbol s_0_27
[3] = { 'e', 'r', 't' };
57 static const symbol s_0_28
[3] = { 'a', 's', 't' };
59 static const struct among a_0
[29] =
61 /* 0 */ { 1, s_0_0
, -1, 1, 0},
62 /* 1 */ { 1, s_0_1
, -1, 1, 0},
63 /* 2 */ { 3, s_0_2
, 1, 1, 0},
64 /* 3 */ { 4, s_0_3
, 1, 1, 0},
65 /* 4 */ { 4, s_0_4
, 1, 1, 0},
66 /* 5 */ { 3, s_0_5
, 1, 1, 0},
67 /* 6 */ { 3, s_0_6
, 1, 1, 0},
68 /* 7 */ { 6, s_0_7
, 6, 1, 0},
69 /* 8 */ { 4, s_0_8
, 1, 3, 0},
70 /* 9 */ { 2, s_0_9
, -1, 1, 0},
71 /* 10 */ { 5, s_0_10
, 9, 1, 0},
72 /* 11 */ { 2, s_0_11
, -1, 1, 0},
73 /* 12 */ { 2, s_0_12
, -1, 1, 0},
74 /* 13 */ { 5, s_0_13
, 12, 1, 0},
75 /* 14 */ { 1, s_0_14
, -1, 2, 0},
76 /* 15 */ { 2, s_0_15
, 14, 1, 0},
77 /* 16 */ { 2, s_0_16
, 14, 1, 0},
78 /* 17 */ { 4, s_0_17
, 16, 1, 0},
79 /* 18 */ { 5, s_0_18
, 16, 1, 0},
80 /* 19 */ { 4, s_0_19
, 16, 1, 0},
81 /* 20 */ { 7, s_0_20
, 19, 1, 0},
82 /* 21 */ { 3, s_0_21
, 14, 1, 0},
83 /* 22 */ { 6, s_0_22
, 21, 1, 0},
84 /* 23 */ { 3, s_0_23
, 14, 1, 0},
85 /* 24 */ { 3, s_0_24
, 14, 1, 0},
86 /* 25 */ { 2, s_0_25
, -1, 1, 0},
87 /* 26 */ { 3, s_0_26
, 25, 1, 0},
88 /* 27 */ { 3, s_0_27
, -1, 3, 0},
89 /* 28 */ { 3, s_0_28
, -1, 1, 0}
92 static const symbol s_1_0
[2] = { 'd', 't' };
93 static const symbol s_1_1
[2] = { 'v', 't' };
95 static const struct among a_1
[2] =
97 /* 0 */ { 2, s_1_0
, -1, -1, 0},
98 /* 1 */ { 2, s_1_1
, -1, -1, 0}
101 static const symbol s_2_0
[3] = { 'l', 'e', 'g' };
102 static const symbol s_2_1
[4] = { 'e', 'l', 'e', 'g' };
103 static const symbol s_2_2
[2] = { 'i', 'g' };
104 static const symbol s_2_3
[3] = { 'e', 'i', 'g' };
105 static const symbol s_2_4
[3] = { 'l', 'i', 'g' };
106 static const symbol s_2_5
[4] = { 'e', 'l', 'i', 'g' };
107 static const symbol s_2_6
[3] = { 'e', 'l', 's' };
108 static const symbol s_2_7
[3] = { 'l', 'o', 'v' };
109 static const symbol s_2_8
[4] = { 'e', 'l', 'o', 'v' };
110 static const symbol s_2_9
[4] = { 's', 'l', 'o', 'v' };
111 static const symbol s_2_10
[7] = { 'h', 'e', 't', 's', 'l', 'o', 'v' };
113 static const struct among a_2
[11] =
115 /* 0 */ { 3, s_2_0
, -1, 1, 0},
116 /* 1 */ { 4, s_2_1
, 0, 1, 0},
117 /* 2 */ { 2, s_2_2
, -1, 1, 0},
118 /* 3 */ { 3, s_2_3
, 2, 1, 0},
119 /* 4 */ { 3, s_2_4
, 2, 1, 0},
120 /* 5 */ { 4, s_2_5
, 4, 1, 0},
121 /* 6 */ { 3, s_2_6
, -1, 1, 0},
122 /* 7 */ { 3, s_2_7
, -1, 1, 0},
123 /* 8 */ { 4, s_2_8
, 7, 1, 0},
124 /* 9 */ { 4, s_2_9
, 7, 1, 0},
125 /* 10 */ { 7, s_2_10
, 9, 1, 0}
128 static const unsigned char g_v
[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 };
130 static const unsigned char g_s_ending
[] = { 119, 125, 149, 1 };
132 static const symbol s_0
[] = { 'k' };
133 static const symbol s_1
[] = { 'e', 'r' };
135 static int r_mark_regions(struct SN_env
* z
) {
137 { int c_test
= z
->c
; /* test, line 30 */
138 { int ret
= skip_utf8(z
->p
, z
->c
, 0, z
->l
, + 3);
139 if (ret
< 0) return 0;
140 z
->c
= ret
; /* hop, line 30 */
142 z
->I
[1] = z
->c
; /* setmark x, line 30 */
145 if (out_grouping_U(z
, g_v
, 97, 248, 1) < 0) return 0; /* goto */ /* grouping v, line 31 */
146 { /* gopast */ /* non v, line 31 */
147 int ret
= in_grouping_U(z
, g_v
, 97, 248, 1);
148 if (ret
< 0) return 0;
151 z
->I
[0] = z
->c
; /* setmark p1, line 31 */
153 if (!(z
->I
[0] < z
->I
[1])) goto lab0
;
159 static int r_main_suffix(struct SN_env
* z
) {
161 { int mlimit
; /* setlimit, line 38 */
162 int m1
= z
->l
- z
->c
; (void)m1
;
163 if (z
->c
< z
->I
[0]) return 0;
164 z
->c
= z
->I
[0]; /* tomark, line 38 */
165 mlimit
= z
->lb
; z
->lb
= z
->c
;
167 z
->ket
= z
->c
; /* [, line 38 */
168 if (z
->c
<= z
->lb
|| z
->p
[z
->c
- 1] >> 5 != 3 || !((1851426 >> (z
->p
[z
->c
- 1] & 0x1f)) & 1)) { z
->lb
= mlimit
; return 0; }
169 among_var
= find_among_b(z
, a_0
, 29); /* substring, line 38 */
170 if (!(among_var
)) { z
->lb
= mlimit
; return 0; }
171 z
->bra
= z
->c
; /* ], line 38 */
177 { int ret
= slice_del(z
); /* delete, line 44 */
178 if (ret
< 0) return ret
;
182 { int m2
= z
->l
- z
->c
; (void)m2
; /* or, line 46 */
183 if (in_grouping_b_U(z
, g_s_ending
, 98, 122, 0)) goto lab1
;
187 if (!(eq_s_b(z
, 1, s_0
))) return 0;
188 if (out_grouping_b_U(z
, g_v
, 97, 248, 0)) return 0;
191 { int ret
= slice_del(z
); /* delete, line 46 */
192 if (ret
< 0) return ret
;
196 { int ret
= slice_from_s(z
, 2, s_1
); /* <-, line 48 */
197 if (ret
< 0) return ret
;
204 static int r_consonant_pair(struct SN_env
* z
) {
205 { int m_test
= z
->l
- z
->c
; /* test, line 53 */
206 { int mlimit
; /* setlimit, line 54 */
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 54 */
210 mlimit
= z
->lb
; z
->lb
= z
->c
;
212 z
->ket
= z
->c
; /* [, line 54 */
213 if (z
->c
- 1 <= z
->lb
|| z
->p
[z
->c
- 1] != 116) { z
->lb
= mlimit
; return 0; }
214 if (!(find_among_b(z
, a_1
, 2))) { z
->lb
= mlimit
; return 0; } /* substring, line 54 */
215 z
->bra
= z
->c
; /* ], line 54 */
218 z
->c
= z
->l
- m_test
;
220 { int ret
= skip_utf8(z
->p
, z
->c
, z
->lb
, 0, -1);
221 if (ret
< 0) return 0;
222 z
->c
= ret
; /* next, line 59 */
224 z
->bra
= z
->c
; /* ], line 59 */
225 { int ret
= slice_del(z
); /* delete, line 59 */
226 if (ret
< 0) return ret
;
231 static int r_other_suffix(struct SN_env
* z
) {
233 { int mlimit
; /* setlimit, line 63 */
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 63 */
237 mlimit
= z
->lb
; z
->lb
= z
->c
;
239 z
->ket
= z
->c
; /* [, line 63 */
240 if (z
->c
- 1 <= z
->lb
|| z
->p
[z
->c
- 1] >> 5 != 3 || !((4718720 >> (z
->p
[z
->c
- 1] & 0x1f)) & 1)) { z
->lb
= mlimit
; return 0; }
241 among_var
= find_among_b(z
, a_2
, 11); /* substring, line 63 */
242 if (!(among_var
)) { z
->lb
= mlimit
; return 0; }
243 z
->bra
= z
->c
; /* ], line 63 */
249 { int ret
= slice_del(z
); /* delete, line 67 */
250 if (ret
< 0) return ret
;
257 extern int norwegian_UTF_8_stem(struct SN_env
* z
) {
258 { int c1
= z
->c
; /* do, line 74 */
259 { int ret
= r_mark_regions(z
);
260 if (ret
== 0) goto lab0
; /* call mark_regions, line 74 */
261 if (ret
< 0) return ret
;
266 z
->lb
= z
->c
; z
->c
= z
->l
; /* backwards, line 75 */
268 { int m2
= z
->l
- z
->c
; (void)m2
; /* do, line 76 */
269 { int ret
= r_main_suffix(z
);
270 if (ret
== 0) goto lab1
; /* call main_suffix, line 76 */
271 if (ret
< 0) return ret
;
276 { int m3
= z
->l
- z
->c
; (void)m3
; /* do, line 77 */
277 { int ret
= r_consonant_pair(z
);
278 if (ret
== 0) goto lab2
; /* call consonant_pair, line 77 */
279 if (ret
< 0) return ret
;
284 { int m4
= z
->l
- z
->c
; (void)m4
; /* do, line 78 */
285 { int ret
= r_other_suffix(z
);
286 if (ret
== 0) goto lab3
; /* call other_suffix, line 78 */
287 if (ret
< 0) return ret
;
296 extern struct SN_env
* norwegian_UTF_8_create_env(void) { return SN_create_env(0, 2, 0); }
298 extern void norwegian_UTF_8_close_env(struct SN_env
* z
) { SN_close_env(z
, 0); }