]> granicus.if.org Git - re2c/commitdiff
- Added /*!ignore!re2c */ to support documenting of re2c source.
authorhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Sat, 15 Apr 2006 13:00:06 +0000 (13:00 +0000)
committerhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Sat, 15 Apr 2006 13:00:06 +0000 (13:00 +0000)
- Fixed issue with multiline re2c comments (/*!max:re2c ... */ and alike).

17 files changed:
CHANGELOG
bootstrap/scanner.cc
htdocs/index.html
htdocs/manual.html
re2c.1.in
scanner.re
test/bug1163046.c
test/config4f.f.c
test/ctx.b.c
test/ctx.c
test/ctx.s.c
test/input13.c [new file with mode: 0755]
test/input13.re [new file with mode: 0755]
test/parse_date.b.c
test/parse_date.c
test/parse_date.db.c
test/parse_date.s.c

index c6349d16beb541583f16cda9bfeffd5049cc0797..a004b0dcf5c3e84910225ce41705bf8ad7805757 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,7 @@
 Version 0.10.2 (2006-04-13)
 ---------------------------
+- Added /*!ignore!re2c */ to support documenting of re2c source.
+- Fixed issue with multiline re2c comments (/*!max:re2c ... */ and alike).
 - Fixed generation of YYDEBUG() when using -d switch.
 - Added /*!getstate:re2c */ which triggers generation of the YYGETSTATE() block.
 - Added configuration 'state:abort'.
index a0490f9e92d06509955177ae75665eea4c35172c..8aa1b0550ec5d7f16403b342be0c162fd0f7b4ea 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.10.2.dev on Sat Apr  8 20:31:13 2006 */
+/* Generated by re2c 0.10.2.dev on Sat Apr 15 08:54:49 2006 */
 #line 1 "scanner.re"
 /* $Id$ */
 #include <stdlib.h>
@@ -95,6 +95,7 @@ echo:
 #line 96 "scanner.cc"
 {
        YYCTYPE yych;
+       unsigned int yyaccept = 0;
 
        if((YYLIMIT - YYCURSOR) < 16) YYFILL(16);
        yych = *YYCURSOR;
@@ -106,43 +107,52 @@ echo:
                if(yych <= '*') goto yy4;
                if(yych != '/') goto yy9;
        }
+       yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == '*') goto yy12;
+       if(yych == '*') goto yy16;
 yy3:
-#line 147 "scanner.re"
+#line 165 "scanner.re"
        {
                                        goto echo;
                                }
-#line 117 "scanner.cc"
+#line 119 "scanner.cc"
 yy4:
        yych = *++YYCURSOR;
        if(yych == '/') goto yy10;
        goto yy3;
 yy5:
        ++YYCURSOR;
-#line 136 "scanner.re"
+#line 150 "scanner.re"
        {
-                                       out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok));
+                                       if (!ignore_eoc) {
+                                               out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok));
+                                       }
                                        tok = pos = cursor; cline++;
                                        goto echo;
                                }
-#line 130 "scanner.cc"
+#line 134 "scanner.cc"
 yy7:
        ++YYCURSOR;
-#line 141 "scanner.re"
+#line 157 "scanner.re"
        {
-                                       out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok) - 1); // -1 so we don't write out the \0
+                                       if (!ignore_eoc) {
+                                               out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok) - 1); // -1 so we don't write out the \0
+                                       }
                                        if(cursor == eof) {
                                                RETURN(0);
                                        }
                                }
-#line 140 "scanner.cc"
+#line 146 "scanner.cc"
 yy9:
        yych = *++YYCURSOR;
        goto yy3;
 yy10:
-       ++YYCURSOR;
-#line 127 "scanner.re"
+       yyaccept = 1;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych == 0x0A) goto yy14;
+       if(yych == 0x0D) goto yy12;
+yy11:
+#line 141 "scanner.re"
        {
                                        if (ignore_eoc) {
                                                ignore_eoc = false;
@@ -152,30 +162,53 @@ yy10:
                                        tok = pos = cursor;
                                        goto echo;
                                }
-#line 156 "scanner.cc"
+#line 166 "scanner.cc"
 yy12:
        yych = *++YYCURSOR;
-       if(yych == '!') goto yy14;
+       if(yych == 0x0A) goto yy14;
 yy13:
        YYCURSOR = YYMARKER;
-       goto yy3;
+       switch(yyaccept) {
+       case 1: goto yy11;
+       case 0: goto yy3;
+       }
 yy14:
+       ++YYCURSOR;
+#line 132 "scanner.re"
+       {
+                                       if (ignore_eoc) {
+                                               ignore_eoc = false;
+                                       } else {
+                                               out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok));
+                                       }
+                                       tok = pos = cursor; cline++;
+                                       goto echo;
+                               }
+#line 188 "scanner.cc"
+yy16:
        yych = *++YYCURSOR;
-       if(yych <= 'l') {
-               if(yych != 'g') goto yy13;
-       } else {
-               if(yych <= 'm') goto yy16;
-               if(yych == 'r') goto yy17;
-               goto yy13;
+       if(yych != '!') goto yy13;
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'g':       goto yy19;
+       case 'i':       goto yy18;
+       case 'm':       goto yy20;
+       case 'r':       goto yy21;
+       default:        goto yy13;
        }
+yy18:
        yych = *++YYCURSOR;
-       if(yych == 'e') goto yy30;
+       if(yych == 'g') goto yy47;
        goto yy13;
-yy16:
+yy19:
+       yych = *++YYCURSOR;
+       if(yych == 'e') goto yy34;
+       goto yy13;
+yy20:
        yych = *++YYCURSOR;
-       if(yych == 'a') goto yy22;
+       if(yych == 'a') goto yy26;
        goto yy13;
-yy17:
+yy21:
        yych = *++YYCURSOR;
        if(yych != 'e') goto yy13;
        yych = *++YYCURSOR;
@@ -189,8 +222,8 @@ yy17:
                                        tok = cursor;
                                        RETURN(1);
                                }
-#line 193 "scanner.cc"
-yy22:
+#line 226 "scanner.cc"
+yy26:
        yych = *++YYCURSOR;
        if(yych != 'x') goto yy13;
        yych = *++YYCURSOR;
@@ -211,8 +244,8 @@ yy22:
                                        ignore_eoc = true;
                                        goto echo;
                                }
-#line 215 "scanner.cc"
-yy30:
+#line 248 "scanner.cc"
+yy34:
        yych = *++YYCURSOR;
        if(yych != 't') goto yy13;
        yych = *++YYCURSOR;
@@ -243,9 +276,36 @@ yy30:
                                        ignore_eoc = true;
                                        goto echo;
                                }
