X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fparser.lex;h=b2b49480a633ff43a7cfdf2f597b2553f9db466a;hb=82710154a148b2debb2ee3cc23f6a55880b847f7;hp=337da1eaafedd652c58e1a9eb82b0e5bdf5c3e0f;hpb=863561d0c07a57bc88ba8c76f135b585a1bd3efd;p=swftools.git diff --git a/src/parser.lex b/src/parser.lex index 337da1e..b2b4948 100644 --- a/src/parser.lex +++ b/src/parser.lex @@ -99,10 +99,13 @@ static void unescapeString(string_t * tmp) case 'n': p[0] = '\n'; break; case 'r': p[0] = '\r'; break; case 't': p[0] = '\t'; break; - case 'x': { + case 'x': case 'u': { + int max=2; int num=0; char*utf8; - while(strchr("0123456789abcdefABCDEF", p[nr])) { + if(p[1] == 'u') + max = 4; + while(strchr("0123456789abcdefABCDEF", p[nr]) && nr < max+2) { num <<= 4; if(p[nr]>='0' && p[nr]<='9') num |= p[nr] - '0'; if(p[nr]>='a' && p[nr]<='f') num |= p[nr] - 'a' + 10; @@ -111,7 +114,6 @@ static void unescapeString(string_t * tmp) } utf8 = getUTF8(num); new = strlen(utf8); - memcpy(p, utf8, new); // do not copy the terminating zero break; } @@ -244,7 +246,6 @@ NUMBER -?[0-9]+(\.[0-9]*)? PERCENT {NUMBER}% STRING (\\.|[^\\"\n])* S [ \n\r\t] -NS [^ \n\r\t] RVALUE \"{STRING}\"|([^ \n\r\t]+) %% @@ -266,7 +267,7 @@ RVALUE \"{STRING}\"|([^ \n\r\t]+) } \.include{S}.*\n {handleInclude(yytext, yyleng);} \.{NAME} {s(COMMAND);c();} -:({NS}|{S}[^.]|{S}\.[^e]|{S}\.e[^n]|{S}\.en[^d]|{S}\.end{NS})*{S}\.end {s(RAWDATA);c();} +:([^.]|\.[^e]|\.e[^n]|\.en[^d]|\.end[^ \n\r\t]|[ \n\r\t])*\.end {s(RAWDATA);c();} {NAME} {s(IDENTIFIER);c();} "[" {c();BEGIN(BINARY);} {S} {c();}