Merge pull request #4596 from brendandahl/seac-regression

Fix seac regression.
This commit is contained in:
Yury Delendik 2014-04-11 13:43:12 -05:00
commit 36f1a1019d
4 changed files with 43 additions and 11 deletions

View File

@ -2471,7 +2471,8 @@ var Font = (function FontClosure() {
} }
return { return {
toFontChar: toFontChar, toFontChar: toFontChar,
charCodeToGlyphId: newMap charCodeToGlyphId: newMap,
nextAvailableFontCharCode: nextAvailableFontCharCode
}; };
} }
@ -4046,18 +4047,25 @@ var Font = (function FontClosure() {
this.toFontChar = newMapping.toFontChar; this.toFontChar = newMapping.toFontChar;
var numGlyphs = font.numGlyphs; var numGlyphs = font.numGlyphs;
function getCharCode(charCodeToGlyphId, glyphId, addMap) {
for (var charCode in charCodeToGlyphId) {
if (glyphId === charCodeToGlyphId[charCode]) {
return charCode | 0;
}
}
if (addMap) {
newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] =
glyphId;
return newMapping.nextAvailableFontCharCode++;
}
return null;
}
var seacs = font.seacs; var seacs = font.seacs;
var charCode;
if (SEAC_ANALYSIS_ENABLED && seacs && seacs.length) { if (SEAC_ANALYSIS_ENABLED && seacs && seacs.length) {
var matrix = properties.fontMatrix || FONT_IDENTITY_MATRIX; var matrix = properties.fontMatrix || FONT_IDENTITY_MATRIX;
var charset = font.getCharset(); var charset = font.getCharset();
var charCodeToGlyphId = mapping;
var toFontChar = newMapping.toFontChar;
var seacMap = Object.create(null); var seacMap = Object.create(null);
var glyphIdToCharCode = Object.create(null);
for (charCode in charCodeToGlyphId) {
glyphIdToCharCode[charCodeToGlyphId[charCode]] = charCode | 0;
}
for (var glyphId in seacs) { for (var glyphId in seacs) {
glyphId |= 0; glyphId |= 0;
var seac = seacs[glyphId]; var seac = seacs[glyphId];
@ -4072,10 +4080,23 @@ var Font = (function FontClosure() {
x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4], x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4],
y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5] y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5]
}; };
charCode = glyphIdToCharCode[glyphId];
var charCode = getCharCode(mapping, glyphId);
if (charCode === null) {
// There's no point in mapping it if the char code was never mapped
// to begin with.
continue;
}
// Find a fontCharCode that maps to the base and accent glyphs. If one
// doesn't exists, create it.
var charCodeToGlyphId = newMapping.charCodeToGlyphId;
var baseFontCharCode = getCharCode(charCodeToGlyphId, baseGlyphId,
true);
var accentFontCharCode = getCharCode(charCodeToGlyphId, accentGlyphId,
true);
seacMap[charCode] = { seacMap[charCode] = {
baseFontCharCode: toFontChar[glyphIdToCharCode[baseGlyphId]], baseFontCharCode: baseFontCharCode,
accentFontCharCode: toFontChar[glyphIdToCharCode[accentGlyphId]], accentFontCharCode: accentFontCharCode,
accentOffset: accentOffset accentOffset: accentOffset
}; };
} }

View File

@ -71,3 +71,4 @@
!bug859204.pdf !bug859204.pdf
!issue4246.pdf !issue4246.pdf
!issue4461.pdf !issue4461.pdf
!issue4573.pdf

BIN
test/pdfs/issue4573.pdf Normal file

Binary file not shown.

View File

@ -665,6 +665,16 @@
"rounds": 1, "rounds": 1,
"type": "eq" "type": "eq"
}, },
{ "id": "issue4573",
"file": "pdfs/issue4573.pdf",
"md5": "34b0c4fdee19e57033275b766c5f57a3",
"rounds": 1,
"link": false,
"firstPage": 1,
"lastPage": 1,
"type": "eq",
"about": "Seac with differences array that messes up mapping."
},
{ "id": "ocs", { "id": "ocs",
"file": "pdfs/ocs.pdf", "file": "pdfs/ocs.pdf",
"md5": "2ade57e954ae7632749cf328daeaa7a8", "md5": "2ade57e954ae7632749cf328daeaa7a8",