Convert the PartialEvaluator.readToUnicode
method to be async
This commit is contained in:
parent
f5c01188dc
commit
f21a30dfb4
@ -3765,70 +3765,70 @@ class PartialEvaluator {
|
|||||||
return new IdentityToUnicodeMap(properties.firstChar, properties.lastChar);
|
return new IdentityToUnicodeMap(properties.firstChar, properties.lastChar);
|
||||||
}
|
}
|
||||||
|
|
||||||
readToUnicode(cmapObj) {
|
async readToUnicode(cmapObj) {
|
||||||
if (!cmapObj) {
|
if (!cmapObj) {
|
||||||
return Promise.resolve(null);
|
return null;
|
||||||
}
|
}
|
||||||
if (cmapObj instanceof Name) {
|
if (cmapObj instanceof Name) {
|
||||||
return CMapFactory.create({
|
const cmap = await CMapFactory.create({
|
||||||
encoding: cmapObj,
|
encoding: cmapObj,
|
||||||
fetchBuiltInCMap: this._fetchBuiltInCMapBound,
|
fetchBuiltInCMap: this._fetchBuiltInCMapBound,
|
||||||
useCMap: null,
|
useCMap: null,
|
||||||
}).then(function (cmap) {
|
});
|
||||||
|
|
||||||
|
if (cmap instanceof IdentityCMap) {
|
||||||
|
return new IdentityToUnicodeMap(0, 0xffff);
|
||||||
|
}
|
||||||
|
return new ToUnicodeMap(cmap.getMap());
|
||||||
|
}
|
||||||
|
if (cmapObj instanceof BaseStream) {
|
||||||
|
try {
|
||||||
|
const cmap = await CMapFactory.create({
|
||||||
|
encoding: cmapObj,
|
||||||
|
fetchBuiltInCMap: this._fetchBuiltInCMapBound,
|
||||||
|
useCMap: null,
|
||||||
|
});
|
||||||
|
|
||||||
if (cmap instanceof IdentityCMap) {
|
if (cmap instanceof IdentityCMap) {
|
||||||
return new IdentityToUnicodeMap(0, 0xffff);
|
return new IdentityToUnicodeMap(0, 0xffff);
|
||||||
}
|
}
|
||||||
return new ToUnicodeMap(cmap.getMap());
|
const map = new Array(cmap.length);
|
||||||
});
|
// Convert UTF-16BE
|
||||||
} else if (cmapObj instanceof BaseStream) {
|
// NOTE: cmap can be a sparse array, so use forEach instead of
|
||||||
return CMapFactory.create({
|
// `for(;;)` to iterate over all keys.
|
||||||
encoding: cmapObj,
|
cmap.forEach(function (charCode, token) {
|
||||||
fetchBuiltInCMap: this._fetchBuiltInCMapBound,
|
// Some cmaps contain *only* CID characters (fixes issue9367.pdf).
|
||||||
useCMap: null,
|
if (typeof token === "number") {
|
||||||
}).then(
|
map[charCode] = String.fromCodePoint(token);
|
||||||
function (cmap) {
|
return;
|
||||||
if (cmap instanceof IdentityCMap) {
|
|
||||||
return new IdentityToUnicodeMap(0, 0xffff);
|
|
||||||
}
|
}
|
||||||
const map = new Array(cmap.length);
|
const str = [];
|
||||||
// Convert UTF-16BE
|
for (let k = 0; k < token.length; k += 2) {
|
||||||
// NOTE: cmap can be a sparse array, so use forEach instead of
|
const w1 = (token.charCodeAt(k) << 8) | token.charCodeAt(k + 1);
|
||||||
// `for(;;)` to iterate over all keys.
|
if ((w1 & 0xf800) !== 0xd800) {
|
||||||
cmap.forEach(function (charCode, token) {
|
// w1 < 0xD800 || w1 > 0xDFFF
|
||||||
// Some cmaps contain *only* CID characters (fixes issue9367.pdf).
|
str.push(w1);
|
||||||
if (typeof token === "number") {
|
continue;
|
||||||
map[charCode] = String.fromCodePoint(token);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
const str = [];
|
k += 2;
|
||||||
for (let k = 0; k < token.length; k += 2) {
|
const w2 = (token.charCodeAt(k) << 8) | token.charCodeAt(k + 1);
|
||||||
const w1 = (token.charCodeAt(k) << 8) | token.charCodeAt(k + 1);
|
str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000);
|
||||||
if ((w1 & 0xf800) !== 0xd800) {
|
|
||||||
// w1 < 0xD800 || w1 > 0xDFFF
|
|
||||||
str.push(w1);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
k += 2;
|
|
||||||
const w2 = (token.charCodeAt(k) << 8) | token.charCodeAt(k + 1);
|
|
||||||
str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000);
|
|
||||||
}
|
|
||||||
map[charCode] = String.fromCodePoint(...str);
|
|
||||||
});
|
|
||||||
return new ToUnicodeMap(map);
|
|
||||||
},
|
|
||||||
reason => {
|
|
||||||
if (reason instanceof AbortException) {
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
if (this.options.ignoreErrors) {
|
map[charCode] = String.fromCodePoint(...str);
|
||||||
warn(`readToUnicode - ignoring ToUnicode data: "${reason}".`);
|
});
|
||||||
return null;
|
return new ToUnicodeMap(map);
|
||||||
}
|
} catch (reason) {
|
||||||
throw reason;
|
if (reason instanceof AbortException) {
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
);
|
if (this.options.ignoreErrors) {
|
||||||
|
warn(`readToUnicode - ignoring ToUnicode data: "${reason}".`);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
throw reason;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return Promise.resolve(null);
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
readCidToGidMap(glyphsData, toUnicode) {
|
readCidToGidMap(glyphsData, toUnicode) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user