]> git.parisson.com Git - pdf.js.git/commitdiff
Enhance the converter code by filling Format 6 dense array gaps
authorVivien Nicolas <21@vingtetun.org>
Wed, 22 Jun 2011 08:56:31 +0000 (10:56 +0200)
committerVivien Nicolas <21@vingtetun.org>
Wed, 22 Jun 2011 08:56:31 +0000 (10:56 +0200)
fonts.js
pdf.js

index c7230a55a24e310a6918f16d10b1be98ede83bca..ded1b70c2827e4b121a543cddfe7a7f778759c6d 100644 (file)
--- a/fonts.js
+++ b/fonts.js
@@ -427,18 +427,39 @@ var Font = (function () {
             var firstCode = FontsUtils.bytesToInteger(font.getBytes(2));
             var entryCount = FontsUtils.bytesToInteger(font.getBytes(2));
 
+            // Since Format 6 is a dense array, check for gaps in the indexes
+            // to fill them later if needed
+            var gaps = [];
+            for (var j = 1; j <= entryCount; j++)
+              gaps.push(j);
+
             var encoding = properties.encoding;
             var glyphs = [];
             for (var j = 0; j < entryCount; j++) {
               var charcode = FontsUtils.bytesToInteger(font.getBytes(2));
-              glyphs.push({unicode: charcode + firstCode });
+              var index = gaps.indexOf(charcode);
+              if (index != -1)
+                gaps.splice(index, 1);
+
+              glyphs.push({unicode: charcode + firstCode});
             }
 
+            while (gaps.length)
+              glyphs.push({unicode: gaps.pop() + firstCode });
+
             var ranges = getRanges(glyphs);
-            var denseRange = ranges[0];
-            var pos = 0;
-            for (var j = denseRange[0]; j <= denseRange[1]; j++)
-              encoding[j - 1] = glyphs[pos++].unicode;
+
+            var pos = firstCode;
+            var bias = 1;
+            for (var j = 0; j < ranges.length; j++) {
+              var range = ranges[j];
+              var start = range[0];
+              var end = range[1];
+              for (var k = start; k < end; k++) {
+                encoding[pos] = glyphs[pos - firstCode].unicode;
+                pos++;
+              }
+            }
             cmap.data = createCMapTable(glyphs);
           }
         }
diff --git a/pdf.js b/pdf.js
index 9d06241f7695c56a84ab67fae4002e267a2282b1..23dd5bee90c1dac7ae32ab54c7e77d2a95808b3e 100644 (file)
--- a/pdf.js
+++ b/pdf.js
@@ -2234,7 +2234,7 @@ var CanvasGraphics = (function() {
                                 // The encoding mapping table will be filled
                                 // later during the building phase
                                 //encodingMap[k] = GlyphsUnicode[encoding[code]];
-                                charset.push(encoding[code++]);
+                                charset.push(encoding[code++] || ".notdef");
                               }
                             }
                             break;