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/README.md b/README.md index deb925601..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). @@ -152,9 +160,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: diff --git a/src/canvas.js b/src/canvas.js index d80bc80b2..0107570d9 100644 --- a/src/canvas.js +++ b/src/canvas.js @@ -689,7 +689,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') { @@ -724,8 +726,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; @@ -737,27 +740,49 @@ var CanvasGraphics = (function canvasGraphics() { } }, setStrokeGray: function canvasGraphicsSetStrokeGray(gray) { - this.setStrokeRGBColor(gray, gray, gray); + if (!(this.current.strokeColorSpace instanceof DeviceGrayCS)) + this.current.strokeColorSpace = new DeviceGrayCS(); + + var color = Util.makeCssRgb(gray, gray, gray); + this.ctx.strokeStyle = color; + this.current.strokeColor = color; }, setFillGray: function canvasGraphicsSetFillGray(gray) { - this.setFillRGBColor(gray, gray, gray); + if (!(this.current.fillColorSpace instanceof DeviceGrayCS)) + this.current.fillColorSpace = new DeviceGrayCS(); + + 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)) + 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 = ''; diff --git a/src/pdf.js b/src/pdf.js index 51f606548..1042a651b 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); - diff --git a/test/driver.js b/test/driver.js index e84b7c8e0..c11cecf56 100644 --- a/test/driver.js +++ b/test/driver.js @@ -56,23 +56,29 @@ function load() { } function cleanup() { - var styleSheet = document.styleSheets[0]; - if (styleSheet) { + // Clear out all the stylesheets since a new one is created for each font. + while (document.styleSheets.length > 0) { + var styleSheet = document.styleSheets[0]; 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; 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) { diff --git a/test/test.py b/test/test.py index 65def5d8e..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 @@ -365,7 +365,8 @@ def setUp(options): downloadLinkedPDFs(manifestList) if not verifyPDFs(manifestList): - raise Exception('ERROR: failed to verify pdfs.') + 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] = { } 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"