|
@@ -22,8 +22,8 @@ if (typeof PDFJS === 'undefined') {
|
|
|
(typeof window !== 'undefined' ? window : this).PDFJS = {};
|
|
|
}
|
|
|
|
|
|
-PDFJS.version = '1.0.584';
|
|
|
-PDFJS.build = '2b87ff9';
|
|
|
+PDFJS.version = '1.0.587';
|
|
|
+PDFJS.build = 'fa53fcb';
|
|
|
|
|
|
(function pdfjsWrapper() {
|
|
|
// Use strict in our context only - users might not want it
|
|
@@ -22616,6 +22616,7 @@ var Font = (function FontClosure() {
|
|
|
if (!properties.composite /* is simple font */) {
|
|
|
toUnicode = [];
|
|
|
var encoding = properties.defaultEncoding.slice();
|
|
|
+ var baseEncodingName = properties.baseEncodingName;
|
|
|
// Merge in the differences array.
|
|
|
var differences = properties.differences;
|
|
|
for (charcode in differences) {
|
|
@@ -22626,26 +22627,43 @@ 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
|
|
|
+ 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) {
|
|
|
+ // If |baseEncodingName| is one the predefined encodings,
|
|
|
+ // and |code| equals |charcode|, using the glyph defined in the
|
|
|
+ // baseEncoding seems to yield a better |toUnicode| mapping
|
|
|
+ // (fixes issue 5070).
|
|
|
+ if (baseEncodingName && code === +charcode) {
|
|
|
+ var baseEncoding = Encodings[baseEncodingName];
|
|
|
+ if (baseEncoding && (glyphName = baseEncoding[charcode])) {
|
|
|
+ toUnicode[charcode] =
|
|
|
+ String.fromCharCode(GlyphsUnicode[glyphName]);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
toUnicode[charcode] = String.fromCharCode(code);
|
|
|
}
|
|
|
continue;
|