Fix seac regression.
This commit is contained in:
parent
c88696cf5f
commit
b242826d29
@ -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
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
1
test/pdfs/.gitignore
vendored
1
test/pdfs/.gitignore
vendored
@ -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
BIN
test/pdfs/issue4573.pdf
Normal file
Binary file not shown.
@ -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",
|
||||||
|
Loading…
Reference in New Issue
Block a user