X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fparser.lex;h=57c70563acaf7d6e5166fdab3e1726c55f323a88;hb=c6e010138791b69c87dc53931480895bda2d5ba2;hp=f29926f4c4f0636d79376226bc7fcd6cbf424123;hpb=73168a7f7ca3a242980071be43b5454456374aae;p=swftools.git diff --git a/src/parser.lex b/src/parser.lex index f29926f..57c7056 100644 --- a/src/parser.lex +++ b/src/parser.lex @@ -29,6 +29,30 @@ static void count(char*text, int len, int condition) static char*prefix = 0; +static void unescapeString(string_t * tmp) +{ + char *p, *p1; + /* fixme - this routine expects the string to be + null-terminated */ + + for (p1=tmp->str; (p=strchr(p1, '\\')); p1 = p+1) + { + switch(p[1]) + { + case '\\': p[1] = '\\'; tmp->len--; break; + case '"': p[1] = '"'; tmp->len--; break; + case 'b': p[1] = '\b'; tmp->len--; break; + case 'f': p[1] = '\f'; tmp->len--; break; + case 'n': p[1] = '\n'; tmp->len--; break; + case 'r': p[1] = '\r'; tmp->len--; break; + case 't': p[1] = '\t'; tmp->len--; break; + default: + continue; + } + strcpy(p, p+1); + } +} + static void store(enum type_t type, int line, int column, char*text, int length) { struct token_t token; @@ -46,6 +70,7 @@ static void store(enum type_t type, int line, int column, char*text, int length) break; case STRING: string_set2(&tmp, text+1, length-2); + unescapeString(&tmp); token.text = (char*)mem_putstring(&strings, tmp); break; case TWIP: @@ -128,11 +153,10 @@ RVALUE \"{STRING}\"|([^ \n\r\t]+) {NAME} {s(IDENTIFIER);c();} "[" {c();BEGIN(BINARY);} {S} {c();} -. {char c,c1=0; +. {char c,c1=yytext[0]; printf("Syntax error in line %d, %d: %s", line, column, yytext); while(1) { c=input(); - if(!c1) c1=c; if(c=='\n' || c==EOF) break; printf("%c", c);