From bc6b47a50e7932c1c8a36e03fa1da346c8dd29f4 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Thu, 15 Oct 2020 09:30:54 +0200 Subject: [PATCH] Convert `PartialEvaluator.translateFont` to an `async` method This allows us to make a slight simplification in `PartialEvaluator.loadFont`, which thus removes an old TODO-comment from the method. Furthermore, in `PartialEvaluator.translateFont`, the CMap-handling is now limited to only *composite* fonts to avoid having to wait for a "dummy"-Promise for most fonts. --- src/core/evaluator.js | 34 ++++++++++------------------------ 1 file changed, 10 insertions(+), 24 deletions(-) diff --git a/src/core/evaluator.js b/src/core/evaluator.js index f5a7f3687..f89be8141 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -1111,15 +1111,7 @@ class PartialEvaluator { font.translated = fontCapability.promise; - // TODO move promises into translate font - var translatedPromise; - try { - translatedPromise = this.translateFont(preEvaluatedFont); - } catch (e) { - translatedPromise = Promise.reject(e); - } - - translatedPromise + this.translateFont(preEvaluatedFont) .then(translatedFont => { if (translatedFont.fontType !== undefined) { var xrefFontStats = xref.stats.fontTypes; @@ -3320,7 +3312,7 @@ class PartialEvaluator { }; } - translateFont(preEvaluatedFont) { + async translateFont(preEvaluatedFont) { var baseDict = preEvaluatedFont.baseDict; var dict = preEvaluatedFont.dict; var composite = preEvaluatedFont.composite; @@ -3465,36 +3457,30 @@ class PartialEvaluator { isType3Font: false, }; - var cMapPromise; if (composite) { - var cidEncoding = baseDict.get("Encoding"); + const cidEncoding = baseDict.get("Encoding"); if (isName(cidEncoding)) { properties.cidEncoding = cidEncoding.name; } - cMapPromise = CMapFactory.create({ + const cMap = await CMapFactory.create({ encoding: cidEncoding, fetchBuiltInCMap: this._fetchBuiltInCMapBound, useCMap: null, - }).then(function (cMap) { - properties.cMap = cMap; - properties.vertical = properties.cMap.vertical; }); - } else { - cMapPromise = Promise.resolve(undefined); + properties.cMap = cMap; + properties.vertical = properties.cMap.vertical; } - return cMapPromise - .then(() => { - return this.extractDataStructures(dict, baseDict, properties); - }) - .then(newProperties => { + return this.extractDataStructures(dict, baseDict, properties).then( + newProperties => { this.extractWidths(dict, descriptor, newProperties); if (type === "Type3") { newProperties.isType3Font = true; } return new Font(fontName.name, fontFile, newProperties); - }); + } + ); } static buildFontPaths(font, glyphs, handler) {