X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fparser.lex;h=bf520e59df2e346b52055cc36cda38d2ea94376f;hb=93b4e0f258c5a31405df91b018760cf7a236ec54;hp=f29926f4c4f0636d79376226bc7fcd6cbf424123;hpb=73168a7f7ca3a242980071be43b5454456374aae;p=swftools.git diff --git a/src/parser.lex b/src/parser.lex index f29926f..bf520e5 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: