Use post table when Encoding has only Differences

Fixes #13107
In the issue, some TrueType glyph names have the format `uniXXXX`.
Font's `Encoding` dictionary has the entry `Differences` but no
`BaseEncoding`. `uniXXXX` names are converted to glyph indices
using font's `post` table but currently that is done only when
`BaseEncoding` exists. We must enable the conversion also when only
`Differences` exists.
This commit is contained in:
Jani Pehkonen 2021-03-31 16:32:30 +03:00
parent 84d7cccb1d
commit 0117ee5071
4 changed files with 21 additions and 7 deletions

View File

@ -2901,14 +2901,21 @@ var Font = (function FontClosure() {
}
// Last, try to map any missing charcodes using the post table.
if (properties.glyphNames && baseEncoding.length) {
if (
properties.glyphNames &&
(baseEncoding.length || this.differences.length)
) {
for (let i = 0; i < 256; ++i) {
if (charCodeToGlyphId[i] === undefined && baseEncoding[i]) {
glyphName = baseEncoding[i];
const glyphId = properties.glyphNames.indexOf(glyphName);
if (glyphId > 0 && hasGlyph(glyphId)) {
charCodeToGlyphId[i] = glyphId;
}
if (charCodeToGlyphId[i] !== undefined) {
continue;
}
glyphName = this.differences[i] || baseEncoding[i];
if (!glyphName) {
continue;
}
const glyphId = properties.glyphNames.indexOf(glyphName);
if (glyphId > 0 && hasGlyph(glyphId)) {
charCodeToGlyphId[i] = glyphId;
}
}
}

View File

@ -158,6 +158,7 @@
!issue6019.pdf
!issue6621.pdf
!issue6286.pdf
!issue13107_reduced.pdf
!issue1055r.pdf
!issue11713.pdf
!issue1293r.pdf

Binary file not shown.

View File

@ -595,6 +595,12 @@
"link": false,
"type": "eq"
},
{ "id": "issue13107",
"file": "pdfs/issue13107_reduced.pdf",
"md5": "13c8d12223dec2752d3c90d250db32b7",
"rounds": 1,
"type": "eq"
},
{ "id": "bug1186827",
"file": "pdfs/bug1186827.pdf",
"md5": "6c5526ae1a9d66cb517153001afc196e",