From 259f256d095124996548f111c6005ea0a15ab871 Mon Sep 17 00:00:00 2001 From: helly Date: Thu, 29 Dec 2005 15:42:02 +0000 Subject: [PATCH] - Allow to test with specific switches by providing them in test filename - Add first unicode tests --- run_tests.sh.in | 3 +- test/cvsignore.c | 309 ++++++++++++++++++++++++++++++++++++++++++++ test/cvsignore.re | 67 ++++++++++ test/cvsignore.s.c | 241 ++++++++++++++++++++++++++++++++++ test/cvsignore.s.re | 67 ++++++++++ test/cvsignore.w.c | 241 ++++++++++++++++++++++++++++++++++ test/cvsignore.w.re | 67 ++++++++++ 7 files changed, 994 insertions(+), 1 deletion(-) create mode 100755 test/cvsignore.c create mode 100755 test/cvsignore.re create mode 100755 test/cvsignore.s.c create mode 100755 test/cvsignore.s.re create mode 100755 test/cvsignore.w.c create mode 100755 test/cvsignore.w.re diff --git a/run_tests.sh.in b/run_tests.sh.in index b981f478..df5aa192 100644 --- a/run_tests.sh.in +++ b/run_tests.sh.in @@ -3,9 +3,10 @@ result=0 errcnt=0 for x in @top_srcdir@/test/*.re; do echo $x + switches=`basename $x|sed -e 's/^.*\.\([^.]*\)\..*$/-\1/g' -e 's/^[^-].*//'g` # don't use the -o flag, since it makes it harder to diff. outname=@builddir@/test/`basename ${x%.re}.temp` - @builddir@/re2c $x 2>&1 | sed -e "s,$x,`basename $x`,g" -e "s,/\* Generated by re2c .*\*/,/\* Generated by re2c \*/,g" > $outname + @builddir@/re2c $switches $x 2>&1 | sed -e "s,$x,`basename $x`,g" -e "s,/\* Generated by re2c .*\*/,/\* Generated by re2c \*/,g" > $outname if cmp -s ${x%.re}.c $outname; then echo "Passed." rm $outname diff --git a/test/cvsignore.c b/test/cvsignore.c new file mode 100755 index 00000000..3f808c82 --- /dev/null +++ b/test/cvsignore.c @@ -0,0 +1,309 @@ +/* Generated by re2c */ +#line 1 "cvsignore.re" + +#define YYFILL(n) if (cursor >= limit) break; +#define YYCTYPE char +#define YYCURSOR cursor +#define YYLIMIT limit +#define YYMARKER marker + +#line 16 "cvsignore.re" + + +#define APPEND(text) \ + append(output, outsize, text, sizeof(text) - sizeof(YYCTYPE)) + +inline void append(YYCTYPE *output, size_t & outsize, const YYCTYPE * text, size_t len) +{ + memcpy(output + outsize, text, len); + outsize += (len / sizeof(YYCTYPE)); +} + +void scan(YYCTYPE *pText, size_t *pSize, int *pbChanged) +{ + // rule + // scan lines + // find $ in lines + // compact $: .. $ to $$ + + YYCTYPE *output; + const YYCTYPE *cursor, *limit, *marker; + + cursor = marker = output = *pText; + + size_t insize = *pSize; + size_t outsize = 0; + + limit = cursor + insize; + + while(1) { +loop: + +#line 43 "" +{ + YYCTYPE yych; + unsigned int yyaccept = 0; + goto yy0; + ++YYCURSOR; +yy0: + if((YYLIMIT - YYCURSOR) < 11) YYFILL(11); + yych = *YYCURSOR; + switch(yych){ + case '$': goto yy2; + default: goto yy4; + } +yy2: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 'D': goto yy10; + case 'I': goto yy9; + case 'L': goto yy8; + case 'R': goto yy7; + case 'S': goto yy5; + default: goto yy3; + } +yy3: +#line 53 "cvsignore.re" +{ output[outsize++] = cursor[-1]; if (cursor >= limit) break; goto loop; } +#line 69 "" +yy4: yych = *++YYCURSOR; + goto yy3; +yy5: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy44; + default: goto yy6; + } +yy6: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy3; + } +yy7: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy32; + default: goto yy6; + } +yy8: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy25; + default: goto yy6; + } +yy9: yych = *++YYCURSOR; + switch(yych){ + case 'd': goto yy19; + default: goto yy6; + } +yy10: yych = *++YYCURSOR; + switch(yych){ + case 'a': goto yy11; + default: goto yy6; + } +yy11: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy12; + default: goto yy6; + } +yy12: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy13; + default: goto yy6; + } +yy13: yych = *++YYCURSOR; + switch(yych){ + case '$': goto yy15; + case ':': goto yy14; + default: goto yy6; + } +yy14: yych = *++YYCURSOR; + switch(yych){ + case '$': goto yy6; + default: goto yy18; + } +yy15: ++YYCURSOR; + goto yy16; +yy16: +#line 48 "cvsignore.re" +{ APPEND(L"$Date$"); goto loop; } +#line 127 "" +yy17: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy18; +yy18: switch(yych){ + case 0x0A: goto yy6; + case '$': goto yy15; + default: goto yy17; + } +yy19: yych = *++YYCURSOR; + switch(yych){ + case '$': goto yy21; + case ':': goto yy20; + default: goto yy6; + } +yy20: yych = *++YYCURSOR; + switch(yych){ + case '$': goto yy6; + default: goto yy24; + } +yy21: ++YYCURSOR; + goto yy22; +yy22: +#line 49 "cvsignore.re" +{ APPEND(L"$Id$"); goto loop; } +#line 153 "" +yy23: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy24; +yy24: switch(yych){ + case 0x0A: goto yy6; + case '$': goto yy21; + default: goto yy23; + } +yy25: yych = *++YYCURSOR; + switch(yych){ + case 'g': goto yy26; + default: goto yy6; + } +yy26: yych = *++YYCURSOR; + switch(yych){ + case '$': goto yy28; + case ':': goto yy27; + default: goto yy6; + } +yy27: yych = *++YYCURSOR; + switch(yych){ + case '$': goto yy6; + default: goto yy31; + } +yy28: ++YYCURSOR; + goto yy29; +yy29: +#line 50 "cvsignore.re" +{ APPEND(L"$Log$ +{ APPEND(L"Revision 1.1 2005/12/29 15:42:02 helly +{ APPEND(L"- Allow to test with specific switches by providing them in test filename +{ APPEND(L"- Add first unicode tests +{ APPEND(L""); goto loop; } +#line 184 "" +yy30: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy31; +yy31: switch(yych){ + case 0x0A: goto yy6; + case '$': goto yy28; + default: goto yy30; + } +yy32: yych = *++YYCURSOR; + switch(yych){ + case 'v': goto yy33; + default: goto yy6; + } +yy33: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy34; + default: goto yy6; + } +yy34: yych = *++YYCURSOR; + switch(yych){ + case 's': goto yy35; + default: goto yy6; + } +yy35: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy36; + default: goto yy6; + } +yy36: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy37; + default: goto yy6; + } +yy37: yych = *++YYCURSOR; + switch(yych){ + case 'n': goto yy38; + default: goto yy6; + } +yy38: yych = *++YYCURSOR; + switch(yych){ + case '$': goto yy40; + case ':': goto yy39; + default: goto yy6; + } +yy39: yych = *++YYCURSOR; + switch(yych){ + case '$': goto yy6; + default: goto yy43; + } +yy40: ++YYCURSOR; + goto yy41; +yy41: +#line 51 "cvsignore.re" +{ APPEND(L"$Revision$"); goto loop; } +#line 240 "" +yy42: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy43; +yy43: switch(yych){ + case 0x0A: goto yy6; + case '$': goto yy40; + default: goto yy42; + } +yy44: yych = *++YYCURSOR; + switch(yych){ + case 'u': goto yy45; + default: goto yy6; + } +yy45: yych = *++YYCURSOR; + switch(yych){ + case 'r': goto yy46; + default: goto yy6; + } +yy46: yych = *++YYCURSOR; + switch(yych){ + case 'c': goto yy47; + default: goto yy6; + } +yy47: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy48; + default: goto yy6; + } +yy48: yych = *++YYCURSOR; + switch(yych){ + case '$': goto yy50; + case ':': goto yy49; + default: goto yy6; + } +yy49: yych = *++YYCURSOR; + switch(yych){ + case '$': goto yy6; + default: goto yy53; + } +yy50: ++YYCURSOR; + goto yy51; +yy51: +#line 52 "cvsignore.re" +{ APPEND(L"$Source$"); goto loop; } +#line 286 "" +yy52: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy53; +yy53: switch(yych){ + case 0x0A: goto yy6; + case '$': goto yy50; + default: goto yy52; + } +} +#line 55 "cvsignore.re" + + } + output[outsize] = '\0'; + + // set the new size + *pSize = outsize; + + *pbChanged = (insize == outsize) ? 0 : 1; +} diff --git a/test/cvsignore.re b/test/cvsignore.re new file mode 100755 index 00000000..f4108e49 --- /dev/null +++ b/test/cvsignore.re @@ -0,0 +1,67 @@ + +#define YYFILL(n) if (cursor >= limit) break; +#define YYCTYPE char +#define YYCURSOR cursor +#define YYLIMIT limit +#define YYMARKER marker + +/*!re2c +any = (.|"\n"); +value = (":" (.\"$")+)?; +cvsdat = "Date"; +cvsid = "Id"; +cvslog = "Log"; +cvsrev = "Revision"; +cvssrc = "Source"; +*/ + +#define APPEND(text) \ + append(output, outsize, text, sizeof(text) - sizeof(YYCTYPE)) + +inline void append(YYCTYPE *output, size_t & outsize, const YYCTYPE * text, size_t len) +{ + memcpy(output + outsize, text, len); + outsize += (len / sizeof(YYCTYPE)); +} + +void scan(YYCTYPE *pText, size_t *pSize, int *pbChanged) +{ + // rule + // scan lines + // find $ in lines + // compact $: .. $ to $$ + + YYCTYPE *output; + const YYCTYPE *cursor, *limit, *marker; + + cursor = marker = output = *pText; + + size_t insize = *pSize; + size_t outsize = 0; + + limit = cursor + insize; + + while(1) { +loop: +/*!re2c + +"$" cvsdat value "$" { APPEND(L"$Date$"); goto loop; } +"$" cvsid value "$" { APPEND(L"$Id$"); goto loop; } +"$" cvslog value "$" { APPEND(L"$Log$ +"$" cvslog value "$" { APPEND(L"Revision 1.1 2005/12/29 15:42:02 helly +"$" cvslog value "$" { APPEND(L"- Allow to test with specific switches by providing them in test filename +"$" cvslog value "$" { APPEND(L"- Add first unicode tests +"$" cvslog value "$" { APPEND(L""); goto loop; } +"$" cvsrev value "$" { APPEND(L"$Revision$"); goto loop; } +"$" cvssrc value "$" { APPEND(L"$Source$"); goto loop; } +any { output[outsize++] = cursor[-1]; if (cursor >= limit) break; goto loop; } + +*/ + } + output[outsize] = '\0'; + + // set the new size + *pSize = outsize; + + *pbChanged = (insize == outsize) ? 0 : 1; +} diff --git a/test/cvsignore.s.c b/test/cvsignore.s.c new file mode 100755 index 00000000..ec74940e --- /dev/null +++ b/test/cvsignore.s.c @@ -0,0 +1,241 @@ +/* Generated by re2c */ +#line 1 "cvsignore.s.re" + +#define YYFILL(n) if (cursor >= limit) break; +#define YYCTYPE char +#define YYCURSOR cursor +#define YYLIMIT limit +#define YYMARKER marker + +#line 16 "cvsignore.s.re" + + +#define APPEND(text) \ + append(output, outsize, text, sizeof(text) - sizeof(YYCTYPE)) + +inline void append(YYCTYPE *output, size_t & outsize, const YYCTYPE * text, size_t len) +{ + memcpy(output + outsize, text, len); + outsize += (len / sizeof(YYCTYPE)); +} + +void scan(YYCTYPE *pText, size_t *pSize, int *pbChanged) +{ + // rule + // scan lines + // find $ in lines + // compact $: .. $ to $$ + + YYCTYPE *output; + const YYCTYPE *cursor, *limit, *marker; + + cursor = marker = output = *pText; + + size_t insize = *pSize; + size_t outsize = 0; + + limit = cursor + insize; + + while(1) { +loop: + +#line 43 "" +{ + YYCTYPE yych; + unsigned int yyaccept = 0; + goto yy0; + ++YYCURSOR; +yy0: + if((YYLIMIT - YYCURSOR) < 11) YYFILL(11); + yych = *YYCURSOR; + if(yych != '$') goto yy4; + goto yy2; +yy2: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 'D': goto yy10; + case 'I': goto yy9; + case 'L': goto yy8; + case 'R': goto yy7; + case 'S': goto yy5; + default: goto yy3; + } +yy3: +#line 53 "cvsignore.s.re" +{ output[outsize++] = cursor[-1]; if (cursor >= limit) break; goto loop; } +#line 67 "" +yy4: yych = *++YYCURSOR; + goto yy3; +yy5: yych = *++YYCURSOR; + if(yych == 'o') goto yy44; + goto yy6; +yy6: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy3; + } +yy7: yych = *++YYCURSOR; + if(yych == 'e') goto yy32; + goto yy6; +yy8: yych = *++YYCURSOR; + if(yych == 'o') goto yy25; + goto yy6; +yy9: yych = *++YYCURSOR; + if(yych == 'd') goto yy19; + goto yy6; +yy10: yych = *++YYCURSOR; + if(yych != 'a') goto yy6; + goto yy11; +yy11: yych = *++YYCURSOR; + if(yych != 't') goto yy6; + goto yy12; +yy12: yych = *++YYCURSOR; + if(yych != 'e') goto yy6; + goto yy13; +yy13: yych = *++YYCURSOR; + if(yych == '$') goto yy15; + if(yych != ':') goto yy6; + goto yy14; +yy14: yych = *++YYCURSOR; + if(yych == '$') goto yy6; + goto yy18; +yy15: ++YYCURSOR; + goto yy16; +yy16: +#line 48 "cvsignore.s.re" +{ APPEND(L"$Date$"); goto loop; } +#line 107 "" +yy17: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy18; +yy18: if(yych == 0x0A) goto yy6; + if(yych == '$') goto yy15; + goto yy17; +yy19: yych = *++YYCURSOR; + if(yych == '$') goto yy21; + if(yych != ':') goto yy6; + goto yy20; +yy20: yych = *++YYCURSOR; + if(yych == '$') goto yy6; + goto yy24; +yy21: ++YYCURSOR; + goto yy22; +yy22: +#line 49 "cvsignore.s.re" +{ APPEND(L"$Id$"); goto loop; } +#line 127 "" +yy23: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy24; +yy24: if(yych == 0x0A) goto yy6; + if(yych == '$') goto yy21; + goto yy23; +yy25: yych = *++YYCURSOR; + if(yych != 'g') goto yy6; + goto yy26; +yy26: yych = *++YYCURSOR; + if(yych == '$') goto yy28; + if(yych != ':') goto yy6; + goto yy27; +yy27: yych = *++YYCURSOR; + if(yych == '$') goto yy6; + goto yy31; +yy28: ++YYCURSOR; + goto yy29; +yy29: +#line 50 "cvsignore.s.re" +{ APPEND(L"$Log$ +{ APPEND(L"Revision 1.1 2005/12/29 15:42:02 helly +{ APPEND(L"- Allow to test with specific switches by providing them in test filename +{ APPEND(L"- Add first unicode tests +{ APPEND(L""); goto loop; } +#line 150 "" +yy30: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy31; +yy31: if(yych == 0x0A) goto yy6; + if(yych == '$') goto yy28; + goto yy30; +yy32: yych = *++YYCURSOR; + if(yych != 'v') goto yy6; + goto yy33; +yy33: yych = *++YYCURSOR; + if(yych != 'i') goto yy6; + goto yy34; +yy34: yych = *++YYCURSOR; + if(yych != 's') goto yy6; + goto yy35; +yy35: yych = *++YYCURSOR; + if(yych != 'i') goto yy6; + goto yy36; +yy36: yych = *++YYCURSOR; + if(yych != 'o') goto yy6; + goto yy37; +yy37: yych = *++YYCURSOR; + if(yych != 'n') goto yy6; + goto yy38; +yy38: yych = *++YYCURSOR; + if(yych == '$') goto yy40; + if(yych != ':') goto yy6; + goto yy39; +yy39: yych = *++YYCURSOR; + if(yych == '$') goto yy6; + goto yy43; +yy40: ++YYCURSOR; + goto yy41; +yy41: +#line 51 "cvsignore.s.re" +{ APPEND(L"$Revision$"); goto loop; } +#line 188 "" +yy42: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy43; +yy43: if(yych == 0x0A) goto yy6; + if(yych == '$') goto yy40; + goto yy42; +yy44: yych = *++YYCURSOR; + if(yych != 'u') goto yy6; + goto yy45; +yy45: yych = *++YYCURSOR; + if(yych != 'r') goto yy6; + goto yy46; +yy46: yych = *++YYCURSOR; + if(yych != 'c') goto yy6; + goto yy47; +yy47: yych = *++YYCURSOR; + if(yych != 'e') goto yy6; + goto yy48; +yy48: yych = *++YYCURSOR; + if(yych == '$') goto yy50; + if(yych != ':') goto yy6; + goto yy49; +yy49: yych = *++YYCURSOR; + if(yych == '$') goto yy6; + goto yy53; +yy50: ++YYCURSOR; + goto yy51; +yy51: +#line 52 "cvsignore.s.re" +{ APPEND(L"$Source$"); goto loop; } +#line 220 "" +yy52: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy53; +yy53: if(yych == 0x0A) goto yy6; + if(yych == '$') goto yy50; + goto yy52; +} +#line 55 "cvsignore.s.re" + + } + output[outsize] = '\0'; + + // set the new size + *pSize = outsize; + + *pbChanged = (insize == outsize) ? 0 : 1; +} diff --git a/test/cvsignore.s.re b/test/cvsignore.s.re new file mode 100755 index 00000000..f4108e49 --- /dev/null +++ b/test/cvsignore.s.re @@ -0,0 +1,67 @@ + +#define YYFILL(n) if (cursor >= limit) break; +#define YYCTYPE char +#define YYCURSOR cursor +#define YYLIMIT limit +#define YYMARKER marker + +/*!re2c +any = (.|"\n"); +value = (":" (.\"$")+)?; +cvsdat = "Date"; +cvsid = "Id"; +cvslog = "Log"; +cvsrev = "Revision"; +cvssrc = "Source"; +*/ + +#define APPEND(text) \ + append(output, outsize, text, sizeof(text) - sizeof(YYCTYPE)) + +inline void append(YYCTYPE *output, size_t & outsize, const YYCTYPE * text, size_t len) +{ + memcpy(output + outsize, text, len); + outsize += (len / sizeof(YYCTYPE)); +} + +void scan(YYCTYPE *pText, size_t *pSize, int *pbChanged) +{ + // rule + // scan lines + // find $ in lines + // compact $: .. $ to $$ + + YYCTYPE *output; + const YYCTYPE *cursor, *limit, *marker; + + cursor = marker = output = *pText; + + size_t insize = *pSize; + size_t outsize = 0; + + limit = cursor + insize; + + while(1) { +loop: +/*!re2c + +"$" cvsdat value "$" { APPEND(L"$Date$"); goto loop; } +"$" cvsid value "$" { APPEND(L"$Id$"); goto loop; } +"$" cvslog value "$" { APPEND(L"$Log$ +"$" cvslog value "$" { APPEND(L"Revision 1.1 2005/12/29 15:42:02 helly +"$" cvslog value "$" { APPEND(L"- Allow to test with specific switches by providing them in test filename +"$" cvslog value "$" { APPEND(L"- Add first unicode tests +"$" cvslog value "$" { APPEND(L""); goto loop; } +"$" cvsrev value "$" { APPEND(L"$Revision$"); goto loop; } +"$" cvssrc value "$" { APPEND(L"$Source$"); goto loop; } +any { output[outsize++] = cursor[-1]; if (cursor >= limit) break; goto loop; } + +*/ + } + output[outsize] = '\0'; + + // set the new size + *pSize = outsize; + + *pbChanged = (insize == outsize) ? 0 : 1; +} diff --git a/test/cvsignore.w.c b/test/cvsignore.w.c new file mode 100755 index 00000000..5140163e --- /dev/null +++ b/test/cvsignore.w.c @@ -0,0 +1,241 @@ +/* Generated by re2c */ +#line 1 "cvsignore.w.re" + +#define YYFILL(n) if (cursor >= limit) break; +#define YYCTYPE unsigned short +#define YYCURSOR cursor +#define YYLIMIT limit +#define YYMARKER marker + +#line 16 "cvsignore.w.re" + + +#define APPEND(text) \ + append(output, outsize, text, sizeof(text) - sizeof(YYCTYPE)) + +inline void append(YYCTYPE *output, size_t & outsize, const YYCTYPE * text, size_t len) +{ + memcpy(output + outsize, text, len); + outsize += (len / sizeof(YYCTYPE)); +} + +void scan(YYCTYPE *pText, size_t *pSize, int *pbChanged) +{ + // rule + // scan lines + // find $ in lines + // compact $: .. $ to $$ + + YYCTYPE *output; + const YYCTYPE *cursor, *limit, *marker; + + cursor = marker = output = *pText; + + size_t insize = *pSize; + size_t outsize = 0; + + limit = cursor + insize; + + while(1) { +loop: + +#line 43 "" +{ + YYCTYPE yych; + unsigned int yyaccept = 0; + goto yy0; + ++YYCURSOR; +yy0: + if((YYLIMIT - YYCURSOR) < 11) YYFILL(11); + yych = *YYCURSOR; + if(yych != '$') goto yy4; + goto yy2; +yy2: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 'D': goto yy10; + case 'I': goto yy9; + case 'L': goto yy8; + case 'R': goto yy7; + case 'S': goto yy5; + default: goto yy3; + } +yy3: +#line 53 "cvsignore.w.re" +{ output[outsize++] = cursor[-1]; if (cursor >= limit) break; goto loop; } +#line 67 "" +yy4: yych = *++YYCURSOR; + goto yy3; +yy5: yych = *++YYCURSOR; + if(yych == 'o') goto yy44; + goto yy6; +yy6: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy3; + } +yy7: yych = *++YYCURSOR; + if(yych == 'e') goto yy32; + goto yy6; +yy8: yych = *++YYCURSOR; + if(yych == 'o') goto yy25; + goto yy6; +yy9: yych = *++YYCURSOR; + if(yych == 'd') goto yy19; + goto yy6; +yy10: yych = *++YYCURSOR; + if(yych != 'a') goto yy6; + goto yy11; +yy11: yych = *++YYCURSOR; + if(yych != 't') goto yy6; + goto yy12; +yy12: yych = *++YYCURSOR; + if(yych != 'e') goto yy6; + goto yy13; +yy13: yych = *++YYCURSOR; + if(yych == '$') goto yy15; + if(yych != ':') goto yy6; + goto yy14; +yy14: yych = *++YYCURSOR; + if(yych == '$') goto yy6; + goto yy18; +yy15: ++YYCURSOR; + goto yy16; +yy16: +#line 48 "cvsignore.w.re" +{ APPEND(L"$Date$"); goto loop; } +#line 107 "" +yy17: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy18; +yy18: if(yych == 0x000A) goto yy6; + if(yych == '$') goto yy15; + goto yy17; +yy19: yych = *++YYCURSOR; + if(yych == '$') goto yy21; + if(yych != ':') goto yy6; + goto yy20; +yy20: yych = *++YYCURSOR; + if(yych == '$') goto yy6; + goto yy24; +yy21: ++YYCURSOR; + goto yy22; +yy22: +#line 49 "cvsignore.w.re" +{ APPEND(L"$Id$"); goto loop; } +#line 127 "" +yy23: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy24; +yy24: if(yych == 0x000A) goto yy6; + if(yych == '$') goto yy21; + goto yy23; +yy25: yych = *++YYCURSOR; + if(yych != 'g') goto yy6; + goto yy26; +yy26: yych = *++YYCURSOR; + if(yych == '$') goto yy28; + if(yych != ':') goto yy6; + goto yy27; +yy27: yych = *++YYCURSOR; + if(yych == '$') goto yy6; + goto yy31; +yy28: ++YYCURSOR; + goto yy29; +yy29: +#line 50 "cvsignore.w.re" +{ APPEND(L"$Log$ +{ APPEND(L"Revision 1.1 2005/12/29 15:42:02 helly +{ APPEND(L"- Allow to test with specific switches by providing them in test filename +{ APPEND(L"- Add first unicode tests +{ APPEND(L""); goto loop; } +#line 150 "" +yy30: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy31; +yy31: if(yych == 0x000A) goto yy6; + if(yych == '$') goto yy28; + goto yy30; +yy32: yych = *++YYCURSOR; + if(yych != 'v') goto yy6; + goto yy33; +yy33: yych = *++YYCURSOR; + if(yych != 'i') goto yy6; + goto yy34; +yy34: yych = *++YYCURSOR; + if(yych != 's') goto yy6; + goto yy35; +yy35: yych = *++YYCURSOR; + if(yych != 'i') goto yy6; + goto yy36; +yy36: yych = *++YYCURSOR; + if(yych != 'o') goto yy6; + goto yy37; +yy37: yych = *++YYCURSOR; + if(yych != 'n') goto yy6; + goto yy38; +yy38: yych = *++YYCURSOR; + if(yych == '$') goto yy40; + if(yych != ':') goto yy6; + goto yy39; +yy39: yych = *++YYCURSOR; + if(yych == '$') goto yy6; + goto yy43; +yy40: ++YYCURSOR; + goto yy41; +yy41: +#line 51 "cvsignore.w.re" +{ APPEND(L"$Revision$"); goto loop; } +#line 188 "" +yy42: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy43; +yy43: if(yych == 0x000A) goto yy6; + if(yych == '$') goto yy40; + goto yy42; +yy44: yych = *++YYCURSOR; + if(yych != 'u') goto yy6; + goto yy45; +yy45: yych = *++YYCURSOR; + if(yych != 'r') goto yy6; + goto yy46; +yy46: yych = *++YYCURSOR; + if(yych != 'c') goto yy6; + goto yy47; +yy47: yych = *++YYCURSOR; + if(yych != 'e') goto yy6; + goto yy48; +yy48: yych = *++YYCURSOR; + if(yych == '$') goto yy50; + if(yych != ':') goto yy6; + goto yy49; +yy49: yych = *++YYCURSOR; + if(yych == '$') goto yy6; + goto yy53; +yy50: ++YYCURSOR; + goto yy51; +yy51: +#line 52 "cvsignore.w.re" +{ APPEND(L"$Source$"); goto loop; } +#line 220 "" +yy52: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy53; +yy53: if(yych == 0x000A) goto yy6; + if(yych == '$') goto yy50; + goto yy52; +} +#line 55 "cvsignore.w.re" + + } + output[outsize] = '\0'; + + // set the new size + *pSize = outsize; + + *pbChanged = (insize == outsize) ? 0 : 1; +} diff --git a/test/cvsignore.w.re b/test/cvsignore.w.re new file mode 100755 index 00000000..74d4dcec --- /dev/null +++ b/test/cvsignore.w.re @@ -0,0 +1,67 @@ + +#define YYFILL(n) if (cursor >= limit) break; +#define YYCTYPE unsigned short +#define YYCURSOR cursor +#define YYLIMIT limit +#define YYMARKER marker + +/*!re2c +any = (.|"\n"); +value = (":" (.\"$")+)?; +cvsdat = "Date"; +cvsid = "Id"; +cvslog = "Log"; +cvsrev = "Revision"; +cvssrc = "Source"; +*/ + +#define APPEND(text) \ + append(output, outsize, text, sizeof(text) - sizeof(YYCTYPE)) + +inline void append(YYCTYPE *output, size_t & outsize, const YYCTYPE * text, size_t len) +{ + memcpy(output + outsize, text, len); + outsize += (len / sizeof(YYCTYPE)); +} + +void scan(YYCTYPE *pText, size_t *pSize, int *pbChanged) +{ + // rule + // scan lines + // find $ in lines + // compact $: .. $ to $$ + + YYCTYPE *output; + const YYCTYPE *cursor, *limit, *marker; + + cursor = marker = output = *pText; + + size_t insize = *pSize; + size_t outsize = 0; + + limit = cursor + insize; + + while(1) { +loop: +/*!re2c + +"$" cvsdat value "$" { APPEND(L"$Date$"); goto loop; } +"$" cvsid value "$" { APPEND(L"$Id$"); goto loop; } +"$" cvslog value "$" { APPEND(L"$Log$ +"$" cvslog value "$" { APPEND(L"Revision 1.1 2005/12/29 15:42:02 helly +"$" cvslog value "$" { APPEND(L"- Allow to test with specific switches by providing them in test filename +"$" cvslog value "$" { APPEND(L"- Add first unicode tests +"$" cvslog value "$" { APPEND(L""); goto loop; } +"$" cvsrev value "$" { APPEND(L"$Revision$"); goto loop; } +"$" cvssrc value "$" { APPEND(L"$Source$"); goto loop; } +any { output[outsize++] = cursor[-1]; if (cursor >= limit) break; goto loop; } + +*/ + } + output[outsize] = '\0'; + + // set the new size + *pSize = outsize; + + *pbChanged = (insize == outsize) ? 0 : 1; +} -- 2.50.1