From 341de1ff42ed9f17f097af39f248a6a91f120f4f Mon Sep 17 00:00:00 2001 From: Vivien Nicolas <21@vingtetun.org> Date: Tue, 30 Aug 2011 02:34:35 +0200 Subject: [PATCH] Clean up encoding parsing --- fonts.js | 11 ++++++++--- pdf.js | 3 ++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/fonts.js b/fonts.js index 94aee8445..39936d432 100755 --- a/fonts.js +++ b/fonts.js @@ -385,6 +385,7 @@ var Font = (function Font() { var constructor = function font_constructor(name, file, properties) { this.name = name; this.encoding = properties.encoding; + this.glyphs = properties.glyphs; this.sizes = []; // If the font is to be ignored, register it like an already loaded font @@ -1271,6 +1272,10 @@ var Font = (function Font() { unicode = charcode; } + // Check if the glyph has already been converted + if (!IsNum(unicode)) + unicode = encoding[charcode] = this.glyphs[unicode]; + // Handle surrogate pairs if (unicode > 0xFFFF) { str += String.fromCharCode(unicode & 0xFFFF); @@ -1703,9 +1708,9 @@ var Type1Parser = function() { var index = parseInt(getToken()); var glyph = getToken(); - if (!properties.encoding[index]) { - var code = GlyphsUnicode[glyph]; - properties.glyphs[glyph] = properties.encoding[index] = code; + if ('undefined' == typeof(properties.differences[index])) { + properties.encoding[index] = glyph; + properties.glyphs[glyph] = GlyphsUnicode[glyph]; } getToken(); // read the in 'put' } diff --git a/pdf.js b/pdf.js index 597e8b23f..550e72920 100644 --- a/pdf.js +++ b/pdf.js @@ -4290,7 +4290,7 @@ var PartialEvaluator = (function() { glyphsMap[glyph] = encodingMap[i] = GlyphsUnicode[glyph]; } - if (fontDict.has('ToUnicode') && differences) { + if (fontType == 'TrueType' && fontDict.has('ToUnicode') && differences) { var cmapObj = xref.fetchIfRef(fontDict.get('ToUnicode')); if (IsName(cmapObj)) { error('ToUnicode file cmap translation not implemented'); @@ -4358,6 +4358,7 @@ var PartialEvaluator = (function() { var baseFontName = fontDict.get('BaseFont'); if (!IsName(baseFontName)) return null; + // Using base font name as a font name. baseFontName = baseFontName.name.replace(/[\+,\-]/g, '_'); if (/^Symbol(_?(Bold|Italic))*$/.test(baseFontName)) {