diff --git a/charsets.js b/charsets.js index 59fcdf5cf..7f54ab327 100644 --- a/charsets.js +++ b/charsets.js @@ -1,3 +1,7 @@ +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ + +'use strict'; var ISOAdobeCharset = [ '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', diff --git a/extensions/firefox/components/pdfContentHandler.js b/extensions/firefox/components/pdfContentHandler.js index 879924047..9186bfd8a 100644 --- a/extensions/firefox/components/pdfContentHandler.js +++ b/extensions/firefox/components/pdfContentHandler.js @@ -131,8 +131,7 @@ pdfContentHandler.prototype = { throw Cr.NS_ERROR_WONT_HANDLE_CONTENT; let window = null; - let callbacks = aRequest.notificationCallbacks ? - aRequest.notificationCallbacks : + let callbacks = aRequest.notificationCallbacks || aRequest.loadGroup.notificationCallbacks; if (!callbacks) return; diff --git a/fonts.js b/fonts.js index bbff14e89..bcec5d2ac 100644 --- a/fonts.js +++ b/fonts.js @@ -710,7 +710,13 @@ var Font = (function Font() { }; function createOS2Table(properties, override) { - var override = override || {}; + override = override || { + unitsPerEm: 0, + yMax: 0, + yMin: 0, + ascent: 0, + descent: 0 + }; var ulUnicodeRange1 = 0; var ulUnicodeRange2 = 0; @@ -1322,7 +1328,8 @@ var Font = (function Font() { 'OS/2': stringToArray(createOS2Table(properties)), // Character to glyphs mapping - 'cmap': createCMapTable(charstrings.slice(), font.glyphIds), + 'cmap': createCMapTable(charstrings.slice(), + ('glyphIds' in font) ? font.glyphIds: null), // Font header 'head': (function fontFieldsHead() { @@ -2612,7 +2619,8 @@ var Type2CFF = (function type2CFF() { if (unicode <= 0x1f || (unicode >= 127 && unicode <= 255)) unicode += kCmapGlyphOffset; - var width = isNum(mapping.width) ? mapping.width : defaultWidth; + var width = ('width' in mapping) && isNum(mapping.width) ? mapping.width + : defaultWidth; properties.encoding[code] = { unicode: unicode, width: width diff --git a/metrics.js b/metrics.js index 9cb8eb0e6..d4d07ec0d 100644 --- a/metrics.js +++ b/metrics.js @@ -1,6 +1,8 @@ /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ +'use strict'; + var Metrics = { 'Courier': 600, 'Courier-Bold': 600, diff --git a/pdf.js b/pdf.js index 3ebddd119..30337b898 100644 --- a/pdf.js +++ b/pdf.js @@ -2021,6 +2021,25 @@ var CCITTFaxStream = (function ccittFaxStream() { return EOF; }; + var findTableCode = function ccittFaxStreamFindTableCode(start, end, table, + limit) { + for (var i = start; i <= end; ++i) { + var code = this.lookBits(i); + if (code == EOF) + return [true, 1]; + if (i < end) + code <<= end - i; + if (code >= limit) { + var p = table[code - ((limit == ccittEOL) ? 0 : limit)]; + if (p[0] == i) { + this.eatBits(i); + return [true, p[1]]; + } + } + } + return [false, 0]; + }; + constructor.prototype.getWhiteCode = function ccittFaxStreamGetWhiteCode() { var code = 0; var p; @@ -2040,31 +2059,13 @@ var CCITTFaxStream = (function ccittFaxStream() { return p[1]; } } else { - for (var n = 1; n <= 9; ++n) { - code = this.lookBits(n); - if (code == EOF) - return 1; + var result = findTableCode(1, 9, whiteTable2, ccittEOL); + if (result[0]) + return result[1]; - if (n < 9) - code <<= 9 - n; - p = whiteTable2[code]; - if (p[0] == n) { - this.eatBits(n); - return p[0]; - } - } - for (var n = 11; n <= 12; ++n) { - code = this.lookBits(n); - if (code == EOF) - return 1; - if (n < 12) - code <<= 12 - n; - p = whiteTable1[code]; - if (p[0] == n) { - this.eatBits(n); - return p[1]; - } - } + result = findTableCode(11, 12, whiteTable1, ccittEOL); + if (result[0]) + return result[1]; } warn('bad white code'); this.eatBits(1); @@ -2089,45 +2090,17 @@ var CCITTFaxStream = (function ccittFaxStream() { return p[1]; } } else { - var n; - for (n = 2; n <= 6; ++n) { - code = this.lookBits(n); - if (code == EOF) - return 1; - if (n < 6) - code <<= 6 - n; - p = blackTable3[code]; - if (p[0] == n) { - this.eatBits(n); - return p[1]; - } - } - for (n = 7; n <= 12; ++n) { - code = this.lookBits(n); - if (code == EOF) - return 1; - if (n < 12) - code <<= 12 - n; - if (code >= 64) { - p = blackTable2[code - 64]; - if (p[0] == n) { - this.eatBits(n); - return p[1]; - } - } - } - for (n = 10; n <= 13; ++n) { - code = this.lookBits(n); - if (code == EOF) - return 1; - if (n < 13) - code <<= 13 - n; - p = blackTable1[code]; - if (p[0] == n) { - this.eatBits(n); - return p[1]; - } - } + var result = findTableCode(2, 6, blackTable3, ccittEOL); + if (result[0]) + return result[1]; + + result = findTableCode(7, 12, blackTable2, 64); + if (result[0]) + return result[1]; + + result = findTableCode(10, 13, blackTable1, ccittEOL); + if (result[0]) + return result[1]; } warn('bad black code'); this.eatBits(1); @@ -4381,6 +4354,10 @@ var PartialEvaluator = (function partialEvaluator() { var patterns = xref.fetchIfRef(resources.get('Pattern')) || new Dict(); var parser = new Parser(new Lexer(stream), false); var args = [], argsArray = [], fnArray = [], obj; + var getObjBt = function getObjBt() { + parser = this.oldParser; + return { name: 'BT' }; + }; while (!isEOF(obj = parser.getObj())) { if (isCmd(obj)) { @@ -4392,10 +4369,7 @@ var PartialEvaluator = (function partialEvaluator() { fn = OP_MAP[cmd.substr(0, cmd.length - 2)]; // feeding 'BT' on next interation parser = { - getObj: function() { - parser = this.oldParser; - return { name: 'BT' }; - }, + getObj: getObjBt, oldParser: parser }; } @@ -5162,7 +5136,8 @@ var CanvasGraphics = (function canvasGraphics() { stroke: function canvasGraphicsStroke() { var ctx = this.ctx; var strokeColor = this.current.strokeColor; - if (strokeColor && strokeColor.type === 'Pattern') { + if (strokeColor && strokeColor.hasOwnProperty('type') && + strokeColor.type === 'Pattern') { // for patterns, we transform to pattern space, calculate // the pattern, call stroke, and restore to user space ctx.save(); @@ -5183,7 +5158,8 @@ var CanvasGraphics = (function canvasGraphics() { var ctx = this.ctx; var fillColor = this.current.fillColor; - if (fillColor && fillColor.type === 'Pattern') { + if (fillColor && fillColor.hasOwnProperty('type') && + fillColor.type === 'Pattern') { ctx.save(); ctx.fillStyle = fillColor.getPattern(ctx); ctx.fill(); @@ -5203,7 +5179,8 @@ var CanvasGraphics = (function canvasGraphics() { var ctx = this.ctx; var fillColor = this.current.fillColor; - if (fillColor && fillColor.type === 'Pattern') { + if (fillColor && fillColor.hasOwnProperty('type') && + fillColor.type === 'Pattern') { ctx.save(); ctx.fillStyle = fillColor.getPattern(ctx); ctx.fill(); @@ -5213,7 +5190,8 @@ var CanvasGraphics = (function canvasGraphics() { } var strokeColor = this.current.strokeColor; - if (strokeColor && strokeColor.type === 'Pattern') { + if (strokeColor && strokeColor.hasOwnProperty('type') && + strokeColor.type === 'Pattern') { ctx.save(); ctx.strokeStyle = strokeColor.getPattern(ctx); ctx.stroke(); diff --git a/web/compatibility.js b/web/compatibility.js index 36df0e2a5..ad4c8f8a9 100644 --- a/web/compatibility.js +++ b/web/compatibility.js @@ -163,7 +163,7 @@ // IE9 text/html data URI (function checkDocumentDocumentModeCompatibility() { - if (document.documentMode !== 9) + if (!('documentMode' in document) || document.documentMode !== 9) return; // overriding the src property var originalSrcDescriptor = Object.getOwnPropertyDescriptor( diff --git a/web/viewer.html b/web/viewer.html index 160c5ce57..5da063b91 100644 --- a/web/viewer.html +++ b/web/viewer.html @@ -17,12 +17,12 @@
- - @@ -36,16 +36,16 @@
- -
- @@ -59,14 +59,14 @@
-
- +
diff --git a/web/viewer.js b/web/viewer.js index 93f6acd31..91562baf4 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -178,7 +178,9 @@ var PDFView = { while (sidebar.hasChildNodes()) sidebar.removeChild(sidebar.lastChild); - clearInterval(sidebar._loadingInterval); + + if ('_loadingInterval' in sidebar) + clearInterval(sidebar._loadingInterval); var container = document.getElementById('viewer'); while (container.hasChildNodes()) @@ -544,7 +546,8 @@ window.addEventListener('load', function webViewerLoad(evt) { params[unescape(param[0])] = unescape(param[1]); } - PDFView.open(params.file || kDefaultURL, parseFloat(params.scale)); + var scale = ('scale' in params) ? params.scale : kDefaultScale; + PDFView.open(params.file || kDefaultURL, parseFloat(scale)); if (!window.File || !window.FileReader || !window.FileList || !window.Blob) document.getElementById('fileInput').style.display = 'none';