-#line 247 "scanner.cc"
+#line 280 "scanner.cc"
+yy47:
+       yych = *++YYCURSOR;
+       if(yych != 'n') goto yy13;
+       yych = *++YYCURSOR;
+       if(yych != 'o') goto yy13;
+       yych = *++YYCURSOR;
+       if(yych != 'r') goto yy13;
+       yych = *++YYCURSOR;
+       if(yych != 'e') goto yy13;
+       yych = *++YYCURSOR;
+       if(yych != ':') goto yy13;
+       yych = *++YYCURSOR;
+       if(yych != 'r') goto yy13;
+       yych = *++YYCURSOR;
+       if(yych != 'e') goto yy13;
+       yych = *++YYCURSOR;
+       if(yych != '2') goto yy13;
+       yych = *++YYCURSOR;
+       if(yych != 'c') goto yy13;
+       ++YYCURSOR;
+#line 127 "scanner.re"
+       {
+                                       tok = pos = cursor;
+                                       ignore_eoc = true;
+                                       goto echo;
+                               }
+#line 307 "scanner.cc"
 }
-#line 150 "scanner.re"
+#line 168 "scanner.re"
 
 }
 
@@ -268,7 +328,7 @@ scan:
                goto value;
     }
 
-#line 272 "scanner.cc"
+#line 332 "scanner.cc"
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
@@ -277,894 +337,894 @@ scan:
        if(yych <= '/') {
                if(yych <= '!') {
                        if(yych <= 0x0C) {
-                               if(yych <= 0x08) goto yy70;
-                               if(yych <= 0x09) goto yy64;
-                               if(yych <= 0x0A) goto yy66;
-                               goto yy70;
+                               if(yych <= 0x08) goto yy85;
+                               if(yych <= 0x09) goto yy79;
+                               if(yych <= 0x0A) goto yy81;
+                               goto yy85;
                        } else {
-                               if(yych <= 0x0D) goto yy68;
-                               if(yych == ' ') goto yy64;
-                               goto yy70;
+                               if(yych <= 0x0D) goto yy83;
+                               if(yych == ' ') goto yy79;
+                               goto yy85;
                        }
                } else {
                        if(yych <= ')') {
-                               if(yych <= '"') goto yy51;
-                               if(yych <= '&') goto yy70;
-                               if(yych <= '\'') goto yy53;
-                               goto yy57;
+                               if(yych <= '"') goto yy66;
+                               if(yych <= '&') goto yy85;
+                               if(yych <= '\'') goto yy68;
+                               goto yy72;
                        } else {
                                if(yych <= '+') {
-                                       if(yych <= '*') goto yy49;
-                                       goto yy58;
+                                       if(yych <= '*') goto yy64;
+                                       goto yy73;
                                } else {
-                                       if(yych <= '-') goto yy70;
-                                       if(yych <= '.') goto yy62;
-                                       goto yy47;
+                                       if(yych <= '-') goto yy85;
+                                       if(yych <= '.') goto yy77;
+                                       goto yy62;
                                }
                        }
                }
        } else {
                if(yych <= 'Z') {
                        if(yych <= '=') {
-                               if(yych == ';') goto yy57;
-                               if(yych <= '<') goto yy70;
-                               goto yy57;
+                               if(yych == ';') goto yy72;
+                               if(yych <= '<') goto yy85;
+                               goto yy72;
                        } else {
-                               if(yych == '?') goto yy58;
-                               if(yych <= '@') goto yy70;
-                               goto yy61;
+                               if(yych == '?') goto yy73;
+                               if(yych <= '@') goto yy85;
+                               goto yy76;
                        }
                } else {
                        if(yych <= 'q') {
-                               if(yych <= '[') goto yy55;
-                               if(yych <= '\\') goto yy57;
-                               if(yych <= '`') goto yy70;
-                               goto yy61;
+                               if(yych <= '[') goto yy70;
+                               if(yych <= '\\') goto yy72;
+                               if(yych <= '`') goto yy85;
+                               goto yy76;
                        } else {
                                if(yych <= 'z') {
-                                       if(yych <= 'r') goto yy59;
-                                       goto yy61;
+                                       if(yych <= 'r') goto yy74;
+                                       goto yy76;
                                } else {
-                                       if(yych <= '{') goto yy45;
-                                       if(yych <= '|') goto yy57;
-                                       goto yy70;
+                                       if(yych <= '{') goto yy60;
+                                       if(yych <= '|') goto yy72;
+                                       goto yy85;
                                }
                        }
                }
        }
-yy45:
+yy60:
        yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych <= '/') {
-               if(yych == ',') goto yy111;
+               if(yych == ',') goto yy126;
        } else {
-               if(yych <= '0') goto yy108;
-               if(yych <= '9') goto yy109;
+               if(yych <= '0') goto yy123;
+               if(yych <= '9') goto yy124;
        }
-yy46:
-#line 172 "scanner.re"
+yy61:
+#line 190 "scanner.re"
        { depth = 1;
                                  goto code;
                                }
-#line 350 "scanner.cc"
-yy47:
+#line 410 "scanner.cc"
+yy62:
        ++YYCURSOR;
-       if((yych = *YYCURSOR) == '*') goto yy106;
-yy48:
-#line 202 "scanner.re"
+       if((yych = *YYCURSOR) == '*') goto yy121;
+yy63:
+#line 220 "scanner.re"
        { RETURN(*tok); }
-#line 357 "scanner.cc"
-yy49:
+#line 417 "scanner.cc"
+yy64:
        ++YYCURSOR;
-       if((yych = *YYCURSOR) == '/') goto yy104;
-yy50:
-#line 204 "scanner.re"
+       if((yych = *YYCURSOR) == '/') goto yy119;
+yy65:
+#line 222 "scanner.re"
        { yylval.op = *tok;
                                  RETURN(CLOSE); }
-#line 365 "scanner.cc"
-yy51:
+#line 425 "scanner.cc"
+yy66:
        yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych != 0x0A) goto yy100;
-yy52:
-#line 189 "scanner.re"
+       if(yych != 0x0A) goto yy115;
+yy67:
+#line 207 "scanner.re"
        { fatal("unterminated string constant (missing \")"); }
-#line 373 "scanner.cc"
-yy53:
+#line 433 "scanner.cc"
+yy68:
        yyaccept = 2;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych != 0x0A) goto yy95;
-yy54:
-#line 190 "scanner.re"
+       if(yych != 0x0A) goto yy110;
+yy69:
+#line 208 "scanner.re"
        { fatal("unterminated string constant (missing ')"); }
-#line 381 "scanner.cc"
-yy55:
+#line 441 "scanner.cc"
+yy70:
        yyaccept = 3;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == 0x0A) goto yy56;
-       if(yych == '^') goto yy86;
-       goto yy85;
-yy56:
-#line 200 "scanner.re"
+       if(yych == 0x0A) goto yy71;
+       if(yych == '^') goto yy101;
+       goto yy100;
+yy71:
+#line 218 "scanner.re"
        { fatal("unterminated range (missing ])"); }
