link pages tables are now a part of SWFOutputDev
[swftools.git] / src / parser.lex
index 6314203..b2b4948 100644 (file)
@@ -99,18 +99,21 @@ 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;
-               while(strchr("0123456789abcdefABCDEF", p[nr])) {
+               char*utf8;
+               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;
                    if(p[nr]>='A' && p[nr]<='F') num |= p[nr] - 'A' + 10;
                    nr++;
                }
-               char*utf8 = getUTF8(num);
+               utf8 = getUTF8(num);
                new = strlen(utf8);
-
                memcpy(p, utf8, new); // do not copy the terminating zero
                break;
            }
@@ -118,12 +121,14 @@ static void unescapeString(string_t * tmp)
                continue;
        }
        tmp->len -= (nr-new); 
-       int t;
-       char*to=p+new,*from=p+nr;
-       while(*from) {
-           *to = *from;
-           to++;
-           from++;
+       {
+           int t;
+           char*to=p+new,*from=p+nr;
+           while(*from) {
+               *to = *from;
+               to++;
+               from++;
+           }
        }
     }
 }
@@ -262,7 +267,7 @@ RVALUE       \"{STRING}\"|([^ \n\r\t]+)
 }
 \.include{S}.*\n                   {handleInclude(yytext, yyleng);}
 \.{NAME}                   {s(COMMAND);c();}
-:([^.]|\.[^e]|\.e[^n]|\.en[^d]|[ \n\r\t])*\.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();}