Enhance the converter code by filling Format 6 dense array gaps

This commit is contained in:
Vivien Nicolas 2011-06-22 10:56:31 +02:00
parent e9ed96d97c
commit 4f7fb7539b
2 changed files with 27 additions and 6 deletions

View File

@ -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);
}
}

2
pdf.js
View File

@ -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;