]> git.parisson.com Git - pdf.js.git/commitdiff
fix some bugs
authorChris Jones <jones.chris.g@gmail.com>
Sat, 16 Jul 2011 00:40:37 +0000 (17:40 -0700)
committerChris Jones <jones.chris.g@gmail.com>
Sat, 16 Jul 2011 00:40:37 +0000 (17:40 -0700)
pdf.js
test/driver.js

diff --git a/pdf.js b/pdf.js
index a3179406ceda56cee60952e3dc7341ae5945fe73..4de525be03a761cbdf78b193a700ef0f3833ba51 100644 (file)
--- a/pdf.js
+++ b/pdf.js
@@ -19,6 +19,7 @@ function warn(msg) {
 }
 
 function error(msg) {
+  console.log(backtrace());
   throw new Error(msg);
 }
 
@@ -43,6 +44,16 @@ function assertWellFormed(cond, msg) {
     malformed(msg);
 }
 
+function backtrace() {
+  var stackStr;
+  try {
+    throw new Error();
+  } catch(e) {
+    stackStr = e.stack;
+  };
+  return stackStr.split('\n').slice(1).join('\n');
+}
+
 function shadow(obj, prop, value) {
   Object.defineProperty(obj, prop, { value: value, enumerable: true, configurable: true, writable: false });
     return value;
@@ -2838,6 +2849,13 @@ var XRef = (function() {
       return this.fetch(obj);
     },
     fetch: function(ref) {
+
+
+      if ("undefined" == typeof ref) {
+        console.log(backtrace());
+      }
+
+
       var num = ref.num;
       var e = this.cache[num];
       if (e)
@@ -2960,7 +2978,7 @@ var Page = (function() {
       return shadow(this, 'mediaBox',
                     ((IsArray(obj) && obj.length == 4) ? obj : null));
     },
-    startRendering: function(canvasCtx, continuation) {
+    startRendering: function(canvasCtx, continuation, onerror) {
       var self = this;
       var stats = self.stats;
       stats.compile = stats.fonts = stats.render = 0;
@@ -2978,9 +2996,14 @@ var Page = (function() {
           // Always defer call to display() to work around bug in
           // Firefox error reporting from XHR callbacks.
           setTimeout(function () {
-            self.display(gfx);
-            stats.render = Date.now();
-            continuation();
+            var exc = null;
+            try {
+              self.display(gfx);
+              stats.render = Date.now();
+            } catch (e) {
+              exc = e.toString();
+            }
+            continuation(exc);
           });
         });
     },
@@ -3639,7 +3662,12 @@ var PartialEvaluator = (function() {
         if (!df)
           return null;
         compositeFont = true;
-        descendant = xref.fetch(df[0]);
+
+        if (IsRef(df)) {
+          df = xref.fetch(df);
+        }
+
+        descendant = xref.fetch(IsRef(df) ? df : df[0]);
         subType = descendant.get('Subtype');
         fd = descendant.get('FontDescriptor');
       } else {
@@ -4765,6 +4793,15 @@ var ColorSpace = (function() {
   };
 
   constructor.parse = function colorspace_parse(cs, xref, res) {
+
+
+
+    if ("undefined" == typeof(cs))
+      console.log(backtrace());
+
+
+
+
     if (IsName(cs)) {
       var colorSpaces = res.get('ColorSpace');
       if (colorSpaces) {
@@ -4854,10 +4891,10 @@ var ColorSpace = (function() {
       case 'Lab':
       case 'DeviceN':
       default:
-        error("unrecognized color space object '" + mode + "'");
+        error("unimplemented color space object '" + mode + "'");
       }
     } else {
-      error('unrecognized color space object');
+      error('unrecognized color space object: "'+ cs +"'");
     }
   };
 
@@ -5131,6 +5168,10 @@ var PDFImage = (function() {
     this.bpc = bitsPerComponent;
 
     var colorSpace = dict.get('ColorSpace', 'CS');
+    if (!colorSpace) {
+      TODO('JPX images (which don"t require color spaces');
+      colorSpace = new Name('DeviceRGB');
+    }
     this.colorSpace = ColorSpace.parse(colorSpace, xref, res);
 
     this.numComps = this.colorSpace.numComps;
index e397f108be3936a8865effcb254800af5de49534..a6b0b1dc24931a0ad6ecd24030061b443399383e 100644 (file)
@@ -111,7 +111,10 @@ function nextPage(task, loadError) {
 
             page.startRendering(
               ctx,
-              function() { snapshotCurrentPage(page, task, failure); });
+              function(e) {
+                snapshotCurrentPage(page, task,
+                                    (!failure && e) ? ('render: '+ e) : failure);
+              });
         } catch(e) {
             failure = 'page setup: '+ e.toString();
         }