]> git.parisson.com Git - pdf.js.git/commitdiff
Rename some stuff and add missing font_handler.js
authorJulian Viereck <julian.viereck@gmail.com>
Fri, 16 Sep 2011 16:04:12 +0000 (09:04 -0700)
committerJulian Viereck <julian.viereck@gmail.com>
Fri, 16 Sep 2011 16:31:12 +0000 (09:31 -0700)
test/test_slave.html
web/viewer.html
worker.js
worker/boot_processor.js [deleted file]
worker/font_boot.js [new file with mode: 0644]
worker/font_handler.js [new file with mode: 0644]
worker/handler.js [deleted file]
worker/processor_boot.js [new file with mode: 0644]
worker/processor_handler.js [new file with mode: 0644]

index 06657ddd3442767d0f047e1ee28344eba3c5a0fb..bbec69d3abc79d3c69ca73309e46918b4ef807e6 100644 (file)
@@ -10,7 +10,8 @@
   <script type="text/javascript" src="driver.js"></script>
   <script type="text/javascript" src="../worker.js"></script>
   <script type="text/javascript" src="../worker/message_handler.js"></script>
-  <script type="text/javascript" src="../worker/handler.js"></script>
+  <script type="text/javascript" src="../worker/processor_handler.js"></script>
+  <script type="text/javascript" src="../worker/font_handler.js"></script>
 </head>
 
 <body onload="load();">
index 00076aa80cd7d9d934dee94cf08ba29e2ee75629..33026a49256aa870ac0a0178a91776bd374e0d80 100644 (file)
@@ -13,7 +13,8 @@
         <script type="text/javascript" src="../metrics.js"></script>
         <script type="text/javascript" src="../worker.js"></script>
         <script type="text/javascript" src="../worker/message_handler.js"></script>
-        <script type="text/javascript" src="../worker/handler.js"></script>
+        <script type="text/javascript" src="../worker/processor_handler.js"></script>
+        <script type="text/javascript" src="../worker/font_handler.js"></script>
   </head>
 
   <body>
index 1a143c1d6ed11b484713094c8dc07a5415930b3d..8ffece46fddaa38235ea55dfc2364c876e82d112 100644 (file)
--- a/worker.js
+++ b/worker.js
@@ -3,6 +3,9 @@
 
 'use strict';
 
