]> git.wincent.com - wikitext.git/commitdiff
Tokenize alphanumeric characters separately from other printables
authorWincent Colaiuta <win@wincent.com>
Wed, 23 Apr 2008 23:36:54 +0000 (01:36 +0200)
committerWincent Colaiuta <win@wincent.com>
Wed, 23 Apr 2008 23:36:54 +0000 (01:36 +0200)
This is a preliminary step prior to implementing tokenize for the
purposes of full-text search indexing. Basically we want to split
input up into three "interesting" types of tokens: URIs, email
addresses, and alphanumeric words; everything else will be
ignored.

In other words, input like:

  <nowiki>foo don't bar, win@wincent.com: http://example.com/

Would yield these tokens: foo, don, t, bar, win@wincent.com and
http://example.com/. Note that the "interesting" words can only ever
be ASCII in this initial approximation.

Signed-off-by: Wincent Colaiuta <win@wincent.com>
ext/parser.c
ext/token.c
ext/token.h
ext/wikitext_ragel.c
ext/wikitext_ragel.rl
spec/tokenizing_spec.rb

index c24b6db04f6a34a24ab05f25eba3384e000b9e16..c4dca96ae42e5a42d6829ad4f6e5b936769cd630 100644 (file)
@@ -1912,7 +1912,7 @@ VALUE Wikitext_parser_parse(int argc, VALUE *argv, VALUE self)
             //          example [[foo €]]
             //          renders <a href="/wiki/Foo_%E2%82%AC">foo €</a>
             // we'll impose similar restrictions here for the link target; allowed tokens will be:
-            //      SPACE, SPECIAL_URI_CHARS, PRINTABLE, DEFAULT, QUOT and AMP
+            //      SPACE, SPECIAL_URI_CHARS, PRINTABLE, ALNUM, DEFAULT, QUOT and AMP
             // everything else will be rejected
             case LINK_START:
                 i = NIL_P(parser->capture) ? parser->output : parser->capture;
