From 0499eb58be706c0913de2187f8c18679cfd2c59f Mon Sep 17 00:00:00 2001 From: notmasteryet Date: Sat, 12 Nov 2011 11:27:49 -0600 Subject: [PATCH 01/10] Warn (not fail) during MD5 verification, new MD5 for intelisa and f1040 --- test/test.py | 4 +--- test/test_manifest.json | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/test/test.py b/test/test.py index 65def5d8e..2eb144f9d 100644 --- a/test/test.py +++ b/test/test.py @@ -363,9 +363,7 @@ def setUp(options): manifestList = json.load(mf) downloadLinkedPDFs(manifestList) - - if not verifyPDFs(manifestList): - raise Exception('ERROR: failed to verify pdfs.') + verifyPDFs(manifestList) for b in testBrowsers: State.taskResults[b.name] = { } diff --git a/test/test_manifest.json b/test/test_manifest.json index 8085506a2..0bac41d34 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -19,7 +19,7 @@ }, { "id": "intelisa-load", "file": "pdfs/intelisa.pdf", - "md5": "f3ed5487d1afa34d8b77c0c734a95c79", + "md5": "f5712097d29287a97f1278839814f682", "link": true, "rounds": 1, "type": "load" @@ -194,7 +194,7 @@ }, { "id": "f1040", "file": "pdfs/f1040.pdf", - "md5": "7323b50c6d28d959b8b4b92c469b2469", + "md5": "b59272ce19b4a0c5808c8861441b0741", "link": true, "rounds": 1, "type": "load" From 39651856839b207ee0a605ec9585acd8e2a155bb Mon Sep 17 00:00:00 2001 From: notmasteryet Date: Mon, 14 Nov 2011 21:08:36 -0600 Subject: [PATCH 02/10] change the ERROR to WARNING; a message saying how to resolve these warnings --- test/test.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/test/test.py b/test/test.py index 2eb144f9d..256200587 100644 --- a/test/test.py +++ b/test/test.py @@ -323,18 +323,18 @@ def verifyPDFs(manifestList): if os.access(f, os.R_OK): fileMd5 = hashlib.md5(open(f, 'rb').read()).hexdigest() if 'md5' not in item: - print 'ERROR: Missing md5 for file "' + f + '".', + print 'WARNING: Missing md5 for file "' + f + '".', print 'Hash for current file is "' + fileMd5 + '"' error = True continue md5 = item['md5'] if fileMd5 != md5: - print 'ERROR: MD5 of file "' + f + '" does not match file.', + print 'WARNING: MD5 of file "' + f + '" does not match file.', print 'Expected "' + md5 + '" computed "' + fileMd5 + '"' error = True continue else: - print 'ERROR: Unable to open file for reading "' + f + '".' + print 'WARNING: Unable to open file for reading "' + f + '".' error = True return not error @@ -363,7 +363,10 @@ def setUp(options): manifestList = json.load(mf) downloadLinkedPDFs(manifestList) - verifyPDFs(manifestList) + + if not verifyPDFs(manifestList): + print 'Unable to verify the checksum for the files that are used for testing.' + print 'Please re-download the files, or adjust the MD5 checksum in the manifest for the files listed above.\n' for b in testBrowsers: State.taskResults[b.name] = { } From 9830cb935e28d7cf338652252449894d89a41bad Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Tue, 15 Nov 2011 14:43:05 -0800 Subject: [PATCH 03/10] Fix two memory leaks. --- test/driver.js | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/test/driver.js b/test/driver.js index e84b7c8e0..4613f1962 100644 --- a/test/driver.js +++ b/test/driver.js @@ -56,23 +56,31 @@ function load() { } function cleanup() { - var styleSheet = document.styleSheets[0]; - if (styleSheet) { - while (styleSheet.cssRules.length > 0) - styleSheet.deleteRule(0); + // Clear out all the stylesheets since a new one is created for each font. + while (document.styleSheets.length > 0) { + var styleSheet = document.styleSheets[0]; + if (styleSheet) { + while (styleSheet.cssRules.length > 0) + styleSheet.deleteRule(0); + } + var parent = styleSheet.ownerNode.parentNode; + parent.removeChild(styleSheet.ownerNode); } var guard = document.getElementById('content-end'); var body = document.body; while (body.lastChild !== guard) body.removeChild(body.lastChild); + + // Wipe out the link to the pdfdoc so it can be GC'ed. + for (var i = 0; i < manifest.length; i++) { + if (manifest[i].pdfDoc) { + manifest[i].pdfDoc.destroy(); + delete manifest[i].pdfDoc + } + } } function nextTask() { - // If there is a pdfDoc on the last task executed, destroy it to free memory. - if (task && task.pdfDoc) { - task.pdfDoc.destroy(); - delete task.pdfDoc; - } cleanup(); if (currentTaskIdx == manifest.length) { From 29c21843d621700aa34a3c3ca76ce5f8d0afb72a Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Tue, 15 Nov 2011 15:45:37 -0800 Subject: [PATCH 04/10] Nits --- test/driver.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/test/driver.js b/test/driver.js index 4613f1962..c11cecf56 100644 --- a/test/driver.js +++ b/test/driver.js @@ -59,12 +59,10 @@ function cleanup() { // Clear out all the stylesheets since a new one is created for each font. while (document.styleSheets.length > 0) { var styleSheet = document.styleSheets[0]; - if (styleSheet) { - while (styleSheet.cssRules.length > 0) - styleSheet.deleteRule(0); - } - var parent = styleSheet.ownerNode.parentNode; - parent.removeChild(styleSheet.ownerNode); + while (styleSheet.cssRules.length > 0) + styleSheet.deleteRule(0); + var ownerNode = styleSheet.ownerNode; + ownerNode.parentNode.removeChild(ownerNode); } var guard = document.getElementById('content-end'); var body = document.body; @@ -75,7 +73,7 @@ function cleanup() { for (var i = 0; i < manifest.length; i++) { if (manifest[i].pdfDoc) { manifest[i].pdfDoc.destroy(); - delete manifest[i].pdfDoc + delete manifest[i].pdfDoc; } } } From ef58ccd284634e83e8ea82ec2af2773a27a5fe49 Mon Sep 17 00:00:00 2001 From: notmasteryet Date: Tue, 15 Nov 2011 18:23:45 -0600 Subject: [PATCH 05/10] Issue #644: bypassing identity cmap translation loading; resetting color space when stroke/fill color set --- src/canvas.js | 18 ++++++++++++++++++ src/evaluator.js | 4 +++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/canvas.js b/src/canvas.js index 9759a8deb..a7c0cc93b 100644 --- a/src/canvas.js +++ b/src/canvas.js @@ -594,27 +594,45 @@ var CanvasGraphics = (function canvasGraphics() { } }, setStrokeGray: function canvasGraphicsSetStrokeGray(gray) { + if (!(this.current.strokeColorSpace instanceof DeviceGrayCS)) + this.current.strokeColorSpace = new DeviceGrayCS(); + this.setStrokeRGBColor(gray, gray, gray); }, setFillGray: function canvasGraphicsSetFillGray(gray) { + if (!(this.current.fillColorSpace instanceof DeviceGrayCS)) + this.current.fillColorSpace = new DeviceGrayCS(); + this.setFillRGBColor(gray, gray, gray); }, setStrokeRGBColor: function canvasGraphicsSetStrokeRGBColor(r, g, b) { + if (!(this.current.strokeColorSpace instanceof DeviceRgbCS)) + this.current.strokeColorSpace = new DeviceRgbCS(); + var color = Util.makeCssRgb(r, g, b); this.ctx.strokeStyle = color; this.current.strokeColor = color; }, setFillRGBColor: function canvasGraphicsSetFillRGBColor(r, g, b) { + if (!(this.current.fillColorSpace instanceof DeviceRgbCS)) + this.current.fillColorSpace = new DeviceRgbCS(); + var color = Util.makeCssRgb(r, g, b); this.ctx.fillStyle = color; this.current.fillColor = color; }, setStrokeCMYKColor: function canvasGraphicsSetStrokeCMYKColor(c, m, y, k) { + if (!(this.current.strokeColorSpace instanceof DeviceCmykCS)) + this.current.strokeColorSpace = new DeviceCmykCS(); + var color = Util.makeCssCmyk(c, m, y, k); this.ctx.strokeStyle = color; this.current.strokeColor = color; }, setFillCMYKColor: function canvasGraphicsSetFillCMYKColor(c, m, y, k) { + if (!(this.current.fillColorSpace instanceof DeviceCmykCS)) + this.current.fillColorSpace = new DeviceCmykCS(); + var color = Util.makeCssCmyk(c, m, y, k); this.ctx.fillStyle = color; this.current.fillColor = color; diff --git a/src/evaluator.js b/src/evaluator.js index 619a633b2..1cb8fe39f 100644 --- a/src/evaluator.js +++ b/src/evaluator.js @@ -522,7 +522,9 @@ var PartialEvaluator = (function partialEvaluator() { var cmapObj = xref.fetchIfRef(toUnicode); var charToUnicode = []; if (isName(cmapObj)) { - error('ToUnicode file cmap translation not implemented'); + var isIdentityMap = cmapObj.name.substr(0, 9) == 'Identity-'; + if (!isIdentityMap) + error('ToUnicode file cmap translation not implemented'); } else if (isStream(cmapObj)) { var tokens = []; var token = ''; From 7a2301dc951c56da91b863796d76e67070be4bc3 Mon Sep 17 00:00:00 2001 From: notmasteryet Date: Tue, 15 Nov 2011 20:16:22 -0600 Subject: [PATCH 06/10] Inline setXXXRGBColor calls --- src/canvas.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/canvas.js b/src/canvas.js index a7c0cc93b..9b3ed0ba9 100644 --- a/src/canvas.js +++ b/src/canvas.js @@ -546,7 +546,9 @@ var CanvasGraphics = (function canvasGraphics() { setStrokeColor: function canvasGraphicsSetStrokeColor(/*...*/) { var cs = this.current.strokeColorSpace; var color = cs.getRgb(arguments); - this.setStrokeRGBColor.apply(this, color); + var color = Util.makeCssRgb.apply(null, cs.getRgb(arguments)); + this.ctx.strokeStyle = color; + this.current.strokeColor = color; }, getColorN_IR_Pattern: function canvasGraphicsGetColorN_IR_Pattern(IR, cs) { if (IR[0] == 'TilingPattern') { @@ -581,8 +583,9 @@ var CanvasGraphics = (function canvasGraphics() { }, setFillColor: function canvasGraphicsSetFillColor(/*...*/) { var cs = this.current.fillColorSpace; - var color = cs.getRgb(arguments); - this.setFillRGBColor.apply(this, color); + var color = Util.makeCssRgb.apply(null, cs.getRgb(arguments)); + this.ctx.fillStyle = color; + this.current.fillColor = color; }, setFillColorN_IR: function canvasGraphicsSetFillColorN(/*...*/) { var cs = this.current.fillColorSpace; @@ -597,13 +600,17 @@ var CanvasGraphics = (function canvasGraphics() { if (!(this.current.strokeColorSpace instanceof DeviceGrayCS)) this.current.strokeColorSpace = new DeviceGrayCS(); - this.setStrokeRGBColor(gray, gray, gray); + var color = Util.makeCssRgb(gray, gray, gray); + this.ctx.strokeStyle = color; + this.current.strokeColor = color; }, setFillGray: function canvasGraphicsSetFillGray(gray) { if (!(this.current.fillColorSpace instanceof DeviceGrayCS)) this.current.fillColorSpace = new DeviceGrayCS(); - this.setFillRGBColor(gray, gray, gray); + var color = Util.makeCssRgb(gray, gray, gray); + this.ctx.fillStyle = color; + this.current.fillColor = color; }, setStrokeRGBColor: function canvasGraphicsSetStrokeRGBColor(r, g, b) { if (!(this.current.strokeColorSpace instanceof DeviceRgbCS)) From ab5808bb67fccb0f1e2a5845f122000940f26fd7 Mon Sep 17 00:00:00 2001 From: Artur Adib Date: Wed, 16 Nov 2011 13:54:36 -0500 Subject: [PATCH 07/10] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index deb925601..4ea613ce0 100644 --- a/README.md +++ b/README.md @@ -152,9 +152,9 @@ See the bot repo for details: ## Additional resources -Our demo site is here: +Gallery of user projects and modifications: -+ http://mozilla.github.com/pdf.js/web/viewer.html ++ https://github.com/mozilla/pdf.js/wiki/Gallery-of-user-projects-and-modifications You can read more about pdf.js here: From 1d04bd2dbbcf119c5fb8b173b3b129ed9c169746 Mon Sep 17 00:00:00 2001 From: Artur Adib Date: Wed, 16 Nov 2011 15:27:28 -0500 Subject: [PATCH 08/10] Added link to Corpus Report --- README.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4ea613ce0..97db68d36 100644 --- a/README.md +++ b/README.md @@ -95,9 +95,17 @@ workings of PDF and pdf.js: ## Contributing pdf.js is a community-driven project, so contributors are always welcome. -Simply fork our repo and contribute away. A great place to start is our -[open issues](https://github.com/mozilla/pdf.js/issues). For better consistency and -long-term stability, please do look around the code and try to follow our conventions. +Simply fork our repo and contribute away. Good starting places for picking +a bug are the top error messages and TODOs in our corpus report: + ++ http://people.mozilla.com/~bdahl/corpusreport/test/ref/ + +and of course our open Github issues: + ++ https://github.com/mozilla/pdf.js/issues + +For better consistency and long-term stability, please do look around the +code and try to follow our conventions. More information about the contributor process can be found on the [contributor wiki page](https://github.com/mozilla/pdf.js/wiki/Contributing). From 5e0d704b127c9a927c03a1944213fadaff6f0567 Mon Sep 17 00:00:00 2001 From: Artur Adib Date: Thu, 17 Nov 2011 15:45:33 -0500 Subject: [PATCH 09/10] Macro for generating version information --- Makefile | 1 + src/pdf.js | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 3e385b175..2cc886091 100644 --- a/Makefile +++ b/Makefile @@ -63,6 +63,7 @@ bundle: | $(BUILD_DIR) @cd src; \ cat $(PDF_JS_FILES) > all_files.tmp; \ sed '/PDFJSSCRIPT_INCLUDE_ALL/ r all_files.tmp' pdf.js > ../$(BUILD_TARGET); \ + sed -i '' "s/PDFJSSCRIPT_BUNDLE_VER/`git log --format="%H" -n 1`/" ../$(BUILD_TARGET); \ rm -f *.tmp; \ cd .. diff --git a/src/pdf.js b/src/pdf.js index 51f606548..1a551d300 100644 --- a/src/pdf.js +++ b/src/pdf.js @@ -7,8 +7,9 @@ var PDFJS = {}; // Use strict in our context only - users might not want it 'use strict'; + PDFJS.build = "PDFJSSCRIPT_BUNDLE_VER"; + // Files are inserted below - see Makefile /* PDFJSSCRIPT_INCLUDE_ALL */ }).call((typeof window === 'undefined') ? this : window); - From 385b6df2b48c3b18a8f92f9f0cb2abf3e8e46fcd Mon Sep 17 00:00:00 2001 From: Artur Adib Date: Fri, 18 Nov 2011 13:54:27 -0500 Subject: [PATCH 10/10] Linting --- src/pdf.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pdf.js b/src/pdf.js index 1a551d300..1042a651b 100644 --- a/src/pdf.js +++ b/src/pdf.js @@ -7,7 +7,7 @@ var PDFJS = {}; // Use strict in our context only - users might not want it 'use strict'; - PDFJS.build = "PDFJSSCRIPT_BUNDLE_VER"; + PDFJS.build = 'PDFJSSCRIPT_BUNDLE_VER'; // Files are inserted below - see Makefile /* PDFJSSCRIPT_INCLUDE_ALL */