--- wine-0.9.8/tools/wrc/parser.l.old 2006-02-26 01:44:59.000000000 +0100 +++ wine-0.9.8/tools/wrc/parser.l 2006-02-26 01:45:16.000000000 +0100 @@ -68,7 +68,7 @@ */ /* Exclusive string handling */ -%x yystr +%x yyystr /* Exclusive unicode string handling */ %x yylstr /* Exclusive rcdata single quoted data handling */ @@ -477,47 +477,47 @@ /* * Normal string scanning */ -\" yy_push_state(yystr); cbufidx = 0; -\"{ws}+ | -\" { +\" yy_push_state(yyystr); cbufidx = 0; +\"{ws}+ | +\" { yy_pop_state(); yylval.str = get_buffered_cstring(); return tSTRING; } -\\[0-7]{1,3} { /* octal escape sequence */ +\\[0-7]{1,3} { /* octal escape sequence */ int result; result = strtol(yytext+1, 0, 8); if ( result > 0xff ) yyerror("Character constant out of range"); addcchar((char)result); } -\\x[0-9a-fA-F]{2} { /* hex escape sequence */ +\\x[0-9a-fA-F]{2} { /* hex escape sequence */ int result; result = strtol(yytext+2, 0, 16); addcchar((char)result); } -\\x[0-9a-fA-F] { yyerror("Invalid hex escape sequence '%s'", yytext); } +\\x[0-9a-fA-F] { yyerror("Invalid hex escape sequence '%s'", yytext); } -\\[0-9]+ yyerror("Bad escape sequence"); -\\\n{ws}* line_number++; char_number = 1; /* backslash at EOL continues string after leading whitespace on next line */ -\\a addcchar('\a'); -\\b addcchar('\b'); -\\f addcchar('\f'); -\\n addcchar('\n'); -\\r addcchar('\r'); -\\t addcchar('\t'); -\\v addcchar('\v'); -\\. addcchar(yytext[1]); -\\\r\n addcchar(yytext[2]); line_number++; char_number = 1; -[^\\\n\"]+ { +\\[0-9]+ yyerror("Bad escape sequence"); +\\\n{ws}* line_number++; char_number = 1; /* backslash at EOL continues string after leading whitespace on next line */ +\\a addcchar('\a'); +\\b addcchar('\b'); +\\f addcchar('\f'); +\\n addcchar('\n'); +\\r addcchar('\r'); +\\t addcchar('\t'); +\\v addcchar('\v'); +\\. addcchar(yytext[1]); +\\\r\n addcchar(yytext[2]); line_number++; char_number = 1; +[^\\\n\"]+ { char *yptr = yytext; while(*yptr) addcchar(*yptr++); } -\"\" addcchar('\"'); /* "bla""bla" -> "bla\"bla" */ -\\\"\" addcchar('\"'); /* "bla\""bla" -> "bla\"bla" */ -\"{ws}+\" ; /* "bla" "bla" -> "blabla" */ -\n yyerror("Unterminated string"); +\"\" addcchar('\"'); /* "bla""bla" -> "bla\"bla" */ +\\\"\" addcchar('\"'); /* "bla\""bla" -> "bla\"bla" */ +\"{ws}+\" ; /* "bla" "bla" -> "blabla" */ +\n yyerror("Unterminated string"); /* * Raw data scanning