Moving CID-2 hack in fixWidths

This commit is contained in:
notmasteryet 2011-09-29 20:35:10 -05:00
parent cbfbd93e7a
commit cd63fce80b

View File

@ -1212,25 +1212,11 @@ var Font = (function Font() {
} }
var encoding = properties.encoding, i; var encoding = properties.encoding, i;
if (!encoding[0]) { for (i in encoding) {
// the font is directly characters to glyphs with no encoding if (encoding.hasOwnProperty(i)) {
// so create an identity encoding var unicode = encoding[i].unicode;
var widths = properties.widths; if (unicode <= 0x1f || (unicode >= 127 && unicode <= 255))
for (i = 0; i < numGlyphs; i++) { encoding[i].unicode = unicode += kCmapGlyphOffset;
var width = widths[i];
encoding[i] = {
unicode: i <= 0x1f || (i >= 127 && i <= 255) ?
i + kCmapGlyphOffset : i,
width: isNum(width) ? width : properties.defaultWidth
};
}
} else {
for (i in encoding) {
if (encoding.hasOwnProperty(i)) {
var unicode = encoding[i].unicode;
if (unicode <= 0x1f || (unicode >= 127 && unicode <= 255))
encoding[i].unicode = unicode += kCmapGlyphOffset;
}
} }
} }
@ -1407,6 +1393,10 @@ var Font = (function Font() {
}, },
fixWidths: function font_fixWidths(properties) { fixWidths: function font_fixWidths(properties) {
if (properties.type !== 'CIDFontType0' &&
properties.type !== 'CIDFontType2')
return;
var encoding = properties.encoding; var encoding = properties.encoding;
if (encoding[0]) if (encoding[0])
return; return;
@ -1414,30 +1404,48 @@ var Font = (function Font() {
if (!glyphsWidths) if (!glyphsWidths)
return; return;
var defaultWidth = properties.defaultWidth;
var cidSystemInfo = properties.cidSystemInfo; var cidSystemInfo = properties.cidSystemInfo;
var cidToUnicode; var cidToUnicode;
if (cidSystemInfo) { if (cidSystemInfo) {
cidToUnicode = CIDToUnicodeMaps[cidSystemInfo.registry + cidToUnicode = CIDToUnicodeMaps[
'-' + cidSystemInfo.ordering]; cidSystemInfo.registry + '-' + cidSystemInfo.ordering];
} }
if (!cidToUnicode) if (!cidToUnicode) {
// the font is directly characters to glyphs with no encoding
// so create an identity encoding
for (i = 0; i < 0xD800; i++) {
var width = glyphsWidths[i];
encoding[i] = {
unicode: i,
width: isNum(width) ? width : defaultWidth
};
}
// skipping surrogates + 256-user defined
for (i = 0xE100; i <= 0xFFFF; i++) {
var width = glyphsWidths[i];
encoding[i] = {
unicode: i,
width: isNum(width) ? width : defaultWidth
};
}
return; return;
}
encoding[0] = { unicode: 0, width: 0 }; encoding[0] = { unicode: 0, width: 0 };
var glyph = 1, i, j, k; var glyph = 1, i, j, k;
for (i = 0; i < cidToUnicode.length; ++i) { for (i = 0; i < cidToUnicode.length; ++i) {
var unicode = cidToUnicode[i]; var unicode = cidToUnicode[i];
var width;
if (isArray(unicode)) { if (isArray(unicode)) {
if (glyph in glyphsWidths) { var length = unicode.length;
var length = unicode.length; width = glyphsWidths[glyph];
for (j = 0; j < length; j++) { for (j = 0; j < length; j++) {
k = unicode[j]; k = unicode[j];
encoding[k] = { encoding[k] = {
unicode: k <= 0x1f || (k >= 127 && k <= 255) ? unicode: k,
k + kCmapGlyphOffset : k, width: isNum(width) ? width : defaultWidth
width: glyphsWidths[glyph] };
};
}
} }
glyph++; glyph++;
} else if (typeof unicode === 'object') { } else if (typeof unicode === 'object') {
@ -1445,24 +1453,20 @@ var Font = (function Font() {
if (fillLength) { if (fillLength) {
k = unicode.c; k = unicode.c;
for (j = 0; j < fillLength; ++j) { for (j = 0; j < fillLength; ++j) {
if (!(glyph in glyphsWidths)) width = glyphsWidths[glyph++];
continue;
encoding[k] = { encoding[k] = {
unicode: k <= 0x1f || (k >= 127 && k <= 255) ? unicode: k,
k + kCmapGlyphOffset : k, width: isNum(width) ? width : defaultWidth
width: glyphsWidths[glyph]
}; };
k++; k++;
glyph++;
} }
} else } else
glyph += unicode.s; glyph += unicode.s;
} else if (unicode && (glyph in glyphsWidths)) { } else if (unicode) {
k = unicode; width = glyphsWidths[glyph++];
encoding[k] = { encoding[unicode] = {
unicode: k <= 0x1f || (k >= 127 && k <= 255) ? unicode: unicode,
k + kCmapGlyphOffset : k, width: isNum(width) ? width : defaultWidth
width: glyphsWidths[glyph++]
}; };
} else } else
glyph++; glyph++;