-#line 391 "scanner.cc"
-yy57:
+#line 451 "scanner.cc"
+yy72:
        yych = *++YYCURSOR;
-       goto yy48;
-yy58:
+       goto yy63;
+yy73:
        yych = *++YYCURSOR;
-       goto yy50;
-yy59:
+       goto yy65;
+yy74:
        ++YYCURSOR;
-       if((yych = *YYCURSOR) == 'e') goto yy76;
-       goto yy75;
-yy60:
-#line 231 "scanner.re"
+       if((yych = *YYCURSOR) == 'e') goto yy91;
+       goto yy90;
+yy75:
+#line 249 "scanner.re"
        { cur = cursor;
                                  yylval.symbol = Symbol::find(token());
                                  return ID; }
-#line 407 "scanner.cc"
-yy61:
+#line 467 "scanner.cc"
+yy76:
        yych = *++YYCURSOR;
-       goto yy75;
-yy62:
+       goto yy90;
+yy77:
        ++YYCURSOR;
-#line 235 "scanner.re"
+#line 253 "scanner.re"
        { cur = cursor;
                                  yylval.regexp = mkDot();
                                  return RANGE;
                                }
-#line 418 "scanner.cc"
-yy64:
+#line 478 "scanner.cc"
+yy79:
        ++YYCURSOR;
        yych = *YYCURSOR;
-       goto yy73;
-yy65:
-#line 240 "scanner.re"
+       goto yy88;
+yy80:
+#line 258 "scanner.re"
        { goto scan; }
-#line 426 "scanner.cc"
-yy66:
+#line 486 "scanner.cc"
+yy81:
        ++YYCURSOR;
-yy67:
-#line 242 "scanner.re"
+yy82:
+#line 260 "scanner.re"
        { if(cursor == eof) RETURN(0);
                                  pos = cursor; cline++;
                                  goto scan;
                                }
-#line 435 "scanner.cc"
-yy68:
+#line 495 "scanner.cc"
+yy83:
        ++YYCURSOR;
-       if((yych = *YYCURSOR) == 0x0A) goto yy71;
-yy69:
-#line 247 "scanner.re"
+       if((yych = *YYCURSOR) == 0x0A) goto yy86;
+yy84:
+#line 265 "scanner.re"
        { std::ostringstream msg;
                                  msg << "unexpected character: ";
                                  prtChOrHex(msg, *tok);
                                  fatal(msg.str().c_str());
                                  goto scan;
                                }
-#line 447 "scanner.cc"
-yy70:
+#line 507 "scanner.cc"
+yy85:
        yych = *++YYCURSOR;
-       goto yy69;
-yy71:
+       goto yy84;
+yy86:
        yych = *++YYCURSOR;
-       goto yy67;
-yy72:
+       goto yy82;
+yy87:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy73:
-       if(yych == 0x09) goto yy72;
-       if(yych == ' ') goto yy72;
-       goto yy65;
-yy74:
+yy88:
+       if(yych == 0x09) goto yy87;
+       if(yych == ' ') goto yy87;
+       goto yy80;
+yy89:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy75:
+yy90:
        if(yych <= '@') {
-               if(yych <= '/') goto yy60;
-               if(yych <= '9') goto yy74;
-               goto yy60;
+               if(yych <= '/') goto yy75;
+               if(yych <= '9') goto yy89;
+               goto yy75;
        } else {
-               if(yych <= 'Z') goto yy74;
-               if(yych <= '`') goto yy60;
-               if(yych <= 'z') goto yy74;
-               goto yy60;
+               if(yych <= 'Z') goto yy89;
+               if(yych <= '`') goto yy75;
+               if(yych <= 'z') goto yy89;
+               goto yy75;
        }
-yy76:
+yy91:
        yych = *++YYCURSOR;
-       if(yych != '2') goto yy75;
+       if(yych != '2') goto yy90;
        yych = *++YYCURSOR;
-       if(yych != 'c') goto yy75;
+       if(yych != 'c') goto yy90;
        yyaccept = 4;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych != ':') goto yy75;
-yy79:
+       if(yych != ':') goto yy90;
+yy94:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych <= '@') goto yy80;
-       if(yych <= 'Z') goto yy81;
-       if(yych <= '`') goto yy80;
-       if(yych <= 'z') goto yy81;
-yy80:
+       if(yych <= '@') goto yy95;
+       if(yych <= 'Z') goto yy96;
+       if(yych <= '`') goto yy95;
+       if(yych <= 'z') goto yy96;
+yy95:
        YYCURSOR = YYMARKER;
        switch(yyaccept) {
-       case 0: goto yy46;
-       case 1: goto yy52;
-       case 2: goto yy54;
-       case 3: goto yy56;
-       case 6: goto yy112;
-       case 5: goto yy83;
-       case 4: goto yy60;
+       case 0: goto yy61;
+       case 1: goto yy67;
+       case 2: goto yy69;
+       case 3: goto yy71;
+       case 6: goto yy127;
+       case 5: goto yy98;
+       case 4: goto yy75;
        }
-yy81:
+yy96:
        yyaccept = 5;
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych <= 'Z') {
                if(yych <= '9') {
-                       if(yych >= '0') goto yy81;
+                       if(yych >= '0') goto yy96;
                } else {
-                       if(yych <= ':') goto yy79;
-                       if(yych >= 'A') goto yy81;
+                       if(yych <= ':') goto yy94;
+                       if(yych >= 'A') goto yy96;
                }
        } else {
                if(yych <= '_') {
-                       if(yych >= '_') goto yy81;
+                       if(yych >= '_') goto yy96;
                } else {
-                       if(yych <= '`') goto yy83;
-                       if(yych <= 'z') goto yy81;
+                       if(yych <= '`') goto yy98;
+                       if(yych <= 'z') goto yy96;
                }
        }
-yy83:
-#line 224 "scanner.re"
+yy98:
+#line 242 "scanner.re"
        { cur = cursor;
                                  tok+= 5; /* skip "re2c:" */
                                  iscfg = 1;
                                  yylval.str = new Str(token());
                                  return CONFIG;
                                }
-#line 532 "scanner.cc"
-yy84:
+#line 592 "scanner.cc"
+yy99:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy85:
+yy100:
        if(yych <= '[') {
-               if(yych == 0x0A) goto yy80;
-               goto yy84;
+               if(yych == 0x0A) goto yy95;
+               goto yy99;
        } else {
-               if(yych <= '\\') goto yy88;
-               if(yych <= ']') goto yy89;
-               goto yy84;
+               if(yych <= '\\') goto yy103;
+               if(yych <= ']') goto yy104;
+               goto yy99;
        }
-yy86:
+yy101:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych <= '[') {
-               if(yych == 0x0A) goto yy80;
-               goto yy86;
+               if(yych == 0x0A) goto yy95;
+               goto yy101;
        } else {
-               if(yych <= '\\') goto yy91;
-               if(yych <= ']') goto yy92;
-               goto yy86;
+               if(yych <= '\\') goto yy106;
+               if(yych <= ']') goto yy107;
+               goto yy101;
        }
