From 0ef9b5aafc88094f19fec793c174c622e7e15542 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Thu, 6 May 2021 10:08:09 +0200 Subject: [PATCH] Fix the remaining `no-var` failures, which couldn't be handled automatically, in the `src/core/evaluator.js` file The only *slight* complication here were some of the `switch`-cases, in `getOperatorList`/`getTextContent`, where the parsing is done asynchronously. However, those cases are easy to deal with by wrapping the code within its own block; please see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch#block-scope_variables_within_switch_statements --- src/core/evaluator.js | 98 +++++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 45 deletions(-) diff --git a/src/core/evaluator.js b/src/core/evaluator.js index 3a17b18f2..7f0827116 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -393,7 +393,8 @@ class PartialEvaluator { } else { bbox = null; } - let optionalContent = null; + let optionalContent = null, + groupOptions = null; if (dict.has("OC")) { optionalContent = await this.parseMarkedContentProps( dict.get("OC"), @@ -403,7 +404,7 @@ class PartialEvaluator { } const group = dict.get("Group"); if (group) { - var groupOptions = { + groupOptions = { matrix, bbox, smask, @@ -1004,8 +1005,8 @@ class PartialEvaluator { }); }; - let fontRef, - xref = this.xref; + const xref = this.xref; + let fontRef; if (font) { // Loading by ref. if (!isRef(font)) { @@ -1070,8 +1071,8 @@ class PartialEvaluator { } const { descriptor, hash } = preEvaluatedFont; - let fontRefIsRef = isRef(fontRef), - fontID; + const fontRefIsRef = isRef(fontRef); + let fontID; if (fontRefIsRef) { fontID = `f${fontRef.toString()}`; } @@ -1464,12 +1465,9 @@ class PartialEvaluator { }; task.ensureNotTerminated(); timeSlotManager.reset(); - let stop, - operation = {}, - i, - ii, - cs, - name; + + const operation = {}; + let stop, i, ii, cs; while (!(stop = timeSlotManager.check())) { // The arguments parsed by read() are used beyond this loop, so we // cannot reuse the same array on each iteration. Therefore we pass @@ -1483,9 +1481,9 @@ class PartialEvaluator { let fn = operation.fn; switch (fn | 0) { - case OPS.paintXObject: + case OPS.paintXObject: { // eagerly compile XForm objects - name = args[0].name; + const name = args[0].name; if (name) { const localImage = localImageCache.getByName(name); if (localImage) { @@ -1591,8 +1589,9 @@ class PartialEvaluator { }) ); return; - case OPS.setFont: - var fontSize = args[1]; + } + case OPS.setFont: { + const fontSize = args[1]; // eagerly collect all fonts next( self @@ -1611,14 +1610,15 @@ class PartialEvaluator { }) ); return; + } case OPS.beginText: parsingText = true; break; case OPS.endText: parsingText = false; break; - case OPS.endInlineImage: - var cacheKey = args[0].cacheKey; + case OPS.endInlineImage: { + const cacheKey = args[0].cacheKey; if (cacheKey) { const localImage = localImageCache.getByName(cacheKey); if (localImage) { @@ -1639,6 +1639,7 @@ class PartialEvaluator { }) ); return; + } case OPS.showText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); @@ -1651,10 +1652,10 @@ class PartialEvaluator { self.ensureStateFont(stateManager.state); continue; } - var arr = args[0]; - var combinedGlyphs = []; - var arrLength = arr.length; - var state = stateManager.state; + const arr = args[0], + arrLength = arr.length, + combinedGlyphs = [], + state = stateManager.state; for (i = 0; i < arrLength; ++i) { const arrItem = arr[i]; if (isString(arrItem)) { @@ -1826,18 +1827,18 @@ class PartialEvaluator { fn = OPS.setStrokeRGBColor; break; - case OPS.shadingFill: - var shadingRes = resources.get("Shading"); + case OPS.shadingFill: { + const shadingRes = resources.get("Shading"); if (!shadingRes) { throw new FormatError("No shading resource found"); } - var shading = shadingRes.get(args[0].name); + const shading = shadingRes.get(args[0].name); if (!shading) { throw new FormatError("No shading object found"); } - var shadingFill = Pattern.parseShading( + const shadingFill = Pattern.parseShading( shading, null, xref, @@ -1846,12 +1847,13 @@ class PartialEvaluator { self._pdfFunctionFactory, localColorSpaceCache ); - var patternIR = shadingFill.getIR(); + const patternIR = shadingFill.getIR(); args = [patternIR]; fn = OPS.shadingFill; break; - case OPS.setGState: - name = args[0].name; + } + case OPS.setGState: { + const name = args[0].name; if (name) { const localGStateObj = localGStateCache.getByName(name); if (localGStateObj) { @@ -1911,6 +1913,7 @@ class PartialEvaluator { }) ); return; + } case OPS.moveTo: case OPS.lineTo: case OPS.curveTo: @@ -2214,8 +2217,8 @@ class PartialEvaluator { // Replaces all whitespaces with standard spaces (0x20), to avoid // alignment issues between the textLayer and the canvas if the text // contains e.g. tabs (fixes issue6612.pdf). + const ii = str.length; let i = 0, - ii = str.length, code; while (i < ii && (code = str.charCodeAt(i)) >= 0x20 && code <= 0x7f) { i++; @@ -2548,8 +2551,9 @@ class PartialEvaluator { }; task.ensureNotTerminated(); timeSlotManager.reset(); + + const operation = {}; let stop, - operation = {}, args = []; while (!(stop = timeSlotManager.check())) { // The arguments parsed by read() are not used beyond this loop, so @@ -2565,9 +2569,9 @@ class PartialEvaluator { args = operation.args; switch (fn | 0) { - case OPS.setFont: + case OPS.setFont: { // Optimization to ignore multiple identical Tf commands. - var fontNameArg = args[0].name, + const fontNameArg = args[0].name, fontSizeArg = args[1]; if ( textState.font && @@ -2582,6 +2586,7 @@ class PartialEvaluator { textState.fontSize = fontSizeArg; next(handleSetFont(fontNameArg, null)); return; + } case OPS.setTextRise: flushTextContentItem(); textState.textRise = args[0]; @@ -2731,13 +2736,13 @@ class PartialEvaluator { isFirstChunk: true, }); break; - case OPS.paintXObject: + case OPS.paintXObject: { flushTextContentItem(); if (!xobjs) { xobjs = resources.get("XObject") || Dict.empty; } - var name = args[0].name; + const name = args[0].name; if (name && emptyXObjectCache.getByName(name)) { break; } @@ -2848,8 +2853,9 @@ class PartialEvaluator { }) ); return; - case OPS.setGState: - name = args[0].name; + } + case OPS.setGState: { + const name = args[0].name; if (name && emptyGStateCache.getByName(name)) { break; } @@ -2902,6 +2908,7 @@ class PartialEvaluator { }) ); return; + } case OPS.beginMarkedContent: if (includeMarkedContent) { textContent.items.push({ @@ -3557,8 +3564,9 @@ class PartialEvaluator { } const descriptor = dict.get("FontDescriptor"); + let hash; if (descriptor) { - var hash = new MurmurHash3_64(); + hash = new MurmurHash3_64(); const encoding = baseDict.getRaw("Encoding"); if (isName(encoding)) { hash.update(encoding.name); @@ -3732,7 +3740,7 @@ class PartialEvaluator { throw new FormatError("invalid font name"); } - let fontFile; + let fontFile, subtype, length1, length2, length3; try { fontFile = descriptor.get("FontFile", "FontFile2", "FontFile3"); } catch (ex) { @@ -3744,13 +3752,13 @@ class PartialEvaluator { } if (fontFile) { if (fontFile.dict) { - var subtype = fontFile.dict.get("Subtype"); - if (subtype) { - subtype = subtype.name; + const subtypeEntry = fontFile.dict.get("Subtype"); + if (subtypeEntry instanceof Name) { + subtype = subtypeEntry.name; } - var length1 = fontFile.dict.get("Length1"); - var length2 = fontFile.dict.get("Length2"); - var length3 = fontFile.dict.get("Length3"); + length1 = fontFile.dict.get("Length1"); + length2 = fontFile.dict.get("Length2"); + length3 = fontFile.dict.get("Length3"); } }