finish inflate code, still untested
This commit is contained in:
parent
903e6e2b9d
commit
c8ab1c014e
70
pdf.js
70
pdf.js
@ -665,6 +665,7 @@ var FlateStream = (function() {
|
|||||||
], 5];
|
], 5];
|
||||||
|
|
||||||
function constructor() {
|
function constructor() {
|
||||||
|
this.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor.prototype = {
|
constructor.prototype = {
|
||||||
@ -684,6 +685,7 @@ var FlateStream = (function() {
|
|||||||
this.eof = false;
|
this.eof = false;
|
||||||
this.codeSize = 0;
|
this.codeSize = 0;
|
||||||
this.codeBuf = 0;
|
this.codeBuf = 0;
|
||||||
|
this.pos = 0;
|
||||||
},
|
},
|
||||||
getBits: function(bits) {
|
getBits: function(bits) {
|
||||||
var stream = this.stream;
|
var stream = this.stream;
|
||||||
@ -701,6 +703,27 @@ var FlateStream = (function() {
|
|||||||
this.codeSize = codeSize -= bits;
|
this.codeSize = codeSize -= bits;
|
||||||
return b;
|
return b;
|
||||||
},
|
},
|
||||||
|
getCode: function(table) {
|
||||||
|
var codes = table.codes;
|
||||||
|
var maxLen = table.maxLen;
|
||||||
|
var codeSize = this.codeSize;
|
||||||
|
var codeBuf = this.codeBuf;
|
||||||
|
while (codeSize < maxlen) {
|
||||||
|
var b;
|
||||||
|
if ((b = stream.getByte()) == -1)
|
||||||
|
error("Bad encoding in flate stream");
|
||||||
|
codeBuf |= (b << codeSize);
|
||||||
|
codeSize += 8;
|
||||||
|
}
|
||||||
|
var code = table.codes[codeBuf & ((1 << table.maxLen) - 1)];
|
||||||
|
var codeLen = code[0];
|
||||||
|
var codeVal = code[1];
|
||||||
|
if (codeSize == 0|| codeSize < codeLen || codeLen == 0)
|
||||||
|
error("Bad encoding in flate stream");
|
||||||
|
this.codeBuf = (codeBuf >> codeLen);
|
||||||
|
this.codeLen = (codeLen - codeLen);
|
||||||
|
return codeVal;
|
||||||
|
},
|
||||||
ensureBuffer: function(requested, copy) {
|
ensureBuffer: function(requested, copy) {
|
||||||
var buffer = this.buffer;
|
var buffer = this.buffer;
|
||||||
var current = buffer ? buffer.byteLength : 0;
|
var current = buffer ? buffer.byteLength : 0;
|
||||||
@ -716,6 +739,30 @@ var FlateStream = (function() {
|
|||||||
}
|
}
|
||||||
return this.buffer = buffer2;
|
return this.buffer = buffer2;
|
||||||
},
|
},
|
||||||
|
lookChar: function() {
|
||||||
|
var bufferLength = this.bufferLength;
|
||||||
|
var bufferPos = this.bufferPos;
|
||||||
|
if (bufferLength == bufferPos) {
|
||||||
|
if (this.eof)
|
||||||
|
return;
|
||||||
|
this.readBlock();
|
||||||
|
}
|
||||||
|
return String.fromChar(this.buffer[bufferPos]);
|
||||||
|
},
|
||||||
|
getChar: function() {
|
||||||
|
var ch = this.lookChar();
|
||||||
|
if (!ch)
|
||||||
|
return;
|
||||||
|
this.pos++;
|
||||||
|
this.bufferPos++;
|
||||||
|
return ch;
|
||||||
|
},
|
||||||
|
skip: function(n) {
|
||||||
|
if (!n)
|
||||||
|
n = 1;
|
||||||
|
while (n-- > 0)
|
||||||
|
this.getChar();
|
||||||
|
}
|
||||||
generateHuffmanTable: function(lengths) {
|
generateHuffmanTable: function(lengths) {
|
||||||
var n = lengths.length;
|
var n = lengths.length;
|
||||||
|
|
||||||
@ -753,27 +800,6 @@ var FlateStream = (function() {
|
|||||||
|
|
||||||
return { codes: codes, maxLen: maxLen };
|
return { codes: codes, maxLen: maxLen };
|
||||||
},
|
},
|
||||||
getCode: function(table) {
|
|
||||||
var codes = table.codes;
|
|
||||||
var maxLen = table.maxLen;
|
|
||||||
var codeSize = this.codeSize;
|
|
||||||
var codeBuf = this.codeBuf;
|
|
||||||
while (codeSize < maxlen) {
|
|
||||||
var b;
|
|
||||||
if ((b = stream.getByte()) == -1)
|
|
||||||
error("Bad encoding in flate stream");
|
|
||||||
codeBuf |= (b << codeSize);
|
|
||||||
codeSize += 8;
|
|
||||||
}
|
|
||||||
var code = table.codes[codeBuf & ((1 << table.maxLen) - 1)];
|
|
||||||
var codeLen = code[0];
|
|
||||||
var codeVal = code[1];
|
|
||||||
if (codeSize == 0|| codeSize < codeLen || codeLen == 0)
|
|
||||||
error("Bad encoding in flate stream");
|
|
||||||
this.codeBuf = (codeBuf >> codeLen);
|
|
||||||
this.codeLen = (codeLen - codeLen);
|
|
||||||
return codeVal;
|
|
||||||
},
|
|
||||||
readBlock: function() {
|
readBlock: function() {
|
||||||
var stream = this.stream;
|
var stream = this.stream;
|
||||||
|
|
||||||
@ -801,6 +827,7 @@ var FlateStream = (function() {
|
|||||||
error("Bad uncompressed block length in flate stream");
|
error("Bad uncompressed block length in flate stream");
|
||||||
var buffer = this.ensureBuffer(blockLen);
|
var buffer = this.ensureBuffer(blockLen);
|
||||||
this.bufferLength = blockLen;
|
this.bufferLength = blockLen;
|
||||||
|
this.bufferPos = 0;
|
||||||
for (var n = 0; n < blockLen; ++n) {
|
for (var n = 0; n < blockLen; ++n) {
|
||||||
if ((b = stream.getByte()) == -1) {
|
if ((b = stream.getByte()) == -1) {
|
||||||
this.eof = true;
|
this.eof = true;
|
||||||
@ -864,6 +891,7 @@ var FlateStream = (function() {
|
|||||||
var code1 = this.getCode(litCodeTable);
|
var code1 = this.getCode(litCodeTable);
|
||||||
if (code1 == 256) {
|
if (code1 == 256) {
|
||||||
this.bufferLength = pos;
|
this.bufferLength = pos;
|
||||||
|
this.bufferPos = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (code1 < 256) {
|
if (code1 < 256) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user