From 247509680ecd5e9ebe6a61b3f61ca37d480d5cce Mon Sep 17 00:00:00 2001 From: Andreas Gal Date: Mon, 9 May 2011 18:04:22 -0700 Subject: [PATCH] beginnings of inflate decompression --- pdf.js | 626 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 600 insertions(+), 26 deletions(-) diff --git a/pdf.js b/pdf.js index 9c6d2b186..306687f57 100644 --- a/pdf.js +++ b/pdf.js @@ -90,37 +90,611 @@ var StringStream = (function() { return constructor; })(); -var Buffer = (function() { - function constructor(length) { - this.bytes = new Uint8Array(length ? length : 4096); - this.pos = 0; - } - - constructor.prototype = { - putByte: function(b) { - var bytes = this.bytes; - var length = bytes.length; - if (this.pos >= length) { - var newBytes = new Uint8Array(length * 2); - for (var n = 0; n < length; ++n) - newBytes[n] = bytes[n]; - bytes = newBytes; - } - bytes[this.pos++] = b; - }, - asStream: function() { - return new Stream(this.bytes); - } - } - - return constructor; -})(); - var FlateStream = (function() { + const codeMap = [ + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 + ]; + + const lengthDecode = [ + [0, 3], + [0, 4], + [0, 5}, + [0, 6}, + [0, 7}, + [0, 8}, + [0, 9}, + [0, 10], + [1, 11], + [1, 13], + [1, 15], + [1, 17], + [2, 19], + [2, 23], + [2, 27], + [2, 31], + [3, 35], + [3, 43], + [3, 51], + [3, 59], + [4, 67], + [4, 83], + [4, 99], + [4, 115], + [5, 131], + [5, 163], + [5, 195], + [5, 227], + [0, 258], + [0, 258], + [0, 258] + ]; + + const fixedLitCodeTabCodes = [ + [7, 0x0100], + [8, 0x0050], + [8, 0x0010], + [8, 0x0118], + [7, 0x0110], + [8, 0x0070], + [8, 0x0030], + [9, 0x00c0], + [7, 0x0108], + [8, 0x0060], + [8, 0x0020], + [9, 0x00a0], + [8, 0x0000], + [8, 0x0080], + [8, 0x0040], + [9, 0x00e0], + [7, 0x0104], + [8, 0x0058], + [8, 0x0018], + [9, 0x0090], + [7, 0x0114], + [8, 0x0078], + [8, 0x0038], + [9, 0x00d0], + [7, 0x010c], + [8, 0x0068], + [8, 0x0028], + [9, 0x00b0], + [8, 0x0008], + [8, 0x0088], + [8, 0x0048], + [9, 0x00f0], + [7, 0x0102], + [8, 0x0054], + [8, 0x0014], + [8, 0x011c], + [7, 0x0112], + [8, 0x0074], + [8, 0x0034], + [9, 0x00c8], + [7, 0x010a], + [8, 0x0064], + [8, 0x0024], + [9, 0x00a8], + [8, 0x0004], + [8, 0x0084], + [8, 0x0044], + [9, 0x00e8], + [7, 0x0106], + [8, 0x005c], + [8, 0x001c], + [9, 0x0098], + [7, 0x0116], + [8, 0x007c], + [8, 0x003c], + [9, 0x00d8], + [7, 0x010e], + [8, 0x006c], + [8, 0x002c], + [9, 0x00b8], + [8, 0x000c], + [8, 0x008c], + [8, 0x004c], + [9, 0x00f8], + [7, 0x0101], + [8, 0x0052], + [8, 0x0012], + [8, 0x011a], + [7, 0x0111], + [8, 0x0072], + [8, 0x0032], + [9, 0x00c4], + [7, 0x0109], + [8, 0x0062], + [8, 0x0022], + [9, 0x00a4], + [8, 0x0002], + [8, 0x0082], + [8, 0x0042], + [9, 0x00e4], + [7, 0x0105], + [8, 0x005a], + [8, 0x001a], + [9, 0x0094], + [7, 0x0115], + [8, 0x007a], + [8, 0x003a], + [9, 0x00d4], + [7, 0x010d], + [8, 0x006a], + [8, 0x002a], + [9, 0x00b4], + [8, 0x000a], + [8, 0x008a], + [8, 0x004a], + [9, 0x00f4], + [7, 0x0103], + [8, 0x0056], + [8, 0x0016], + [8, 0x011e], + [7, 0x0113], + [8, 0x0076], + [8, 0x0036], + [9, 0x00cc], + [7, 0x010b], + [8, 0x0066], + [8, 0x0026], + [9, 0x00ac], + [8, 0x0006], + [8, 0x0086], + [8, 0x0046], + [9, 0x00ec], + [7, 0x0107], + [8, 0x005e], + [8, 0x001e], + [9, 0x009c], + [7, 0x0117], + [8, 0x007e], + [8, 0x003e], + [9, 0x00dc], + [7, 0x010f], + [8, 0x006e], + [8, 0x002e], + [9, 0x00bc], + [8, 0x000e], + [8, 0x008e], + [8, 0x004e], + [9, 0x00fc], + [7, 0x0100], + [8, 0x0051], + [8, 0x0011], + [8, 0x0119], + [7, 0x0110], + [8, 0x0071], + [8, 0x0031], + [9, 0x00c2], + [7, 0x0108], + [8, 0x0061], + [8, 0x0021], + [9, 0x00a2], + [8, 0x0001], + [8, 0x0081], + [8, 0x0041], + [9, 0x00e2], + [7, 0x0104], + [8, 0x0059], + [8, 0x0019], + [9, 0x0092], + [7, 0x0114], + [8, 0x0079], + [8, 0x0039], + [9, 0x00d2], + [7, 0x010c], + [8, 0x0069], + [8, 0x0029], + [9, 0x00b2], + [8, 0x0009], + [8, 0x0089], + [8, 0x0049], + [9, 0x00f2], + [7, 0x0102], + [8, 0x0055], + [8, 0x0015], + [8, 0x011d], + [7, 0x0112], + [8, 0x0075], + [8, 0x0035], + [9, 0x00ca], + [7, 0x010a], + [8, 0x0065], + [8, 0x0025], + [9, 0x00aa], + [8, 0x0005], + [8, 0x0085], + [8, 0x0045], + [9, 0x00ea], + [7, 0x0106], + [8, 0x005d], + [8, 0x001d], + [9, 0x009a], + [7, 0x0116], + [8, 0x007d], + [8, 0x003d], + [9, 0x00da], + [7, 0x010e], + [8, 0x006d], + [8, 0x002d], + [9, 0x00ba], + [8, 0x000d], + [8, 0x008d], + [8, 0x004d], + [9, 0x00fa], + [7, 0x0101], + [8, 0x0053], + [8, 0x0013], + [8, 0x011b], + [7, 0x0111], + [8, 0x0073], + [8, 0x0033], + [9, 0x00c6], + [7, 0x0109], + [8, 0x0063], + [8, 0x0023], + [9, 0x00a6], + [8, 0x0003], + [8, 0x0083], + [8, 0x0043], + [9, 0x00e6], + [7, 0x0105], + [8, 0x005b], + [8, 0x001b], + [9, 0x0096], + [7, 0x0115], + [8, 0x007b], + [8, 0x003b], + [9, 0x00d6], + [7, 0x010d], + [8, 0x006b], + [8, 0x002b], + [9, 0x00b6], + [8, 0x000b], + [8, 0x008b], + [8, 0x004b], + [9, 0x00f6], + [7, 0x0103], + [8, 0x0057], + [8, 0x0017], + [8, 0x011f], + [7, 0x0113], + [8, 0x0077], + [8, 0x0037], + [9, 0x00ce], + [7, 0x010b], + [8, 0x0067], + [8, 0x0027], + [9, 0x00ae], + [8, 0x0007], + [8, 0x0087], + [8, 0x0047], + [9, 0x00ee], + [7, 0x0107], + [8, 0x005f], + [8, 0x001f], + [9, 0x009e], + [7, 0x0117], + [8, 0x007f], + [8, 0x003f], + [9, 0x00de], + [7, 0x010f], + [8, 0x006f], + [8, 0x002f], + [9, 0x00be], + [8, 0x000f], + [8, 0x008f], + [8, 0x004f], + [9, 0x00fe], + [7, 0x0100], + [8, 0x0050], + [8, 0x0010], + [8, 0x0118], + [7, 0x0110], + [8, 0x0070], + [8, 0x0030], + [9, 0x00c1], + [7, 0x0108], + [8, 0x0060], + [8, 0x0020], + [9, 0x00a1], + [8, 0x0000], + [8, 0x0080], + [8, 0x0040], + [9, 0x00e1], + [7, 0x0104], + [8, 0x0058], + [8, 0x0018], + [9, 0x0091], + [7, 0x0114], + [8, 0x0078], + [8, 0x0038], + [9, 0x00d1], + [7, 0x010c], + [8, 0x0068], + [8, 0x0028], + [9, 0x00b1], + [8, 0x0008], + [8, 0x0088], + [8, 0x0048], + [9, 0x00f1], + [7, 0x0102], + [8, 0x0054], + [8, 0x0014], + [8, 0x011c], + [7, 0x0112], + [8, 0x0074], + [8, 0x0034], + [9, 0x00c9], + [7, 0x010a], + [8, 0x0064], + [8, 0x0024], + [9, 0x00a9], + [8, 0x0004], + [8, 0x0084], + [8, 0x0044], + [9, 0x00e9], + [7, 0x0106], + [8, 0x005c], + [8, 0x001c], + [9, 0x0099], + [7, 0x0116], + [8, 0x007c], + [8, 0x003c], + [9, 0x00d9], + [7, 0x010e], + [8, 0x006c], + [8, 0x002c], + [9, 0x00b9], + [8, 0x000c], + [8, 0x008c], + [8, 0x004c], + [9, 0x00f9], + [7, 0x0101], + [8, 0x0052], + [8, 0x0012], + [8, 0x011a], + [7, 0x0111], + [8, 0x0072], + [8, 0x0032], + [9, 0x00c5], + [7, 0x0109], + [8, 0x0062], + [8, 0x0022], + [9, 0x00a5], + [8, 0x0002], + [8, 0x0082], + [8, 0x0042], + [9, 0x00e5], + [7, 0x0105], + [8, 0x005a], + [8, 0x001a], + [9, 0x0095], + [7, 0x0115], + [8, 0x007a], + [8, 0x003a], + [9, 0x00d5], + [7, 0x010d], + [8, 0x006a], + [8, 0x002a], + [9, 0x00b5], + [8, 0x000a], + [8, 0x008a], + [8, 0x004a], + [9, 0x00f5], + [7, 0x0103], + [8, 0x0056], + [8, 0x0016], + [8, 0x011e], + [7, 0x0113], + [8, 0x0076], + [8, 0x0036], + [9, 0x00cd], + [7, 0x010b], + [8, 0x0066], + [8, 0x0026], + [9, 0x00ad], + [8, 0x0006], + [8, 0x0086], + [8, 0x0046], + [9, 0x00ed], + [7, 0x0107], + [8, 0x005e], + [8, 0x001e], + [9, 0x009d], + [7, 0x0117], + [8, 0x007e], + [8, 0x003e], + [9, 0x00dd], + [7, 0x010f], + [8, 0x006e], + [8, 0x002e], + [9, 0x00bd], + [8, 0x000e], + [8, 0x008e], + [8, 0x004e], + [9, 0x00fd], + [7, 0x0100], + [8, 0x0051], + [8, 0x0011], + [8, 0x0119], + [7, 0x0110], + [8, 0x0071], + [8, 0x0031], + [9, 0x00c3], + [7, 0x0108], + [8, 0x0061], + [8, 0x0021], + [9, 0x00a3], + [8, 0x0001], + [8, 0x0081], + [8, 0x0041], + [9, 0x00e3], + [7, 0x0104], + [8, 0x0059], + [8, 0x0019], + [9, 0x0093], + [7, 0x0114], + [8, 0x0079], + [8, 0x0039], + [9, 0x00d3], + [7, 0x010c], + [8, 0x0069], + [8, 0x0029], + [9, 0x00b3], + [8, 0x0009], + [8, 0x0089], + [8, 0x0049], + [9, 0x00f3], + [7, 0x0102], + [8, 0x0055], + [8, 0x0015], + [8, 0x011d], + [7, 0x0112], + [8, 0x0075], + [8, 0x0035], + [9, 0x00cb], + [7, 0x010a], + [8, 0x0065], + [8, 0x0025], + [9, 0x00ab], + [8, 0x0005], + [8, 0x0085], + [8, 0x0045], + [9, 0x00eb], + [7, 0x0106], + [8, 0x005d], + [8, 0x001d], + [9, 0x009b], + [7, 0x0116], + [8, 0x007d], + [8, 0x003d], + [9, 0x00db], + [7, 0x010e], + [8, 0x006d], + [8, 0x002d], + [9, 0x00bb], + [8, 0x000d], + [8, 0x008d], + [8, 0x004d], + [9, 0x00fb], + [7, 0x0101], + [8, 0x0053], + [8, 0x0013], + [8, 0x011b], + [7, 0x0111], + [8, 0x0073], + [8, 0x0033], + [9, 0x00c7], + [7, 0x0109], + [8, 0x0063], + [8, 0x0023], + [9, 0x00a7], + [8, 0x0003], + [8, 0x0083], + [8, 0x0043], + [9, 0x00e7], + [7, 0x0105], + [8, 0x005b], + [8, 0x001b], + [9, 0x0097], + [7, 0x0115], + [8, 0x007b], + [8, 0x003b], + [9, 0x00d7], + [7, 0x010d], + [8, 0x006b], + [8, 0x002b], + [9, 0x00b7], + [8, 0x000b], + [8, 0x008b], + [8, 0x004b], + [9, 0x00f7], + [7, 0x0103], + [8, 0x0057], + [8, 0x0017], + [8, 0x011f], + [7, 0x0113], + [8, 0x0077], + [8, 0x0037], + [9, 0x00cf], + [7, 0x010b], + [8, 0x0067], + [8, 0x0027], + [9, 0x00af], + [8, 0x0007], + [8, 0x0087], + [8, 0x0047], + [9, 0x00ef], + [7, 0x0107], + [8, 0x005f], + [8, 0x001f], + [9, 0x009f], + [7, 0x0117], + [8, 0x007f], + [8, 0x003f], + [9, 0x00df], + [7, 0x010f], + [8, 0x006f], + [8, 0x002f], + [9, 0x00bf], + [8, 0x000f], + [8, 0x008f], + [8, 0x004f], + [9, 0x00ff] + ]; + + const fixedLitCodeTab = [ + fixedLitCodeTabCodes, 9 + ]; + + const fixedDistCodeTabCodes = [ + [5, 0x0000], + [5, 0x0010], + [5, 0x0008], + [5, 0x0018], + [5, 0x0004], + [5, 0x0014], + [5, 0x000c], + [5, 0x001c], + [5, 0x0002], + [5, 0x0012], + [5, 0x000a], + [5, 0x001a], + [5, 0x0006], + [5, 0x0016], + [5, 0x000e], + [0, 0x0000], + [5, 0x0001], + [5, 0x0011], + [5, 0x0009], + [5, 0x0019], + [5, 0x0005], + [5, 0x0015], + [5, 0x000d], + [5, 0x001d], + [5, 0x0003], + [5, 0x0013], + [5, 0x000b], + [5, 0x001b], + [5, 0x0007], + [5, 0x0017], + [5, 0x000f], + [0, 0x0000] + ]; + + const fixedDistCodeTab = [ + fixedDistCodeTabCodes, 5 + ]; + function constructor() { + this.codeSize = 0; } constructor.prototype = { + getBits: function(bits) { + var codeSize = this.codeSize; + } }; return constructor;