From 09dfde69a285b547886c12539420673357726cb6 Mon Sep 17 00:00:00 2001 From: notmasteryet Date: Tue, 10 Jan 2012 22:01:24 -0600 Subject: [PATCH] Duplicate short map into private use area --- src/fonts.js | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/fonts.js b/src/fonts.js index 8f20deff9..329d7ad77 100644 --- a/src/fonts.js +++ b/src/fonts.js @@ -1807,15 +1807,27 @@ var Font = (function FontClosure() { if (hasShortCmap && this.hasEncoding && !this.isSymbolicFont) { // Re-encode short map encoding to unicode -- that simplifies the - // resolution of MacRoman encoded glyphs logic for TrueType fonts. + // resolution of MacRoman encoded glyphs logic for TrueType fonts: + // copying all characters to private use area, all mapping all known + // glyphs to the unicodes. The glyphs and ids arrays will grow. + var usedUnicodes = []; for (var i = 0, ii = glyphs.length; i < ii; i++) { var code = glyphs[i].unicode; + glyphs[i].unicode += kCmapGlyphOffset; + var glyphName = properties.baseEncoding[code]; - if (!glyphName) - continue; - if (!(glyphName in GlyphsUnicode)) - continue; - glyphs[i].unicode = GlyphsUnicode[glyphName]; + if (glyphName in GlyphsUnicode) { + var unicode = GlyphsUnicode[glyphName]; + if (unicode in usedUnicodes) + continue; + + usedUnicodes[unicode] = true; + glyphs.push({ + unicode: unicode, + code: glyphs[i].code + }); + ids.push(ids[i]); + } } }