+// Set this to true if you want to use workers.
+var useWorker = false;
+
 var WorkerPage = (function() {
   function constructor(workerPDF, page) {
     this.workerPDF = workerPDF;
@@ -179,10 +182,9 @@ var WorkerPDFDoc = (function() {
     
     this.pageCache = [];
     
-    var useWorker = true;
-    
     if (useWorker) {
-      var worker = this.worker = new Worker("../worker/boot_processor.js");
+      var worker = this.worker = new Worker("../worker/processor_boot.js");
+      var fontWorker = this.fontWorker = new Worker('../worker/font_boot.js');
     } else {
       // If we don't use a worker, just post/sendMessage to the main thread.
       var worker = {
@@ -190,21 +192,22 @@ var WorkerPDFDoc = (function() {
           worker.onmessage({data: obj});
         }
       }
+      var fontWorker = {
+        postMessage: function(obj) {
+          fontWorker.onmessage({data: obj});
+        }
+      }
     }
 
-    var fontWorker = new Worker('../worker/boot_font.js');
-    var fontHandler = this.fontHandler = new MessageHandler('font', fontWorker);
-
-    var handler = this.handler = new MessageHandler("main", worker);
-    handler.on("page", function(data) {
+    var processorHandler = this.processorHandler = new MessageHandler("main", worker);
+    processorHandler.on("page", function(data) {
       var pageNum = data.pageNum;
       var page = this.pageCache[pageNum];
       
-
       page.startRenderingFromIRQueue(data.IRQueue, data.fonts);
     }, this);
 
-    handler.on("obj", function(data) {
+    processorHandler.on("obj", function(data) {
       var objId   = data[0];
       var objType = data[1];
 
@@ -225,6 +228,7 @@ var WorkerPDFDoc = (function() {
       }
     }, this);
 
+    var fontHandler = this.fontHandler = new MessageHandler('font', fontWorker);
     fontHandler.on('font_ready', function(data) {
       var objId   = data[0];
       var fontObj = new FontShape(data[1]);
@@ -240,10 +244,11 @@ var WorkerPDFDoc = (function() {
     if (!useWorker) {
       // If the main thread is our worker, setup the handling for the messages
       // the main thread sends to it self.
-      WorkerHandler.setup(handler);
+      WorkerProcessorHandler.setup(processorHandler);
+      WorkerFontHandler.setup(fontHandler);
     }
     
-    handler.send("doc", data);
+    processorHandler.send("doc", data);
   }
 
   constructor.prototype = {
@@ -252,7 +257,7 @@ var WorkerPDFDoc = (function() {
     },
     
     startRendering: function(page) {
-      this.handler.send("page_request", page.page.pageNumber + 1);
+      this.processorHandler.send("page_request", page.page.pageNumber + 1);
     },
     
     getPage: function(n) {
diff --git a/worker/boot_processor.js b/worker/boot_processor.js
deleted file mode 100644 (file)
index cc3896c..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
-/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
-
-'use strict';
-
-importScripts('console.js');
-importScripts('message_handler.js');
-importScripts('../pdf.js');
-importScripts('../fonts.js');
-importScripts('../crypto.js');
-importScripts('../glyphlist.js');
-importScripts('../metrics.js');
-importScripts('handler.js');
-
-// Listen for messages from the main thread.
-var pdfDoc = null;
-
-var handler = new MessageHandler("worker", this);
-WorkerHandler.setup(handler);
diff --git a/worker/font_boot.js b/worker/font_boot.js
new file mode 100644 (file)
index 0000000..9158d20
--- /dev/null
@@ -0,0 +1,16 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+
+'use strict';
+
+importScripts('console.js');
+importScripts('message_handler.js');
+importScripts('../pdf.js');
+importScripts('../fonts.js');
+importScripts('../crypto.js');
+importScripts('../glyphlist.js');
+importScripts('font_handler.js');
+
+
+var handler = new MessageHandler("worker_font", this);
+WorkerFontHandler.setup(handler);
diff --git a/worker/font_handler.js b/worker/font_handler.js
new file mode 100644 (file)
index 0000000..3479090
--- /dev/null
@@ -0,0 +1,52 @@
+var WorkerFontHandler = {
+  setup: function(handler) {
+    handler.on("font", function(data) {  
+      var objId      = data[0];
+      var name       = data[1];
+      var file       = data[2];
+      var properties = data[3];
+
+      var font = {
+        name: name,
+        file: file,
+        properties: properties
+      };
+
+      // Some fonts don't have a file, e.g. the build in ones like Arial.
+      if (file) {
+        var fontFileDict = new Dict();
+        fontFileDict.map = file.dict.map;
+
+        var fontFile = new Stream(file.bytes, file.start,
+                                  file.end - file.start, fontFileDict);
+                         
+        // Check if this is a FlateStream. Otherwise just use the created 
+        // Stream one. This makes complex_ttf_font.pdf work.
+        var cmf = file.bytes[0];
+        if ((cmf & 0x0f) == 0x08) {
+          font.file = new FlateStream(fontFile);
+        } else {
+          font.file = fontFile;
+        }          
+      }
+
+      var obj = new Font(font.name, font.file, font.properties);
+
+      var str = '';
+      var data = obj.data;
+      if (data) {
+        var length = data.length;
+        for (var j = 0; j < length; j++)
+          str += String.fromCharCode(data[j]);
+      }
+
+      obj.str = str;
+
+      // Remove the data array form the font object, as it's not needed
+      // anymore as we sent over the ready str.
+      delete obj.data;
+
+      handler.send("font_ready", [objId, obj]);
+    });
+  }
+}
diff --git a/worker/handler.js b/worker/handler.js
deleted file mode 100644 (file)
index fe6c6d8..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/* -*- 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 WorkerHandler = {
-  setup: function(handler) {
-    var pdfDoc = null;
-    
-    handler.on("doc", function(data) {
-      pdfDoc = new PDFDoc(new Stream(data));
-    });
-  
-    handler.on("page_request", function(pageNum) {
-      pageNum = parseInt(pageNum);
-
-      var page = pdfDoc.getPage(pageNum);
-
-      // The following code does quite the same as Page.prototype.startRendering,
-      // but stops at one point and sends the result back to the main thread.
-      var gfx = new CanvasGraphics(null);
-
-      var start = Date.now();
-      // Pre compile the pdf page and fetch the fonts/images.
-      var IRQueue = page.getIRQueue(handler);
-
-      console.log("page=%d - getIRQueue: time=%dms, len=%d", pageNum, Date.now() - start, IRQueue.fnArray.length);
-
-      if (false /* show used commands */) {
-        var cmdMap = {};
-  
-        var fnArray = IRQueue .fnArray;
-        for (var i = 0; i < fnArray.length; i++) {
-          var entry = fnArray[i];
-          if (entry == "paintReadyFormXObject") {
-            //console.log(preCompilation.argsArray[i]);
-          }
-          if (cmdMap[entry] == null) {
-            cmdMap[entry] = 1;
-          } else {
-            cmdMap[entry] += 1;
-          }
-        }
-        console.log("cmds", JSON.stringify(cmdMap));
-      } 
-
-      handler.send("page", {
-        pageNum:  pageNum,
-        IRQueue:  IRQueue,
-      });
-    }, this);
-  }
-}
diff --git a/worker/processor_boot.js b/worker/processor_boot.js
new file mode 100644 (file)
index 0000000..deb2778
--- /dev/null
@@ -0,0 +1,19 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+
+'use strict';
+
+importScripts('console.js');
+importScripts('message_handler.js');
+importScripts('../pdf.js');
+importScripts('../fonts.js');
+importScripts('../crypto.js');
+importScripts('../glyphlist.js');
+importScripts('../metrics.js');
+importScripts('processor_handler.js');
+
+// Listen for messages from the main thread.
+var pdfDoc = null;
+
+var handler = new MessageHandler("worker_processor", this);
+WorkerProcessorHandler.setup(handler);
diff --git a/worker/processor_handler.js b/worker/processor_handler.js
new file mode 100644 (file)
index 0000000..b7a915f
--- /dev/null
@@ -0,0 +1,53 @@
+/* -*- 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 WorkerProcessorHandler = {
+  setup: function(handler) {
+    var pdfDoc = null;
+    
+    handler.on("doc", function(data) {
+      pdfDoc = new PDFDoc(new Stream(data));
+    });
+  
+    handler.on("page_request", function(pageNum) {
+      pageNum = parseInt(pageNum);
+
+      var page = pdfDoc.getPage(pageNum);
+
+      // The following code does quite the same as Page.prototype.startRendering,
+      // but stops at one point and sends the result back to the main thread.
+      var gfx = new CanvasGraphics(null);
+
+      var start = Date.now();
+      // Pre compile the pdf page and fetch the fonts/images.
+      var IRQueue = page.getIRQueue(handler);
+
+      console.log("page=%d - getIRQueue: time=%dms, len=%d", pageNum, Date.now() - start, IRQueue.fnArray.length);
+
+      if (false /* show used commands */) {
+        var cmdMap = {};
+  
+        var fnArray = IRQueue .fnArray;
+        for (var i = 0; i < fnArray.length; i++) {
+          var entry = fnArray[i];
+          if (entry == "paintReadyFormXObject") {
+            //console.log(preCompilation.argsArray[i]);
+          }
+          if (cmdMap[entry] == null) {
+            cmdMap[entry] = 1;
+          } else {
+            cmdMap[entry] += 1;
+          }
+        }
+        console.log("cmds", JSON.stringify(cmdMap));
+      } 
+
+      handler.send("page", {
+        pageNum:  pageNum,
+        IRQueue:  IRQueue,
+      });
+    }, this);
+  }
+}