|
@@ -21,8 +21,8 @@ if (typeof PDFJS === 'undefined') {
|
|
|
(typeof window !== 'undefined' ? window : this).PDFJS = {};
|
|
|
}
|
|
|
|
|
|
-PDFJS.version = '1.0.245';
|
|
|
-PDFJS.build = '0026075';
|
|
|
+PDFJS.version = '1.0.247';
|
|
|
+PDFJS.build = 'f000c04';
|
|
|
|
|
|
(function pdfjsWrapper() {
|
|
|
// Use strict in our context only - users might not want it
|
|
@@ -38740,55 +38740,58 @@ var Parser = (function ParserClosure() {
|
|
|
}
|
|
|
},
|
|
|
getObj: function Parser_getObj(cipherTransform) {
|
|
|
- if (isCmd(this.buf1, 'BI')) { // inline image
|
|
|
- this.shift();
|
|
|
- return this.makeInlineImage(cipherTransform);
|
|
|
- }
|
|
|
- if (isCmd(this.buf1, '[')) { // array
|
|
|
- this.shift();
|
|
|
- var array = [];
|
|
|
- while (!isCmd(this.buf1, ']') && !isEOF(this.buf1)) {
|
|
|
- array.push(this.getObj(cipherTransform));
|
|
|
- }
|
|
|
- if (isEOF(this.buf1)) {
|
|
|
- error('End of file inside array');
|
|
|
- }
|
|
|
- this.shift();
|
|
|
- return array;
|
|
|
- }
|
|
|
- if (isCmd(this.buf1, '<<')) { // dictionary or stream
|
|
|
- this.shift();
|
|
|
- var dict = new Dict(this.xref);
|
|
|
- while (!isCmd(this.buf1, '>>') && !isEOF(this.buf1)) {
|
|
|
- if (!isName(this.buf1)) {
|
|
|
- info('Malformed dictionary: key must be a name object');
|
|
|
+ var buf1 = this.buf1;
|
|
|
+ this.shift();
|
|
|
+
|
|
|
+ if (buf1 instanceof Cmd) {
|
|
|
+ switch (buf1.cmd) {
|
|
|
+ case 'BI': // inline image
|
|
|
+ return this.makeInlineImage(cipherTransform);
|
|
|
+ case '[': // array
|
|
|
+ var array = [];
|
|
|
+ while (!isCmd(this.buf1, ']') && !isEOF(this.buf1)) {
|
|
|
+ array.push(this.getObj(cipherTransform));
|
|
|
+ }
|
|
|
+ if (isEOF(this.buf1)) {
|
|
|
+ error('End of file inside array');
|
|
|
+ }
|
|
|
this.shift();
|
|
|
- continue;
|
|
|
- }
|
|
|
+ return array;
|
|
|
+ case '<<': // dictionary or stream
|
|
|
+ var dict = new Dict(this.xref);
|
|
|
+ while (!isCmd(this.buf1, '>>') && !isEOF(this.buf1)) {
|
|
|
+ if (!isName(this.buf1)) {
|
|
|
+ info('Malformed dictionary: key must be a name object');
|
|
|
+ this.shift();
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- var key = this.buf1.name;
|
|
|
- this.shift();
|
|
|
- if (isEOF(this.buf1)) {
|
|
|
- break;
|
|
|
- }
|
|
|
- dict.set(key, this.getObj(cipherTransform));
|
|
|
- }
|
|
|
- if (isEOF(this.buf1)) {
|
|
|
- error('End of file inside dictionary');
|
|
|
- }
|
|
|
+ var key = this.buf1.name;
|
|
|
+ this.shift();
|
|
|
+ if (isEOF(this.buf1)) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ dict.set(key, this.getObj(cipherTransform));
|
|
|
+ }
|
|
|
+ if (isEOF(this.buf1)) {
|
|
|
+ error('End of file inside dictionary');
|
|
|
+ }
|
|
|
|
|
|
- // Stream objects are not allowed inside content streams or
|
|
|
- // object streams.
|
|
|
- if (isCmd(this.buf2, 'stream')) {
|
|
|
- return (this.allowStreams ?
|
|
|
- this.makeStream(dict, cipherTransform) : dict);
|
|
|
+ // Stream objects are not allowed inside content streams or
|
|
|
+ // object streams.
|
|
|
+ if (isCmd(this.buf2, 'stream')) {
|
|
|
+ return (this.allowStreams ?
|
|
|
+ this.makeStream(dict, cipherTransform) : dict);
|
|
|
+ }
|
|
|
+ this.shift();
|
|
|
+ return dict;
|
|
|
+ default: // simple object
|
|
|
+ return buf1;
|
|
|
}
|
|
|
- this.shift();
|
|
|
- return dict;
|
|
|
}
|
|
|
- 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')) {
|
|
|
var ref = new Ref(num, this.buf1);
|
|
|
this.shift();
|
|
@@ -38797,9 +38800,9 @@ var Parser = (function ParserClosure() {
|
|
|
}
|
|
|
return num;
|
|
|
}
|
|
|
- if (isString(this.buf1)) { // string
|
|
|
- var str = this.buf1;
|
|
|
- this.shift();
|
|
|
+
|
|
|
+ if (isString(buf1)) { // string
|
|
|
+ var str = buf1;
|
|
|
if (cipherTransform) {
|
|
|
str = cipherTransform.decryptString(str);
|
|
|
}
|
|
@@ -38807,9 +38810,7 @@ var Parser = (function ParserClosure() {
|
|
|
}
|
|
|
|
|
|
// simple object
|
|
|
- var obj = this.buf1;
|
|
|
- this.shift();
|
|
|
- return obj;
|
|
|
+ return buf1;
|
|
|
},
|
|
|
makeInlineImage: function Parser_makeInlineImage(cipherTransform) {
|
|
|
var lexer = this.lexer;
|
|
@@ -39314,7 +39315,7 @@ var Lexer = (function LexerClosure() {
|
|
|
var x = toHexDigit(ch);
|
|
|
if (x != -1) {
|
|
|
var x2 = toHexDigit(this.nextChar());
|
|
|
- if (x2 == -1) {
|
|
|
+ if (x2 === -1) {
|
|
|
error('Illegal digit in hex char in name: ' + x2);
|
|
|
}
|
|
|
strBuf.push(String.fromCharCode((x << 4) | x2));
|
|
@@ -39380,7 +39381,7 @@ var Lexer = (function LexerClosure() {
|
|
|
return EOF;
|
|
|
}
|
|
|
if (comment) {
|
|
|
- if (ch === 0x0A || ch == 0x0D) { // LF, CR
|
|
|
+ if (ch === 0x0A || ch === 0x0D) { // LF, CR
|
|
|
comment = false;
|
|
|
}
|
|
|
} else if (ch === 0x25) { // '%'
|
|
@@ -39447,19 +39448,19 @@ var Lexer = (function LexerClosure() {
|
|
|
if (knownCommandFound && !(possibleCommand in knownCommands)) {
|
|
|
break;
|
|
|
}
|
|
|
- if (str.length == 128) {
|
|
|
+ if (str.length === 128) {
|
|
|
error('Command token too long: ' + str.length);
|
|
|
}
|
|
|
str = possibleCommand;
|
|
|
knownCommandFound = knownCommands && (str in knownCommands);
|
|
|
}
|
|
|
- if (str == 'true') {
|
|
|
+ if (str === 'true') {
|
|
|
return true;
|
|
|
}
|
|
|
- if (str == 'false') {
|
|
|
+ if (str === 'false') {
|
|
|
return false;
|
|
|
}
|
|
|
- if (str == 'null') {
|
|
|
+ if (str === 'null') {
|
|
|
return null;
|
|
|
}
|
|
|
return Cmd.get(str);
|