From b918df3547ef89815552bf1c8aeb8180173e25b9 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Mon, 28 Jul 2014 18:34:41 +0200 Subject: [PATCH] Re-factor heuristics to recognize unknown glyphs for |toUnicode| --- src/core/fonts.js | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/core/fonts.js b/src/core/fonts.js index 78f1d66e0..b4ab81859 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -4310,26 +4310,30 @@ var Font = (function FontClosure() { var glyphName = encoding[charcode]; // b) Look up the character name in the Adobe Glyph List (see the // Bibliography) to obtain the corresponding Unicode value. - if (glyphName === '' || !(glyphName in GlyphsUnicode)) { + if (glyphName === '') { + continue; + } else if (GlyphsUnicode[glyphName] === undefined) { // (undocumented) c) Few heuristics to recognize unknown glyphs // NOTE: Adobe Reader does not do this step, but OSX Preview does - var code; - // Gxx glyph - if (glyphName.length === 3 && - glyphName[0] === 'G' && - (code = parseInt(glyphName.substr(1), 16))) { - toUnicode[charcode] = String.fromCharCode(code); - } - // g00xx glyph - if (glyphName.length === 5 && - glyphName[0] === 'g' && - (code = parseInt(glyphName.substr(1), 16))) { - toUnicode[charcode] = String.fromCharCode(code); + var code = 0; + switch (glyphName[0]) { + case 'G': // Gxx glyph + if (glyphName.length === 3) { + code = parseInt(glyphName.substr(1), 16); + } + break; + case 'g': // g00xx glyph + if (glyphName.length === 5) { + code = parseInt(glyphName.substr(1), 16); + } + break; + case 'C': // Cddd glyph + if (glyphName.length >= 3) { + code = +glyphName.substr(1); + } + break; } - // Cddd glyph - if (glyphName.length >= 3 && - glyphName[0] === 'C' && - (code = +glyphName.substr(1))) { + if (code) { toUnicode[charcode] = String.fromCharCode(code); } continue;