-
Notifications
You must be signed in to change notification settings - Fork 10.3k
Enable the ESLint no-var
rule in a few font-parsing files, and convert src/core/type1_parser.js
to use "standard" classes
#13084
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Note that the majority of these changes were done automatically, by using `gulp lint --fix`, and the manual changes were limited to the following diff: ```diff diff --git a/src/core/font_renderer.js b/src/core/font_renderer.js index e1538c4..00f5424 100644 --- a/src/core/font_renderer.js +++ b/src/core/font_renderer.js @@ -152,9 +152,9 @@ const FontRendererFactory = (function FontRendererFactoryClosure() { } function lookupCmap(ranges, unicode) { - let code = unicode.codePointAt(0), - gid = 0; - let l = 0, + const code = unicode.codePointAt(0); + let gid = 0, + l = 0, r = ranges.length - 1; while (l < r) { const c = (l + r + 1) >> 1; @@ -199,7 +199,7 @@ const FontRendererFactory = (function FontRendererFactoryClosure() { flags = (code[i] << 8) | code[i + 1]; const glyphIndex = (code[i + 2] << 8) | code[i + 3]; i += 4; - var arg1, arg2; + let arg1, arg2; if (flags & 0x01) { arg1 = ((code[i] << 24) | (code[i + 1] << 16)) >> 16; arg2 = ((code[i + 2] << 24) | (code[i + 3] << 16)) >> 16; @@ -366,7 +366,7 @@ const FontRendererFactory = (function FontRendererFactoryClosure() { while (i < code.length) { let stackClean = false; let v = code[i++]; - var xa, xb, ya, yb, y1, y2, y3, n, subrCode; + let xa, xb, ya, yb, y1, y2, y3, n, subrCode; switch (v) { case 1: // hstem stems += stack.length >> 1; @@ -494,7 +494,7 @@ const FontRendererFactory = (function FontRendererFactoryClosure() { bezierCurveTo(xa, y2, xb, y3, x, y); break; case 37: // flex1 - var x0 = x, + const x0 = x, y0 = y; xa = x + stack.shift(); ya = y + stack.shift(); ```
Note that the majority of these changes were done automatically, by using `gulp lint --fix`, and the manual changes were limited to the following diff: ```diff diff --git a/src/core/cff_parser.js b/src/core/cff_parser.js index d684c200e..2e2b811 100644 --- a/src/core/cff_parser.js +++ b/src/core/cff_parser.js @@ -555,7 +555,7 @@ const CFFParser = (function CFFParserClosure() { stackSize %= 2; validationCommand = CharstringValidationData[value]; } else if (value === 10 || value === 29) { - var subrsIndex; + let subrsIndex; if (value === 10) { subrsIndex = localSubrIndex; } else { @@ -886,15 +886,15 @@ const CFFParser = (function CFFParserClosure() { format = bytes[pos++]; switch (format & 0x7f) { case 0: - var glyphsCount = bytes[pos++]; + const glyphsCount = bytes[pos++]; for (i = 1; i <= glyphsCount; i++) { encoding[bytes[pos++]] = i; } break; case 1: - var rangesCount = bytes[pos++]; - var gid = 1; + const rangesCount = bytes[pos++]; + let gid = 1; for (i = 0; i < rangesCount; i++) { const start = bytes[pos++]; const left = bytes[pos++]; @@ -938,7 +938,7 @@ const CFFParser = (function CFFParserClosure() { } break; case 3: - var rangesCount = (bytes[pos++] << 8) | bytes[pos++]; + const rangesCount = (bytes[pos++] << 8) | bytes[pos++]; for (i = 0; i < rangesCount; ++i) { let first = (bytes[pos++] << 8) | bytes[pos++]; if (i === 0 && first !== 0) { @@ -1173,7 +1173,7 @@ class CFFDict { } } -var CFFTopDict = (function CFFTopDictClosure() { +const CFFTopDict = (function CFFTopDictClosure() { const layout = [ [[12, 30], "ROS", ["sid", "sid", "num"], null], [[12, 20], "SyntheticBase", "num", null], @@ -1229,7 +1229,7 @@ var CFFTopDict = (function CFFTopDictClosure() { return CFFTopDict; })(); -var CFFPrivateDict = (function CFFPrivateDictClosure() { +const CFFPrivateDict = (function CFFPrivateDictClosure() { const layout = [ [6, "BlueValues", "delta", null], [7, "OtherBlues", "delta", null], @@ -1265,11 +1265,12 @@ var CFFPrivateDict = (function CFFPrivateDictClosure() { return CFFPrivateDict; })(); -var CFFCharsetPredefinedTypes = { +const CFFCharsetPredefinedTypes = { ISO_ADOBE: 0, EXPERT: 1, EXPERT_SUBSET: 2, }; + class CFFCharset { constructor(predefined, format, charset, raw) { this.predefined = predefined; @@ -1695,7 +1696,7 @@ class CFFCompiler { // For offsets we just insert a 32bit integer so we don't have to // deal with figuring out the length of the offset when it gets // replaced later on by the compiler. - var name = dict.keyToNameMap[key]; + const name = dict.keyToNameMap[key]; // Some offsets have the offset and the length, so just record the // position of the first one. if (!offsetTracker.isTracking(name)) { ```
Note that the majority of these changes were done automatically, by using `gulp lint --fix`, and the manual changes were limited to the following diff: ```diff diff --git a/src/core/type1_parser.js b/src/core/type1_parser.js index 192781de1..05c5fe2 100644 --- a/src/core/type1_parser.js +++ b/src/core/type1_parser.js @@ -251,7 +251,7 @@ const Type1CharString = (function Type1CharStringClosure() { // vhea tables reconstruction -- ignoring it. this.stack.pop(); // wy wx = this.stack.pop(); - var sby = this.stack.pop(); + const sby = this.stack.pop(); sbx = this.stack.pop(); this.lsb = sbx; this.width = wx; @@ -263,8 +263,8 @@ const Type1CharString = (function Type1CharStringClosure() { error = true; break; } - var num2 = this.stack.pop(); - var num1 = this.stack.pop(); + const num2 = this.stack.pop(); + const num1 = this.stack.pop(); this.stack.push(num1 / num2); break; case (12 << 8) + 16: // callothersubr @@ -273,7 +273,7 @@ const Type1CharString = (function Type1CharStringClosure() { break; } subrNumber = this.stack.pop(); - var numArgs = this.stack.pop(); + const numArgs = this.stack.pop(); if (subrNumber === 0 && numArgs === 3) { const flexArgs = this.stack.splice(this.stack.length - 17, 17); this.stack.push( @@ -397,9 +397,9 @@ const Type1Parser = (function Type1ParserClosure() { if (discardNumber >= data.length) { return new Uint8Array(0); } + const c1 = 52845, + c2 = 22719; let r = key | 0, - c1 = 52845, - c2 = 22719, i, j; for (i = 0; i < discardNumber; i++) { @@ -416,9 +416,9 @@ const Type1Parser = (function Type1ParserClosure() { } function decryptAscii(data, key, discardNumber) { - let r = key | 0, - c1 = 52845, + const c1 = 52845, c2 = 22719; + let r = key | 0; const count = data.length, maybeLength = count >>> 1; const decrypted = new Uint8Array(maybeLength); @@ -429,7 +429,7 @@ const Type1Parser = (function Type1ParserClosure() { continue; } i++; - var digit2; + let digit2; while (i < count && !isHexDigit((digit2 = data[i]))) { i++; } @@ -599,7 +599,7 @@ const Type1Parser = (function Type1ParserClosure() { if (token !== "/") { continue; } - var glyph = this.getToken(); + const glyph = this.getToken(); length = this.readInt(); this.getToken(); // read in 'RD' or '-|' data = length > 0 ? stream.getBytes(length) : new Uint8Array(0); @@ -638,7 +638,7 @@ const Type1Parser = (function Type1ParserClosure() { case "OtherBlues": case "FamilyBlues": case "FamilyOtherBlues": - var blueArray = this.readNumberArray(); + const blueArray = this.readNumberArray(); // *Blue* values may contain invalid data: disables reading of // those values when hinting is disabled. if ( @@ -672,7 +672,7 @@ const Type1Parser = (function Type1ParserClosure() { } for (let i = 0; i < charstrings.length; i++) { - glyph = charstrings[i].glyph; + const glyph = charstrings[i].glyph; encoded = charstrings[i].encoded; const charString = new Type1CharString(); const error = charString.convert( @@ -728,12 +728,12 @@ const Type1Parser = (function Type1ParserClosure() { token = this.getToken(); switch (token) { case "FontMatrix": - var matrix = this.readNumberArray(); + const matrix = this.readNumberArray(); properties.fontMatrix = matrix; break; case "Encoding": - var encodingArg = this.getToken(); - var encoding; + const encodingArg = this.getToken(); + let encoding; if (!/^\d+$/.test(encodingArg)) { // encoding name is specified encoding = getEncoding(encodingArg); @@ -764,7 +764,7 @@ const Type1Parser = (function Type1ParserClosure() { properties.builtInEncoding = encoding; break; case "FontBBox": - var fontBBox = this.readNumberArray(); + const fontBBox = this.readNumberArray(); // adjusting ascent/descent properties.ascent = Math.max(fontBBox[3], fontBBox[1]); properties.descent = Math.min(fontBBox[1], fontBBox[3]); ```
All of this code predates the existence of native JS classes, however we can now clean this up a little bit.
/botio test |
From: Bot.io (Windows)ReceivedCommand cmd_test from @Snuffleupagus received. Current queue size: 0 Live output at: http://3.101.106.178:8877/fc79867f99b58cd/output.txt |
From: Bot.io (Linux m4)ReceivedCommand cmd_test from @Snuffleupagus received. Current queue size: 0 Live output at: http://54.67.70.0:8877/3ce96ea004578f9/output.txt |
From: Bot.io (Linux m4)FailedFull output at http://54.67.70.0:8877/3ce96ea004578f9/output.txt Total script time: 24.48 mins
Image differences available at: http://54.67.70.0:8877/3ce96ea004578f9/reftest-analyzer.html#web=eq.log |
From: Bot.io (Windows)FailedFull output at http://3.101.106.178:8877/fc79867f99b58cd/output.txt Total script time: 29.18 mins
Image differences available at: http://3.101.106.178:8877/fc79867f99b58cd/reftest-analyzer.html#web=eq.log |
Nice work! |
Please refer to the individual commit messages for additional details.