-yy88:
+yy103:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A) goto yy80;
-       goto yy84;
-yy89:
+       if(yych == 0x0A) goto yy95;
+       goto yy99;
+yy104:
        ++YYCURSOR;
-#line 196 "scanner.re"
+#line 214 "scanner.re"
        { cur = cursor;
                                  yylval.regexp = ranToRE(token());
                                  return RANGE; }
-#line 570 "scanner.cc"
-yy91:
+#line 630 "scanner.cc"
+yy106:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A) goto yy80;
-       goto yy86;
-yy92:
+       if(yych == 0x0A) goto yy95;
+       goto yy101;
+yy107:
        ++YYCURSOR;
-#line 192 "scanner.re"
+#line 210 "scanner.re"
        { cur = cursor;
                                  yylval.regexp = invToRE(token());
                                  return RANGE; }
-#line 583 "scanner.cc"
-yy94:
+#line 643 "scanner.cc"
+yy109:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy95:
+yy110:
        if(yych <= '&') {
-               if(yych == 0x0A) goto yy80;
-               goto yy94;
+               if(yych == 0x0A) goto yy95;
+               goto yy109;
        } else {
-               if(yych <= '\'') goto yy97;
-               if(yych != '\\') goto yy94;
+               if(yych <= '\'') goto yy112;
+               if(yych != '\\') goto yy109;
        }
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A) goto yy80;
-       goto yy94;
-yy97:
+       if(yych == 0x0A) goto yy95;
+       goto yy109;
+yy112:
        ++YYCURSOR;
-#line 185 "scanner.re"
+#line 203 "scanner.re"
        { cur = cursor;
                                  yylval.regexp = strToCaseInsensitiveRE(token());
                                  return STRING; }
-#line 607 "scanner.cc"
-yy99:
+#line 667 "scanner.cc"
+yy114:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy100:
+yy115:
        if(yych <= '!') {
-               if(yych == 0x0A) goto yy80;
-               goto yy99;
+               if(yych == 0x0A) goto yy95;
+               goto yy114;
        } else {
-               if(yych <= '"') goto yy102;
-               if(yych != '\\') goto yy99;
+               if(yych <= '"') goto yy117;
+               if(yych != '\\') goto yy114;
        }
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A) goto yy80;
-       goto yy99;
-yy102:
+       if(yych == 0x0A) goto yy95;
+       goto yy114;
+yy117:
        ++YYCURSOR;
-#line 181 "scanner.re"
+#line 199 "scanner.re"
        { cur = cursor;
                                  yylval.regexp = strToRE(token());
                                  return STRING; }
-#line 631 "scanner.cc"
-yy104:
+#line 691 "scanner.cc"
+yy119:
        ++YYCURSOR;
-#line 178 "scanner.re"
+#line 196 "scanner.re"
        { tok = cursor;
                                  RETURN(0); }
-#line 637 "scanner.cc"
-yy106:
+#line 697 "scanner.cc"
+yy121:
        ++YYCURSOR;
-#line 175 "scanner.re"
+#line 193 "scanner.re"
        { depth = 1;
                                  goto comment; }
-#line 643 "scanner.cc"
-yy108:
+#line 703 "scanner.cc"
+yy123:
        yych = *++YYCURSOR;
-       if(yych == ',') goto yy122;
-       goto yy110;
-yy109:
+       if(yych == ',') goto yy137;
+       goto yy125;
+yy124:
        ++YYCURSOR;
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
-yy110:
+yy125:
        if(yych <= '/') {
-               if(yych == ',') goto yy115;
-               goto yy80;
+               if(yych == ',') goto yy130;
+               goto yy95;
        } else {
-               if(yych <= '9') goto yy109;
-               if(yych == '}') goto yy113;
-               goto yy80;
+               if(yych <= '9') goto yy124;
+               if(yych == '}') goto yy128;
+               goto yy95;
        }
-yy111:
+yy126:
        ++YYCURSOR;
-yy112:
-#line 222 "scanner.re"
+yy127:
+#line 240 "scanner.re"
        { fatal("illegal closure form, use '{n}', '{n,}', '{n,m}' where n and m are numbers"); }
-#line 666 "scanner.cc"
-yy113:
+#line 726 "scanner.cc"
+yy128:
        ++YYCURSOR;
-#line 210 "scanner.re"
+#line 228 "scanner.re"
        { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = atoi((char *)tok+1);
                                  RETURN(CLOSESIZE); }
-#line 673 "scanner.cc"
-yy115:
+#line 733 "scanner.cc"
+yy130:
        yyaccept = 6;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych <= '/') goto yy112;
-       if(yych <= '9') goto yy118;
-       if(yych != '}') goto yy112;
+       if(yych <= '/') goto yy127;
+       if(yych <= '9') goto yy133;
+       if(yych != '}') goto yy127;
        ++YYCURSOR;
-#line 218 "scanner.re"
+#line 236 "scanner.re"
        { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = -1;
                                  RETURN(CLOSESIZE); }
-#line 685 "scanner.cc"
-yy118:
+#line 745 "scanner.cc"
+yy133:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych <= '/') goto yy80;
-       if(yych <= '9') goto yy118;
-       if(yych != '}') goto yy80;
+       if(yych <= '/') goto yy95;
+       if(yych <= '9') goto yy133;
+       if(yych != '}') goto yy95;
        ++YYCURSOR;
-#line 214 "scanner.re"
+#line 232 "scanner.re"
        { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = MAX(yylval.extop.minsize,atoi(strchr((char *)tok, ',')+1));
                                  RETURN(CLOSESIZE); }
-#line 698 "scanner.cc"
-yy122:
+#line 758 "scanner.cc"
+yy137:
        yyaccept = 6;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych <= '/') goto yy112;
-       if(yych <= '9') goto yy118;
-       if(yych != '}') goto yy112;
+       if(yych <= '/') goto yy127;
+       if(yych <= '9') goto yy133;
+       if(yych != '}') goto yy127;
        ++YYCURSOR;
-#line 207 "scanner.re"
+#line 225 "scanner.re"
        { yylval.op = '*';
                                  RETURN(CLOSE); }
-#line 709 "scanner.cc"
+#line 769 "scanner.cc"
 }
-#line 253 "scanner.re"
+#line 271 "scanner.re"
 
 
 code:
 
