From b353a7b37bc2f2daacf50515ebcf5e4de1b45cd6 Mon Sep 17 00:00:00 2001 From: Kalervo Kujala <kkujala@com> Date: Mon, 10 Oct 2011 23:46:43 +0300 Subject: [PATCH 1/8] Make test_slave.html as valid html5. Fix also warnings in the error console that appear from a test run. --- test/driver.js | 2 +- test/test_slave.html | 40 +++++++++++++++++++++++----------------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/test/driver.js b/test/driver.js index 4bc14bf15..7f5aef733 100644 --- a/test/driver.js +++ b/test/driver.js @@ -178,7 +178,7 @@ function snapshotCurrentPage(task, failure) { function sendQuitRequest() { var r = new XMLHttpRequest(); r.open('POST', '/tellMeToQuit?path=' + escape(appPath), false); - r.send(''); + r.send(null); } function quitApp() { diff --git a/test/test_slave.html b/test/test_slave.html index 9d8185bb9..51e779c87 100644 --- a/test/test_slave.html +++ b/test/test_slave.html @@ -1,21 +1,27 @@ +<!DOCTYPE html> <html> -<head> - <title>pdf.js test slave</title> - <style type="text/css"></style> - <script type="text/javascript" src="/pdf.js"></script> - <script type="text/javascript" src="/fonts.js"></script> - <script type="text/javascript" src="/crypto.js"></script> - <script type="text/javascript" src="/glyphlist.js"></script> - <script type="text/javascript" src="/metrics.js"></script> - <script type="text/javascript" src="/charsets.js"></script> - <script type="text/javascript" src="/cidmaps.js"></script> - <script type="text/javascript" src="driver.js"></script> -</head> + <head> + <title>pdf.js test slave</title> + <style type="text/css"></style> + <script type="text/javascript" src="/pdf.js"></script> + <script type="text/javascript" src="/fonts.js"></script> + <script type="text/javascript" src="/crypto.js"></script> + <script type="text/javascript" src="/glyphlist.js"></script> + <script type="text/javascript" src="/metrics.js"></script> + <script type="text/javascript" src="/charsets.js"></script> + <script type="text/javascript" src="/cidmaps.js"></script> + <script type="text/javascript" src="driver.js"></script> + </head> -<body onload="load();"> - <pre style="width:800; height:800; overflow: scroll;"id="stdout"></pre> - <p>Inflight requests: <span id="inFlightCount"></span></p> - <div id="content-end"><!-- cleanup() guard --></div> -</body> + <body> + <pre style="width:800px; height:800px; overflow:scroll;" id="stdout"></pre> + <p>Inflight requests: <span id="inFlightCount"></span></p> + <div id="content-end"></div> + <script type="text/javascript"> + 'use strict'; + load(); + </script> + </body> </html> + From 04e467793b79f8403d499748dc33f1f9f58ee09f Mon Sep 17 00:00:00 2001 From: notmasteryet <async.processingjs@yahoo.com> Date: Mon, 10 Oct 2011 21:14:40 -0500 Subject: [PATCH 2/8] Fixing standard font name resolution (#649) --- fonts.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fonts.js b/fonts.js index 2ab3a90b7..7aef5ec92 100644 --- a/fonts.js +++ b/fonts.js @@ -441,7 +441,7 @@ var Font = (function Font() { if (!file) { // The file data is not specified. Trying to fix the font name // to be used with the canvas.font. - var fontName = stdFontMap[name] || name.replace('_', '-'); + var fontName = stdFontMap[name.replace('-', '_')] || name.replace('_', '-'); this.bold = (fontName.search(/bold/gi) != -1); this.italic = (fontName.search(/oblique/gi) != -1) || (fontName.search(/italic/gi) != -1); From 6d6c5f94ccd94564177014ec5b494674d3edb1f1 Mon Sep 17 00:00:00 2001 From: notmasteryet <async.processingjs@yahoo.com> Date: Mon, 10 Oct 2011 22:35:17 -0500 Subject: [PATCH 3/8] Fixing interpolation function (#549) --- pdf.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pdf.js b/pdf.js index 847ed2ff4..79310b149 100644 --- a/pdf.js +++ b/pdf.js @@ -6797,11 +6797,11 @@ var PDFFunction = (function pdfFunction() { diff.push(c1[i] - c0[i]); this.func = function pdfFunctionConstructInterpolatedFunc(args) { - var x = args[0]; + var x = n == 1 ? args[0] : Math.pow(args[0], n); var out = []; for (var j = 0; j < length; ++j) - out.push(c0[j] + (x^n * diff[i])); + out.push(c0[j] + (x * diff[j])); return out; }; From 1f532e6edbda223144e4f7558f352661f7c2c514 Mon Sep 17 00:00:00 2001 From: notmasteryet <async.processingjs@yahoo.com> Date: Mon, 10 Oct 2011 22:40:43 -0500 Subject: [PATCH 4/8] Long line fix --- fonts.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fonts.js b/fonts.js index 7aef5ec92..1c0039264 100644 --- a/fonts.js +++ b/fonts.js @@ -441,7 +441,8 @@ var Font = (function Font() { if (!file) { // The file data is not specified. Trying to fix the font name // to be used with the canvas.font. - var fontName = stdFontMap[name.replace('-', '_')] || name.replace('_', '-'); + var fontName = stdFontMap[name.replace('-', '_')] || + name.replace('_', '-'); this.bold = (fontName.search(/bold/gi) != -1); this.italic = (fontName.search(/oblique/gi) != -1) || (fontName.search(/italic/gi) != -1); From 74d80401ccf448ed40bc31c886287aaab2fc55b4 Mon Sep 17 00:00:00 2001 From: Artur Adib <arturadib@gmail.com> Date: Tue, 11 Oct 2011 15:22:33 -0400 Subject: [PATCH 5/8] 'make web' now also bundles extension (xpi) --- Makefile | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index a9cd2793f..ebffb374c 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,9 @@ BUILD_DIR := build DEFAULT_BROWSERS := resources/browser_manifests/browser_manifest.json DEFAULT_TESTS := test_manifest.json +EXTENSION_SRC := ./extensions/firefox +EXTENSION_NAME := pdf.js.xpi + # Let folks define custom rules for their clones. -include local.mk @@ -103,14 +106,17 @@ lint: # TODO: Use the Closure compiler to optimize the pdf.js files. # GH_PAGES = $(BUILD_DIR)/gh-pages -web: | compiler pages-repo \ +web: | extension compiler pages-repo \ $(addprefix $(GH_PAGES)/, $(PDF_JS_FILES)) \ $(addprefix $(GH_PAGES)/, $(wildcard web/*.*)) \ - $(addprefix $(GH_PAGES)/, $(wildcard web/images/*.*)) + $(addprefix $(GH_PAGES)/, $(wildcard web/images/*.*)) \ + $(addprefix $(GH_PAGES)/, $(wildcard $(EXTENSION_SRC)/*.xpi)) @cp $(GH_PAGES)/web/index.html.template $(GH_PAGES)/index.html; @cd $(GH_PAGES); git add -A; + @echo @echo "Website built in $(GH_PAGES)." + @echo "Don't forget to cd into $(GH_PAGES)/ and issue 'git commit' to push changes." # make pages-repo # @@ -126,6 +132,7 @@ pages-repo: | $(BUILD_DIR) fi; @mkdir -p $(GH_PAGES)/web; @mkdir -p $(GH_PAGES)/web/images; + @mkdir -p $(GH_PAGES)/$(EXTENSION_SRC); $(GH_PAGES)/%.js: %.js @cp $< $@ @@ -136,6 +143,9 @@ $(GH_PAGES)/web/%: web/% $(GH_PAGES)/web/images/%: web/images/% @cp $< $@ +$(GH_PAGES)/$(EXTENSION_SRC)/%: $(EXTENSION_SRC)/% + @cp -R $< $@ + # # make compiler # # # # This target downloads the Closure compiler, and places it in the @@ -149,13 +159,11 @@ $(GH_PAGES)/web/images/%: web/images/% # curl $(COMPILER_URL) > $(BUILD_DIR)/compiler.zip; # cd $(BUILD_DIR); unzip compiler.zip compiler.jar; -# make firefox-extension +# make extension # # This target produce a restartless firefox extension containing a # copy of the pdf.js source. CONTENT_DIR := content -EXTENSION_SRC := ./extensions/firefox -EXTENSION_NAME := pdf.js.xpi PDF_WEB_FILES = \ web/images \ web/compatibility.js \ From e745114a5e13b5a6e842d502cfd2bddba6381f03 Mon Sep 17 00:00:00 2001 From: notmasteryet <async.processingjs@yahoo.com> Date: Tue, 11 Oct 2011 19:38:20 -0500 Subject: [PATCH 6/8] Making the normalized name same in pdf.js and fonts.js --- fonts.js | 83 ++++++++++++++++++++++++++++---------------------------- pdf.js | 2 +- 2 files changed, 43 insertions(+), 42 deletions(-) diff --git a/fonts.js b/fonts.js index 1c0039264..120e5111c 100644 --- a/fonts.js +++ b/fonts.js @@ -26,53 +26,53 @@ var kHintingEnabled = false; */ var stdFontMap = { 'ArialNarrow': 'Helvetica', - 'ArialNarrow_Bold': 'Helvetica-Bold', - 'ArialNarrow_BoldItalic': 'Helvetica-BoldOblique', - 'ArialNarrow_Italic': 'Helvetica-Oblique', + 'ArialNarrow-Bold': 'Helvetica-Bold', + 'ArialNarrow-BoldItalic': 'Helvetica-BoldOblique', + 'ArialNarrow-Italic': 'Helvetica-Oblique', 'ArialBlack': 'Helvetica', - 'ArialBlack_Bold': 'Helvetica-Bold', - 'ArialBlack_BoldItalic': 'Helvetica-BoldOblique', - 'ArialBlack_Italic': 'Helvetica-Oblique', + 'ArialBlack-Bold': 'Helvetica-Bold', + 'ArialBlack-BoldItalic': 'Helvetica-BoldOblique', + 'ArialBlack-Italic': 'Helvetica-Oblique', 'Arial': 'Helvetica', - 'Arial_Bold': 'Helvetica-Bold', - 'Arial_BoldItalic': 'Helvetica-BoldOblique', - 'Arial_Italic': 'Helvetica-Oblique', - 'Arial_BoldItalicMT': 'Helvetica-BoldOblique', - 'Arial_BoldMT': 'Helvetica-Bold', - 'Arial_ItalicMT': 'Helvetica-Oblique', + 'Arial-Bold': 'Helvetica-Bold', + 'Arial-BoldItalic': 'Helvetica-BoldOblique', + 'Arial-Italic': 'Helvetica-Oblique', + 'Arial-BoldItalicMT': 'Helvetica-BoldOblique', + 'Arial-BoldMT': 'Helvetica-Bold', + 'Arial-ItalicMT': 'Helvetica-Oblique', 'ArialMT': 'Helvetica', - 'Courier_Bold': 'Courier-Bold', - 'Courier_BoldItalic': 'Courier-BoldOblique', - 'Courier_Italic': 'Courier-Oblique', + 'Courier-Bold': 'Courier-Bold', + 'Courier-BoldItalic': 'Courier-BoldOblique', + 'Courier-Italic': 'Courier-Oblique', 'CourierNew': 'Courier', - 'CourierNew_Bold': 'Courier-Bold', - 'CourierNew_BoldItalic': 'Courier-BoldOblique', - 'CourierNew_Italic': 'Courier-Oblique', - 'CourierNewPS_BoldItalicMT': 'Courier-BoldOblique', - 'CourierNewPS_BoldMT': 'Courier-Bold', - 'CourierNewPS_ItalicMT': 'Courier-Oblique', + 'CourierNew-Bold': 'Courier-Bold', + 'CourierNew-BoldItalic': 'Courier-BoldOblique', + 'CourierNew-Italic': 'Courier-Oblique', + 'CourierNewPS-BoldItalicMT': 'Courier-BoldOblique', + 'CourierNewPS-BoldMT': 'Courier-Bold', + 'CourierNewPS-ItalicMT': 'Courier-Oblique', 'CourierNewPSMT': 'Courier', - 'Helvetica_Bold': 'Helvetica-Bold', - 'Helvetica_BoldItalic': 'Helvetica-BoldOblique', - 'Helvetica_Italic': 'Helvetica-Oblique', - 'Symbol_Bold': 'Symbol', - 'Symbol_BoldItalic': 'Symbol', - 'Symbol_Italic': 'Symbol', + 'Helvetica-Bold': 'Helvetica-Bold', + 'Helvetica-BoldItalic': 'Helvetica-BoldOblique', + 'Helvetica-Italic': 'Helvetica-Oblique', + 'Symbol-Bold': 'Symbol', + 'Symbol-BoldItalic': 'Symbol', + 'Symbol-Italic': 'Symbol', 'TimesNewRoman': 'Times-Roman', - 'TimesNewRoman_Bold': 'Times-Bold', - 'TimesNewRoman_BoldItalic': 'Times-BoldItalic', - 'TimesNewRoman_Italic': 'Times-Italic', + 'TimesNewRoman-Bold': 'Times-Bold', + 'TimesNewRoman-BoldItalic': 'Times-BoldItalic', + 'TimesNewRoman-Italic': 'Times-Italic', 'TimesNewRomanPS': 'Times-Roman', - 'TimesNewRomanPS_Bold': 'Times-Bold', - 'TimesNewRomanPS_BoldItalic': 'Times-BoldItalic', - 'TimesNewRomanPS_BoldItalicMT': 'Times-BoldItalic', - 'TimesNewRomanPS_BoldMT': 'Times-Bold', - 'TimesNewRomanPS_Italic': 'Times-Italic', - 'TimesNewRomanPS_ItalicMT': 'Times-Italic', + 'TimesNewRomanPS-Bold': 'Times-Bold', + 'TimesNewRomanPS-BoldItalic': 'Times-BoldItalic', + 'TimesNewRomanPS-BoldItalicMT': 'Times-BoldItalic', + 'TimesNewRomanPS-BoldMT': 'Times-Bold', + 'TimesNewRomanPS-Italic': 'Times-Italic', + 'TimesNewRomanPS-ItalicMT': 'Times-Italic', 'TimesNewRomanPSMT': 'Times-Roman', - 'TimesNewRomanPSMT_Bold': 'Times-Bold', - 'TimesNewRomanPSMT_BoldItalic': 'Times-BoldItalic', - 'TimesNewRomanPSMT_Italic': 'Times-Italic' + 'TimesNewRomanPSMT-Bold': 'Times-Bold', + 'TimesNewRomanPSMT-BoldItalic': 'Times-BoldItalic', + 'TimesNewRomanPSMT-Italic': 'Times-Italic' }; var serifFonts = { @@ -441,8 +441,9 @@ var Font = (function Font() { if (!file) { // The file data is not specified. Trying to fix the font name // to be used with the canvas.font. - var fontName = stdFontMap[name.replace('-', '_')] || - name.replace('_', '-'); + var fontName = name.replace(/,_/g, '-'); + fontName = stdFontMap[fontName] || fontName; + this.bold = (fontName.search(/bold/gi) != -1); this.italic = (fontName.search(/oblique/gi) != -1) || (fontName.search(/italic/gi) != -1); diff --git a/pdf.js b/pdf.js index 847ed2ff4..311194208 100644 --- a/pdf.js +++ b/pdf.js @@ -4783,7 +4783,7 @@ var PartialEvaluator = (function partialEvaluator() { return null; // Using base font name as a font name. - baseFontName = baseFontName.name.replace(/,/g, '_'); + baseFontName = baseFontName.name.replace(/,_/g, '-'); var metricsAndMap = this.getBaseFontMetricsAndMap(baseFontName); var properties = { From fae8459991951c4b7466bfc9ca10a45d3b69ce98 Mon Sep 17 00:00:00 2001 From: notmasteryet <async.processingjs@yahoo.com> Date: Tue, 11 Oct 2011 19:45:55 -0500 Subject: [PATCH 7/8] Add standard font name test (also for #621) --- test/pdfs/pal-o47.pdf.link | 1 + test/test_manifest.json | 6 ++++++ 2 files changed, 7 insertions(+) create mode 100644 test/pdfs/pal-o47.pdf.link diff --git a/test/pdfs/pal-o47.pdf.link b/test/pdfs/pal-o47.pdf.link new file mode 100644 index 000000000..e45c4873d --- /dev/null +++ b/test/pdfs/pal-o47.pdf.link @@ -0,0 +1 @@ +http://www1.cpdl.org/wiki/images/sheet/pal-o47.pdf diff --git a/test/test_manifest.json b/test/test_manifest.json index 43b799bad..3ede43ceb 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -199,6 +199,12 @@ "rounds": 1, "type": "eq" }, + { "id": "pal-o47", + "file": "pdfs/pal-o47.pdf", + "link": true, + "rounds": 1, + "type": "eq" + }, { "id": "simpletype3font", "file": "pdfs/simpletype3font.pdf", "link": false, From 07aa691fe022fec90629a903616c4a1a29562f63 Mon Sep 17 00:00:00 2001 From: notmasteryet <async.processingjs@yahoo.com> Date: Tue, 11 Oct 2011 20:27:47 -0500 Subject: [PATCH 8/8] Fixing invalid CFF DICT entry (#621) --- fonts.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/fonts.js b/fonts.js index 2ab3a90b7..4aa72eee0 100644 --- a/fonts.js +++ b/fonts.js @@ -2859,7 +2859,15 @@ var Type2CFF = (function type2CFF() { if (b <= 21) { if (b === 12) { ++pos; - var b = (b << 8) | dict[pos]; + var op = dict[pos]; + if ((op > 14 && op < 17) || + (op > 23 && op < 30) || op > 38) { + warn('Invalid CFF dictionary key: ' + op); + // trying to replace it with initialRandomSeed + // to pass sanitizer + dict[pos] = 19; + } + var b = (b << 8) | op; } entries.push([b, operands]); operands = [];