|
|
@ -55,12 +55,14 @@ var Parser = (function ParserClosure() { |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
}, |
|
|
|
getObj: function Parser_getObj(cipherTransform) { |
|
|
|
getObj: function Parser_getObj(cipherTransform) { |
|
|
|
if (isCmd(this.buf1, 'BI')) { // inline image
|
|
|
|
var buf1 = this.buf1; |
|
|
|
this.shift(); |
|
|
|
this.shift(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (buf1 instanceof Cmd) { |
|
|
|
|
|
|
|
switch (buf1.cmd) { |
|
|
|
|
|
|
|
case 'BI': // inline image
|
|
|
|
return this.makeInlineImage(cipherTransform); |
|
|
|
return this.makeInlineImage(cipherTransform); |
|
|
|
} |
|
|
|
case '[': // array
|
|
|
|
if (isCmd(this.buf1, '[')) { // array
|
|
|
|
|
|
|
|
this.shift(); |
|
|
|
|
|
|
|
var array = []; |
|
|
|
var array = []; |
|
|
|
while (!isCmd(this.buf1, ']') && !isEOF(this.buf1)) { |
|
|
|
while (!isCmd(this.buf1, ']') && !isEOF(this.buf1)) { |
|
|
|
array.push(this.getObj(cipherTransform)); |
|
|
|
array.push(this.getObj(cipherTransform)); |
|
|
@ -70,9 +72,7 @@ var Parser = (function ParserClosure() { |
|
|
|
} |
|
|
|
} |
|
|
|
this.shift(); |
|
|
|
this.shift(); |
|
|
|
return array; |
|
|
|
return array; |
|
|
|
} |
|
|
|
case '<<': // dictionary or stream
|
|
|
|
if (isCmd(this.buf1, '<<')) { // dictionary or stream
|
|
|
|
|
|
|
|
this.shift(); |
|
|
|
|
|
|
|
var dict = new Dict(this.xref); |
|
|
|
var dict = new Dict(this.xref); |
|
|
|
while (!isCmd(this.buf1, '>>') && !isEOF(this.buf1)) { |
|
|
|
while (!isCmd(this.buf1, '>>') && !isEOF(this.buf1)) { |
|
|
|
if (!isName(this.buf1)) { |
|
|
|
if (!isName(this.buf1)) { |
|
|
@ -100,10 +100,13 @@ var Parser = (function ParserClosure() { |
|
|
|
} |
|
|
|
} |
|
|
|
this.shift(); |
|
|
|
this.shift(); |
|
|
|
return dict; |
|
|
|
return dict; |
|
|
|
|
|
|
|
default: // simple object
|
|
|
|
|
|
|
|
return buf1; |
|
|
|
} |
|
|
|
} |
|
|
|
if (isInt(this.buf1)) { // indirect reference or integer
|
|
|
|
} |
|
|
|
var num = this.buf1; |
|
|
|
|
|
|
|
this.shift(); |
|
|
|
if (isInt(buf1)) { // indirect reference or integer
|
|
|
|
|
|
|
|
var num = buf1; |
|
|
|
if (isInt(this.buf1) && isCmd(this.buf2, 'R')) { |
|
|
|
if (isInt(this.buf1) && isCmd(this.buf2, 'R')) { |
|
|
|
var ref = new Ref(num, this.buf1); |
|
|
|
var ref = new Ref(num, this.buf1); |
|
|
|
this.shift(); |
|
|
|
this.shift(); |
|
|
@ -112,9 +115,9 @@ var Parser = (function ParserClosure() { |
|
|
|
} |
|
|
|
} |
|
|
|
return num; |
|
|
|
return num; |
|
|
|
} |
|
|
|
} |
|
|
|
if (isString(this.buf1)) { // string
|
|
|
|
|
|
|
|
var str = this.buf1; |
|
|
|
if (isString(buf1)) { // string
|
|
|
|
this.shift(); |
|
|
|
var str = buf1; |
|
|
|
if (cipherTransform) { |
|
|
|
if (cipherTransform) { |
|
|
|
str = cipherTransform.decryptString(str); |
|
|
|
str = cipherTransform.decryptString(str); |
|
|
|
} |
|
|
|
} |
|
|
@ -122,9 +125,7 @@ var Parser = (function ParserClosure() { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// simple object
|
|
|
|
// simple object
|
|
|
|
var obj = this.buf1; |
|
|
|
return buf1; |
|
|
|
this.shift(); |
|
|
|
|
|
|
|
return obj; |
|
|
|
|
|
|
|
}, |
|
|
|
}, |
|
|
|
makeInlineImage: function Parser_makeInlineImage(cipherTransform) { |
|
|
|
makeInlineImage: function Parser_makeInlineImage(cipherTransform) { |
|
|
|
var lexer = this.lexer; |
|
|
|
var lexer = this.lexer; |
|
|
@ -629,7 +630,7 @@ var Lexer = (function LexerClosure() { |
|
|
|
var x = toHexDigit(ch); |
|
|
|
var x = toHexDigit(ch); |
|
|
|
if (x != -1) { |
|
|
|
if (x != -1) { |
|
|
|
var x2 = toHexDigit(this.nextChar()); |
|
|
|
var x2 = toHexDigit(this.nextChar()); |
|
|
|
if (x2 == -1) { |
|
|
|
if (x2 === -1) { |
|
|
|
error('Illegal digit in hex char in name: ' + x2); |
|
|
|
error('Illegal digit in hex char in name: ' + x2); |
|
|
|
} |
|
|
|
} |
|
|
|
strBuf.push(String.fromCharCode((x << 4) | x2)); |
|
|
|
strBuf.push(String.fromCharCode((x << 4) | x2)); |
|
|
@ -695,7 +696,7 @@ var Lexer = (function LexerClosure() { |
|
|
|
return EOF; |
|
|
|
return EOF; |
|
|
|
} |
|
|
|
} |
|
|
|
if (comment) { |
|
|
|
if (comment) { |
|
|
|
if (ch === 0x0A || ch == 0x0D) { // LF, CR
|
|
|
|
if (ch === 0x0A || ch === 0x0D) { // LF, CR
|
|
|
|
comment = false; |
|
|
|
comment = false; |
|
|
|
} |
|
|
|
} |
|
|
|
} else if (ch === 0x25) { // '%'
|
|
|
|
} else if (ch === 0x25) { // '%'
|
|
|
@ -762,19 +763,19 @@ var Lexer = (function LexerClosure() { |
|
|
|
if (knownCommandFound && !(possibleCommand in knownCommands)) { |
|
|
|
if (knownCommandFound && !(possibleCommand in knownCommands)) { |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
if (str.length == 128) { |
|
|
|
if (str.length === 128) { |
|
|
|
error('Command token too long: ' + str.length); |
|
|
|
error('Command token too long: ' + str.length); |
|
|
|
} |
|
|
|
} |
|
|
|
str = possibleCommand; |
|
|
|
str = possibleCommand; |
|
|
|
knownCommandFound = knownCommands && (str in knownCommands); |
|
|
|
knownCommandFound = knownCommands && (str in knownCommands); |
|
|
|
} |
|
|
|
} |
|
|
|
if (str == 'true') { |
|
|
|
if (str === 'true') { |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
if (str == 'false') { |
|
|
|
if (str === 'false') { |
|
|
|
return false; |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
if (str == 'null') { |
|
|
|
if (str === 'null') { |
|
|
|
return null; |
|
|
|
return null; |
|
|
|
} |
|
|
|
} |
|
|
|
return Cmd.get(str); |
|
|
|
return Cmd.get(str); |
|
|
|