-#line 716 "scanner.cc"
+#line 776 "scanner.cc"
 {
        YYCTYPE yych;
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if(yych <= '&') {
                if(yych <= 0x0A) {
-                       if(yych <= 0x09) goto yy133;
-                       goto yy131;
+                       if(yych <= 0x09) goto yy148;
+                       goto yy146;
                } else {
-                       if(yych == '"') goto yy135;
-                       goto yy133;
+                       if(yych == '"') goto yy150;
+                       goto yy148;
                }
        } else {
                if(yych <= '{') {
-                       if(yych <= '\'') goto yy136;
-                       if(yych <= 'z') goto yy133;
-                       goto yy129;
+                       if(yych <= '\'') goto yy151;
+                       if(yych <= 'z') goto yy148;
+                       goto yy144;
                } else {
-                       if(yych != '}') goto yy133;
+                       if(yych != '}') goto yy148;
                }
        }
        ++YYCURSOR;
-#line 257 "scanner.re"
+#line 275 "scanner.re"
        { if(--depth == 0){
                                        cur = cursor;
                                        yylval.token = new Token(token(), tline);
                                        return CODE;
                                  }
                                  goto code; }
-#line 746 "scanner.cc"
-yy129:
+#line 806 "scanner.cc"
+yy144:
        ++YYCURSOR;
-#line 263 "scanner.re"
+#line 281 "scanner.re"
        { ++depth;
                                  goto code; }
-#line 752 "scanner.cc"
-yy131:
+#line 812 "scanner.cc"
+yy146:
        ++YYCURSOR;
-#line 265 "scanner.re"
+#line 283 "scanner.re"
        { if(cursor == eof) fatal("missing '}'");
                                  pos = cursor; cline++;
                                  goto code;
                                }
-#line 760 "scanner.cc"
-yy133:
+#line 820 "scanner.cc"
+yy148:
        ++YYCURSOR;
-yy134:
-#line 269 "scanner.re"
+yy149:
+#line 287 "scanner.re"
        { goto code; }
-#line 766 "scanner.cc"
-yy135:
+#line 826 "scanner.cc"
+yy150:
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == 0x0A) goto yy134;
-       goto yy142;
-yy136:
+       if(yych == 0x0A) goto yy149;
+       goto yy157;
+yy151:
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == 0x0A) goto yy134;
-       goto yy138;
-yy137:
+       if(yych == 0x0A) goto yy149;
+       goto yy153;
+yy152:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy138:
+yy153:
        if(yych <= '&') {
-               if(yych != 0x0A) goto yy137;
+               if(yych != 0x0A) goto yy152;
        } else {
-               if(yych <= '\'') goto yy133;
-               if(yych == '\\') goto yy140;
-               goto yy137;
+               if(yych <= '\'') goto yy148;
+               if(yych == '\\') goto yy155;
+               goto yy152;
        }
-yy139:
+yy154:
        YYCURSOR = YYMARKER;
-       goto yy134;
-yy140:
+       goto yy149;
+yy155:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A) goto yy139;
-       goto yy137;
-yy141:
+       if(yych == 0x0A) goto yy154;
+       goto yy152;
+yy156:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy142:
+yy157:
        if(yych <= '!') {
-               if(yych == 0x0A) goto yy139;
-               goto yy141;
+               if(yych == 0x0A) goto yy154;
+               goto yy156;
        } else {
-               if(yych <= '"') goto yy133;
-               if(yych != '\\') goto yy141;
+               if(yych <= '"') goto yy148;
+               if(yych != '\\') goto yy156;
        }
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A) goto yy139;
-       goto yy141;
+       if(yych == 0x0A) goto yy154;
+       goto yy156;
 }
-#line 270 "scanner.re"
+#line 288 "scanner.re"
 
 
 comment:
 
-#line 819 "scanner.cc"
+#line 879 "scanner.cc"
 {
        YYCTYPE yych;
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if(yych <= ')') {
-               if(yych == 0x0A) goto yy149;
-               goto yy151;
+               if(yych == 0x0A) goto yy164;
+               goto yy166;
        } else {
-               if(yych <= '*') goto yy146;
-               if(yych == '/') goto yy148;
-               goto yy151;
+               if(yych <= '*') goto yy161;
+               if(yych == '/') goto yy163;
+               goto yy166;
        }
-yy146:
+yy161:
        ++YYCURSOR;
-       if((yych = *YYCURSOR) == '/') goto yy154;
-yy147:
-#line 285 "scanner.re"
+       if((yych = *YYCURSOR) == '/') goto yy169;
+yy162:
+#line 303 "scanner.re"
        { if(cursor == eof) RETURN(0);
                                  goto comment; }
-#line 839 "scanner.cc"
-yy148:
+#line 899 "scanner.cc"
+yy163:
        yych = *++YYCURSOR;
-       if(yych == '*') goto yy152;
-       goto yy147;
-yy149:
+       if(yych == '*') goto yy167;
+       goto yy162;
+yy164:
        ++YYCURSOR;
-#line 281 "scanner.re"
+#line 299 "scanner.re"
        { if(cursor == eof) RETURN(0);
                                  tok = pos = cursor; cline++;
                                  goto comment;
                                }
-#line 851 "scanner.cc"
-yy151:
+#line 911 "scanner.cc"
+yy166:
        yych = *++YYCURSOR;
-       goto yy147;
-yy152:
+       goto yy162;
+yy167:
        ++YYCURSOR;
-#line 278 "scanner.re"
+#line 296 "scanner.re"
        { ++depth;
                                  fatal("ambiguous /* found");
                                  goto comment; }
-#line 861 "scanner.cc"
-yy154:
+#line 921 "scanner.cc"
+yy169:
        ++YYCURSOR;
-#line 274 "scanner.re"
+#line 292 "scanner.re"
        { if(--depth == 0)
                                        goto scan;
                                    else
                                        goto comment; }
-#line 869 "scanner.cc"
+#line 929 "scanner.cc"
 }
-#line 287 "scanner.re"
+#line 305 "scanner.re"
 
 
 config:
 
-#line 876 "scanner.cc"
+#line 936 "scanner.cc"
 {
        YYCTYPE yych;
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if(yych <= 0x1F) {
-               if(yych != 0x09) goto yy162;
+               if(yych != 0x09) goto yy177;
        } else {
-               if(yych <= ' ') goto yy158;
-               if(yych == '=') goto yy160;
-               goto yy162;
+               if(yych <= ' ') goto yy173;
+               if(yych == '=') goto yy175;
+               goto yy177;
        }
-yy158:
+yy173:
        ++YYCURSOR;
        yych = *YYCURSOR;
-       goto yy167;
-yy159:
-#line 291 "scanner.re"
+       goto yy182;
+yy174:
+#line 309 "scanner.re"
        { goto config; }
-#line 895 "scanner.cc"
-yy160:
+#line 955 "scanner.cc"
+yy175:
        ++YYCURSOR;
        yych = *YYCURSOR;
-       goto yy165;
-yy161:
-#line 292 "scanner.re"
+       goto yy180;
+yy176:
+#line 310 "scanner.re"
        { iscfg = 2;
                                  cur = cursor;
                                  RETURN('='); 
                                }
-#line 906 "scanner.cc"
-yy162:
+#line 966 "scanner.cc"
+yy177:
        ++YYCURSOR;
-#line 296 "scanner.re"
+#line 314 "scanner.re"
        { fatal("missing '='"); }
-#line 911 "scanner.cc"
-yy164:
+#line 971 "scanner.cc"
+yy179:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy165:
-       if(yych == 0x09) goto yy164;
-       if(yych == ' ') goto yy164;
-       goto yy161;
-yy166:
+yy180:
+       if(yych == 0x09) goto yy179;
+       if(yych == ' ') goto yy179;
+       goto yy176;
+yy181:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy167:
-       if(yych == 0x09) goto yy166;
-       if(yych == ' ') goto yy166;
-       goto yy159;
+yy182:
+       if(yych == 0x09) goto yy181;
+       if(yych == ' ') goto yy181;
+       goto yy174;
 }