@@ -1947,6 +1947,7 @@ VALUE Wikitext_parser_parse(int argc, VALUE *argv, VALUE self)
                         if (type == SPACE               ||
                             type == SPECIAL_URI_CHARS   ||
                             type == PRINTABLE           ||
+                            type == ALNUM               ||
                             type == DEFAULT             ||
                             type == QUOT                ||
                             type == QUOT_ENTITY         ||
@@ -2218,13 +2219,13 @@ VALUE Wikitext_parser_parse(int argc, VALUE *argv, VALUE self)
                     _Wikitext_pop_excess_elements(parser);
                     _Wikitext_start_para_if_necessary(parser);
 
-                    // scan ahead consuming PRINTABLE and SPECIAL_URI_CHARS tokens
+                    // scan ahead consuming PRINTABLE, ALNUM and SPECIAL_URI_CHARS tokens
                     // will cheat here and abuse the link_target capture buffer to accumulate text
                     if (NIL_P(parser->link_target))
                         parser->link_target = rb_str_new2("");
                     while (NEXT_TOKEN(), (type = token->type))
                     {
-                        if (type == PRINTABLE || type == SPECIAL_URI_CHARS)
+                        if (type == PRINTABLE || type == ALNUM || type == SPECIAL_URI_CHARS)
                             rb_str_cat(parser->link_target, token->start, TOKEN_LEN(token));
                         else if (type == IMG_END)
                         {
@@ -2332,6 +2333,7 @@ VALUE Wikitext_parser_parse(int argc, VALUE *argv, VALUE self)
 
             case SPECIAL_URI_CHARS:
             case PRINTABLE:
+            case ALNUM:
             case IMG_END:
             case LEFT_CURLY:
             case RIGHT_CURLY:
index e2f51f1a7a696d8dc4345fefae16892f2bb19247..48cc04bcc29664455497ff4a53b650d311e8e1b3 100644 (file)
@@ -85,6 +85,7 @@ VALUE Wikitext_parser_token_types(VALUE self)
     SET_TOKEN_TYPE(CRLF);
     SET_TOKEN_TYPE(SPECIAL_URI_CHARS);
     SET_TOKEN_TYPE(PRINTABLE);
+    SET_TOKEN_TYPE(ALNUM);
     SET_TOKEN_TYPE(DEFAULT);
     SET_TOKEN_TYPE(END_OF_FILE);
 
index 371b59063599eef0ee72bf824a3f979045637783..19387d706105ba7c2a1a53d4783084d6445dffbb 100644 (file)
@@ -91,6 +91,7 @@ enum token_types {
     CRLF,
     SPECIAL_URI_CHARS,
     PRINTABLE,
+    ALNUM,
     DEFAULT,
     END_OF_FILE
 };
index c22fb9321e484dcf47841464a253bc113d6dac84..4bcc8cd08ab0a58377500d2d167def2c6b586935 100644 (file)
@@ -38,7 +38,7 @@ static const int wikitext_error = 0;
 
 static const int wikitext_en_main = 94;
 
-#line 455 "wikitext_ragel.rl"
+#line 461 "wikitext_ragel.rl"
 
 
 // for now we use the scanner as a tokenizer that returns one token at a time, just like ANTLR
@@ -88,7 +88,7 @@ void next_token(token_t *out, token_t *last_token, char *p, char *pe)
        te = 0;
        act = 0;
        }
-#line 497 "wikitext_ragel.rl"
+#line 503 "wikitext_ragel.rl"
     
 #line 94 "wikitext_ragel.c"
        {
@@ -102,7 +102,7 @@ tr0:
         out->code_point = ((uint32_t)(*(p - 1)) & 0x1f) << 6 |
             (*p & 0x3f);
     }
-#line 446 "wikitext_ragel.rl"
+#line 452 "wikitext_ragel.rl"
        {te = p+1;{
             EMIT(DEFAULT);
             out->column_stop = out->column_start + 1;
@@ -116,7 +116,7 @@ tr3:
             ((uint32_t)(*(p - 1)) & 0x3f) << 6 |
             (*p & 0x3f);
     }
-#line 446 "wikitext_ragel.rl"
+#line 452 "wikitext_ragel.rl"
        {te = p+1;{
             EMIT(DEFAULT);
             out->column_stop = out->column_start + 1;
@@ -131,7 +131,7 @@ tr6:
             ((uint32_t)(*(p - 1)) & 0x3f) << 6 |
             (*p & 0x3f);
     }
-#line 446 "wikitext_ragel.rl"
+#line 452 "wikitext_ragel.rl"
        {te = p+1;{
             EMIT(DEFAULT);
             out->column_stop = out->column_start + 1;
@@ -202,6 +202,12 @@ tr23:
         }
        break;
        case 42:
+       {{p = ((te))-1;}
+            EMIT(ALNUM);
+            {p++; cs = 94; goto _out;}
+        }
+       break;
+       case 43:
        {{p = ((te))-1;}
             EMIT(PRINTABLE);
             {p++; cs = 94; goto _out;}
@@ -303,9 +309,9 @@ tr94:
         }}
        goto st94;
 tr95:
-#line 426 "wikitext_ragel.rl"
+#line 420 "wikitext_ragel.rl"
        {{p = ((te))-1;}{
-            EMIT(PRINTABLE);
+            EMIT(ALNUM);
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
@@ -321,7 +327,7 @@ tr110:
        {
         out->code_point = *p & 0x7f;
     }
-#line 446 "wikitext_ragel.rl"
+#line 452 "wikitext_ragel.rl"
        {te = p+1;{
             EMIT(DEFAULT);
             out->column_stop = out->column_start + 1;
@@ -376,21 +382,21 @@ tr120:
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr132:
+tr133:
 #line 158 "wikitext_ragel.rl"
        {te = p+1;{
             EMIT(TT);
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr134:
+tr135:
 #line 305 "wikitext_ragel.rl"
        {te = p+1;{
             EMIT(SEPARATOR);
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr136:
+tr137:
 #line 401 "wikitext_ragel.rl"
        {te = p;p--;{
             EMIT(CRLF);
@@ -399,7 +405,7 @@ tr136:
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr137:
+tr138:
 #line 401 "wikitext_ragel.rl"
        {te = p+1;{
             EMIT(CRLF);
@@ -408,7 +414,7 @@ tr137:
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr138:
+tr139:
 #line 190 "wikitext_ragel.rl"
        {te = p;p--;{
             if (out->column_start == 1 || last_token_type == BLOCKQUOTE)
@@ -421,28 +427,28 @@ tr138:
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr140:
+tr141:
 #line 414 "wikitext_ragel.rl"
        {te = p;p--;{
             EMIT(SPECIAL_URI_CHARS);
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr141:
-#line 426 "wikitext_ragel.rl"
+tr142:
+#line 432 "wikitext_ragel.rl"
        {te = p;p--;{
             EMIT(PRINTABLE);
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr142:
+tr143:
 #line 359 "wikitext_ragel.rl"
        {te = p;p--;{
             EMIT(AMP);
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr146:
+tr147:
 #line 116 "wikitext_ragel.rl"
        {te = p;p--;{
             if (DISTANCE() == 5)
@@ -461,7 +467,7 @@ tr146:
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr150:
+tr151:
 #line 116 "wikitext_ragel.rl"
        {te = p+1;{
             if (DISTANCE() == 5)
@@ -480,7 +486,7 @@ tr150:
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr152:
+tr153:
 #line 287 "wikitext_ragel.rl"
        {te = p;p--;{
             EMIT(MAIL);
@@ -488,13 +494,20 @@ tr152:
         }}
        goto st94;
 tr157:
+#line 420 "wikitext_ragel.rl"
+       {te = p;p--;{
+            EMIT(ALNUM);
+            {p++; cs = 94; goto _out;}
+        }}
+       goto st94;
+tr158:
 #line 365 "wikitext_ragel.rl"
        {te = p;p--;{
             EMIT(LESS);
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr165:
+tr166:
 #line 228 "wikitext_ragel.rl"
        {te = p;p--;{
             if (out->column_start == 1 || last_token_type == BLOCKQUOTE || last_token_type == BLOCKQUOTE_START)
@@ -548,7 +561,7 @@ tr165:
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr167:
+tr168:
 #line 177 "wikitext_ragel.rl"
        {te = p;p--;{
             if (out->column_start == 1 || last_token_type == BLOCKQUOTE)
@@ -561,7 +574,7 @@ tr167:
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr168:
+tr169:
 #line 177 "wikitext_ragel.rl"
        {te = p+1;{
             if (out->column_start == 1 || last_token_type == BLOCKQUOTE)
@@ -574,63 +587,63 @@ tr168:
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr172:
+tr173:
 #line 281 "wikitext_ragel.rl"
        {te = p;p--;{
             EMIT(URI);
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr186:
+tr187:
 #line 311 "wikitext_ragel.rl"
        {te = p;p--;{
             EMIT(EXT_LINK_START);
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr187:
+tr188:
 #line 293 "wikitext_ragel.rl"
        {te = p+1;{
             EMIT(LINK_START);
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr188:
+tr189:
 #line 317 "wikitext_ragel.rl"
        {te = p;p--;{
             EMIT(EXT_LINK_END);
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr189:
+tr190:
 #line 299 "wikitext_ragel.rl"
        {te = p+1;{
             EMIT(LINK_END);
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr190:
+tr191:
 #line 389 "wikitext_ragel.rl"
        {te = p;p--;{
             EMIT(LEFT_CURLY);
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr191:
+tr192:
 #line 377 "wikitext_ragel.rl"
        {te = p+1;{
             EMIT(IMG_START);
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr192:
+tr193:
 #line 395 "wikitext_ragel.rl"
        {te = p;p--;{
             EMIT(RIGHT_CURLY);
             {p++; cs = 94; goto _out;}
         }}
        goto st94;
-tr193:
+tr194:
 #line 383 "wikitext_ragel.rl"
        {te = p+1;{
             EMIT(IMG_END);
@@ -645,7 +658,7 @@ st94:
 case 94:
 #line 1 "wikitext_ragel.rl"
        {ts = p;}
-#line 649 "wikitext_ragel.c"
+#line 662 "wikitext_ragel.c"
        switch( (*p) ) {
                case 10: goto tr111;
                case 13: goto tr112;
@@ -657,27 +670,29 @@ case 94:
                case 39: goto st100;
                case 42: goto tr120;
                case 43: goto st98;
+               case 45: goto tr121;
                case 46: goto tr122;
                case 47: goto st98;
-               case 60: goto tr123;
-               case 61: goto tr124;
-               case 62: goto tr125;
+               case 60: goto tr124;
+               case 61: goto tr125;
+               case 62: goto tr126;
                case 64: goto st98;
-               case 70: goto tr126;
-               case 72: goto tr127;
-               case 77: goto tr128;
-               case 83: goto tr129;
+               case 70: goto tr127;
+               case 72: goto tr128;
+               case 77: goto tr129;
+               case 83: goto tr130;
                case 91: goto st136;
                case 92: goto st98;
                case 93: goto st137;
                case 94: goto st98;
-               case 96: goto tr132;
-               case 102: goto tr126;
-               case 104: goto tr127;
-               case 109: goto tr128;
-               case 115: goto tr129;
+               case 95: goto tr121;
+               case 96: goto tr133;
+               case 102: goto tr127;
+               case 104: goto tr128;
+               case 109: goto tr129;
+               case 115: goto tr130;
                case 123: goto st138;
-               case 124: goto tr134;
+               case 124: goto tr135;
                case 125: goto st139;
                case 126: goto st98;
                case 127: goto tr110;
@@ -695,17 +710,17 @@ case 94:
                } else
                        goto st2;
        } else if ( (*p) > 37 ) {
-               if ( (*p) < 45 ) {
+               if ( (*p) < 48 ) {
                        if ( 40 <= (*p) && (*p) <= 44 )
                                goto st97;
                } else if ( (*p) > 57 ) {
                        if ( (*p) > 63 ) {
                                if ( 65 <= (*p) && (*p) <= 122 )
-                                       goto tr121;
+                                       goto tr123;
                        } else if ( (*p) >= 58 )
                                goto st97;
                } else
-                       goto tr121;
+                       goto tr123;
        } else
                goto st98;
        goto st0;
@@ -764,10 +779,10 @@ st95:
        if ( ++p == pe )
                goto _test_eof95;
 case 95:
-#line 768 "wikitext_ragel.c"
+#line 783 "wikitext_ragel.c"
        if ( (*p) == 10 )
-               goto tr137;
-       goto tr136;
+               goto tr138;
+       goto tr137;
 tr113:
 #line 36 "wikitext_ragel.rl"
        {
@@ -778,10 +793,10 @@ st96:
        if ( ++p == pe )
                goto _test_eof96;
 case 96:
-#line 782 "wikitext_ragel.c"
+#line 797 "wikitext_ragel.c"
        if ( (*p) == 32 )
                goto st96;
-       goto tr138;
+       goto tr139;
 st97:
        if ( ++p == pe )
                goto _test_eof97;
@@ -797,7 +812,7 @@ case 97:
                        goto st97;
        } else if ( (*p) >= 40 )
                goto st97;
-       goto tr140;
+       goto tr141;
 st98:
        if ( ++p == pe )
                goto _test_eof98;
@@ -805,24 +820,17 @@ case 98:
        switch( (*p) ) {
                case 43: goto st98;
                case 45: goto st98;
+               case 47: goto st98;
+               case 64: goto st98;
                case 92: goto st98;
                case 126: goto st98;
        }
-       if ( (*p) < 64 ) {
-               if ( (*p) > 37 ) {
-                       if ( 47 <= (*p) && (*p) <= 57 )
-                               goto st98;
-               } else if ( (*p) >= 36 )
+       if ( (*p) > 37 ) {
+               if ( 94 <= (*p) && (*p) <= 95 )
                        goto st98;
-       } else if ( (*p) > 90 ) {
-               if ( (*p) > 95 ) {
-                       if ( 97 <= (*p) && (*p) <= 122 )
-                               goto st98;
-               } else if ( (*p) >= 94 )
-                       goto st98;
-       } else
+       } else if ( (*p) >= 36 )
                goto st98;
-       goto tr141;
+       goto tr142;
 tr118:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
@@ -831,7 +839,7 @@ st99:
        if ( ++p == pe )
                goto _test_eof99;
 case 99:
-#line 835 "wikitext_ragel.c"
+#line 843 "wikitext_ragel.c"
        switch( (*p) ) {
                case 35: goto st7;
                case 97: goto st13;
@@ -842,7 +850,7 @@ case 99:
                        goto st11;
        } else if ( (*p) >= 65 )
                goto st11;
-       goto tr142;
+       goto tr143;
 st7:
        if ( ++p == pe )
                goto _test_eof7;
@@ -1036,61 +1044,61 @@ st100:
 case 100:
        if ( (*p) == 39 )
                goto st101;
-       goto tr146;
+       goto tr147;
 st101:
        if ( ++p == pe )
                goto _test_eof101;
 case 101:
        if ( (*p) == 39 )
                goto st102;
-       goto tr146;
+       goto tr147;
 st102:
        if ( ++p == pe )
                goto _test_eof102;
 case 102:
        if ( (*p) == 39 )
                goto st103;
-       goto tr146;
+       goto tr147;
 st103:
        if ( ++p == pe )
                goto _test_eof103;
 case 103:
        if ( (*p) == 39 )
-               goto tr150;
-       goto tr146;
+               goto tr151;
+       goto tr147;
 tr121:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
-#line 426 "wikitext_ragel.rl"
-       {act = 42;}
+#line 432 "wikitext_ragel.rl"
+       {act = 43;}
        goto st104;
 st104:
        if ( ++p == pe )
                goto _test_eof104;
 case 104:
-#line 1072 "wikitext_ragel.c"
+#line 1080 "wikitext_ragel.c"
        switch( (*p) ) {
                case 43: goto st98;
-               case 46: goto st20;
+               case 45: goto tr121;
                case 47: goto st98;
-               case 64: goto st109;
+               case 64: goto tr152;
                case 92: goto st98;
                case 94: goto st98;
                case 95: goto tr121;
                case 126: goto st98;
        }
-       if ( (*p) < 45 ) {
+       if ( (*p) < 46 ) {
                if ( 36 <= (*p) && (*p) <= 37 )
                        goto st98;
        } else if ( (*p) > 57 ) {
                if ( (*p) > 90 ) {
                        if ( 97 <= (*p) && (*p) <= 122 )
-                               goto tr121;
+                               goto st20;
                } else if ( (*p) >= 65 )
-                       goto tr121;
+                       goto st20;
        } else
-               goto tr121;
-       goto tr141;
+               goto st20;
+       goto tr142;
 st20:
        if ( ++p == pe )
                goto _test_eof20;
@@ -1177,7 +1185,7 @@ st105:
        if ( ++p == pe )
                goto _test_eof105;
 case 105:
-#line 1181 "wikitext_ragel.c"
+#line 1189 "wikitext_ragel.c"
        if ( (*p) == 46 )
                goto st23;
        if ( (*p) < 65 ) {
@@ -1185,11 +1193,11 @@ case 105:
                        goto st22;
        } else if ( (*p) > 90 ) {
                if ( 97 <= (*p) && (*p) <= 122 )
-                       goto tr153;
+                       goto tr154;
        } else
-               goto tr153;
-       goto tr152;
-tr153:
+               goto tr154;
+       goto tr153;
+tr154:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
 #line 287 "wikitext_ragel.rl"
@@ -1199,7 +1207,7 @@ st106:
        if ( ++p == pe )
                goto _test_eof106;
 case 106:
-#line 1203 "wikitext_ragel.c"
+#line 1211 "wikitext_ragel.c"
        if ( (*p) == 46 )
                goto st23;
        if ( (*p) < 65 ) {
@@ -1207,11 +1215,11 @@ case 106:
                        goto st22;
        } else if ( (*p) > 90 ) {
                if ( 97 <= (*p) && (*p) <= 122 )
-                       goto tr154;
+                       goto tr155;
        } else
-               goto tr154;
-       goto tr152;
-tr154:
+               goto tr155;
+       goto tr153;
+tr155:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
 #line 287 "wikitext_ragel.rl"
@@ -1221,7 +1229,7 @@ st107:
        if ( ++p == pe )
                goto _test_eof107;
 case 107:
-#line 1225 "wikitext_ragel.c"
+#line 1233 "wikitext_ragel.c"
        if ( (*p) == 46 )
                goto st23;
        if ( (*p) < 65 ) {
@@ -1229,11 +1237,11 @@ case 107:
                        goto st22;
        } else if ( (*p) > 90 ) {
                if ( 97 <= (*p) && (*p) <= 122 )
-                       goto tr155;
+                       goto tr156;
        } else
-               goto tr155;
-       goto tr152;
-tr155:
+               goto tr156;
+       goto tr153;
+tr156:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
 #line 287 "wikitext_ragel.rl"
@@ -1243,7 +1251,7 @@ st108:
        if ( ++p == pe )
                goto _test_eof108;
 case 108:
-#line 1247 "wikitext_ragel.c"
+#line 1255 "wikitext_ragel.c"
        if ( (*p) == 46 )
                goto st23;
        if ( (*p) < 65 ) {
@@ -1254,11 +1262,18 @@ case 108:
                        goto st22;
        } else
                goto st22;
-       goto tr152;
+       goto tr153;
+tr152:
+#line 1 "wikitext_ragel.rl"
+       {te = p+1;}
+#line 432 "wikitext_ragel.rl"
+       {act = 43;}
+       goto st109;
 st109:
        if ( ++p == pe )
                goto _test_eof109;
 case 109:
+#line 1277 "wikitext_ragel.c"
        switch( (*p) ) {
                case 43: goto st98;
                case 45: goto st98;
@@ -1270,65 +1285,29 @@ case 109:
        if ( (*p) < 65 ) {
                if ( (*p) > 37 ) {
                        if ( 48 <= (*p) && (*p) <= 57 )
-                               goto tr156;
+                               goto st22;
                } else if ( (*p) >= 36 )
                        goto st98;
        } else if ( (*p) > 90 ) {
                if ( (*p) > 95 ) {
                        if ( 97 <= (*p) && (*p) <= 122 )
-                               goto tr156;
+                               goto st22;
                } else if ( (*p) >= 94 )
                        goto st98;
        } else
-               goto tr156;
-       goto tr141;
-tr156:
+               goto st22;
+       goto tr142;
+tr122:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
-#line 426 "wikitext_ragel.rl"
-       {act = 42;}
+#line 414 "wikitext_ragel.rl"
+       {act = 41;}
        goto st110;
 st110:
        if ( ++p == pe )
                goto _test_eof110;
 case 110:
-#line 1296 "wikitext_ragel.c"
-       switch( (*p) ) {
-               case 43: goto st98;
-               case 46: goto st23;
-               case 64: goto st98;
-               case 92: goto st98;
-               case 126: goto st98;
-       }
-       if ( (*p) < 48 ) {
-               if ( (*p) > 37 ) {
-                       if ( 45 <= (*p) && (*p) <= 47 )
-                               goto st98;
-               } else if ( (*p) >= 36 )
-                       goto st98;
-       } else if ( (*p) > 57 ) {
-               if ( (*p) < 94 ) {
-                       if ( 65 <= (*p) && (*p) <= 90 )
-                               goto tr156;
-               } else if ( (*p) > 95 ) {
-                       if ( 97 <= (*p) && (*p) <= 122 )
-                               goto tr156;
-               } else
-                       goto st98;
-       } else
-               goto tr156;
-       goto tr141;
-tr122:
-#line 1 "wikitext_ragel.rl"
-       {te = p+1;}
-#line 414 "wikitext_ragel.rl"
-       {act = 41;}
-       goto st111;
-st111:
-       if ( ++p == pe )
-               goto _test_eof111;
-case 111:
-#line 1332 "wikitext_ragel.c"
+#line 1311 "wikitext_ragel.c"
        switch( (*p) ) {
                case 33: goto st97;
                case 44: goto st97;
@@ -1352,8 +1331,35 @@ case 111:
                        goto st20;
        } else
                goto st97;
-       goto tr140;
+       goto tr141;
 tr123:
+#line 1 "wikitext_ragel.rl"
+       {te = p+1;}
+#line 420 "wikitext_ragel.rl"
+       {act = 42;}
+       goto st111;
+st111:
+       if ( ++p == pe )
+               goto _test_eof111;
+case 111:
+#line 1346 "wikitext_ragel.c"
+       switch( (*p) ) {
+               case 64: goto st21;
+               case 95: goto st20;
+       }
+       if ( (*p) < 48 ) {
+               if ( 45 <= (*p) && (*p) <= 46 )
+                       goto st20;
+       } else if ( (*p) > 57 ) {
+               if ( (*p) > 90 ) {
+                       if ( 97 <= (*p) && (*p) <= 122 )
+                               goto tr123;
+               } else if ( (*p) >= 65 )
+                       goto tr123;
+       } else
+               goto tr123;
+       goto tr157;
+tr124:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
        goto st112;
@@ -1361,7 +1367,7 @@ st112:
        if ( ++p == pe )
                goto _test_eof112;
 case 112:
-#line 1365 "wikitext_ragel.c"
+#line 1371 "wikitext_ragel.c"
        switch( (*p) ) {
                case 47: goto st25;
                case 66: goto st55;
@@ -1377,7 +1383,7 @@ case 112:
                case 115: goto st76;
                case 116: goto st82;
        }
-       goto tr157;
+       goto tr158;
 st25:
        if ( ++p == pe )
                goto _test_eof25;
@@ -1895,7 +1901,7 @@ case 83:
        if ( (*p) == 62 )
                goto tr94;
        goto tr30;
-tr124:
+tr125:
 #line 36 "wikitext_ragel.rl"
        {
         MARK();
@@ -1905,20 +1911,20 @@ st113:
        if ( ++p == pe )
                goto _test_eof113;
 case 113:
-#line 1909 "wikitext_ragel.c"
+#line 1915 "wikitext_ragel.c"
        switch( (*p) ) {
                case 32: goto st114;
-               case 61: goto tr124;
+               case 61: goto tr125;
        }
-       goto tr165;
+       goto tr166;
 st114:
        if ( ++p == pe )
                goto _test_eof114;
 case 114:
        if ( (*p) == 32 )
                goto st114;
-       goto tr165;
-tr125:
+       goto tr166;
+tr126:
 #line 36 "wikitext_ragel.rl"
        {
         MARK();
@@ -1928,49 +1934,43 @@ st115:
        if ( ++p == pe )
                goto _test_eof115;
 case 115:
-#line 1932 "wikitext_ragel.c"
+#line 1938 "wikitext_ragel.c"
        if ( (*p) == 32 )
-               goto tr168;
-       goto tr167;
-tr126:
+               goto tr169;
+       goto tr168;
+tr127:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
-#line 426 "wikitext_ragel.rl"
+#line 420 "wikitext_ragel.rl"
        {act = 42;}
        goto st116;
 st116:
        if ( ++p == pe )
                goto _test_eof116;
 case 116:
-#line 1946 "wikitext_ragel.c"
+#line 1952 "wikitext_ragel.c"
        switch( (*p) ) {
-               case 43: goto st98;
-               case 46: goto st20;
-               case 47: goto st98;
-               case 64: goto st109;
-               case 84: goto tr169;
-               case 92: goto st98;
-               case 94: goto st98;
-               case 95: goto tr121;
-               case 116: goto tr169;
-               case 126: goto st98;
+               case 64: goto st21;
+               case 84: goto tr170;
+               case 95: goto st20;
+               case 116: goto tr170;
        }
-       if ( (*p) < 45 ) {
-               if ( 36 <= (*p) && (*p) <= 37 )
-                       goto st98;
+       if ( (*p) < 48 ) {
+               if ( 45 <= (*p) && (*p) <= 46 )
+                       goto st20;
        } else if ( (*p) > 57 ) {
                if ( (*p) > 90 ) {
                        if ( 97 <= (*p) && (*p) <= 122 )
-                               goto tr121;
+                               goto tr123;
                } else if ( (*p) >= 65 )
-                       goto tr121;
+                       goto tr123;
        } else
-               goto tr121;
-       goto tr141;
-tr169:
+               goto tr123;
+       goto tr157;
+tr170:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
-#line 426 "wikitext_ragel.rl"
+#line 420 "wikitext_ragel.rl"
        {act = 42;}
        goto st117;
 st117:
@@ -1979,63 +1979,51 @@ st117:
 case 117:
 #line 1981 "wikitext_ragel.c"
        switch( (*p) ) {
-               case 43: goto st98;
-               case 46: goto st20;
-               case 47: goto st98;
-               case 64: goto st109;
-               case 80: goto tr170;
-               case 92: goto st98;
-               case 94: goto st98;
-               case 95: goto tr121;
-               case 112: goto tr170;
-               case 126: goto st98;
+               case 64: goto st21;
+               case 80: goto tr171;
+               case 95: goto st20;
+               case 112: goto tr171;
        }
-       if ( (*p) < 45 ) {
-               if ( 36 <= (*p) && (*p) <= 37 )
-                       goto st98;
+       if ( (*p) < 48 ) {
+               if ( 45 <= (*p) && (*p) <= 46 )
+                       goto st20;
        } else if ( (*p) > 57 ) {
                if ( (*p) > 90 ) {
                        if ( 97 <= (*p) && (*p) <= 122 )
-                               goto tr121;
+                               goto tr123;
                } else if ( (*p) >= 65 )
-                       goto tr121;
+                       goto tr123;
        } else
-               goto tr121;
-       goto tr141;
-tr170:
+               goto tr123;
+       goto tr157;
+tr171:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
-#line 426 "wikitext_ragel.rl"
+#line 420 "wikitext_ragel.rl"
        {act = 42;}
        goto st118;
 st118:
        if ( ++p == pe )
                goto _test_eof118;
 case 118:
-#line 2016 "wikitext_ragel.c"
+#line 2010 "wikitext_ragel.c"
        switch( (*p) ) {
-               case 43: goto st98;
-               case 46: goto st20;
-               case 47: goto st98;
                case 58: goto st84;
-               case 64: goto st109;
-               case 92: goto st98;
-               case 94: goto st98;
-               case 95: goto tr121;
-               case 126: goto st98;
+               case 64: goto st21;
+               case 95: goto st20;
        }
-       if ( (*p) < 45 ) {
-               if ( 36 <= (*p) && (*p) <= 37 )
-                       goto st98;
+       if ( (*p) < 48 ) {
+               if ( 45 <= (*p) && (*p) <= 46 )
+                       goto st20;
        } else if ( (*p) > 57 ) {
                if ( (*p) > 90 ) {
                        if ( 97 <= (*p) && (*p) <= 122 )
-                               goto tr121;
+                               goto tr123;
                } else if ( (*p) >= 65 )
-                       goto tr121;
+                       goto tr123;
        } else
-               goto tr121;
-       goto tr141;
+               goto tr123;
+       goto tr157;
 st84:
        if ( ++p == pe )
                goto _test_eof84;
@@ -2083,7 +2071,7 @@ st119:
        if ( ++p == pe )
                goto _test_eof119;
 case 119:
-#line 2087 "wikitext_ragel.c"
+#line 2075 "wikitext_ragel.c"
        switch( (*p) ) {
                case 33: goto st87;
                case 41: goto st87;
@@ -2105,7 +2093,7 @@ case 119:
                        goto tr98;
        } else
                goto st87;
-       goto tr172;
+       goto tr173;
 st87:
        if ( ++p == pe )
                goto _test_eof87;
@@ -2132,356 +2120,296 @@ case 87:
        } else
                goto st87;
        goto tr99;
-tr127:
+tr128:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
-#line 426 "wikitext_ragel.rl"
+#line 420 "wikitext_ragel.rl"
        {act = 42;}
        goto st120;
 st120:
        if ( ++p == pe )
                goto _test_eof120;
 case 120:
-#line 2146 "wikitext_ragel.c"
+#line 2134 "wikitext_ragel.c"
        switch( (*p) ) {
-               case 43: goto st98;
-               case 46: goto st20;
-               case 47: goto st98;
-               case 64: goto st109;
-               case 84: goto tr173;
-               case 92: goto st98;
-               case 94: goto st98;
-               case 95: goto tr121;
-               case 116: goto tr173;
-               case 126: goto st98;
+               case 64: goto st21;
+               case 84: goto tr174;
+               case 95: goto st20;
+               case 116: goto tr174;
        }
-       if ( (*p) < 45 ) {
-               if ( 36 <= (*p) && (*p) <= 37 )
-                       goto st98;
+       if ( (*p) < 48 ) {
+               if ( 45 <= (*p) && (*p) <= 46 )
+                       goto st20;
        } else if ( (*p) > 57 ) {
                if ( (*p) > 90 ) {
                        if ( 97 <= (*p) && (*p) <= 122 )
-                               goto tr121;
+                               goto tr123;
                } else if ( (*p) >= 65 )
-                       goto tr121;
+                       goto tr123;
        } else
-               goto tr121;
-       goto tr141;
-tr173:
+               goto tr123;
+       goto tr157;
+tr174:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
-#line 426 "wikitext_ragel.rl"
+#line 420 "wikitext_ragel.rl"
        {act = 42;}
        goto st121;
 st121:
        if ( ++p == pe )
                goto _test_eof121;
 case 121:
-#line 2181 "wikitext_ragel.c"
+#line 2163 "wikitext_ragel.c"
        switch( (*p) ) {
-               case 43: goto st98;
-               case 46: goto st20;
-               case 47: goto st98;
-               case 64: goto st109;
-               case 84: goto tr174;
-               case 92: goto st98;
-               case 94: goto st98;
-               case 95: goto tr121;
-               case 116: goto tr174;
-               case 126: goto st98;
+               case 64: goto st21;
+               case 84: goto tr175;
+               case 95: goto st20;
+               case 116: goto tr175;
        }
-       if ( (*p) < 45 ) {
-               if ( 36 <= (*p) && (*p) <= 37 )
-                       goto st98;
+       if ( (*p) < 48 ) {
+               if ( 45 <= (*p) && (*p) <= 46 )
+                       goto st20;
        } else if ( (*p) > 57 ) {
                if ( (*p) > 90 ) {
                        if ( 97 <= (*p) && (*p) <= 122 )
-                               goto tr121;
+                               goto tr123;
                } else if ( (*p) >= 65 )
-                       goto tr121;
+                       goto tr123;
        } else
-               goto tr121;
-       goto tr141;
-tr174:
+               goto tr123;
+       goto tr157;
+tr175:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
-#line 426 "wikitext_ragel.rl"
+#line 420 "wikitext_ragel.rl"
        {act = 42;}
        goto st122;
 st122:
        if ( ++p == pe )
                goto _test_eof122;
 case 122:
-#line 2216 "wikitext_ragel.c"
+#line 2192 "wikitext_ragel.c"
        switch( (*p) ) {
-               case 43: goto st98;
-               case 46: goto st20;
-               case 47: goto st98;
-               case 64: goto st109;
-               case 80: goto tr175;
-               case 92: goto st98;
-               case 94: goto st98;
-               case 95: goto tr121;
-               case 112: goto tr175;
-               case 126: goto st98;
+               case 64: goto st21;
+               case 80: goto tr176;
+               case 95: goto st20;
+               case 112: goto tr176;
        }
-       if ( (*p) < 45 ) {
-               if ( 36 <= (*p) && (*p) <= 37 )
-                       goto st98;
+       if ( (*p) < 48 ) {
+               if ( 45 <= (*p) && (*p) <= 46 )
+                       goto st20;
        } else if ( (*p) > 57 ) {
                if ( (*p) > 90 ) {
                        if ( 97 <= (*p) && (*p) <= 122 )
-                               goto tr121;
+                               goto tr123;
                } else if ( (*p) >= 65 )
-                       goto tr121;
+                       goto tr123;
        } else
-               goto tr121;
-       goto tr141;
-tr175:
+               goto tr123;
+       goto tr157;
+tr176:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
-#line 426 "wikitext_ragel.rl"
+#line 420 "wikitext_ragel.rl"
        {act = 42;}
        goto st123;
 st123:
        if ( ++p == pe )
                goto _test_eof123;
 case 123:
-#line 2251 "wikitext_ragel.c"
+#line 2221 "wikitext_ragel.c"
        switch( (*p) ) {
-               case 43: goto st98;
-               case 46: goto st20;
-               case 47: goto st98;
                case 58: goto st84;
-               case 64: goto st109;
-               case 83: goto tr170;
-               case 92: goto st98;
-               case 94: goto st98;
-               case 95: goto tr121;
-               case 115: goto tr170;
-               case 126: goto st98;
+               case 64: goto st21;
+               case 83: goto tr171;
+               case 95: goto st20;
+               case 115: goto tr171;
        }
-       if ( (*p) < 45 ) {
-               if ( 36 <= (*p) && (*p) <= 37 )
-                       goto st98;
+       if ( (*p) < 48 ) {
+               if ( 45 <= (*p) && (*p) <= 46 )
+                       goto st20;
        } else if ( (*p) > 57 ) {
                if ( (*p) > 90 ) {
                        if ( 97 <= (*p) && (*p) <= 122 )
-                               goto tr121;
+                               goto tr123;
                } else if ( (*p) >= 65 )
-                       goto tr121;
+                       goto tr123;
        } else
-               goto tr121;
-       goto tr141;
-tr128:
+               goto tr123;
+       goto tr157;
+tr129:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
-#line 426 "wikitext_ragel.rl"
+#line 420 "wikitext_ragel.rl"
        {act = 42;}
        goto st124;
 st124:
        if ( ++p == pe )
                goto _test_eof124;
 case 124:
-#line 2287 "wikitext_ragel.c"
+#line 2251 "wikitext_ragel.c"
        switch( (*p) ) {
-               case 43: goto st98;
-               case 46: goto st20;
-               case 47: goto st98;
-               case 64: goto st109;
-               case 65: goto tr176;
-               case 92: goto st98;
-               case 94: goto st98;
-               case 95: goto tr121;
-               case 97: goto tr176;
-               case 126: goto st98;
+               case 64: goto st21;
+               case 65: goto tr177;
+               case 95: goto st20;
+               case 97: goto tr177;
        }
-       if ( (*p) < 45 ) {
-               if ( 36 <= (*p) && (*p) <= 37 )
-                       goto st98;
+       if ( (*p) < 48 ) {
+               if ( 45 <= (*p) && (*p) <= 46 )
+                       goto st20;
        } else if ( (*p) > 57 ) {
                if ( (*p) > 90 ) {
                        if ( 98 <= (*p) && (*p) <= 122 )
-                               goto tr121;
+                               goto tr123;
                } else if ( (*p) >= 66 )
-                       goto tr121;
+                       goto tr123;
        } else
-               goto tr121;
-       goto tr141;
-tr176:
+               goto tr123;
+       goto tr157;
+tr177:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
-#line 426 "wikitext_ragel.rl"
+#line 420 "wikitext_ragel.rl"
        {act = 42;}
        goto st125;
 st125:
        if ( ++p == pe )
                goto _test_eof125;
 case 125:
-#line 2322 "wikitext_ragel.c"
+#line 2280 "wikitext_ragel.c"
        switch( (*p) ) {
-               case 43: goto st98;
-               case 46: goto st20;
-               case 47: goto st98;
-               case 64: goto st109;
-               case 73: goto tr177;
-               case 92: goto st98;
-               case 94: goto st98;
-               case 95: goto tr121;
-               case 105: goto tr177;
-               case 126: goto st98;
+               case 64: goto st21;
+               case 73: goto tr178;
+               case 95: goto st20;
+               case 105: goto tr178;
        }
-       if ( (*p) < 45 ) {
-               if ( 36 <= (*p) && (*p) <= 37 )
-                       goto st98;
+       if ( (*p) < 48 ) {
+               if ( 45 <= (*p) && (*p) <= 46 )
+                       goto st20;
        } else if ( (*p) > 57 ) {
                if ( (*p) > 90 ) {
                        if ( 97 <= (*p) && (*p) <= 122 )
-                               goto tr121;
+                               goto tr123;
                } else if ( (*p) >= 65 )
-                       goto tr121;
+                       goto tr123;
        } else
-               goto tr121;
-       goto tr141;
-tr177:
+               goto tr123;
+       goto tr157;
+tr178:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
-#line 426 "wikitext_ragel.rl"
+#line 420 "wikitext_ragel.rl"
        {act = 42;}
        goto st126;
 st126:
        if ( ++p == pe )
                goto _test_eof126;
 case 126:
-#line 2357 "wikitext_ragel.c"
+#line 2309 "wikitext_ragel.c"
        switch( (*p) ) {
-               case 43: goto st98;
-               case 46: goto st20;
-               case 47: goto st98;
-               case 64: goto st109;
-               case 76: goto tr178;
-               case 92: goto st98;
-               case 94: goto st98;
-               case 95: goto tr121;
-               case 108: goto tr178;
-               case 126: goto st98;
+               case 64: goto st21;
+               case 76: goto tr179;
+               case 95: goto st20;
+               case 108: goto tr179;
        }
-       if ( (*p) < 45 ) {
-               if ( 36 <= (*p) && (*p) <= 37 )
-                       goto st98;
+       if ( (*p) < 48 ) {
+               if ( 45 <= (*p) && (*p) <= 46 )
+                       goto st20;
        } else if ( (*p) > 57 ) {
                if ( (*p) > 90 ) {
                        if ( 97 <= (*p) && (*p) <= 122 )
-                               goto tr121;
+                               goto tr123;
                } else if ( (*p) >= 65 )
-                       goto tr121;
+                       goto tr123;
        } else
-               goto tr121;
-       goto tr141;
-tr178:
+               goto tr123;
+       goto tr157;
+tr179:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
-#line 426 "wikitext_ragel.rl"
+#line 420 "wikitext_ragel.rl"
        {act = 42;}
        goto st127;
 st127:
        if ( ++p == pe )
                goto _test_eof127;
 case 127:
-#line 2392 "wikitext_ragel.c"
+#line 2338 "wikitext_ragel.c"
        switch( (*p) ) {
-               case 43: goto st98;
-               case 46: goto st20;
-               case 47: goto st98;
-               case 64: goto st109;
-               case 84: goto tr179;
-               case 92: goto st98;
-               case 94: goto st98;
-               case 95: goto tr121;
-               case 116: goto tr179;
-               case 126: goto st98;
+               case 64: goto st21;
+               case 84: goto tr180;
+               case 95: goto st20;
+               case 116: goto tr180;
        }
-       if ( (*p) < 45 ) {
-               if ( 36 <= (*p) && (*p) <= 37 )
-                       goto st98;
+       if ( (*p) < 48 ) {
+               if ( 45 <= (*p) && (*p) <= 46 )
+                       goto st20;
        } else if ( (*p) > 57 ) {
                if ( (*p) > 90 ) {
                        if ( 97 <= (*p) && (*p) <= 122 )
-                               goto tr121;
+                               goto tr123;
                } else if ( (*p) >= 65 )
-                       goto tr121;
+                       goto tr123;
        } else
-               goto tr121;
-       goto tr141;
-tr179:
+               goto tr123;
+       goto tr157;
+tr180:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
-#line 426 "wikitext_ragel.rl"
+#line 420 "wikitext_ragel.rl"
        {act = 42;}
        goto st128;
 st128:
        if ( ++p == pe )
                goto _test_eof128;
 case 128:
-#line 2427 "wikitext_ragel.c"
+#line 2367 "wikitext_ragel.c"
        switch( (*p) ) {
-               case 43: goto st98;
-               case 46: goto st20;
-               case 47: goto st98;
-               case 64: goto st109;
-               case 79: goto tr180;
-               case 92: goto st98;
-               case 94: goto st98;
-               case 95: goto tr121;
-               case 111: goto tr180;
-               case 126: goto st98;
+               case 64: goto st21;
+               case 79: goto tr181;
+               case 95: goto st20;
+               case 111: goto tr181;
        }
-       if ( (*p) < 45 ) {
-               if ( 36 <= (*p) && (*p) <= 37 )
-                       goto st98;
+       if ( (*p) < 48 ) {
+               if ( 45 <= (*p) && (*p) <= 46 )
+                       goto st20;
        } else if ( (*p) > 57 ) {
                if ( (*p) > 90 ) {
                        if ( 97 <= (*p) && (*p) <= 122 )
-                               goto tr121;
+                               goto tr123;
                } else if ( (*p) >= 65 )
-                       goto tr121;
+                       goto tr123;
        } else
-               goto tr121;
-       goto tr141;
-tr180:
+               goto tr123;
+       goto tr157;
+tr181:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
-#line 426 "wikitext_ragel.rl"
+#line 420 "wikitext_ragel.rl"
        {act = 42;}
        goto st129;
 st129:
        if ( ++p == pe )
                goto _test_eof129;
 case 129:
-#line 2462 "wikitext_ragel.c"
+#line 2396 "wikitext_ragel.c"
        switch( (*p) ) {
-               case 43: goto st98;
-               case 46: goto st20;
-               case 47: goto st98;
                case 58: goto st88;
-               case 64: goto st109;
-               case 92: goto st98;
-               case 94: goto st98;
-               case 95: goto tr121;
-               case 126: goto st98;
+               case 64: goto st21;
+               case 95: goto st20;
        }
-       if ( (*p) < 45 ) {
-               if ( 36 <= (*p) && (*p) <= 37 )
-                       goto st98;
+       if ( (*p) < 48 ) {
+               if ( 45 <= (*p) && (*p) <= 46 )
+                       goto st20;
        } else if ( (*p) > 57 ) {
                if ( (*p) > 90 ) {
                        if ( 97 <= (*p) && (*p) <= 122 )
-                               goto tr121;
+                               goto tr123;
                } else if ( (*p) >= 65 )
-                       goto tr121;
+                       goto tr123;
        } else
-               goto tr121;
-       goto tr141;
+               goto tr123;
+       goto tr157;
 st88:
        if ( ++p == pe )
                goto _test_eof88;
@@ -2586,7 +2514,7 @@ st130:
        if ( ++p == pe )
                goto _test_eof130;
 case 130:
-#line 2590 "wikitext_ragel.c"
+#line 2518 "wikitext_ragel.c"
        if ( (*p) == 46 )
                goto st92;
        if ( (*p) < 65 ) {
@@ -2594,11 +2522,11 @@ case 130:
                        goto st91;
        } else if ( (*p) > 90 ) {
                if ( 97 <= (*p) && (*p) <= 122 )
-                       goto tr182;
+                       goto tr183;
        } else
-               goto tr182;
-       goto tr172;
-tr182:
+               goto tr183;
+       goto tr173;
+tr183:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
 #line 281 "wikitext_ragel.rl"
@@ -2608,7 +2536,7 @@ st131:
        if ( ++p == pe )
                goto _test_eof131;
 case 131:
-#line 2612 "wikitext_ragel.c"
+#line 2540 "wikitext_ragel.c"
        if ( (*p) == 46 )
                goto st92;
        if ( (*p) < 65 ) {
@@ -2616,11 +2544,11 @@ case 131:
                        goto st91;
        } else if ( (*p) > 90 ) {
                if ( 97 <= (*p) && (*p) <= 122 )
-                       goto tr183;
+                       goto tr184;
        } else
-               goto tr183;
-       goto tr172;
-tr183:
+               goto tr184;
+       goto tr173;
+tr184:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
 #line 281 "wikitext_ragel.rl"
@@ -2630,7 +2558,7 @@ st132:
        if ( ++p == pe )
                goto _test_eof132;
 case 132:
-#line 2634 "wikitext_ragel.c"
+#line 2562 "wikitext_ragel.c"
        if ( (*p) == 46 )
                goto st92;
        if ( (*p) < 65 ) {
@@ -2638,11 +2566,11 @@ case 132:
                        goto st91;
        } else if ( (*p) > 90 ) {
                if ( 97 <= (*p) && (*p) <= 122 )
-                       goto tr184;
+                       goto tr185;
        } else
-               goto tr184;
-       goto tr172;
-tr184:
+               goto tr185;
+       goto tr173;
+tr185:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
 #line 281 "wikitext_ragel.rl"
@@ -2652,7 +2580,7 @@ st133:
        if ( ++p == pe )
                goto _test_eof133;
 case 133:
-#line 2656 "wikitext_ragel.c"
+#line 2584 "wikitext_ragel.c"
        if ( (*p) == 46 )
                goto st92;
        if ( (*p) < 65 ) {
@@ -2663,105 +2591,93 @@ case 133:
                        goto st91;
        } else
                goto st91;
-       goto tr172;
-tr129:
+       goto tr173;
+tr130:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
-#line 426 "wikitext_ragel.rl"
+#line 420 "wikitext_ragel.rl"
        {act = 42;}
        goto st134;
 st134:
        if ( ++p == pe )
                goto _test_eof134;
 case 134:
-#line 2678 "wikitext_ragel.c"
+#line 2606 "wikitext_ragel.c"
        switch( (*p) ) {
-               case 43: goto st98;
-               case 46: goto st20;
-               case 47: goto st98;
-               case 64: goto st109;
-               case 86: goto tr185;
-               case 92: goto st98;
-               case 94: goto st98;
-               case 95: goto tr121;
-               case 118: goto tr185;
-               case 126: goto st98;
+               case 64: goto st21;
+               case 86: goto tr186;
+               case 95: goto st20;
+               case 118: goto tr186;
        }
-       if ( (*p) < 45 ) {
-               if ( 36 <= (*p) && (*p) <= 37 )
-                       goto st98;
+       if ( (*p) < 48 ) {
+               if ( 45 <= (*p) && (*p) <= 46 )
+                       goto st20;
        } else if ( (*p) > 57 ) {
                if ( (*p) > 90 ) {
                        if ( 97 <= (*p) && (*p) <= 122 )
-                               goto tr121;
+                               goto tr123;
                } else if ( (*p) >= 65 )
-                       goto tr121;
+                       goto tr123;
        } else
-               goto tr121;
-       goto tr141;
-tr185:
+               goto tr123;
+       goto tr157;
+tr186:
 #line 1 "wikitext_ragel.rl"
        {te = p+1;}
-#line 426 "wikitext_ragel.rl"
+#line 420 "wikitext_ragel.rl"
        {act = 42;}
        goto st135;
 st135:
        if ( ++p == pe )
                goto _test_eof135;
 case 135:
-#line 2713 "wikitext_ragel.c"
+#line 2635 "wikitext_ragel.c"
        switch( (*p) ) {
-               case 43: goto st98;
-               case 46: goto st20;
-               case 47: goto st98;
-               case 64: goto st109;
-               case 78: goto tr170;
-               case 92: goto st98;
-               case 94: goto st98;
-               case 95: goto tr121;
-               case 110: goto tr170;
-               case 126: goto st98;
+               case 64: goto st21;
+               case 78: goto tr171;
+               case 95: goto st20;
+               case 110: goto tr171;
        }
-       if ( (*p) < 45 ) {
-               if ( 36 <= (*p) && (*p) <= 37 )
-                       goto st98;
+       if ( (*p) < 48 ) {
+               if ( 45 <= (*p) && (*p) <= 46 )
+                       goto st20;
        } else if ( (*p) > 57 ) {
                if ( (*p) > 90 ) {
                        if ( 97 <= (*p) && (*p) <= 122 )
-                               goto tr121;
+                               goto tr123;
                } else if ( (*p) >= 65 )
-                       goto tr121;
+                       goto tr123;
        } else
-               goto tr121;
-       goto tr141;
+               goto tr123;
+       goto tr157;
 st136:
        if ( ++p == pe )
                goto _test_eof136;
 case 136:
        if ( (*p) == 91 )
-               goto tr187;
-       goto tr186;
+               goto tr188;
+       goto tr187;
 st137:
        if ( ++p == pe )
                goto _test_eof137;
 case 137:
        if ( (*p) == 93 )
-               goto tr189;
-       goto tr188;
+               goto tr190;
+       goto tr189;
 st138:
        if ( ++p == pe )
                goto _test_eof138;
 case 138:
        if ( (*p) == 123 )
-               goto tr191;
-       goto tr190;
+               goto tr192;
+       goto tr191;
 st139:
        if ( ++p == pe )
                goto _test_eof139;
 case 139:
        if ( (*p) == 125 )
-               goto tr193;
-       goto tr192;
+               goto tr194;
+       goto tr193;
        }
        _test_eof94: cs = 94; goto _test_eof; 
        _test_eof1: cs = 1; goto _test_eof; 
@@ -2907,11 +2823,11 @@ case 139:
        if ( p == eof )
        {
        switch ( cs ) {
-       case 95: goto tr136;
-       case 96: goto tr138;
-       case 97: goto tr140;
-       case 98: goto tr141;
-       case 99: goto tr142;
+       case 95: goto tr137;
+       case 96: goto tr139;
+       case 97: goto tr141;
+       case 98: goto tr142;
+       case 99: goto tr143;
        case 7: goto tr7;
        case 8: goto tr7;
        case 9: goto tr7;
@@ -2925,24 +2841,24 @@ case 139:
        case 17: goto tr7;
        case 18: goto tr7;
        case 19: goto tr7;
-       case 100: goto tr146;
-       case 101: goto tr146;
-       case 102: goto tr146;
-       case 103: goto tr146;
-       case 104: goto tr141;
+       case 100: goto tr147;
+       case 101: goto tr147;
+       case 102: goto tr147;
+       case 103: goto tr147;
+       case 104: goto tr142;
        case 20: goto tr23;
        case 21: goto tr23;
        case 22: goto tr23;
        case 23: goto tr23;
        case 24: goto tr23;
-       case 105: goto tr152;
-       case 106: goto tr152;
-       case 107: goto tr152;
-       case 108: goto tr152;
-       case 109: goto tr141;
+       case 105: goto tr153;
+       case 106: goto tr153;
+       case 107: goto tr153;
+       case 108: goto tr153;
+       case 109: goto tr142;
        case 110: goto tr141;
-       case 111: goto tr140;
-       case 112: goto tr157;
+       case 111: goto tr157;
+       case 112: goto tr158;
        case 25: goto tr30;
        case 26: goto tr30;
        case 27: goto tr30;
@@ -3002,49 +2918,49 @@ case 139:
        case 81: goto tr30;
        case 82: goto tr30;
        case 83: goto tr30;
-       case 113: goto tr165;
-       case 114: goto tr165;
-       case 115: goto tr167;
-       case 116: goto tr141;
-       case 117: goto tr141;
-       case 118: goto tr141;
+       case 113: goto tr166;
+       case 114: goto tr166;
+       case 115: goto tr168;
+       case 116: goto tr157;
+       case 117: goto tr157;
+       case 118: goto tr157;
        case 84: goto tr95;
        case 85: goto tr95;
        case 86: goto tr95;
-       case 119: goto tr172;
+       case 119: goto tr173;
        case 87: goto tr99;
-       case 120: goto tr141;
-       case 121: goto tr141;
-       case 122: goto tr141;
-       case 123: goto tr141;
-       case 124: goto tr141;
-       case 125: goto tr141;
-       case 126: goto tr141;
-       case 127: goto tr141;
-       case 128: goto tr141;
-       case 129: goto tr141;
+       case 120: goto tr157;
+       case 121: goto tr157;
+       case 122: goto tr157;
+       case 123: goto tr157;
+       case 124: goto tr157;
+       case 125: goto tr157;
+       case 126: goto tr157;
+       case 127: goto tr157;
+       case 128: goto tr157;
+       case 129: goto tr157;
        case 88: goto tr95;
        case 89: goto tr95;
        case 90: goto tr95;
        case 91: goto tr23;
        case 92: goto tr23;
        case 93: goto tr23;
-       case 130: goto tr172;
-       case 131: goto tr172;
-       case 132: goto tr172;
-       case 133: goto tr172;
-       case 134: goto tr141;
-       case 135: goto tr141;
-       case 136: goto tr186;
-       case 137: goto tr188;
-       case 138: goto tr190;
-       case 139: goto tr192;
+       case 130: goto tr173;
+       case 131: goto tr173;
+       case 132: goto tr173;
+       case 133: goto tr173;
+       case 134: goto tr157;
+       case 135: goto tr157;
+       case 136: goto tr187;
+       case 137: goto tr189;
+       case 138: goto tr191;
+       case 139: goto tr193;
        }
        }
 
        _out: {}
        }
-#line 498 "wikitext_ragel.rl"
+#line 504 "wikitext_ragel.rl"
     if (cs == wikitext_error)
         rb_raise(eWikitextParserError, "failed before finding a token");
     else if (out->type == NO_TOKEN)
index 67092a7dbb3de6e82c89ed0b22b822c1d59ad258..7227171c28667287d7be45390158c59c33260984 100644 (file)
             fbreak;
         };
 
+        alnum+
+        {
+            EMIT(ALNUM);
+            fbreak;
+        };
+
         # all the printable ASCII characters (0x20 to 0x7e) excluding those explicitly covered elsewhere:
         # we skip space (0x20), exclamation mark (0x21), quote (0x22), hash (0x23), ampersand (0x26), apostrophe (0x27),
-        # left parenthesis (0x28), right parenthesis (0x29), asterisk (0x2a), comma (0x2c), period (0x2e), colon (0x3a),
-        # semi-colon (0x3b), less than (0x3c), equals (0x3d), greater than (0x3e), question mark (0x3f), left bracket (0x5b),
-        # right bracket (0x5d), backtick (0x60), left curly brace (0x7b), vertical bar (0x7c) and
-        # right curly brace (0x7d).
-        (0x24..0x25 | 0x2b | 0x2d | 0x2f..0x39 | 0x40..0x5a | 0x5c | 0x5e..0x5f | 0x61..0x7a | 0x7e)+
+        # left parenthesis (0x28), right parenthesis (0x29), numbers (0x30..0x39), asterisk (0x2a), comma (0x2c), period (0x2e),
+        # colon (0x3a), semi-colon (0x3b), less than (0x3c), equals (0x3d), greater than (0x3e), question mark (0x3f), uppercase
+        # letters (0x41..0x5a), left bracket (0x5b), right bracket (0x5d), backtick (0x60), lowercase letters (0x61..0x7a), left
+        # curly brace (0x7b), vertical bar (0x7c) and right curly brace (0x7d).
+        (0x24..0x25 | 0x2b | 0x2d | 0x2f | 0x40 | 0x5c | 0x5e..0x5f | 0x7e)+
         {
             EMIT(PRINTABLE);
             fbreak;
index d2cb48e3c2a82c4b69699057a1a6061a98ac15d8..31e78f30afd81f7cf09779997672dccbd2660d45 100755 (executable)
@@ -56,7 +56,7 @@ describe Wikitext::Parser, 'tokenizing' do
   it 'should tokenize strings containing a single symbol' do
     @tokens = @parser.tokenize('foo')
     @tokens.length.should == 2
-    @tokens[0].token_type.should    == :printable
+    @tokens[0].token_type.should    == :alnum
     @tokens[0].string_value.should  == 'foo'
     @tokens[1].token_type.should    == :end_of_file
     @tokens[1].string_value.should  == ''
@@ -65,7 +65,7 @@ describe Wikitext::Parser, 'tokenizing' do
   it 'should tokenize strings containing multiple symbols' do
     @tokens = @parser.tokenize('foo http://example.com/')
     @tokens.length.should == 4
-    @tokens[0].token_type.should    == :printable
+    @tokens[0].token_type.should    == :alnum
     @tokens[0].string_value.should  == 'foo'
     @tokens[1].token_type.should    == :space
     @tokens[1].string_value.should  == ' '
@@ -78,7 +78,7 @@ describe Wikitext::Parser, 'tokenizing' do
   it 'should tokenize runs of printable characters as as single symbol' do
     @tokens = @parser.tokenize('foo')
     @tokens.length.should == 2
-    @tokens[0].token_type.should    == :printable
+    @tokens[0].token_type.should    == :alnum
     @tokens[0].string_value.should  == 'foo'
     @tokens[0].line_start.should    == 1
     @tokens[0].column_start.should  == 1