X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=pdf2swf%2Fxpdf%2FLexer.cc;h=ee9dc595225459a2b5f589ab7dd0d5bfa84b2938;hb=ccec950c0c9c79e62473816c72b3e27be98567c8;hp=1fa166f1951e543ba3b167f41b566e38ba645114;hpb=c7432833fe3a6469d63fad135151a92e12877b94;p=swftools.git diff --git a/pdf2swf/xpdf/Lexer.cc b/pdf2swf/xpdf/Lexer.cc index 1fa166f..ee9dc59 100644 --- a/pdf2swf/xpdf/Lexer.cc +++ b/pdf2swf/xpdf/Lexer.cc @@ -74,6 +74,7 @@ Lexer::Lexer(XRef *xref, Object *obj) { curStr.streamReset(); } } +static int illegalChars = 0; Lexer::~Lexer() { if (!curStr.isNone()) { @@ -83,6 +84,9 @@ Lexer::~Lexer() { if (freeArray) { delete streams; } + if(illegalChars) + error(0, "Illegal characters in hex string (%d)", illegalChars); + illegalChars = 0; } int Lexer::getChar() { @@ -171,6 +175,13 @@ Object *Lexer::getObj(Object *obj) { scale = 0.1; while (1) { c = lookChar(); + if (c == '-') { + // ignore minus signs in the middle of numbers to match + // Adobe's behavior + error(getPos(), "Badly formatted number"); + getChar(); + continue; + } if (!isdigit(c)) { break; } @@ -323,7 +334,8 @@ Object *Lexer::getObj(Object *obj) { } else if (c2 >= 'a' && c2 <= 'f') { c += c2 - 'a' + 10; } else { - error(getPos(), "Illegal digit in hex char in name"); + illegalChars++; + //error(getPos(), "Illegal digit in hex char in name"); } } notEscChar: @@ -377,8 +389,10 @@ Object *Lexer::getObj(Object *obj) { c2 += c - 'A' + 10; else if (c >= 'a' && c <= 'f') c2 += c - 'a' + 10; - else - error(getPos(), "Illegal character <%02x> in hex string", c); + else { + illegalChars++; + //error(getPos(), "Illegal character <%02x> in hex string", c); + } if (++m == 2) { if (n == tokBufSize) { if (!s) @@ -414,7 +428,8 @@ Object *Lexer::getObj(Object *obj) { tokBuf[2] = '\0'; obj->initCmd(tokBuf); } else { - error(getPos(), "Illegal character '>'"); + illegalChars++; + //error(getPos(), "Illegal character '>'"); obj->initError(); } break; @@ -423,7 +438,8 @@ Object *Lexer::getObj(Object *obj) { case ')': case '{': case '}': - error(getPos(), "Illegal character '%c'", c); + //error(getPos(), "Illegal character '%c'", c); + illegalChars++; obj->initError(); break; @@ -452,7 +468,6 @@ Object *Lexer::getObj(Object *obj) { } break; } - return obj; } @@ -472,3 +487,7 @@ void Lexer::skipToNextLine() { } } } + +GBool Lexer::isSpace(int c) { + return c >= 0 && c <= 0xff && specialChars[c] == 1; +}