-#line 297 "scanner.re"
+#line 315 "scanner.re"
 
 
 value:
 
-#line 934 "scanner.cc"
+#line 994 "scanner.cc"
 {
        YYCTYPE yych;
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if(yych <= '&') {
                if(yych <= 0x0D) {
-                       if(yych <= 0x08) goto yy176;
-                       if(yych <= 0x0A) goto yy170;
-                       if(yych <= 0x0C) goto yy176;
+                       if(yych <= 0x08) goto yy191;
+                       if(yych <= 0x0A) goto yy185;
+                       if(yych <= 0x0C) goto yy191;
                } else {
                        if(yych <= ' ') {
-                               if(yych <= 0x1F) goto yy176;
+                               if(yych <= 0x1F) goto yy191;
                        } else {
-                               if(yych == '"') goto yy178;
-                               goto yy176;
+                               if(yych == '"') goto yy193;
+                               goto yy191;
                        }
                }
        } else {
                if(yych <= '/') {
-                       if(yych <= '\'') goto yy180;
-                       if(yych == '-') goto yy173;
-                       goto yy176;
+                       if(yych <= '\'') goto yy195;
+                       if(yych == '-') goto yy188;
+                       goto yy191;
                } else {
                        if(yych <= '9') {
-                               if(yych <= '0') goto yy171;
-                               goto yy174;
+                               if(yych <= '0') goto yy186;
+                               goto yy189;
                        } else {
-                               if(yych != ';') goto yy176;
+                               if(yych != ';') goto yy191;
                        }
                }
        }
-yy170:
-#line 306 "scanner.re"
+yy185:
+#line 324 "scanner.re"
        { cur = cursor;
                                  yylval.str = new Str(token());
                                  iscfg = 0;
                                  return VALUE;
                                }
-#line 973 "scanner.cc"
-yy171:
+#line 1033 "scanner.cc"
+yy186:
        ++YYCURSOR;
        if((yych = *YYCURSOR) <= 0x0D) {
-               if(yych <= 0x08) goto yy176;
-               if(yych <= 0x0A) goto yy172;
-               if(yych <= 0x0C) goto yy176;
+               if(yych <= 0x08) goto yy191;
+               if(yych <= 0x0A) goto yy187;
+               if(yych <= 0x0C) goto yy191;
        } else {
                if(yych <= ' ') {
-                       if(yych <= 0x1F) goto yy176;
+                       if(yych <= 0x1F) goto yy191;
                } else {
-                       if(yych != ';') goto yy176;
+                       if(yych != ';') goto yy191;
                }
        }
-yy172:
-#line 301 "scanner.re"
+yy187:
+#line 319 "scanner.re"
        { cur = cursor;
                                  yylval.number = atoi(token().to_string().c_str());
                                  iscfg = 0;
                                  return NUMBER;
                                }
-#line 994 "scanner.cc"
-yy173:
+#line 1054 "scanner.cc"
+yy188:
        yych = *++YYCURSOR;
-       if(yych <= '0') goto yy177;
-       if(yych >= ':') goto yy177;
-yy174:
+       if(yych <= '0') goto yy192;
+       if(yych >= ':') goto yy192;
+yy189:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych <= 0x1F) {
                if(yych <= 0x0A) {
-                       if(yych >= 0x09) goto yy172;
+                       if(yych >= 0x09) goto yy187;
                } else {
-                       if(yych == 0x0D) goto yy172;
+                       if(yych == 0x0D) goto yy187;
                }
        } else {
                if(yych <= '9') {
-                       if(yych <= ' ') goto yy172;
-                       if(yych >= '0') goto yy174;
+                       if(yych <= ' ') goto yy187;
+                       if(yych >= '0') goto yy189;
                } else {
-                       if(yych == ';') goto yy172;
+                       if(yych == ';') goto yy187;
                }
        }
-yy176:
+yy191:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy177:
+yy192:
        if(yych <= 0x0D) {
-               if(yych <= 0x08) goto yy176;
-               if(yych <= 0x0A) goto yy170;
-               if(yych <= 0x0C) goto yy176;
-               goto yy170;
+               if(yych <= 0x08) goto yy191;
+               if(yych <= 0x0A) goto yy185;
+               if(yych <= 0x0C) goto yy191;
+               goto yy185;
        } else {
                if(yych <= ' ') {
-                       if(yych <= 0x1F) goto yy176;
-                       goto yy170;
+                       if(yych <= 0x1F) goto yy191;
+                       goto yy185;
                } else {
-                       if(yych == ';') goto yy170;
-                       goto yy176;
+                       if(yych == ';') goto yy185;
+                       goto yy191;
                }
        }
-yy178:
+yy193:
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych <= ' ') {
                if(yych <= 0x0A) {
-                       if(yych <= 0x08) goto yy178;
-                       if(yych <= 0x09) goto yy188;
-                       goto yy170;
+                       if(yych <= 0x08) goto yy193;
+                       if(yych <= 0x09) goto yy203;
+                       goto yy185;
                } else {
-                       if(yych == 0x0D) goto yy188;
-                       if(yych <= 0x1F) goto yy178;
-                       goto yy188;
+                       if(yych == 0x0D) goto yy203;
+                       if(yych <= 0x1F) goto yy193;
+                       goto yy203;
                }
        } else {
                if(yych <= ':') {
-                       if(yych == '"') goto yy176;
-                       goto yy178;
+                       if(yych == '"') goto yy191;
+                       goto yy193;
                } else {
-                       if(yych <= ';') goto yy188;
-                       if(yych == '\\') goto yy190;
-                       goto yy178;
+                       if(yych <= ';') goto yy203;
+                       if(yych == '\\') goto yy205;
+                       goto yy193;
                }
        }
