Browse Source

Redid encoding

sbarman 14 years ago
parent
commit
aeba156d6b
  1. 63
      pdf.js

63
pdf.js

@ -4213,18 +4213,16 @@ var PartialEvaluator = (function() {
'9.7.5.3'); '9.7.5.3');
} }
} }
} else if (fontDict.has('Encoding')) { } else {
var baseEncoding = null, diffEncoding = [];
if (fontDict.has('Encoding')) {
var encoding = xref.fetchIfRef(fontDict.get('Encoding')); var encoding = xref.fetchIfRef(fontDict.get('Encoding'));
if (IsDict(encoding)) { if (IsDict(encoding)) {
// Build a map of between codes and glyphs // Build a map of between codes and glyphs
// Load the base encoding // Load the base encoding
var baseName = encoding.get('BaseEncoding'); var baseName = encoding.get('BaseEncoding');
if (baseName) { if (baseName) {
var base = Encodings[baseName.name]; baseEncoding = Encodings[baseName.name].slice();
for (var j = 0, end = base.length; j < end; j++)
encodingMap[j] = GlyphsUnicode[base[j]] || 0;
} else {
TODO('need to load default encoding');
} }
// Load the differences between the base and original // Load the differences between the base and original
@ -4235,29 +4233,38 @@ var PartialEvaluator = (function() {
if (IsNum(data)) { if (IsNum(data)) {
index = data; index = data;
} else { } else {
encodingMap[index++] = (subType.name == 'TrueType') ? j : diffEncoding[index++] = data.name;
GlyphsUnicode[data.name];
} }
} }
} else if (IsName(encoding)) { } else if (IsName(encoding)) {
var encoding = Encodings[encoding.name]; baseEncoding = Encodings[encoding.name].slice();
if (!encoding) }
error('Unknown font encoding'); }
var index = 0;
for (var j = 0; j < encoding.length; j++)
encodingMap[index++] = GlyphsUnicode[encoding[j]];
// firstChar and width are required if (!baseEncoding) {
// (except for 14 standard fonts) var type = subType.name;
var firstChar = xref.fetchIfRef(fontDict.get('FirstChar')); if (type == 'TrueType') {
var widths = xref.fetchIfRef(fontDict.get('Widths')) || []; baseEncoding = Encodings.WinAnsiEncoding.slice(0);
for (var j = 0; j < widths.length; j++) { } else if (type == 'Type1') {
if (widths[j]) baseEncoding = Encodings.StandardEncoding.slice(0);
charset.push(encoding[j + firstChar]); } else {
error('Unknown type of font');
} }
} }
} else if (fontDict.has('ToUnicode')) {
// merge in the differences
var length = baseEncoding.length > diffEncoding.length ?
baseEncoding.length : diffEncoding.length;
for (var i = 0, ii = length; i < ii; ++i) {
var diffGlyph = diffEncoding[i];
var baseGlyph = baseEncoding[i];
if (diffGlyph)
encodingMap[i] = GlyphsUnicode[diffGlyph];
else if (baseGlyph)
encodingMap[i] = GlyphsUnicode[baseGlyph];
}
if (fontDict.has('ToUnicode')) {
encodingMap = {empty: true}; encodingMap = {empty: true};
var cmapObj = xref.fetchIfRef(fontDict.get('ToUnicode')); var cmapObj = xref.fetchIfRef(fontDict.get('ToUnicode'));
if (IsName(cmapObj)) { if (IsName(cmapObj)) {
@ -4326,6 +4333,16 @@ var PartialEvaluator = (function() {
} }
} }
/* // firstChar and width are required
// (except for 14 standard fonts)
var firstChar = xref.fetchIfRef(fontDict.get('FirstChar'));
var widths = xref.fetchIfRef(fontDict.get('Widths')) || [];
for (var j = 0; j < widths.length; j++) {
if (widths[j])
charset.push(encoding[j + firstChar]);
}
*/ }
if (!fd) { if (!fd) {
var baseFontName = fontDict.get('BaseFont'); var baseFontName = fontDict.get('BaseFont');
if (!IsName(baseFontName)) if (!IsName(baseFontName))

Loading…
Cancel
Save