diff --git a/pdf.js b/pdf.js index 3e8249524..ccd90951d 100644 --- a/pdf.js +++ b/pdf.js @@ -710,9 +710,9 @@ var PredictorStream = (function() { var bits = this.bits = params.get('BitsPerComponent') || 8; var columns = this.columns = params.get('Columns') || 1; - var pixBytes = this.pixBytes = (colors * bits + 7) >> 3; + this.pixBytes = (colors * bits + 7) >> 3; // add an extra pixByte to represent the pixel left of column 0 - var rowBytes = this.rowBytes = (columns * colors * bits + 7) >> 3; + this.rowBytes = (columns * colors * bits + 7) >> 3; DecodeStream.call(this); return this; @@ -722,7 +722,6 @@ var PredictorStream = (function() { constructor.prototype.readBlockTiff = function() { var rowBytes = this.rowBytes; - var pixBytes = this.pixBytes; var bufferLength = this.bufferLength; var buffer = this.ensureBuffer(bufferLength + rowBytes); @@ -733,16 +732,18 @@ var PredictorStream = (function() { var rawBytes = this.stream.getBytes(rowBytes); + var inbuf = 0, outbuf = 0; + var inbits = 0, outbits = 0; + if (bits === 1) { - var inbuf = 0; for (var i = 0; i < rowBytes; ++i) { var c = rawBytes[i]; - inBuf = (inBuf << 8) | c; + inbuf = (inbuf << 8) | c; // bitwise addition is exclusive or - // first shift inBuf and then add - currentRow[i] = (c ^ (inBuf >> colors)) & 0xFF; - // truncate inBuf (assumes colors < 16) - inBuf &= 0xFFFF; + // first shift inbuf and then add + currentRow[i] = (c ^ (inbuf >> colors)) & 0xFF; + // truncate inbuf (assumes colors < 16) + inbuf &= 0xFFFF; } } else if (bits === 8) { for (var i = 0; i < colors; ++i) @@ -752,8 +753,6 @@ var PredictorStream = (function() { } else { var compArray = new Uint8Array(colors + 1); var bitMask = (1 << bits) - 1; - var inbuf = 0, outbut = 0; - var inbits = 0, outbits = 0; var j = 0, k = 0; var columns = this.columns; for (var i = 0; i < columns; ++i) { @@ -1015,11 +1014,11 @@ var Ascii85Stream = (function() { return; } - var bufferLength = this.bufferLength; + var bufferLength = this.bufferLength, buffer; // special code for z if (c == zCode) { - var buffer = this.ensureBuffer(bufferLength + 4); + buffer = this.ensureBuffer(bufferLength + 4); for (var i = 0; i < 4; ++i) buffer[bufferLength + i] = 0; this.bufferLength += 4; @@ -1036,7 +1035,7 @@ var Ascii85Stream = (function() { if (!c || c == tildaCode) break; } - var buffer = this.ensureBuffer(bufferLength + i - 1); + buffer = this.ensureBuffer(bufferLength + i - 1); this.bufferLength += i - 1; // partial ending; @@ -1874,7 +1873,7 @@ var CCITTFaxStream = (function() { for (var i = 0; i < 4; ++i) { code1 = this.lookBits(12); if (code1 != 1) - warning('bad rtc code'); + warn('bad rtc code: ' + code1); this.eatBits(12); if (this.encoding > 0) { this.lookBits(1); @@ -2013,7 +2012,7 @@ var CCITTFaxStream = (function() { } } for (var n = 11; n <= 12; ++n) { - code == this.lookBits(n); + code = this.lookBits(n); if (code == EOF) return 1; if (n < 12) @@ -2437,11 +2436,6 @@ var Lexer = (function() { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // fx ]; - var MIN_INT = (1 << 31) | 0; - var MAX_INT = (MIN_INT - 1) | 0; - var MIN_UINT = 0; - var MAX_UINT = ((1 << 30) * 4) - 1; - function ToHexDigit(ch) { if (ch >= '0' && ch <= '9') return ch.charCodeAt(0) - 48; @@ -3107,7 +3101,6 @@ var XRef = (function() { }, readXRefStream: function readXRefStream(stream) { var streamParameters = stream.parameters; - var length = streamParameters.get('Length'); var byteWidths = streamParameters.get('W'); var range = streamParameters.get('Index'); if (!range) @@ -3356,7 +3349,7 @@ var Page = (function() { } return shadow(this, 'rotate', rotate); }, - startRendering: function(canvasCtx, continuation, onerror) { + startRendering: function(canvasCtx, continuation) { var self = this; var stats = self.stats; stats.compile = stats.fonts = stats.render = 0; @@ -3754,8 +3747,6 @@ var PDFDoc = (function() { return shadow(this, 'numPages', num); }, getPage: function(n) { - var linearization = this.linearization; - // assert(!linearization, "linearized page access not implemented"); return this.catalog.getPage(n); } }; @@ -4141,7 +4132,7 @@ var PartialEvaluator = (function() { }; constructor.prototype = { - eval: function(stream, xref, resources, fonts, images) { + evaluate: function(stream, xref, resources, fonts, images) { resources = xref.fetchIfRef(resources) || new Dict(); var xobjs = xref.fetchIfRef(resources.get('XObject')) || new Dict(); var patterns = xref.fetchIfRef(resources.get('Pattern')) || new Dict(); @@ -4165,8 +4156,9 @@ var PartialEvaluator = (function() { var dict = IsStream(pattern) ? pattern.dict : pattern; var typeNum = dict.get('PatternType'); if (typeNum == 1) { - patternName.code = this.eval(pattern, xref, - dict.get('Resources'), fonts); + patternName.code = this.evaluate(pattern, xref, + dict.get('Resources'), + fonts); } } } @@ -4185,8 +4177,9 @@ var PartialEvaluator = (function() { ); if ('Form' == type.name) { - args[0].code = this.eval(xobj, xref, xobj.dict.get('Resources'), - fonts, images); + args[0].code = this.evaluate(xobj, xref, + xobj.dict.get('Resources'), fonts, + images); } if (xobj instanceof JpegStream) images.bind(xobj); // monitoring image load @@ -4224,7 +4217,7 @@ var PartialEvaluator = (function() { }, extractEncoding: function(dict, xref, properties) { - var type = properties.type; + var type = properties.type, encoding; if (properties.composite) { if (type == 'CIDFontType2') { var defaultWidth = xref.fetchIfRef(dict.get('DW')) || 1000; @@ -4261,7 +4254,7 @@ var PartialEvaluator = (function() { var glyphsData = glyphsStream.getBytes(0); // Glyph ids are big-endian 2-byte values - var encoding = properties.encoding; + encoding = properties.encoding; // Set encoding 0 to later verify the font has an encoding encoding[0] = { unicode: 0, width: 0 }; @@ -4278,7 +4271,7 @@ var PartialEvaluator = (function() { }; } } else if (type == 'CIDFontType0') { - var encoding = xref.fetchIfRef(dict.get('Encoding')); + encoding = xref.fetchIfRef(dict.get('Encoding')); if (IsName(encoding)) { // Encoding is a predefined CMap if (encoding.name == 'Identity-H') { @@ -4299,7 +4292,7 @@ var PartialEvaluator = (function() { var map = properties.encoding; var baseEncoding = null; if (dict.has('Encoding')) { - var encoding = xref.fetchIfRef(dict.get('Encoding')); + encoding = xref.fetchIfRef(dict.get('Encoding')); if (IsDict(encoding)) { var baseName = encoding.get('BaseEncoding'); if (baseName) @@ -4683,7 +4676,7 @@ var CanvasGraphics = (function() { compile: function(stream, xref, resources, fonts, images) { var pe = new PartialEvaluator(); - return pe.eval(stream, xref, resources, fonts, images); + return pe.evaluate(stream, xref, resources, fonts, images); }, execute: function(code, xref, resources) { @@ -4722,13 +4715,13 @@ var CanvasGraphics = (function() { this.ctx.mozDashOffset = dashPhase; }, setRenderingIntent: function(intent) { - TODO('set rendering intent'); + TODO('set rendering intent: ' + intent); }, setFlatness: function(flatness) { - TODO('set flatness'); + TODO('set flatness: ' + flatness); }, setGState: function(dictName) { - TODO('set graphics state from dict'); + TODO('set graphics state from dict: ' + dictName); }, save: function() { this.ctx.save(); @@ -4923,10 +4916,10 @@ var CanvasGraphics = (function() { } }, setTextRenderingMode: function(mode) { - TODO('text rendering mode'); + TODO('text rendering mode: ' + mode); }, setTextRise: function(rise) { - TODO('text rise'); + TODO('text rise: ' + rise); }, moveText: function(x, y) { this.current.x = this.current.lineX += x; @@ -5028,10 +5021,13 @@ var CanvasGraphics = (function() { // Type3 fonts setCharWidth: function(xWidth, yWidth) { - TODO("type 3 fonts ('d0' operator)"); + TODO('type 3 fonts ("d0" operator) xWidth: ' + xWidth + ' yWidth: ' + + yWidth); }, setCharWidthAndBounds: function(xWidth, yWidth, llx, lly, urx, ury) { - TODO("type 3 fonts ('d1' operator)"); + TODO('type 3 fonts ("d1" operator) xWidth: ' + xWidth + ' yWidth: ' + + yWidth + ' llx: ' + llx + ' lly: ' + lly + ' urx: ' + urx + + ' ury ' + ury); }, // Color @@ -5430,7 +5426,6 @@ var ColorSpace = (function() { var lookup = xref.fetchIfRef(cs[3]); return new IndexedCS(base, hiVal, lookup); case 'Separation': - var name = cs[1]; var alt = ColorSpace.parse(cs[2], xref, res); var tintFn = new PDFFunction(xref, xref.fetchIfRef(cs[3])); return new SeparationCS(alt, tintFn); @@ -5468,12 +5463,12 @@ var SeparationCS = (function() { var base = this.base; var scale = 1 / ((1 << bits) - 1); - var length = 3 * input.length; + var length = input.length; var pos = 0; var numComps = base.numComps; - var baseBuf = new Uint8Array(numComps * input.length); - for (var i = 0, ii = input.length; i < ii; ++i) { + var baseBuf = new Uint8Array(numComps * length); + for (var i = 0; i < length; ++i) { var scaled = input[i] * scale; var tinted = tintFn.func([scaled]); for (var j = 0; j < numComps; ++j) @@ -5779,8 +5774,6 @@ var DummyShading = (function() { var RadialAxialShading = (function() { function constructor(dict, matrix, xref, res, ctx) { this.matrix = matrix; - var bbox = dict.get('BBox'); - var background = dict.get('Background'); this.coordsArr = dict.get('Coords'); this.shadingType = dict.get('ShadingType'); this.type = 'Pattern'; @@ -5838,15 +5831,17 @@ var RadialAxialShading = (function() { getPattern: function() { var coordsArr = this.coordsArr; var type = this.shadingType; + var p0, p1, r0, r1; if (type == 2) { - var p0 = [coordsArr[0], coordsArr[1]]; - var p1 = [coordsArr[2], coordsArr[3]]; + p0 = [coordsArr[0], coordsArr[1]]; + p1 = [coordsArr[2], coordsArr[3]]; } else if (type == 3) { - var p0 = [coordsArr[0], coordsArr[1]]; - var p1 = [coordsArr[3], coordsArr[4]]; - var r0 = coordsArr[2], r1 = coordsArr[5]; + p0 = [coordsArr[0], coordsArr[1]]; + p1 = [coordsArr[3], coordsArr[4]]; + r0 = coordsArr[2]; + r1 = coordsArr[5]; } else { - error(); + error('getPattern type unknown: ' + type); } var matrix = this.matrix; @@ -5869,11 +5864,11 @@ var RadialAxialShading = (function() { p1 = Util.applyTransform(p1, userMatrix); } - var colorStops = this.colorStops; + var colorStops = this.colorStops, grad; if (type == 2) - var grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]); + grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]); else if (type == 3) - var grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1); + grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1); for (var i = 0, ii = colorStops.length; i < ii; ++i) { var c = colorStops[i]; @@ -6064,6 +6059,7 @@ var PDFImage = (function() { var bufferPos = 0; var output = bpc <= 8 ? new Uint8Array(length) : bpc <= 16 ? new Uint16Array(length) : new Uint32Array(length); + var rowComps = width * numComps; if (bpc == 1) { var valueZero = 0, valueOne = 1; @@ -6071,7 +6067,6 @@ var PDFImage = (function() { valueZero = decodeMap[0] ? 1 : 0; valueOne = decodeMap[1] ? 1 : 0; } - var rowComps = width * numComps; var mask = 0; var buf = 0; @@ -6093,8 +6088,7 @@ var PDFImage = (function() { } else { if (decodeMap != null) TODO('interpolate component values'); - var rowComps = width * numComps; - var bits, buf; + var bits = 0, buf = 0; for (var i = 0, ii = length; i < ii; ++i) { if (i % rowComps == 0) { buf = 0; @@ -6299,14 +6293,14 @@ var PDFFunction = (function() { floor *= outputSize; ceil *= outputSize; - var output = []; + var output = [], v = 0; for (var i = 0; i < outputSize; ++i) { if (ceil == floor) { - var v = samples[ceil + i]; + v = samples[ceil + i]; } else { var low = samples[floor + i]; var high = samples[ceil + i]; - var v = low * scale + high * (1 - scale); + v = low * scale + high * (1 - scale); } var i2 = i * 2;