-yy180:
+yy195:
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych <= ' ') {
                if(yych <= 0x0A) {
-                       if(yych <= 0x08) goto yy180;
-                       if(yych >= 0x0A) goto yy170;
+                       if(yych <= 0x08) goto yy195;
+                       if(yych >= 0x0A) goto yy185;
                } else {
-                       if(yych == 0x0D) goto yy182;
-                       if(yych <= 0x1F) goto yy180;
+                       if(yych == 0x0D) goto yy197;
+                       if(yych <= 0x1F) goto yy195;
                }
        } else {
                if(yych <= ':') {
-                       if(yych == '\'') goto yy176;
-                       goto yy180;
+                       if(yych == '\'') goto yy191;
+                       goto yy195;
                } else {
-                       if(yych <= ';') goto yy182;
-                       if(yych == '\\') goto yy185;
-                       goto yy180;
+                       if(yych <= ';') goto yy197;
+                       if(yych == '\\') goto yy200;
+                       goto yy195;
                }
        }
-yy182:
+yy197:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych <= '&') {
-               if(yych != 0x0A) goto yy182;
+               if(yych != 0x0A) goto yy197;
        } else {
-               if(yych <= '\'') goto yy186;
-               if(yych == '\\') goto yy187;
-               goto yy182;
+               if(yych <= '\'') goto yy201;
+               if(yych == '\\') goto yy202;
+               goto yy197;
        }
-yy184:
+yy199:
        YYCURSOR = YYMARKER;
-       goto yy170;
-yy185:
+       goto yy185;
+yy200:
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych <= 0x0D) {
                if(yych <= 0x09) {
-                       if(yych <= 0x08) goto yy180;
-                       goto yy182;
+                       if(yych <= 0x08) goto yy195;
+                       goto yy197;
                } else {
-                       if(yych <= 0x0A) goto yy170;
-                       if(yych <= 0x0C) goto yy180;
-                       goto yy182;
+                       if(yych <= 0x0A) goto yy185;
+                       if(yych <= 0x0C) goto yy195;
+                       goto yy197;
                }
        } else {
                if(yych <= ' ') {
-                       if(yych <= 0x1F) goto yy180;
-                       goto yy182;
+                       if(yych <= 0x1F) goto yy195;
+                       goto yy197;
                } else {
-                       if(yych == ';') goto yy182;
-                       goto yy180;
+                       if(yych == ';') goto yy197;
+                       goto yy195;
                }
        }
-yy186:
+yy201:
        yych = *++YYCURSOR;
-       goto yy170;
-yy187:
+       goto yy185;
+yy202:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A) goto yy184;
-       goto yy182;
-yy188:
+       if(yych == 0x0A) goto yy199;
+       goto yy197;
+yy203:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych <= '!') {
-               if(yych == 0x0A) goto yy184;
-               goto yy188;
+               if(yych == 0x0A) goto yy199;
+               goto yy203;
        } else {
-               if(yych <= '"') goto yy186;
-               if(yych == '\\') goto yy191;
-               goto yy188;
+               if(yych <= '"') goto yy201;
+               if(yych == '\\') goto yy206;
+               goto yy203;
        }
-yy190:
+yy205:
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych <= 0x0D) {
                if(yych <= 0x09) {
-                       if(yych <= 0x08) goto yy178;
-                       goto yy188;
+                       if(yych <= 0x08) goto yy193;
+                       goto yy203;
                } else {
-                       if(yych <= 0x0A) goto yy170;
-                       if(yych <= 0x0C) goto yy178;
-                       goto yy188;
+                       if(yych <= 0x0A) goto yy185;
+                       if(yych <= 0x0C) goto yy193;
+                       goto yy203;
                }
        } else {
                if(yych <= ' ') {
-                       if(yych <= 0x1F) goto yy178;
-                       goto yy188;
+                       if(yych <= 0x1F) goto yy193;
+                       goto yy203;
                } else {
-                       if(yych == ';') goto yy188;
-                       goto yy178;
+                       if(yych == ';') goto yy203;
+                       goto yy193;
                }
        }
-yy191:
+yy206:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A) goto yy184;
-       goto yy188;
+       if(yych == 0x0A) goto yy199;
+       goto yy203;
 }
-#line 311 "scanner.re"
+#line 329 "scanner.re"
 
 }
 
index e03e4d26ef3bf03ef995a6166beb3ca9eef5f279..b8c1daf30fc9cbae3dce971d7a8204a189c1f801 100755 (executable)
@@ -78,6 +78,8 @@ provide re2c packages.</li>
 <h1>Changelog</h1>
 <h2>2006-04-13: 0.10.2</h2>
 <ul>
+<li>Added /*!ignore!re2c */ to support documenting of re2c source.</li>
+<li>Fixed issue with multiline re2c comments (/*!max:re2c ... */ and alike).</li>
 <li>Fixed generation of YYDEBUG() when using -d switch.</li>
 <li>Added /*!getstate:re2c */ which triggers generation of the YYGETSTATE() block.</li>
 <li>Added configuration 'state:abort'.</li>
index 6a3bb54b3206d70baddc783ef8beaae2d3df6e7f..4936018497e1acf92356575414e68ab8c3d7e4e5 100755 (executable)
@@ -85,6 +85,8 @@ yy7:    if(yych &lt;= '/') goto yy3;
 <p>After the /*!re2c */ blocks you can place a /*!max:re2c */ block that will
 output a define (YYMAXFILL) that holds the maximum number of characters required to parse
 the input. That is the maximum value YYFILL() will receive.</p>
+<p>You can also use /*!ignore:re2c */ blocks that allows to document the
+scanner code and will not be part of the output.</p>
 <a name="lbAE" id="lbAE"> </a>
 <h2>OPTIONS</h2>
 <p><b>re2c</b> provides the following options:</p>
index cc8d0ba04fd8194879093c95ca9a4435ae9a428a..3fe264b4da6a8dab20ac2f1e3c71791fe50958bd 100644 (file)
--- a/re2c.1.in
+++ b/re2c.1.in
@@ -7,6 +7,10 @@
 .ds rx regular expression
 .ds lx \fIl\fP-expression
 \"$Log$
+\"Revision 1.49  2006/04/15 13:00:04  helly
+\"- Added /*!ignore!re2c */ to support documenting of re2c source.
+\"- Fixed issue with multiline re2c comments (/*!max:re2c ... */ and alike).
+\"
 \"Revision 1.48  2006/04/15 11:58:34  helly
 \"- Update docu
 \"
@@ -256,6 +260,9 @@ that will output a define (\fCYYMAXFILL\fP) that holds the maximum number of
 characters required to parse the input. That is the maximum value \fCYYFILL()\fP 
 will receive.
 
+You can also use \fC/*!ignore:re2c */\fP blocks that allows to document the
+scanner code and will not be part of the output.
+
 .SH OPTIONS
 \*(re provides the following options:
 .TP
index cb1bec73c6234379475f35f838c6a25f9bb45f61..f9d4c5ecad9634d584cc7003d48f177e0e692df9 100644 (file)
@@ -124,6 +124,20 @@ echo:
                                        ignore_eoc = true;
                                        goto echo;
                                }
