]> git.parisson.com Git - pdf.js.git/commitdiff
working on subroutines
authorsbarman <sbarman@L3CWZ5T.(none)>
Tue, 16 Aug 2011 17:25:02 +0000 (10:25 -0700)
committersbarman <sbarman@L3CWZ5T.(none)>
Thu, 18 Aug 2011 20:53:25 +0000 (13:53 -0700)
fonts.js

index 66d8428e20227a2a23a4996e8ddc15396e2e666c..e38edef8df13e00ace46fb159451778875798a07 100755 (executable)
--- a/fonts.js
+++ b/fonts.js
@@ -1598,6 +1598,17 @@ var Type1Parser = function() {
     var c = '';
     var count = eexecStr.length;
     for (var i = 0; i < count; i++) {
+      var getToken = function() {
+        while(i < count && (eexecStr[i] == ' ' || eexecStr[i] == '\n'))
+          ++i;
+
+        var t = '';
+        while(i < count && !(eexecStr[i] == ' ' || eexecStr[i] == '\n'))
+          t += eexecStr[i++];
+
+        return t;
+      }
+
       var c = eexecStr[i];
 
       if ((glyphsSection || subrsSection) && c == 'R') {
@@ -1627,7 +1638,25 @@ var Type1Parser = function() {
               glyphsSection = true;
               break;
             case '/Subrs':
-              subrsSection = true;
+              ++i;
+              var num = parseInt(getToken());
+              getToken(); // read in 'array'
+              for (var j = 0; j < num; ++j) {
+                var t = getToken(); // read in 'dup'
+                if (t == 'ND')
+                  break;
+                var index = parseInt(getToken());
+                if (index > j)
+                  j = index;
+                var length = parseInt(getToken());
+                getToken(); // read in 'RD'
+                var data = eexec.slice(i + 1, i + 1 + length);
+                var encoded = decrypt(data, kCharStringsEncryptionKey, 4);
+                var str = decodeCharString(encoded);
+                i = i + 1 + length;
+                getToken(); //read in 'NP'
+                program.subrs[index] = str.charstring;
+              }
               break;
             case '/BlueValues':
             case '/OtherBlues':
@@ -1909,8 +1938,13 @@ CFF.prototype = {
     for (var i = 0; i < bias; i++)
       type2Subrs.push([0x0B]);
 
-    for (var i = 0; i < count; i++)
-      type2Subrs.push(this.flattenCharstring(type1Subrs[i], this.commandsMap));
+    for (var i = 0; i < count; i++) {
+      var subr = type1Subrs[i];
+      if (!subr)
+        subr = [0x0B];
+
+      type2Subrs.push(this.flattenCharstring(subr, this.commandsMap));
+    }
 
     return type2Subrs;
   },