]> git.wincent.com - wikitext.git/blob - ext/wikitext_ragel.c
Promote "experimental" to "ext"
[wikitext.git] / ext / wikitext_ragel.c
1 #line 1 "wikitext_ragel.rl"
2 // Copyright 2008 Wincent Colaiuta
3 // This program is free software: you can redistribute it and/or modify
4 // it under the terms of the GNU General Public License as published by
5 // the Free Software Foundation, either version 3 of the License, or
6 // (at your option) any later version.
7 //
8 // This program is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 // GNU General Public License for more details.
12 //
13 // You should have received a copy of the GNU General Public License
14 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16 //----------------------------------------------------------------------//
17 // NOTE: wikitext_ragel.c is generated from wikitext_ragel.rl, so       //
18 //       if you make changes to the former they will be overwritten.    //
19 //       You should perform all your edits in wikitext_ragel.rl.        //
20 //----------------------------------------------------------------------//
21
22 #include "wikitext_ragel.h"
23 #include <stdio.h>
24
25 #define EMIT(t)     do { out->type = t; out->stop = p + 1; out->column_stop += (out->stop - out->start); } while (0)
26 #define MARK()      do { mark = p; } while (0)
27 #define REWIND()    do { p = mark; } while (0)
28
29
30 #line 31 "wikitext_ragel.c"
31 static const char _wikitext_actions[] = {
32         0, 1, 0, 1, 2, 1, 3, 1, 
33         4, 1, 10, 1, 11, 1, 12, 1, 
34         13, 1, 14, 1, 15, 1, 16, 1, 
35         17, 1, 18, 1, 19, 1, 20, 1, 
36         21, 1, 22, 1, 23, 1, 24, 1, 
37         25, 1, 26, 1, 27, 1, 28, 1, 
38         29, 1, 30, 1, 31, 1, 32, 1, 
39         33, 1, 34, 1, 35, 1, 36, 1, 
40         37, 1, 38, 1, 39, 1, 40, 1, 
41         41, 1, 42, 1, 43, 1, 44, 1, 
42         45, 1, 46, 1, 47, 2, 1, 42, 
43         2, 4, 5, 2, 4, 6, 2, 4, 
44         7, 2, 4, 8, 2, 4, 9
45 };
46
47 static const short _wikitext_key_offsets[] = {
48         0, 0, 2, 4, 6, 10, 13, 19, 
49         26, 33, 36, 44, 52, 59, 67, 75, 
50         83, 90, 94, 96, 98, 100, 102, 104, 
51         105, 107, 108, 110, 112, 114, 116, 118, 
52         119, 121, 122, 138, 171, 172, 186, 193, 
53         208, 223, 238, 253, 258, 273, 274, 289, 
54         290, 305, 306, 321, 322, 337, 338, 353, 
55         354, 355, 371, 387, 402, 417, 432, 452, 
56         472, 488, 504, 520, 536, 537
57 };
58
59 static const char _wikitext_trans_keys[] = {
60         -128, -65, -128, -65, -128, -65, 88, 120, 
61         48, 57, 59, 48, 57, 48, 57, 65, 
62         70, 97, 102, 59, 48, 57, 65, 70, 
63         97, 102, 59, 48, 57, 65, 90, 97, 
64         122, 59, 48, 57, 59, 109, 48, 57, 
65         65, 90, 97, 122, 59, 112, 48, 57, 
66         65, 90, 97, 122, 59, 48, 57, 65, 
67         90, 97, 122, 59, 117, 48, 57, 65, 
68         90, 97, 122, 59, 111, 48, 57, 65, 
69         90, 97, 122, 59, 116, 48, 57, 65, 
70         90, 97, 122, 59, 48, 57, 65, 90, 
71         97, 122, 78, 84, 110, 116, 79, 111, 
72         87, 119, 73, 105, 75, 107, 73, 105, 
73         62, 84, 116, 62, 79, 111, 87, 119, 
74         73, 105, 75, 107, 73, 105, 62, 84, 
75         116, 62, 33, 41, 44, 46, 61, 63, 
76         95, 126, 35, 57, 58, 59, 64, 90, 
77         97, 122, 10, 13, 32, 34, 35, 38, 
78         39, 42, 60, 61, 62, 70, 72, 83, 
79         91, 93, 96, 102, 104, 115, 124, 126, 
80         127, -62, -33, -32, -17, -16, -12, 1, 
81         31, 33, 123, 10, 33, 61, 92, 126, 
82         35, 37, 39, 59, 63, 90, 94, 95, 
83         97, 123, 35, 97, 113, 65, 90, 98, 
84         122, 33, 39, 61, 92, 126, 35, 37, 
85         40, 59, 63, 90, 94, 95, 97, 123, 
86         33, 39, 61, 92, 126, 35, 37, 40, 
87         59, 63, 90, 94, 95, 97, 123, 33, 
88         39, 61, 92, 126, 35, 37, 40, 59, 
89         63, 90, 94, 95, 97, 123, 33, 39, 
90         61, 92, 126, 35, 37, 40, 59, 63, 
91         90, 94, 95, 97, 123, 47, 78, 84, 
92         110, 116, 32, 33, 61, 92, 126, 35, 
93         37, 39, 59, 63, 90, 94, 95, 97, 
94         123, 32, 32, 33, 61, 92, 126, 35, 
95         37, 39, 59, 63, 90, 94, 95, 97, 
96         123, 32, 32, 33, 61, 92, 126, 35, 
97         37, 39, 59, 63, 90, 94, 95, 97, 
98         123, 32, 32, 33, 61, 92, 126, 35, 
99         37, 39, 59, 63, 90, 94, 95, 97, 
100         123, 32, 32, 33, 61, 92, 126, 35, 
101         37, 39, 59, 63, 90, 94, 95, 97, 
102         123, 32, 32, 33, 61, 92, 126, 35, 
103         37, 39, 59, 63, 90, 94, 95, 97, 
104         123, 32, 32, 33, 61, 84, 92, 116, 
105         126, 35, 37, 39, 59, 63, 90, 94, 
106         95, 97, 123, 33, 61, 80, 92, 112, 
107         126, 35, 37, 39, 59, 63, 90, 94, 
108         95, 97, 123, 33, 58, 61, 92, 126, 
109         35, 37, 39, 59, 63, 90, 94, 95, 
110         97, 123, 33, 47, 61, 92, 126, 35, 
111         37, 39, 59, 63, 90, 94, 95, 97, 
112         123, 33, 47, 61, 92, 126, 35, 37, 
113         39, 59, 63, 90, 94, 95, 97, 123, 
114         33, 38, 41, 44, 46, 61, 63, 92, 
115         94, 95, 123, 126, 35, 57, 58, 59, 
116         64, 90, 97, 122, 33, 38, 41, 44, 
117         46, 61, 63, 92, 94, 95, 123, 126, 
118         35, 57, 58, 59, 64, 90, 97, 122, 
119         33, 41, 44, 46, 61, 63, 95, 126, 
120         35, 57, 58, 59, 64, 90, 97, 122, 
121         33, 61, 84, 92, 116, 126, 35, 37, 
122         39, 59, 63, 90, 94, 95, 97, 123, 
123         33, 61, 86, 92, 118, 126, 35, 37, 
124         39, 59, 63, 90, 94, 95, 97, 123, 
125         33, 61, 78, 92, 110, 126, 35, 37, 
126         39, 59, 63, 90, 94, 95, 97, 123, 
127         91, 93, 0
128 };
129
130 static const char _wikitext_single_lengths[] = {
131         0, 0, 0, 0, 2, 1, 0, 1, 
132         1, 1, 2, 2, 1, 2, 2, 2, 
133         1, 4, 2, 2, 2, 2, 2, 1, 
134         2, 1, 2, 2, 2, 2, 2, 1, 
135         2, 1, 8, 23, 1, 4, 3, 5, 
136         5, 5, 5, 5, 5, 1, 5, 1, 
137         5, 1, 5, 1, 5, 1, 5, 1, 
138         1, 6, 6, 5, 5, 5, 12, 12, 
139         8, 6, 6, 6, 1, 1
140 };
141
142 static const char _wikitext_range_lengths[] = {
143         0, 1, 1, 1, 1, 1, 3, 3, 
144         3, 1, 3, 3, 3, 3, 3, 3, 
145         3, 0, 0, 0, 0, 0, 0, 0, 
146         0, 0, 0, 0, 0, 0, 0, 0, 
147         0, 0, 4, 5, 0, 5, 2, 5, 
148         5, 5, 5, 0, 5, 0, 5, 0, 
149         5, 0, 5, 0, 5, 0, 5, 0, 
150         0, 5, 5, 5, 5, 5, 4, 4, 
151         4, 5, 5, 5, 0, 0
152 };
153
154 static const short _wikitext_index_offsets[] = {
155         0, 0, 2, 4, 6, 10, 13, 17, 
156         22, 27, 30, 36, 42, 47, 53, 59, 
157         65, 70, 75, 78, 81, 84, 87, 90, 
158         92, 95, 97, 100, 103, 106, 109, 112, 
159         114, 117, 119, 132, 161, 163, 173, 179, 
160         190, 201, 212, 223, 229, 240, 242, 253, 
161         255, 266, 268, 279, 281, 292, 294, 305, 
162         307, 309, 321, 333, 344, 355, 366, 383, 
163         400, 413, 425, 437, 449, 451
164 };
165
166 static const char _wikitext_indicies[] = {
167         0, 1, 2, 1, 3, 1, 6, 6, 
168         5, 4, 7, 5, 4, 8, 8, 8, 
169         4, 9, 8, 8, 8, 4, 11, 10, 
170         12, 12, 4, 11, 10, 4, 11, 13, 
171         10, 12, 12, 4, 11, 14, 10, 12, 
172         12, 4, 15, 10, 12, 12, 4, 11, 
173         16, 10, 12, 12, 4, 11, 17, 10, 
174         12, 12, 4, 11, 18, 10, 12, 12, 
175         4, 19, 10, 12, 12, 4, 21, 22, 
176         21, 22, 20, 23, 23, 20, 24, 24, 
177         20, 25, 25, 20, 26, 26, 20, 27, 
178         27, 20, 28, 20, 29, 29, 20, 30, 
179         20, 31, 31, 20, 32, 32, 20, 33, 
180         33, 20, 34, 34, 20, 35, 35, 20, 
181         36, 20, 37, 37, 20, 38, 20, 40, 
182         40, 40, 40, 41, 40, 41, 41, 41, 
183         40, 41, 41, 39, 43, 44, 45, 47, 
184         48, 49, 50, 51, 52, 53, 54, 55, 
185         56, 57, 58, 59, 60, 55, 56, 57, 
186         61, 46, 0, 2, 3, 42, 0, 46, 
187         1, 43, 63, 46, 46, 46, 46, 46, 
188         46, 46, 46, 46, 64, 66, 67, 68, 
189         12, 12, 65, 46, 70, 46, 46, 46, 
190         46, 46, 46, 46, 46, 69, 46, 72, 
191         46, 46, 46, 46, 46, 46, 46, 46, 
192         71, 46, 74, 46, 46, 46, 46, 46, 
193         46, 46, 46, 73, 46, 75, 46, 46, 
194         46, 46, 46, 46, 46, 46, 69, 77, 
195         78, 79, 78, 79, 76, 81, 46, 82, 
196         46, 46, 46, 46, 46, 46, 46, 80, 
197         81, 80, 84, 46, 85, 46, 46, 46, 
198         46, 46, 46, 46, 83, 84, 83, 87, 
199         46, 88, 46, 46, 46, 46, 46, 46, 
200         46, 86, 87, 86, 90, 46, 91, 46, 
201         46, 46, 46, 46, 46, 46, 89, 90, 
202         89, 93, 46, 94, 46, 46, 46, 46, 
203         46, 46, 46, 92, 93, 92, 96, 46, 
204         46, 46, 46, 46, 46, 46, 46, 46, 
205         95, 96, 95, 98, 97, 46, 46, 99, 
206         46, 99, 46, 46, 46, 46, 46, 46, 
207         69, 46, 46, 100, 46, 100, 46, 46, 
208         46, 46, 46, 46, 69, 46, 101, 46, 
209         46, 46, 46, 46, 46, 46, 46, 69, 
210         46, 102, 46, 46, 46, 46, 46, 46, 
211         46, 46, 69, 46, 103, 46, 46, 46, 
212         46, 46, 46, 46, 46, 69, 46, 41, 
213         46, 46, 46, 104, 46, 46, 46, 104, 
214         46, 104, 104, 46, 104, 104, 69, 105, 
215         41, 105, 105, 105, 104, 105, 46, 46, 
216         104, 46, 104, 104, 105, 104, 104, 64, 
217         40, 40, 40, 40, 41, 40, 41, 41, 
218         41, 40, 41, 41, 106, 46, 46, 55, 
219         46, 55, 46, 46, 46, 46, 46, 46, 
220         69, 46, 46, 107, 46, 107, 46, 46, 
221         46, 46, 46, 46, 69, 46, 46, 100, 
222         46, 100, 46, 46, 46, 46, 46, 46, 
223         69, 109, 108, 111, 110, 0
224 };
225
226 static const char _wikitext_trans_targs_wi[] = {
227         35, 0, 1, 2, 35, 5, 6, 35, 
228         7, 35, 9, 35, 8, 11, 12, 35, 
229         14, 15, 16, 35, 35, 18, 24, 19, 
230         20, 21, 22, 23, 35, 25, 35, 27, 
231         28, 29, 30, 31, 35, 33, 35, 35, 
232         34, 64, 3, 35, 36, 35, 37, 35, 
233         37, 38, 39, 37, 43, 44, 56, 57, 
234         65, 66, 68, 69, 35, 35, 35, 35, 
235         35, 35, 4, 10, 13, 35, 40, 35, 
236         41, 35, 42, 37, 35, 17, 26, 32, 
237         35, 45, 46, 35, 47, 48, 35, 49, 
238         50, 35, 51, 52, 35, 53, 54, 35, 
239         55, 35, 35, 58, 59, 60, 61, 62, 
240         63, 63, 35, 67, 35, 35, 35, 35
241 };
242
243 static const char _wikitext_trans_actions_wi[] = {
244         43, 0, 0, 0, 79, 0, 0, 37, 
245         0, 35, 0, 33, 0, 0, 0, 31, 
246         0, 0, 0, 29, 81, 0, 0, 0, 
247         0, 0, 0, 0, 11, 0, 17, 0, 
248         0, 0, 0, 0, 9, 0, 15, 77, 
249         0, 7, 0, 41, 0, 21, 100, 39, 
250         91, 7, 0, 94, 7, 1, 1, 0, 
251         0, 0, 0, 0, 13, 27, 85, 73, 
252         83, 69, 0, 0, 0, 75, 0, 47, 
253         0, 45, 0, 88, 71, 0, 0, 0, 
254         61, 0, 1, 59, 0, 1, 57, 0, 
255         1, 55, 0, 1, 53, 0, 1, 51, 
256         0, 49, 19, 0, 0, 0, 0, 0, 
257         97, 100, 63, 0, 65, 23, 67, 25
258 };
259
260 static const char _wikitext_to_state_actions[] = {
261         0, 0, 0, 0, 0, 0, 0, 0, 
262         0, 0, 0, 0, 0, 0, 0, 0, 
263         0, 0, 0, 0, 0, 0, 0, 0, 
264         0, 0, 0, 0, 0, 0, 0, 0, 
265         0, 0, 0, 3, 0, 0, 0, 0, 
266         0, 0, 0, 0, 0, 0, 0, 0, 
267         0, 0, 0, 0, 0, 0, 0, 0, 
268         0, 0, 0, 0, 0, 0, 0, 0, 
269         0, 0, 0, 0, 0, 0
270 };
271
272 static const char _wikitext_from_state_actions[] = {
273         0, 0, 0, 0, 0, 0, 0, 0, 
274         0, 0, 0, 0, 0, 0, 0, 0, 
275         0, 0, 0, 0, 0, 0, 0, 0, 
276         0, 0, 0, 0, 0, 0, 0, 0, 
277         0, 0, 0, 5, 0, 0, 0, 0, 
278         0, 0, 0, 0, 0, 0, 0, 0, 
279         0, 0, 0, 0, 0, 0, 0, 0, 
280         0, 0, 0, 0, 0, 0, 0, 0, 
281         0, 0, 0, 0, 0, 0
282 };
283
284 static const char _wikitext_eof_trans[] = {
285         0, 0, 0, 0, 5, 5, 5, 5, 
286         5, 5, 5, 5, 5, 5, 5, 5, 
287         5, 21, 21, 21, 21, 21, 21, 21, 
288         21, 21, 21, 21, 21, 21, 21, 21, 
289         21, 21, 40, 0, 63, 65, 66, 70, 
290         72, 74, 70, 77, 81, 81, 84, 84, 
291         87, 87, 90, 90, 93, 93, 96, 96, 
292         98, 70, 70, 70, 70, 70, 70, 65, 
293         107, 70, 70, 70, 109, 111
294 };
295
296 static const int wikitext_start = 35;
297 static const int wikitext_first_final = 35;
298 static const int wikitext_error = 0;
299
300 static const int wikitext_en_main = 35;
301
302 #line 390 "wikitext_ragel.rl"
303
304
305 // for now we use the scanner as a tokenizer that returns one token at a time, just like ANTLR
306 // ultimately we could look at embedding all of the transformation inside the scanner itself (combined scanner/parser)
307 // pass in the last token because that's useful for the scanner to know
308 // p data pointer (required by Ragel machine); overriden with contents of last_token if supplied
309 // pe data end pointer (required by Ragel machine)
310 void next_token(token_t *out, token_t *last_token, char *p, char *pe)
311 {
312     int last_token_type = NO_TOKEN;
313     if (last_token)
314     {
315         last_token_type     = last_token->type;
316         p = last_token->stop;
317         out->line_start     = out->line_stop    = last_token->line_stop;
318         out->column_start   = out->column_stop  = last_token->column_stop;
319     }
320     else
321     {
322         out->line_start     = 1;
323         out->column_start   = 1;
324         out->line_stop      = 1;
325         out->column_stop    = 1;
326     }
327     out->type       = NO_TOKEN;
328     out->code_point = 0;
329     out->start      = p;
330     if (p == pe)
331     {
332         // all done, have reached end of input
333         out->stop  = p;
334         out->type  = END_OF_FILE;
335         return;
336     }
337
338     char    *mark;      // for manual backtracking
339     char    *eof = pe;  // required for backtracking (longest match determination)
340     int     cs;         // current state (standard Ragel)
341     char    *ts;        // token start (scanner)
342     char    *te;        // token end (scanner)
343     int     act;        // identity of last patterned matched (scanner)
344     
345 #line 346 "wikitext_ragel.c"
346         {
347         cs = wikitext_start;
348         ts = 0;
349         te = 0;
350         act = 0;
351         }
352 #line 432 "wikitext_ragel.rl"
353     
354 #line 355 "wikitext_ragel.c"
355         {
356         int _klen;
357         unsigned int _trans;
358         const char *_acts;
359         unsigned int _nacts;
360         const char *_keys;
361
362         if ( p == pe )
363                 goto _test_eof;
364         if ( cs == 0 )
365                 goto _out;
366 _resume:
367         _acts = _wikitext_actions + _wikitext_from_state_actions[cs];
368         _nacts = (unsigned int) *_acts++;
369         while ( _nacts-- > 0 ) {
370                 switch ( *_acts++ ) {
371         case 3:
372 #line 1 "wikitext_ragel.rl"
373         {ts = p;}
374         break;
375 #line 376 "wikitext_ragel.c"
376                 }
377         }
378
379         _keys = _wikitext_trans_keys + _wikitext_key_offsets[cs];
380         _trans = _wikitext_index_offsets[cs];
381
382         _klen = _wikitext_single_lengths[cs];
383         if ( _klen > 0 ) {
384                 const char *_lower = _keys;
385                 const char *_mid;
386                 const char *_upper = _keys + _klen - 1;
387                 while (1) {
388                         if ( _upper < _lower )
389                                 break;
390
391                         _mid = _lower + ((_upper-_lower) >> 1);
392                         if ( (*p) < *_mid )
393                                 _upper = _mid - 1;
394                         else if ( (*p) > *_mid )
395                                 _lower = _mid + 1;
396                         else {
397                                 _trans += (_mid - _keys);
398                                 goto _match;
399                         }
400                 }
401                 _keys += _klen;
402                 _trans += _klen;
403         }
404
405         _klen = _wikitext_range_lengths[cs];
406         if ( _klen > 0 ) {
407                 const char *_lower = _keys;
408                 const char *_mid;
409                 const char *_upper = _keys + (_klen<<1) - 2;
410                 while (1) {
411                         if ( _upper < _lower )
412                                 break;
413
414                         _mid = _lower + (((_upper-_lower) >> 1) & ~1);
415                         if ( (*p) < _mid[0] )
416                                 _upper = _mid - 2;
417                         else if ( (*p) > _mid[1] )
418                                 _lower = _mid + 2;
419                         else {
420                                 _trans += ((_mid - _keys)>>1);
421                                 goto _match;
422                         }
423                 }
424                 _trans += _klen;
425         }
426
427 _match:
428         _trans = _wikitext_indicies[_trans];
429 _eof_trans:
430         cs = _wikitext_trans_targs_wi[_trans];
431
432         if ( _wikitext_trans_actions_wi[_trans] == 0 )
433                 goto _again;
434
435         _acts = _wikitext_actions + _wikitext_trans_actions_wi[_trans];
436         _nacts = (unsigned int) *_acts++;
437         while ( _nacts-- > 0 )
438         {
439                 switch ( *_acts++ )
440                 {
441         case 0:
442 #line 32 "wikitext_ragel.rl"
443         {
444         MARK();
445     }
446         break;
447         case 1:
448 #line 37 "wikitext_ragel.rl"
449         {
450         out->code_point = *p & 0x7f;
451     }
452         break;
453         case 4:
454 #line 1 "wikitext_ragel.rl"
455         {te = p+1;}
456         break;
457         case 5:
458 #line 81 "wikitext_ragel.rl"
459         {act = 3;}
460         break;
461         case 6:
462 #line 141 "wikitext_ragel.rl"
463         {act = 11;}
464         break;
465         case 7:
466 #line 150 "wikitext_ragel.rl"
467         {act = 12;}
468         break;
469         case 8:
470 #line 260 "wikitext_ragel.rl"
471         {act = 19;}
472         break;
473         case 9:
474 #line 361 "wikitext_ragel.rl"
475         {act = 35;}
476         break;
477         case 10:
478 #line 69 "wikitext_ragel.rl"
479         {te = p+1;{
480             EMIT(NO_WIKI_START);
481             {p++; goto _out; }
482         }}
483         break;
484         case 11:
485 #line 75 "wikitext_ragel.rl"
486         {te = p+1;{
487             EMIT(NO_WIKI_END);
488             {p++; goto _out; }
489         }}
490         break;
491         case 12:
492 #line 99 "wikitext_ragel.rl"
493         {te = p+1;{
494             EMIT(TT);
495             {p++; goto _out; }
496         }}
497         break;
498         case 13:
499 #line 105 "wikitext_ragel.rl"
500         {te = p+1;{
501             EMIT(TT_START);
502             {p++; goto _out; }
503         }}
504         break;
505         case 14:
506 #line 111 "wikitext_ragel.rl"
507         {te = p+1;{
508             EMIT(TT_END);
509             {p++; goto _out; }
510         }}
511         break;
512         case 15:
513 #line 118 "wikitext_ragel.rl"
514         {te = p+1;{
515             if (out->column_start == 1 || last_token_type == BLOCKQUOTE)
516                 EMIT(BLOCKQUOTE);
517             else
518             {
519                 REWIND();
520                 EMIT(GREATER);
521             }
522             {p++; goto _out; }
523         }}
524         break;
525         case 16:
526 #line 132 "wikitext_ragel.rl"
527         {te = p+1;{
528             if (out->column_start == 1)
529                 EMIT(PRE);
530             else
531                 EMIT(SPACE);
532             {p++; goto _out; }
533         }}
534         break;
535         case 17:
536 #line 266 "wikitext_ragel.rl"
537         {te = p+1;{
538             EMIT(LINK_START);
539             {p++; goto _out; }
540         }}
541         break;
542         case 18:
543 #line 272 "wikitext_ragel.rl"
544         {te = p+1;{
545             EMIT(LINK_END);
546             {p++; goto _out; }
547         }}
548         break;
549         case 19:
550 #line 278 "wikitext_ragel.rl"
551         {te = p+1;{
552             EMIT(SEPARATOR);
553             {p++; goto _out; }
554         }}
555         break;
556         case 20:
557 #line 296 "wikitext_ragel.rl"
558         {te = p+1;{
559             EMIT(QUOT_ENTITY);
560             {p++; goto _out; }
561         }}
562         break;
563         case 21:
564 #line 302 "wikitext_ragel.rl"
565         {te = p+1;{
566             EMIT(AMP_ENTITY);
567             {p++; goto _out; }
568         }}
569         break;
570         case 22:
571 #line 308 "wikitext_ragel.rl"
572         {te = p+1;{
573             EMIT(NAMED_ENTITY);
574             {p++; goto _out; }
575         }}
576         break;
577         case 23:
578 #line 314 "wikitext_ragel.rl"
579         {te = p+1;{
580             EMIT(HEX_ENTITY);
581             {p++; goto _out; }
582         }}
583         break;
584         case 24:
585 #line 320 "wikitext_ragel.rl"
586         {te = p+1;{
587             EMIT(DECIMAL_ENTITY);
588             {p++; goto _out; }
589         }}
590         break;
591         case 25:
592 #line 326 "wikitext_ragel.rl"
593         {te = p+1;{
594             EMIT(QUOT);
595             {p++; goto _out; }
596         }}
597         break;
598         case 26:
599 #line 350 "wikitext_ragel.rl"
600         {te = p+1;{
601             EMIT(CRLF);
602             out->column_stop = 1;
603             out->line_stop++;
604             {p++; goto _out; }
605         }}
606         break;
607         case 27:
608 #line 381 "wikitext_ragel.rl"
609         {te = p+1;{
610             EMIT(DEFAULT);
611             out->column_stop = out->column_start + 1;
612             {p++; goto _out; }
613         }}
614         break;
615         case 28:
616 #line 87 "wikitext_ragel.rl"
617         {te = p;p--;{
618             EMIT(STRONG);
619             {p++; goto _out; }
620         }}
621         break;
622         case 29:
623 #line 93 "wikitext_ragel.rl"
624         {te = p;p--;{
625             EMIT(EM);
626             {p++; goto _out; }
627         }}
628         break;
629         case 30:
630 #line 118 "wikitext_ragel.rl"
631         {te = p;p--;{
632             if (out->column_start == 1 || last_token_type == BLOCKQUOTE)
633                 EMIT(BLOCKQUOTE);
634             else
635             {
636                 REWIND();
637                 EMIT(GREATER);
638             }
639             {p++; goto _out; }
640         }}
641         break;
642         case 31:
643 #line 159 "wikitext_ragel.rl"
644         {te = p;p--;{
645             if (out->column_start == 1 || last_token_type == BLOCKQUOTE)
646             {
647                 REWIND();
648                 EMIT(H6_START);
649             }
650             else if (p > mark && (p == pe || *(p + 1) == '\n' || *(p + 1) == '\r'))
651             {
652                 REWIND();
653                 EMIT(H6_END);
654             }
655             else
656                 EMIT(PRINTABLE);
657             {p++; goto _out; }
658         }}
659         break;
660         case 32:
661 #line 176 "wikitext_ragel.rl"
662         {te = p;p--;{
663             if (out->column_start == 1 || last_token_type == BLOCKQUOTE)
664             {
665                 REWIND();
666                 EMIT(H5_START);
667             }
668             else if (p > mark && (p == pe || *(p + 1) == '\n' || *(p + 1) == '\r'))
669             {
670                 REWIND();
671                 EMIT(H6_END);
672             }
673                 EMIT(PRINTABLE);
674             {p++; goto _out; }
675         }}
676         break;
677         case 33:
678 #line 192 "wikitext_ragel.rl"
679         {te = p;p--;{
680             if (out->column_start == 1 || last_token_type == BLOCKQUOTE)
681             {
682                 REWIND();
683                 EMIT(H4_START);
684             }
685             else if (p > mark && (p == pe || *(p + 1) == '\n' || *(p + 1) == '\r'))
686             {
687                 REWIND();
688                 EMIT(H4_END);
689             }
690             else
691                 EMIT(PRINTABLE);
692             {p++; goto _out; }
693         }}
694         break;
695         case 34:
696 #line 209 "wikitext_ragel.rl"
697         {te = p;p--;{
698             if (out->column_start == 1 || last_token_type == BLOCKQUOTE)
699             {
700                 REWIND();
701                 EMIT(H3_START);
702             }
703             else if (p > mark && (p == pe || *(p + 1) == '\n' || *(p + 1) == '\r'))
704             {
705                 REWIND();
706                 EMIT(H3_END);
707             }
708             else
709                 EMIT(PRINTABLE);
710             {p++; goto _out; }
711         }}
712         break;
713         case 35:
714 #line 226 "wikitext_ragel.rl"
715         {te = p;p--;{
716             if (out->column_start == 1 || last_token_type == BLOCKQUOTE)
717             {
718                 REWIND();
719                 EMIT(H2_START);
720             }
721             else if (p > mark && (p == pe || *(p + 1) == '\n' || *(p + 1) == '\r'))
722             {
723                 REWIND();
724                 EMIT(H2_END);
725             }
726             else
727                 EMIT(PRINTABLE);
728             {p++; goto _out; }
729         }}
730         break;
731         case 36:
732 #line 243 "wikitext_ragel.rl"
733         {te = p;p--;{
734             if (out->column_start == 1 || last_token_type == BLOCKQUOTE)
735             {
736                 REWIND();
737                 EMIT(H1_START);
738             }
739             else if (p > mark && (p == pe || *(p + 1) == '\n' || *(p + 1) == '\r'))
740             {
741                 REWIND();
742                 EMIT(H1_END);
743             }
744             else
745                 EMIT(PRINTABLE);
746             {p++; goto _out; }
747         }}
748         break;
749         case 37:
750 #line 260 "wikitext_ragel.rl"
751         {te = p;p--;{
752             EMIT(URI);
753             {p++; goto _out; }
754         }}
755         break;
756         case 38:
757 #line 284 "wikitext_ragel.rl"
758         {te = p;p--;{
759             EMIT(EXT_LINK_START);
760             {p++; goto _out; }
761         }}
762         break;
763         case 39:
764 #line 290 "wikitext_ragel.rl"
765         {te = p;p--;{
766             EMIT(EXT_LINK_END);
767             {p++; goto _out; }
768         }}
769         break;
770         case 40:
771 #line 332 "wikitext_ragel.rl"
772         {te = p;p--;{
773             EMIT(AMP);
774             {p++; goto _out; }
775         }}
776         break;
777         case 41:
778 #line 338 "wikitext_ragel.rl"
779         {te = p;p--;{
780             EMIT(LESS);
781             {p++; goto _out; }
782         }}
783         break;
784         case 42:
785 #line 350 "wikitext_ragel.rl"
786         {te = p;p--;{
787             EMIT(CRLF);
788             out->column_stop = 1;
789             out->line_stop++;
790             {p++; goto _out; }
791         }}
792         break;
793         case 43:
794 #line 361 "wikitext_ragel.rl"
795         {te = p;p--;{
796             EMIT(PRINTABLE);
797             {p++; goto _out; }
798         }}
799         break;
800         case 44:
801 #line 260 "wikitext_ragel.rl"
802         {{p = ((te))-1;}{
803             EMIT(URI);
804             {p++; goto _out; }
805         }}
806         break;
807         case 45:
808 #line 332 "wikitext_ragel.rl"
809         {{p = ((te))-1;}{
810             EMIT(AMP);
811             {p++; goto _out; }
812         }}
813         break;
814         case 46:
815 #line 338 "wikitext_ragel.rl"
816         {{p = ((te))-1;}{
817             EMIT(LESS);
818             {p++; goto _out; }
819         }}
820         break;
821         case 47:
822 #line 1 "wikitext_ragel.rl"
823         {       switch( act ) {
824         case 3:
825         {{p = ((te))-1;}
826             EMIT(STRONG_EM);
827             {p++; goto _out; }
828         }
829         break;
830         case 11:
831         {{p = ((te))-1;}
832             if (out->column_start == 1 || last_token_type == OL || last_token_type == UL || last_token_type == BLOCKQUOTE)
833                 EMIT(OL);
834             else
835                 EMIT(PRINTABLE);
836             {p++; goto _out; }
837         }
838         break;
839         case 12:
840         {{p = ((te))-1;}
841             if (out->column_start == 1 || last_token_type == OL || last_token_type == UL || last_token_type == BLOCKQUOTE)
842                 EMIT(UL);
843             else
844                 EMIT(PRINTABLE);
845             {p++; goto _out; }
846         }
847         break;
848         case 19:
849         {{p = ((te))-1;}
850             EMIT(URI);
851             {p++; goto _out; }
852         }
853         break;
854         case 35:
855         {{p = ((te))-1;}
856             EMIT(PRINTABLE);
857             {p++; goto _out; }
858         }
859         break;
860         default: break;
861         }
862         }
863         break;
864 #line 865 "wikitext_ragel.c"
865                 }
866         }
867
868 _again:
869         _acts = _wikitext_actions + _wikitext_to_state_actions[cs];
870         _nacts = (unsigned int) *_acts++;
871         while ( _nacts-- > 0 ) {
872                 switch ( *_acts++ ) {
873         case 2:
874 #line 1 "wikitext_ragel.rl"
875         {ts = 0;}
876         break;
877 #line 878 "wikitext_ragel.c"
878                 }
879         }
880
881         if ( cs == 0 )
882                 goto _out;
883         if ( ++p != pe )
884                 goto _resume;
885         _test_eof: {}
886         if ( p == eof )
887         {
888         if ( _wikitext_eof_trans[cs] > 0 ) {
889                 _trans = _wikitext_eof_trans[cs] - 1;
890                 goto _eof_trans;
891         }
892         }
893
894         _out: {}
895         }
896 #line 433 "wikitext_ragel.rl"
897     if (cs == wikitext_error)
898         rb_raise(eWikitextError, "failed before finding a token");
899     else if (out->type == NO_TOKEN)
900         rb_raise(eWikitextError, "failed to produce a token");
901 }