+       "/*!ignore:re2c" {
+                                       tok = pos = cursor;
+                                       ignore_eoc = true;
+                                       goto echo;
+                               }
+       "*" "/" "\r"? "\n"      {
+                                       if (ignore_eoc) {
+                                               ignore_eoc = false;
+                                       } else {
+                                               out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok));
+                                       }
+                                       tok = pos = cursor; cline++;
+                                       goto echo;
+                               }
        "*" "/"         {
                                        if (ignore_eoc) {
                                                ignore_eoc = false;
@@ -134,12 +148,16 @@ echo:
                                        goto echo;
                                }
        "\n"            {
-                                       out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok));
+                                       if (!ignore_eoc) {
+                                               out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok));
+                                       }
                                        tok = pos = cursor; cline++;
                                        goto echo;
                                }
        zero            {
-                                       out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok) - 1); // -1 so we don't write out the \0
+                                       if (!ignore_eoc) {
+                                               out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok) - 1); // -1 so we don't write out the \0
+                                       }
                                        if(cursor == eof) {
                                                RETURN(0);
                                        }
index 728d792b7b5f5b8879aa51d5831bf16d2db3ff08..3a407810483a831153ee40ba6a79f3214109a8bd 100755 (executable)
@@ -360,7 +360,6 @@ yy51:
 
 #define YYMAXFILL 45
 
-
 int main(int,void**)
 {
        int res, result = 0;
index c221c33f2c10806ea45588f5b2dfdc074608f3ac..ee6f852c416a94285118ba511138e140897a22b3 100755 (executable)
@@ -19,11 +19,10 @@ char *scan(char *p)
        case 1: goto yyFillLabel1;
        }
 
-
        // after getstate
 
 
-#line 27 "<stdout>"
+#line 26 "<stdout>"
        {
 
 yy0:
@@ -51,12 +50,12 @@ yy2:
 yy3:
 #line 21 "config4f.f.re"
                { return YYCURSOR; }
-#line 55 "<stdout>"
+#line 54 "<stdout>"
 yy4:
                ++YYCURSOR;
 #line 22 "config4f.f.re"
                { return NULL; }
-#line 60 "<stdout>"
+#line 59 "<stdout>"
 yy6:
                ++YYCURSOR;
                YYSETSTATE(1);
index d996591a9ced71a772e9439981984e62555f6b01..414d8d29dc918d9d49f183e9825ddedb8c1d53bf 100755 (executable)
@@ -178,7 +178,6 @@ yy16:
 
 #define YYMAXFILL 3
 
-
 int main(int,char**)
 {
        Scanner s("a77 a1 b8 b1");
index 1bb3902c2bc4e35405a33af42d6f7f9b9282e62b..3b531373db8d356724f3d9eee70a7dd92908c1fe 100755 (executable)
@@ -184,7 +184,6 @@ yy16:
 
 #define YYMAXFILL 3
 
-
 int main(int,char**)
 {
        Scanner s("a77 a1 b8 b1");
index e26ef14a895e0815759826028ffe46a2dce3f9fa..190ea7a433bf28d31cfd2cde418f650432ac5c9f 100755 (executable)
@@ -141,7 +141,6 @@ yy16:
 
 #define YYMAXFILL 3
 
-
 int main(int,char**)
 {
        Scanner s("a77 a1 b8 b1");
diff --git a/test/input13.c b/test/input13.c
new file mode 100755 (executable)
index 0000000..081a281
--- /dev/null
@@ -0,0 +1,64 @@
+/* Generated by re2c */
+#line 1 "input13.re"
+// ignored
+// code
+
+#line 7 "<stdout>"
+{
+       YYCTYPE yych;
+
+       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 'a':       goto yy2;
+       default:        goto yy4;
+       }
+yy2:
+       yych = *(YYMARKER = ++YYCURSOR);
+       switch(yych){
+       case 'b':       goto yy5;
+       default:        goto yy3;
+       }
+yy3:
+#line 11 "input13.re"
+       { return 0; }
+#line 26 "<stdout>"
+yy4:
+       yych = *++YYCURSOR;
+       goto yy3;
+yy5:
+       ++YYCURSOR;
+       if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 'b':       goto yy5;
+       case 'c':       goto yy8;
+       default:        goto yy7;
+       }
+yy7:
+       YYCURSOR = YYMARKER;
+       goto yy3;
+yy8:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'c':       goto yy9;
+       default:        goto yy7;
+       }
+yy9:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'c':       goto yy10;
+       default:        goto yy7;
+       }
+yy10:
+       ++YYCURSOR;
+#line 10 "input13.re"
+       { return 1; }
+#line 58 "<stdout>"
+}
+#line 13 "input13.re"
+
+// ignored
+// max
+#define YYMAXFILL 3
+// eof
\ No newline at end of file
diff --git a/test/input13.re b/test/input13.re
new file mode 100755 (executable)
index 0000000..7d8c7d0
--- /dev/null
@@ -0,0 +1,26 @@
+// ignored
+/*!ignore:re2c
+
+  Ignored...
+
+ */
+// code
+/*!re2c
+
+[a][b]+ "ccc" { return 1; }
+[\000-\377]   { return 0; }
+
+*/
+// ignored
+/*!ignore:re2c
+
+  Ignored...
+
+ */
+// max
+/*!max:re2c
+
+  Ignored...
+ */
+// eof
\ No newline at end of file
index 85945a8553081c1d5807305c3e05464e35557841..cc3e2abe5bed71be4e03b81e2e57df9729e55568 100755 (executable)
@@ -16056,7 +16056,6 @@ yy1314:
 
 #define YYMAXFILL 26
 
-
 timelib_time* timelib_strtotime(char *s, int len, int *errors, timelib_tzdb *tzdb)
 {
        Scanner in;
index d087a2174ed3903696cc56622a164a476d576541..02fccb0feb437080166f576dbbea07ea4172a609 100755 (executable)
@@ -28142,7 +28142,6 @@ yy1318:
 
 #define YYMAXFILL 26
 
-
 timelib_time* timelib_strtotime(char *s, int len, int *errors, timelib_tzdb *tzdb)
 {
        Scanner in;
index c437327ca5fc217c1c1bd4657465a6adc8e992d5..3b178973c5c316d8af54df409c4ae47fb50f6811 100755 (executable)
@@ -22202,7 +22202,6 @@ yy1419:
 
 #define YYMAXFILL 29
 
-
 timelib_time* timelib_strtotime(char *s, int len, struct timelib_error_container **errors, timelib_tzdb *tzdb)
 {
        Scanner in;
index ebb6b1df3a3c3cac543cfab79809f833465be2bb..a4114b1a1b63390fae12dbc6e2f31cd4a660742e 100755 (executable)
@@ -16022,7 +16022,6 @@ yy1314:
 
 #define YYMAXFILL 26
 
-
 timelib_time* timelib_strtotime(char *s, int len, int *errors, timelib_tzdb *tzdb)
 {
        Scanner in;