From a8aed7443127cb023f95853d5a9c91ff3ed754a5 Mon Sep 17 00:00:00 2001 From: vyv03354 Date: Wed, 30 Jan 2013 02:46:17 +0900 Subject: [PATCH] Add Hankaku-Latin cid to Unicode mappings --- src/cidmaps.js | 9 +++++---- src/fonts.js | 30 +++++++++++++++++++++++++----- test/pdfs/noembed-identity-2.pdf | Bin 2123 -> 2147 bytes test/test_manifest.json | 2 +- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/src/cidmaps.js b/src/cidmaps.js index 1b654756c..500b35a88 100644 --- a/src/cidmaps.js +++ b/src/cidmaps.js @@ -28,7 +28,8 @@ var CIDToUnicodeMaps = { 174, 0, 0, {f: 2, c: 178}, 181, 185, {f: 3, c: 188}, {f: 6, c: 192}, {f: 16, c: 199}, 0, {f: 6, c: 217}, {f: 6, c: 224}, {f: 16, c: 231}, 0, {f: 7, c: 249}, 352, 376, 381, [773, 8254], 353, 8482, 382, 0, 8194, - {s: 91}, 65512, {s: 3}, {f: 63, c: 65377}, {s: 243}, [8195, 12288], + {f: 59, c: 33}, 165, {f: 31, c: 93}, 65512, {f: 2, c: 125}, 0, + {f: 63, c: 65377}, {s: 243}, [8195, 12288], {f: 2, c: 12289}, 65292, 65294, 12539, {f: 2, c: 65306}, 65311, 65281, {f: 2, c: 12443}, 180, 65344, 168, 65342, 65507, 65343, {f: 2, c: 12541}, {f: 2, c: 12445}, 12291, 20189, {f: 3, c: 12293}, 12540, 8213, 8208, 65295, @@ -780,9 +781,9 @@ var CIDToUnicodeMaps = { 37854, 37880, 37937, 37957, 37960, 38290, 0, 64041, 38557, 38575, 38707, 38715, 38723, 38733, 38735, [12205, 38737], 0, 38999, 39013, {f: 2, c: 64042}, 39207, 64044, 39326, 39502, 39641, 39644, 39797, 39794, - 39823, 39857, 39867, 39936, 40304, 40299, 64045, 40473, 40657, {s: 636}, - 8364, 8486, 0, 0, 64256, {f: 2, c: 64259}, 257, 299, 363, 275, 333, 256, - 298, 362, 274, 332, {f: 4, c: 8539}, {f: 2, c: 8531}, 8304, + 39823, 39857, 39867, 39936, 40304, 40299, 64045, 40473, 40657, 0, 92, + {s: 634}, 8364, 8486, 0, 0, 64256, {f: 2, c: 64259}, 257, 299, 363, 275, + 333, 256, 298, 362, 274, 332, {f: 4, c: 8539}, {f: 2, c: 8531}, 8304, {f: 6, c: 8308}, {f: 10, c: 8320}, 461, 282, 0, 7868, 463, 0, 296, 465, 0, 467, 366, 360, 462, 283, 0, 7869, 464, 0, 297, 466, 0, 468, 367, 361, 593, 8049, 8048, 509, 0, 596, 0, 0, 601, 0, 0, 602, 0, 0, 603, 8051, 8050, 0, diff --git a/src/fonts.js b/src/fonts.js index 215105b78..99605dbc9 100644 --- a/src/fonts.js +++ b/src/fonts.js @@ -413,6 +413,19 @@ var CMapConverterList = { '90msp-RKSJ-V': sjisToUnicode }; +// CMaps using Hankaku (Halfwidth) Latin glyphs instead of proportional one. +// We need to distinguish them to get correct widths from CIDFont dicts. +var HalfwidthCMaps = { + 'H': true, + 'V': true, + 'EUC-H': true, + 'EUC-V': true, + '90ms-RKSJ-H': true, + '90ms-RKSJ-V': true, + 'UniJIS-UCS2-HW-H': true, + 'UniJIS-UCS2-HW-V': true +}; + var decodeBytes; if (typeof TextDecoder !== 'undefined') { decodeBytes = function(bytes, encoding) { @@ -4141,14 +4154,18 @@ var Font = (function FontClosure() { if (!cidToUnicode) return; // identity encoding + var cidEncoding = properties.cidEncoding; + var overwrite = HalfwidthCMaps[cidEncoding]; var cid = 1, i, j, k, ii; for (i = 0, ii = cidToUnicode.length; i < ii; ++i) { var unicode = cidToUnicode[i]; if (isArray(unicode)) { var length = unicode.length; for (j = 0; j < length; j++) { - cidToUnicodeMap[cid] = unicode[j]; - unicodeToCIDMap[unicode[j]] = cid; + cidToUnicodeMap[cid] = k = unicode[j]; + if (!unicodeToCIDMap[k] || overwrite) { + unicodeToCIDMap[k] = cid; + } } cid++; } else if (typeof unicode === 'object') { @@ -4157,7 +4174,9 @@ var Font = (function FontClosure() { k = unicode.c; for (j = 0; j < fillLength; ++j) { cidToUnicodeMap[cid] = k; - unicodeToCIDMap[k] = cid; + if (!unicodeToCIDMap[k] || overwrite) { + unicodeToCIDMap[k] = cid; + } cid++; k++; } @@ -4165,13 +4184,14 @@ var Font = (function FontClosure() { cid += unicode.s; } else if (unicode) { cidToUnicodeMap[cid] = unicode; - unicodeToCIDMap[unicode] = cid; + if (!unicodeToCIDMap[unicode] || overwrite) { + unicodeToCIDMap[unicode] = cid; + } cid++; } else cid++; } - var cidEncoding = properties.cidEncoding; if (!cidEncoding) { return; } diff --git a/test/pdfs/noembed-identity-2.pdf b/test/pdfs/noembed-identity-2.pdf index 5bc89bea6236d943f8ac899a397c4618a4018f1f..5692a262ad195b4e77ba337c9d08cfe1a5a71cfd 100644 GIT binary patch delta 87 zcmX>t@K|8OVPk4VBlsB#1=qoIa!GPf|#YT jf&mC9