fix deflate code
This commit is contained in:
parent
267f312f13
commit
b6b5c2ac49
23
pdf.js
23
pdf.js
@ -788,22 +788,20 @@ var FlateStream = (function() {
|
|||||||
if (codeSize == 0|| codeSize < codeLen || codeLen == 0)
|
if (codeSize == 0|| codeSize < codeLen || codeLen == 0)
|
||||||
error("Bad encoding in flate stream");
|
error("Bad encoding in flate stream");
|
||||||
this.codeBuf = (codeBuf >> codeLen);
|
this.codeBuf = (codeBuf >> codeLen);
|
||||||
this.codeLen = (codeLen - codeLen);
|
this.codeSize = (codeSize - codeLen);
|
||||||
return codeVal;
|
return codeVal;
|
||||||
},
|
},
|
||||||
ensureBuffer: function(requested, copy) {
|
ensureBuffer: function(requested) {
|
||||||
var buffer = this.buffer;
|
var buffer = this.buffer;
|
||||||
var current = buffer ? buffer.byteLength : 0;
|
var current = buffer ? buffer.byteLength : 0;
|
||||||
if (current < requested)
|
if (requested < current)
|
||||||
return buffer;
|
return buffer;
|
||||||
var size = 512;
|
var size = 512;
|
||||||
while (size < requested)
|
while (size < requested)
|
||||||
size <<= 1;
|
size <<= 1;
|
||||||
var buffer2 = new Uint8Array(size);
|
var buffer2 = new Uint8Array(size);
|
||||||
if (copy) {
|
|
||||||
for (var i = 0; i < current; ++i)
|
for (var i = 0; i < current; ++i)
|
||||||
buffer2[i] = buffer[i];
|
buffer2[i] = buffer[i];
|
||||||
}
|
|
||||||
return this.buffer = buffer2;
|
return this.buffer = buffer2;
|
||||||
},
|
},
|
||||||
lookChar: function() {
|
lookChar: function() {
|
||||||
@ -813,8 +811,9 @@ var FlateStream = (function() {
|
|||||||
if (this.eof)
|
if (this.eof)
|
||||||
return;
|
return;
|
||||||
this.readBlock();
|
this.readBlock();
|
||||||
|
bufferPos = this.bufferPos;
|
||||||
}
|
}
|
||||||
return String.fromChar(this.buffer[bufferPos]);
|
return String.fromCharCode(this.buffer[bufferPos]);
|
||||||
},
|
},
|
||||||
getChar: function() {
|
getChar: function() {
|
||||||
var ch = this.lookChar();
|
var ch = this.lookChar();
|
||||||
@ -922,31 +921,31 @@ var FlateStream = (function() {
|
|||||||
codeLenCodeLengths[codeLenCodeMap[i++]] = this.getBits(3);
|
codeLenCodeLengths[codeLenCodeMap[i++]] = this.getBits(3);
|
||||||
var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths);
|
var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths);
|
||||||
|
|
||||||
// built the literal and distance code tables
|
// build the literal and distance code tables
|
||||||
var len = 0;
|
var len = 0;
|
||||||
var i = 0;
|
var i = 0;
|
||||||
var codes = numLitCodes + numDistCodes;
|
var codes = numLitCodes + numDistCodes;
|
||||||
var codeLengths = new Array(codes);
|
var codeLengths = new Array(codes);
|
||||||
while (i < codes) {
|
while (i < codes) {
|
||||||
function repeat(stream, array, i, len, offset, what) {
|
function repeat(stream, array, len, offset, what) {
|
||||||
var repeat = stream.getBits(len) + offset;
|
var repeat = stream.getBits(len) + offset;
|
||||||
while (repeat-- > 0)
|
while (repeat-- > 0)
|
||||||
array[i++] = what;
|
array[i++] = what;
|
||||||
}
|
}
|
||||||
var code = this.getCode(codeLenCodeTab);
|
var code = this.getCode(codeLenCodeTab);
|
||||||
if (code == 16) {
|
if (code == 16) {
|
||||||
repeat(this, codeLengths, i, 2, 3, len);
|
repeat(this, codeLengths, 2, 3, len);
|
||||||
} else if (code == 17) {
|
} else if (code == 17) {
|
||||||
repeat(this, codeLengths, i, 3, 3, len = 0);
|
repeat(this, codeLengths, 3, 3, len = 0);
|
||||||
} else if (code == 18) {
|
} else if (code == 18) {
|
||||||
repeat(this, codeLengths, i, 7, 11, len = 0);
|
repeat(this, codeLengths, 7, 11, len = 0);
|
||||||
} else {
|
} else {
|
||||||
codeLengths[i++] = len = code;
|
codeLengths[i++] = len = code;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
litCodeTable = this.generateHuffmanTable(codeLengths.slice(0, numLitCodes));
|
litCodeTable = this.generateHuffmanTable(codeLengths.slice(0, numLitCodes));
|
||||||
distCodeTable = this.generateHuffmanTable(codeLengths.slice(numDistCodes, codes));
|
distCodeTable = this.generateHuffmanTable(codeLengths.slice(numLitCodes, codes));
|
||||||
} else {
|
} else {
|
||||||
error("Unknown block type in flate stream");
|
error("Unknown block type in flate stream");
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ function load() {
|
|||||||
canvas.mozOpaque = true;
|
canvas.mozOpaque = true;
|
||||||
pageDisplay = document.getElementById("pageNumber");
|
pageDisplay = document.getElementById("pageNumber");
|
||||||
infoDisplay = document.getElementById("info");
|
infoDisplay = document.getElementById("info");
|
||||||
open("uncompressed.tracemonkey-pldi-09.pdf");
|
open("compressed.tracemonkey-pldi-09.pdf");
|
||||||
}
|
}
|
||||||
|
|
||||||
function open(url) {
|
function open(url) {
|
||||||
|
Loading…
Reference in New Issue
Block a user