From 341d9ad53b4c0b03cfd4c3cfcc957a6afb772bb9 Mon Sep 17 00:00:00 2001 From: Michelle Tilley Date: Tue, 31 Mar 2026 19:04:38 -0700 Subject: [PATCH 1/2] Add TOML v1.1.0 support - \xHH escape sequence for codepoints up to U+00FF - \e escape sequence for ESC character (U+001B) - Newlines, comments, and trailing commas now allowed in inline tables - Seconds are optional in datetime and time values (e.g. 13:37, 1979-05-27T07:32Z) - Reject bare carriage returns in multiline strings (must be \r\n) - Switch spec test suite from v1.0.0 to v1.1.0 Spec compliance: 673/680 (99.0%) against toml-test v1.1.0 7 known failures are JS platform limitations (int64 precision, UTF-8 validation) --- lib/parser.js | 1201 +++++++++++++++++++++++++++------------------ src/toml.pegjs | 26 +- test/spec-test.js | 2 +- 3 files changed, 738 insertions(+), 491 deletions(-) diff --git a/lib/parser.js b/lib/parser.js index c3557da..864c3fb 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -175,35 +175,38 @@ function peg$parse(input, options) { const peg$c7 = "'''"; const peg$c8 = "'"; const peg$c9 = "\\"; - const peg$c10 = "\"\""; - const peg$c11 = "''"; - const peg$c12 = "inf"; - const peg$c13 = "nan"; - const peg$c14 = "0"; - const peg$c15 = "0x"; - const peg$c16 = "0o"; - const peg$c17 = "0b"; - const peg$c18 = "true"; - const peg$c19 = "false"; - const peg$c20 = ","; - const peg$c21 = "{"; - const peg$c22 = "}"; - const peg$c23 = "-"; - const peg$c24 = ":"; - const peg$c25 = "z"; - const peg$c26 = "t"; - const peg$c27 = " "; - const peg$c28 = "\n"; - const peg$c29 = "\r"; - const peg$c30 = "\\\""; - const peg$c31 = "\\\\"; - const peg$c32 = "\\b"; - const peg$c33 = "\\t"; - const peg$c34 = "\\n"; - const peg$c35 = "\\f"; - const peg$c36 = "\\r"; - const peg$c37 = "\\U"; - const peg$c38 = "\\u"; + const peg$c10 = "\r\n"; + const peg$c11 = "\"\""; + const peg$c12 = "''"; + const peg$c13 = "inf"; + const peg$c14 = "nan"; + const peg$c15 = "0"; + const peg$c16 = "0x"; + const peg$c17 = "0o"; + const peg$c18 = "0b"; + const peg$c19 = "true"; + const peg$c20 = "false"; + const peg$c21 = ","; + const peg$c22 = "{"; + const peg$c23 = "}"; + const peg$c24 = "-"; + const peg$c25 = ":"; + const peg$c26 = "z"; + const peg$c27 = "t"; + const peg$c28 = " "; + const peg$c29 = "\n"; + const peg$c30 = "\r"; + const peg$c31 = "\\\""; + const peg$c32 = "\\\\"; + const peg$c33 = "\\b"; + const peg$c34 = "\\t"; + const peg$c35 = "\\n"; + const peg$c36 = "\\f"; + const peg$c37 = "\\r"; + const peg$c38 = "\\e"; + const peg$c39 = "\\U"; + const peg$c40 = "\\u"; + const peg$c41 = "\\x"; const peg$r0 = /^[+\-]/; const peg$r1 = /^[eE]/; @@ -228,46 +231,49 @@ function peg$parse(input, options) { const peg$e8 = peg$literalExpectation("'''", false); const peg$e9 = peg$literalExpectation("'", false); const peg$e10 = peg$literalExpectation("\\", false); - const peg$e11 = peg$literalExpectation("\"\"", false); - const peg$e12 = peg$literalExpectation("''", false); - const peg$e13 = peg$classExpectation(["+", "-"], false, false, false); - const peg$e14 = peg$literalExpectation("inf", false); - const peg$e15 = peg$literalExpectation("nan", false); - const peg$e16 = peg$classExpectation(["e", "E"], false, false, false); - const peg$e17 = peg$literalExpectation("0", false); - const peg$e18 = peg$literalExpectation("0x", false); - const peg$e19 = peg$literalExpectation("0o", false); - const peg$e20 = peg$literalExpectation("0b", false); - const peg$e21 = peg$classExpectation([["0", "9"], "_"], false, false, false); - const peg$e22 = peg$classExpectation([["1", "9"]], false, false, false); - const peg$e23 = peg$classExpectation(["_"], false, false, false); - const peg$e24 = peg$classExpectation([["0", "9"]], false, false, false); - const peg$e25 = peg$classExpectation([["0", "9"], ["a", "f"], ["A", "F"]], false, false, false); - const peg$e26 = peg$classExpectation([["0", "7"]], false, false, false); - const peg$e27 = peg$classExpectation(["0", "1"], false, false, false); - const peg$e28 = peg$literalExpectation("true", false); - const peg$e29 = peg$literalExpectation("false", false); - const peg$e30 = peg$literalExpectation(",", false); - const peg$e31 = peg$literalExpectation("{", false); - const peg$e32 = peg$literalExpectation("}", false); - const peg$e33 = peg$literalExpectation("-", false); - const peg$e34 = peg$literalExpectation(":", false); - const peg$e35 = peg$literalExpectation("Z", true); - const peg$e36 = peg$literalExpectation("T", true); - const peg$e37 = peg$literalExpectation(" ", false); - const peg$e38 = peg$classExpectation([" ", "\t"], false, false, false); - const peg$e39 = peg$literalExpectation("\n", false); - const peg$e40 = peg$literalExpectation("\r", false); - const peg$e41 = peg$classExpectation([["A", "Z"], ["a", "z"], ["0", "9"], "_", "-"], false, false, false); - const peg$e42 = peg$literalExpectation("\\\"", false); - const peg$e43 = peg$literalExpectation("\\\\", false); - const peg$e44 = peg$literalExpectation("\\b", false); - const peg$e45 = peg$literalExpectation("\\t", false); - const peg$e46 = peg$literalExpectation("\\n", false); - const peg$e47 = peg$literalExpectation("\\f", false); - const peg$e48 = peg$literalExpectation("\\r", false); - const peg$e49 = peg$literalExpectation("\\U", false); - const peg$e50 = peg$literalExpectation("\\u", false); + const peg$e11 = peg$literalExpectation("\r\n", false); + const peg$e12 = peg$literalExpectation("\"\"", false); + const peg$e13 = peg$literalExpectation("''", false); + const peg$e14 = peg$classExpectation(["+", "-"], false, false, false); + const peg$e15 = peg$literalExpectation("inf", false); + const peg$e16 = peg$literalExpectation("nan", false); + const peg$e17 = peg$classExpectation(["e", "E"], false, false, false); + const peg$e18 = peg$literalExpectation("0", false); + const peg$e19 = peg$literalExpectation("0x", false); + const peg$e20 = peg$literalExpectation("0o", false); + const peg$e21 = peg$literalExpectation("0b", false); + const peg$e22 = peg$classExpectation([["0", "9"], "_"], false, false, false); + const peg$e23 = peg$classExpectation([["1", "9"]], false, false, false); + const peg$e24 = peg$classExpectation(["_"], false, false, false); + const peg$e25 = peg$classExpectation([["0", "9"]], false, false, false); + const peg$e26 = peg$classExpectation([["0", "9"], ["a", "f"], ["A", "F"]], false, false, false); + const peg$e27 = peg$classExpectation([["0", "7"]], false, false, false); + const peg$e28 = peg$classExpectation(["0", "1"], false, false, false); + const peg$e29 = peg$literalExpectation("true", false); + const peg$e30 = peg$literalExpectation("false", false); + const peg$e31 = peg$literalExpectation(",", false); + const peg$e32 = peg$literalExpectation("{", false); + const peg$e33 = peg$literalExpectation("}", false); + const peg$e34 = peg$literalExpectation("-", false); + const peg$e35 = peg$literalExpectation(":", false); + const peg$e36 = peg$literalExpectation("Z", true); + const peg$e37 = peg$literalExpectation("T", true); + const peg$e38 = peg$literalExpectation(" ", false); + const peg$e39 = peg$classExpectation([" ", "\t"], false, false, false); + const peg$e40 = peg$literalExpectation("\n", false); + const peg$e41 = peg$literalExpectation("\r", false); + const peg$e42 = peg$classExpectation([["A", "Z"], ["a", "z"], ["0", "9"], "_", "-"], false, false, false); + const peg$e43 = peg$literalExpectation("\\\"", false); + const peg$e44 = peg$literalExpectation("\\\\", false); + const peg$e45 = peg$literalExpectation("\\b", false); + const peg$e46 = peg$literalExpectation("\\t", false); + const peg$e47 = peg$literalExpectation("\\n", false); + const peg$e48 = peg$literalExpectation("\\f", false); + const peg$e49 = peg$literalExpectation("\\r", false); + const peg$e50 = peg$literalExpectation("\\e", false); + const peg$e51 = peg$literalExpectation("\\U", false); + const peg$e52 = peg$literalExpectation("\\u", false); + const peg$e53 = peg$literalExpectation("\\x", false); function peg$f0() { return nodes } function peg$f1(char) { if (isControlChar(char)) genError("Control characters are not allowed in comments", location().start.line, location().start.column); return char } @@ -293,80 +299,86 @@ function peg$parse(input, options) { return result + (tail || ''); } function peg$f19() { genError("Invalid escape sequence", location().start.line, location().start.column) } - function peg$f20(char) { if (isControlCharMultiline(char)) genError("Control characters are not allowed in strings", location().start.line, location().start.column); return char } - function peg$f21() { return '' } - function peg$f22() { return '""' } - function peg$f23() { return '"' } - function peg$f24() { return '""' } - function peg$f25() { return '"' } - function peg$f26(head, parts, tail) { + function peg$f20() { return "\n" } + function peg$f21(char) { if (isControlCharMultiline(char)) genError("Control characters are not allowed in strings", location().start.line, location().start.column); return char } + function peg$f22() { return '' } + function peg$f23() { return '""' } + function peg$f24() { return '"' } + function peg$f25() { return '""' } + function peg$f26() { return '"' } + function peg$f27(head, parts, tail) { var result = head.join(''); for (var i = 0; i < parts.length; i++) { result += parts[i][0] + parts[i][1].join(''); } return result + (tail || ''); } - function peg$f27(char) { if (isControlCharMultiline(char)) genError("Control characters are not allowed in strings", location().start.line, location().start.column); return char } - function peg$f28() { return "''" } - function peg$f29() { return "'" } + function peg$f28() { return "\n" } + function peg$f29(char) { if (isControlCharMultiline(char)) genError("Control characters are not allowed in strings", location().start.line, location().start.column); return char } function peg$f30() { return "''" } function peg$f31() { return "'" } - function peg$f32() { genError("Invalid escape sequence", location().start.line, location().start.column) } - function peg$f33(char) { if (isControlChar(char)) genError("Control characters are not allowed in strings", location().start.line, location().start.column); return char } - function peg$f34(char) { if (isControlChar(char)) genError("Control characters are not allowed in strings", location().start.line, location().start.column); return char } - function peg$f35(sign) { return node('Float', sign === '-' ? -Infinity : Infinity, location()) } - function peg$f36(sign) { return node('Float', NaN, location()) } - function peg$f37(left, right) { return node('Float', parseFloat(stripUnderscores(left + 'e' + right)), location()) } - function peg$f38(text) { return node('Float', parseFloat(stripUnderscores(text)), location()) } - function peg$f39(sign, digits, frac) { return (sign === '-' ? '-' : '') + digits + '.' + frac } - function peg$f40(sign, digits, frac) { return (sign === '-' ? '-' : '') + digits + '.' + frac } - function peg$f41(sign, digits) { return (sign === '-' ? '-' : '') + digits } - function peg$f42() { return '0' } - function peg$f43(sign, digits) { return (sign || '') + digits } - function peg$f44(digits) { return node('Integer', parseInt(stripUnderscores(digits), 16), location()) } - function peg$f45(digits) { return node('Integer', parseInt(stripUnderscores(digits), 8), location()) } - function peg$f46(digits) { return node('Integer', parseInt(stripUnderscores(digits), 2), location()) } - function peg$f47(text) { return node('Integer', parseInt(stripUnderscores(text), 10), location()) } - function peg$f48(sign) { return (sign || '') + '0' } - function peg$f49(sign, digits) { return (sign || '') + digits } - function peg$f50(head, tail) { return head + tail.map(function(p) { return p.join('') }).join('') } - function peg$f51(head, tail) { return head + tail.map(function(p) { return p.join('') }).join('') } + function peg$f32() { return "''" } + function peg$f33() { return "'" } + function peg$f34() { genError("Invalid escape sequence", location().start.line, location().start.column) } + function peg$f35(char) { if (isControlChar(char)) genError("Control characters are not allowed in strings", location().start.line, location().start.column); return char } + function peg$f36(char) { if (isControlChar(char)) genError("Control characters are not allowed in strings", location().start.line, location().start.column); return char } + function peg$f37(sign) { return node('Float', sign === '-' ? -Infinity : Infinity, location()) } + function peg$f38(sign) { return node('Float', NaN, location()) } + function peg$f39(left, right) { return node('Float', parseFloat(stripUnderscores(left + 'e' + right)), location()) } + function peg$f40(text) { return node('Float', parseFloat(stripUnderscores(text)), location()) } + function peg$f41(sign, digits, frac) { return (sign === '-' ? '-' : '') + digits + '.' + frac } + function peg$f42(sign, digits, frac) { return (sign === '-' ? '-' : '') + digits + '.' + frac } + function peg$f43(sign, digits) { return (sign === '-' ? '-' : '') + digits } + function peg$f44() { return '0' } + function peg$f45(sign, digits) { return (sign || '') + digits } + function peg$f46(digits) { return node('Integer', parseInt(stripUnderscores(digits), 16), location()) } + function peg$f47(digits) { return node('Integer', parseInt(stripUnderscores(digits), 8), location()) } + function peg$f48(digits) { return node('Integer', parseInt(stripUnderscores(digits), 2), location()) } + function peg$f49(text) { return node('Integer', parseInt(stripUnderscores(text), 10), location()) } + function peg$f50(sign) { return (sign || '') + '0' } + function peg$f51(sign, digits) { return (sign || '') + digits } function peg$f52(head, tail) { return head + tail.map(function(p) { return p.join('') }).join('') } function peg$f53(head, tail) { return head + tail.map(function(p) { return p.join('') }).join('') } function peg$f54(head, tail) { return head + tail.map(function(p) { return p.join('') }).join('') } - function peg$f55() { return node('Boolean', true, location()) } - function peg$f56() { return node('Boolean', false, location()) } - function peg$f57() { return node('Array', [], location()) } - function peg$f58(value) { return node('Array', value ? [value] : [], location()) } - function peg$f59(values) { return node('Array', values, location()) } - function peg$f60(values, value) { return node('Array', values.concat(value), location()) } - function peg$f61(value) { return value } - function peg$f62(value) { return value } - function peg$f63() { return node('InlineTable', [], location()) } - function peg$f64(entries, last) { return node('InlineTable', entries.concat(last), location()) } - function peg$f65(entry) { return node('InlineTable', [entry], location()) } - function peg$f66(e) { return e } - function peg$f67(entries) { return entries } - function peg$f68(keys, value) { return node('InlineTableValue', value, location(), keys) } - function peg$f69(parts, last) { return parts.concat(last) } - function peg$f70(k) { return [k] } - function peg$f71(k) { return k } - function peg$f72(digits) { return "." + digits.join('') } - function peg$f73(d) { return d.join('') } - function peg$f74(t) { return t.join('') } - function peg$f75() { return "Z" } - function peg$f76(sign, h, m) { return sign + h.join('') + ":" + m.join('') } - function peg$f77(d, t, o) { validateDate(d, location()); validateTime(t, location()); validateOffset(o, location()); return node('Date', new Date(d + "T" + t + o), location()) } - function peg$f78(d, t) { validateDate(d, location()); validateTime(t, location()); return node('LocalDateTime', d + "T" + t, location()) } - function peg$f79(d) { validateDate(d, location()); return node('LocalDate', d, location()) } - function peg$f80(t) { validateTime(t, location()); return node('LocalTime', t, location()) } - function peg$f81() { return '"' } - function peg$f82() { return '\\' } - function peg$f83() { return '\b' } - function peg$f84() { return '\t' } - function peg$f85() { return '\n' } - function peg$f86() { return '\f' } - function peg$f87() { return '\r' } - function peg$f88(digits) { return convertCodePoint(digits.join('')) } - function peg$f89(digits) { return convertCodePoint(digits.join('')) } + function peg$f55(head, tail) { return head + tail.map(function(p) { return p.join('') }).join('') } + function peg$f56(head, tail) { return head + tail.map(function(p) { return p.join('') }).join('') } + function peg$f57() { return node('Boolean', true, location()) } + function peg$f58() { return node('Boolean', false, location()) } + function peg$f59() { return node('Array', [], location()) } + function peg$f60(value) { return node('Array', value ? [value] : [], location()) } + function peg$f61(values) { return node('Array', values, location()) } + function peg$f62(values, value) { return node('Array', values.concat(value), location()) } + function peg$f63(value) { return value } + function peg$f64(value) { return value } + function peg$f65() { return node('InlineTable', [], location()) } + function peg$f66(entries, last) { return node('InlineTable', entries.concat(last), location()) } + function peg$f67(entries) { return node('InlineTable', entries, location()) } + function peg$f68(entry) { return node('InlineTable', [entry], location()) } + function peg$f69(e) { return e } + function peg$f70(entries) { return entries } + function peg$f71(keys, value) { return node('InlineTableValue', value, location(), keys) } + function peg$f72(parts, last) { return parts.concat(last) } + function peg$f73(k) { return [k] } + function peg$f74(k) { return k } + function peg$f75(digits) { return "." + digits.join('') } + function peg$f76(d) { return d.join('') } + function peg$f77(t) { return t.join('') } + function peg$f78(t) { return t.join('') + ':00' } + function peg$f79() { return "Z" } + function peg$f80(sign, h, m) { return sign + h.join('') + ":" + m.join('') } + function peg$f81(d, t, o) { validateDate(d, location()); validateTime(t, location()); validateOffset(o, location()); return node('Date', new Date(d + "T" + t + o), location()) } + function peg$f82(d, t) { validateDate(d, location()); validateTime(t, location()); return node('LocalDateTime', d + "T" + t, location()) } + function peg$f83(d) { validateDate(d, location()); return node('LocalDate', d, location()) } + function peg$f84(t) { validateTime(t, location()); return node('LocalTime', t, location()) } + function peg$f85() { return '"' } + function peg$f86() { return '\\' } + function peg$f87() { return '\b' } + function peg$f88() { return '\t' } + function peg$f89() { return '\n' } + function peg$f90() { return '\f' } + function peg$f91() { return '\r' } + function peg$f92() { return '\x1B' } + function peg$f93(digits) { return convertCodePoint(digits.join('')) } + function peg$f94(digits) { return convertCodePoint(digits.join('')) } + function peg$f95(digits) { return convertCodePoint(digits.join('')) } let peg$currPos = options.peg$currPos | 0; let peg$savedPos = peg$currPos; const peg$posDetailsCache = [{ line: 1, column: 1 }]; @@ -542,7 +554,7 @@ function peg$parse(input, options) { function peg$parsestart() { let s0, s1, s2; - const key = peg$currPos * 67 + 0; + const key = peg$currPos * 68 + 0; const cached = peg$resultsCache[key]; if (cached) { @@ -570,7 +582,7 @@ function peg$parse(input, options) { function peg$parseline() { let s0, s1, s2, s3, s4, s5, s6; - const key = peg$currPos * 67 + 1; + const key = peg$currPos * 68 + 1; const cached = peg$resultsCache[key]; if (cached) { @@ -674,7 +686,7 @@ function peg$parse(input, options) { function peg$parseexpression() { let s0; - const key = peg$currPos * 67 + 2; + const key = peg$currPos * 68 + 2; const cached = peg$resultsCache[key]; if (cached) { @@ -702,7 +714,7 @@ function peg$parse(input, options) { function peg$parsecomment() { let s0, s1, s2, s3, s4, s5; - const key = peg$currPos * 67 + 3; + const key = peg$currPos * 68 + 3; const cached = peg$resultsCache[key]; if (cached) { @@ -805,7 +817,7 @@ function peg$parse(input, options) { function peg$parsepath() { let s0, s1, s2, s3, s4, s5; - const key = peg$currPos * 67 + 4; + const key = peg$currPos * 68 + 4; const cached = peg$resultsCache[key]; if (cached) { @@ -868,7 +880,7 @@ function peg$parse(input, options) { function peg$parsetablearray() { let s0, s1, s2, s3, s4, s5, s6, s7; - const key = peg$currPos * 67 + 5; + const key = peg$currPos * 68 + 5; const cached = peg$resultsCache[key]; if (cached) { @@ -955,7 +967,7 @@ function peg$parse(input, options) { function peg$parsetable_key() { let s0, s1, s2; - const key = peg$currPos * 67 + 6; + const key = peg$currPos * 68 + 6; const cached = peg$resultsCache[key]; if (cached) { @@ -1006,7 +1018,7 @@ function peg$parse(input, options) { function peg$parsetable_key_part() { let s0, s1, s2, s3, s4; - const key = peg$currPos * 67 + 7; + const key = peg$currPos * 68 + 7; const cached = peg$resultsCache[key]; if (cached) { @@ -1068,7 +1080,7 @@ function peg$parse(input, options) { function peg$parsedot_ended_table_key_part() { let s0, s1, s2, s3, s4, s5, s6; - const key = peg$currPos * 67 + 8; + const key = peg$currPos * 68 + 8; const cached = peg$resultsCache[key]; if (cached) { @@ -1166,7 +1178,7 @@ function peg$parse(input, options) { function peg$parseassignment() { let s0, s1, s2, s3, s4, s5; - const key = peg$currPos * 67 + 9; + const key = peg$currPos * 68 + 9; const cached = peg$resultsCache[key]; if (cached) { @@ -1223,7 +1235,7 @@ function peg$parse(input, options) { function peg$parsekey() { let s0, s1, s2; - const key = peg$currPos * 67 + 10; + const key = peg$currPos * 68 + 10; const cached = peg$resultsCache[key]; if (cached) { @@ -1257,7 +1269,7 @@ function peg$parse(input, options) { function peg$parsequoted_key() { let s0, s1; - const key = peg$currPos * 67 + 11; + const key = peg$currPos * 68 + 11; const cached = peg$resultsCache[key]; if (cached) { @@ -1291,7 +1303,7 @@ function peg$parse(input, options) { function peg$parsevalue() { let s0; - const key = peg$currPos * 67 + 12; + const key = peg$currPos * 68 + 12; const cached = peg$resultsCache[key]; if (cached) { @@ -1328,7 +1340,7 @@ function peg$parse(input, options) { function peg$parsestring() { let s0; - const key = peg$currPos * 67 + 13; + const key = peg$currPos * 68 + 13; const cached = peg$resultsCache[key]; if (cached) { @@ -1356,7 +1368,7 @@ function peg$parse(input, options) { function peg$parsedouble_quoted_multiline_string() { let s0, s1, s2, s3, s4; - const key = peg$currPos * 67 + 14; + const key = peg$currPos * 68 + 14; const cached = peg$resultsCache[key]; if (cached) { @@ -1406,7 +1418,7 @@ function peg$parse(input, options) { function peg$parsedouble_quoted_single_line_string() { let s0, s1, s2, s3; - const key = peg$currPos * 67 + 15; + const key = peg$currPos * 68 + 15; const cached = peg$resultsCache[key]; if (cached) { @@ -1457,7 +1469,7 @@ function peg$parse(input, options) { function peg$parsesingle_quoted_multiline_string() { let s0, s1, s2, s3, s4; - const key = peg$currPos * 67 + 16; + const key = peg$currPos * 68 + 16; const cached = peg$resultsCache[key]; if (cached) { @@ -1507,7 +1519,7 @@ function peg$parse(input, options) { function peg$parsesingle_quoted_single_line_string() { let s0, s1, s2, s3; - const key = peg$currPos * 67 + 17; + const key = peg$currPos * 68 + 17; const cached = peg$resultsCache[key]; if (cached) { @@ -1558,7 +1570,7 @@ function peg$parse(input, options) { function peg$parsemlb_body() { let s0, s1, s2, s3, s4, s5, s6; - const key = peg$currPos * 67 + 18; + const key = peg$currPos * 68 + 18; const cached = peg$resultsCache[key]; if (cached) { @@ -1641,7 +1653,7 @@ function peg$parse(input, options) { function peg$parsemlb_content() { let s0, s1, s2; - const key = peg$currPos * 67 + 19; + const key = peg$currPos * 68 + 19; const cached = peg$resultsCache[key]; if (cached) { @@ -1683,40 +1695,55 @@ function peg$parse(input, options) { } if (s0 === peg$FAILED) { s0 = peg$currPos; - s1 = peg$currPos; - peg$silentFails++; - if (input.charCodeAt(peg$currPos) === 34) { - s2 = peg$c6; - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e7); } - } - peg$silentFails--; - if (s2 === peg$FAILED) { - s1 = undefined; + if (input.substr(peg$currPos, 2) === peg$c10) { + s1 = peg$c10; + peg$currPos += 2; } else { - peg$currPos = s1; s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e11); } } if (s1 !== peg$FAILED) { - if (input.length > peg$currPos) { - s2 = input.charAt(peg$currPos); + peg$savedPos = s0; + s1 = peg$f20(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 34) { + s2 = peg$c6; peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e1); } + if (peg$silentFails === 0) { peg$fail(peg$e7); } } - if (s2 !== peg$FAILED) { - peg$savedPos = s0; - s0 = peg$f20(s2); + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = undefined; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e1); } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f21(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } } else { peg$currPos = s0; s0 = peg$FAILED; } - } else { - peg$currPos = s0; - s0 = peg$FAILED; } } } @@ -1730,7 +1757,7 @@ function peg$parse(input, options) { function peg$parsemlb_escaped_newline() { let s0, s1, s2, s3, s4, s5; - const key = peg$currPos * 67 + 20; + const key = peg$currPos * 68 + 20; const cached = peg$resultsCache[key]; if (cached) { @@ -1763,7 +1790,7 @@ function peg$parse(input, options) { s5 = peg$parseNLS(); } peg$savedPos = s0; - s0 = peg$f21(); + s0 = peg$f22(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1781,7 +1808,7 @@ function peg$parse(input, options) { function peg$parsemlb_quotes() { let s0, s1, s2, s3; - const key = peg$currPos * 67 + 21; + const key = peg$currPos * 68 + 21; const cached = peg$resultsCache[key]; if (cached) { @@ -1791,12 +1818,12 @@ function peg$parse(input, options) { } s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c10) { - s1 = peg$c10; + if (input.substr(peg$currPos, 2) === peg$c11) { + s1 = peg$c11; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e11); } + if (peg$silentFails === 0) { peg$fail(peg$e12); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -1817,7 +1844,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f22(); + s0 = peg$f23(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1854,7 +1881,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f23(); + s0 = peg$f24(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1873,7 +1900,7 @@ function peg$parse(input, options) { function peg$parsemlb_trailing() { let s0, s1, s2, s3; - const key = peg$currPos * 67 + 22; + const key = peg$currPos * 68 + 22; const cached = peg$resultsCache[key]; if (cached) { @@ -1883,12 +1910,12 @@ function peg$parse(input, options) { } s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c10) { - s1 = peg$c10; + if (input.substr(peg$currPos, 2) === peg$c11) { + s1 = peg$c11; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e11); } + if (peg$silentFails === 0) { peg$fail(peg$e12); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -1909,7 +1936,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f24(); + s0 = peg$f25(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1946,7 +1973,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f25(); + s0 = peg$f26(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1965,7 +1992,7 @@ function peg$parse(input, options) { function peg$parsemll_body() { let s0, s1, s2, s3, s4, s5, s6; - const key = peg$currPos * 67 + 23; + const key = peg$currPos * 68 + 23; const cached = peg$resultsCache[key]; if (cached) { @@ -2038,7 +2065,7 @@ function peg$parse(input, options) { s3 = null; } peg$savedPos = s0; - s0 = peg$f26(s1, s2, s3); + s0 = peg$f27(s1, s2, s3); peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; @@ -2048,7 +2075,7 @@ function peg$parse(input, options) { function peg$parsemll_content() { let s0, s1, s2; - const key = peg$currPos * 67 + 24; + const key = peg$currPos * 68 + 24; const cached = peg$resultsCache[key]; if (cached) { @@ -2058,40 +2085,55 @@ function peg$parse(input, options) { } s0 = peg$currPos; - s1 = peg$currPos; - peg$silentFails++; - if (input.charCodeAt(peg$currPos) === 39) { - s2 = peg$c8; - peg$currPos++; - } else { - s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e9); } - } - peg$silentFails--; - if (s2 === peg$FAILED) { - s1 = undefined; + if (input.substr(peg$currPos, 2) === peg$c10) { + s1 = peg$c10; + peg$currPos += 2; } else { - peg$currPos = s1; s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e11); } } if (s1 !== peg$FAILED) { - if (input.length > peg$currPos) { - s2 = input.charAt(peg$currPos); + peg$savedPos = s0; + s1 = peg$f28(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 39) { + s2 = peg$c8; peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e1); } + if (peg$silentFails === 0) { peg$fail(peg$e9); } } - if (s2 !== peg$FAILED) { - peg$savedPos = s0; - s0 = peg$f27(s2); + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = undefined; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e1); } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f29(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } } else { peg$currPos = s0; s0 = peg$FAILED; } - } else { - peg$currPos = s0; - s0 = peg$FAILED; } peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; @@ -2102,7 +2144,7 @@ function peg$parse(input, options) { function peg$parsemll_quotes() { let s0, s1, s2, s3; - const key = peg$currPos * 67 + 25; + const key = peg$currPos * 68 + 25; const cached = peg$resultsCache[key]; if (cached) { @@ -2112,12 +2154,12 @@ function peg$parse(input, options) { } s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c11) { - s1 = peg$c11; + if (input.substr(peg$currPos, 2) === peg$c12) { + s1 = peg$c12; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e12); } + if (peg$silentFails === 0) { peg$fail(peg$e13); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2138,7 +2180,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f28(); + s0 = peg$f30(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2175,7 +2217,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f29(); + s0 = peg$f31(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2194,7 +2236,7 @@ function peg$parse(input, options) { function peg$parsemll_trailing() { let s0, s1, s2, s3; - const key = peg$currPos * 67 + 26; + const key = peg$currPos * 68 + 26; const cached = peg$resultsCache[key]; if (cached) { @@ -2204,12 +2246,12 @@ function peg$parse(input, options) { } s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c11) { - s1 = peg$c11; + if (input.substr(peg$currPos, 2) === peg$c12) { + s1 = peg$c12; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e12); } + if (peg$silentFails === 0) { peg$fail(peg$e13); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2230,7 +2272,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f30(); + s0 = peg$f32(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2267,7 +2309,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f31(); + s0 = peg$f33(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2286,7 +2328,7 @@ function peg$parse(input, options) { function peg$parsestring_char() { let s0, s1, s2, s3; - const key = peg$currPos * 67 + 27; + const key = peg$currPos * 68 + 27; const cached = peg$resultsCache[key]; if (cached) { @@ -2315,7 +2357,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f32(); + s0 = peg$f34(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2366,7 +2408,7 @@ function peg$parse(input, options) { } if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f33(s3); + s0 = peg$f35(s3); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2390,7 +2432,7 @@ function peg$parse(input, options) { function peg$parseliteral_char() { let s0, s1, s2, s3; - const key = peg$currPos * 67 + 28; + const key = peg$currPos * 68 + 28; const cached = peg$resultsCache[key]; if (cached) { @@ -2440,7 +2482,7 @@ function peg$parse(input, options) { } if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f34(s3); + s0 = peg$f36(s3); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2462,7 +2504,7 @@ function peg$parse(input, options) { function peg$parsefloat() { let s0, s1, s2, s3; - const key = peg$currPos * 67 + 29; + const key = peg$currPos * 68 + 29; const cached = peg$resultsCache[key]; if (cached) { @@ -2477,21 +2519,21 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e13); } + if (peg$silentFails === 0) { peg$fail(peg$e14); } } if (s1 === peg$FAILED) { s1 = null; } - if (input.substr(peg$currPos, 3) === peg$c12) { - s2 = peg$c12; + if (input.substr(peg$currPos, 3) === peg$c13) { + s2 = peg$c13; peg$currPos += 3; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e14); } + if (peg$silentFails === 0) { peg$fail(peg$e15); } } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f35(s1); + s0 = peg$f37(s1); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2503,21 +2545,21 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e13); } + if (peg$silentFails === 0) { peg$fail(peg$e14); } } if (s1 === peg$FAILED) { s1 = null; } - if (input.substr(peg$currPos, 3) === peg$c13) { - s2 = peg$c13; + if (input.substr(peg$currPos, 3) === peg$c14) { + s2 = peg$c14; peg$currPos += 3; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e15); } + if (peg$silentFails === 0) { peg$fail(peg$e16); } } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f36(s1); + s0 = peg$f38(s1); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2531,13 +2573,13 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e16); } + if (peg$silentFails === 0) { peg$fail(peg$e17); } } if (s2 !== peg$FAILED) { s3 = peg$parsefloat_exp_text(); if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f37(s1, s3); + s0 = peg$f39(s1, s3); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2555,7 +2597,7 @@ function peg$parse(input, options) { s1 = peg$parsefloat_text(); if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f38(s1); + s1 = peg$f40(s1); } s0 = s1; } @@ -2570,7 +2612,7 @@ function peg$parse(input, options) { function peg$parsefloat_text() { let s0, s1, s2, s3, s4; - const key = peg$currPos * 67 + 30; + const key = peg$currPos * 68 + 30; const cached = peg$resultsCache[key]; if (cached) { @@ -2585,7 +2627,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e13); } + if (peg$silentFails === 0) { peg$fail(peg$e14); } } if (s1 === peg$FAILED) { s1 = null; @@ -2603,7 +2645,7 @@ function peg$parse(input, options) { s4 = peg$parseDEC_INT(); if (s4 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f39(s1, s2, s4); + s0 = peg$f41(s1, s2, s4); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2625,7 +2667,7 @@ function peg$parse(input, options) { function peg$parsefloat_or_int_text() { let s0, s1, s2, s3, s4; - const key = peg$currPos * 67 + 31; + const key = peg$currPos * 68 + 31; const cached = peg$resultsCache[key]; if (cached) { @@ -2640,7 +2682,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e13); } + if (peg$silentFails === 0) { peg$fail(peg$e14); } } if (s1 === peg$FAILED) { s1 = null; @@ -2658,7 +2700,7 @@ function peg$parse(input, options) { s4 = peg$parseDEC_INT(); if (s4 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f40(s1, s2, s4); + s0 = peg$f42(s1, s2, s4); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2678,7 +2720,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e13); } + if (peg$silentFails === 0) { peg$fail(peg$e14); } } if (s1 === peg$FAILED) { s1 = null; @@ -2686,7 +2728,7 @@ function peg$parse(input, options) { s2 = peg$parseFLOAT_DEC_INT(); if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f41(s1, s2); + s0 = peg$f43(s1, s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2701,7 +2743,7 @@ function peg$parse(input, options) { function peg$parseFLOAT_DEC_INT() { let s0, s1; - const key = peg$currPos * 67 + 32; + const key = peg$currPos * 68 + 32; const cached = peg$resultsCache[key]; if (cached) { @@ -2712,15 +2754,15 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 48) { - s1 = peg$c14; + s1 = peg$c15; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e17); } + if (peg$silentFails === 0) { peg$fail(peg$e18); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f42(); + s1 = peg$f44(); } s0 = s1; if (s0 === peg$FAILED) { @@ -2735,7 +2777,7 @@ function peg$parse(input, options) { function peg$parsefloat_exp_text() { let s0, s1, s2; - const key = peg$currPos * 67 + 33; + const key = peg$currPos * 68 + 33; const cached = peg$resultsCache[key]; if (cached) { @@ -2750,7 +2792,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e13); } + if (peg$silentFails === 0) { peg$fail(peg$e14); } } if (s1 === peg$FAILED) { s1 = null; @@ -2758,7 +2800,7 @@ function peg$parse(input, options) { s2 = peg$parseDEC_INT(); if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f43(s1, s2); + s0 = peg$f45(s1, s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2772,7 +2814,7 @@ function peg$parse(input, options) { function peg$parseinteger() { let s0, s1, s2; - const key = peg$currPos * 67 + 34; + const key = peg$currPos * 68 + 34; const cached = peg$resultsCache[key]; if (cached) { @@ -2782,18 +2824,18 @@ function peg$parse(input, options) { } s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c15) { - s1 = peg$c15; + if (input.substr(peg$currPos, 2) === peg$c16) { + s1 = peg$c16; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e18); } + if (peg$silentFails === 0) { peg$fail(peg$e19); } } if (s1 !== peg$FAILED) { s2 = peg$parseHEX_INT(); if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f44(s2); + s0 = peg$f46(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2804,18 +2846,18 @@ function peg$parse(input, options) { } if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c16) { - s1 = peg$c16; + if (input.substr(peg$currPos, 2) === peg$c17) { + s1 = peg$c17; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e19); } + if (peg$silentFails === 0) { peg$fail(peg$e20); } } if (s1 !== peg$FAILED) { s2 = peg$parseOCT_INT(); if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f45(s2); + s0 = peg$f47(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2826,18 +2868,18 @@ function peg$parse(input, options) { } if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c17) { - s1 = peg$c17; + if (input.substr(peg$currPos, 2) === peg$c18) { + s1 = peg$c18; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e20); } + if (peg$silentFails === 0) { peg$fail(peg$e21); } } if (s1 !== peg$FAILED) { s2 = peg$parseBIN_INT(); if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f46(s2); + s0 = peg$f48(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2851,7 +2893,7 @@ function peg$parse(input, options) { s1 = peg$parsedec_integer_text(); if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f47(s1); + s1 = peg$f49(s1); } s0 = s1; } @@ -2866,7 +2908,7 @@ function peg$parse(input, options) { function peg$parsedec_integer_text() { let s0, s1, s2, s3, s4, s5; - const key = peg$currPos * 67 + 35; + const key = peg$currPos * 68 + 35; const cached = peg$resultsCache[key]; if (cached) { @@ -2881,17 +2923,17 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e13); } + if (peg$silentFails === 0) { peg$fail(peg$e14); } } if (s1 === peg$FAILED) { s1 = null; } if (input.charCodeAt(peg$currPos) === 48) { - s2 = peg$c14; + s2 = peg$c15; peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e17); } + if (peg$silentFails === 0) { peg$fail(peg$e18); } } if (s2 !== peg$FAILED) { s3 = peg$currPos; @@ -2901,7 +2943,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e21); } + if (peg$silentFails === 0) { peg$fail(peg$e22); } } peg$silentFails--; if (s4 === peg$FAILED) { @@ -2929,7 +2971,7 @@ function peg$parse(input, options) { } if (s4 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f48(s1); + s0 = peg$f50(s1); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2949,7 +2991,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e13); } + if (peg$silentFails === 0) { peg$fail(peg$e14); } } if (s1 === peg$FAILED) { s1 = null; @@ -2974,7 +3016,7 @@ function peg$parse(input, options) { } if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f49(s1, s2); + s0 = peg$f51(s1, s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2993,7 +3035,7 @@ function peg$parse(input, options) { function peg$parseDEC_INT_NOZERO() { let s0, s1, s2, s3, s4, s5; - const key = peg$currPos * 67 + 36; + const key = peg$currPos * 68 + 36; const cached = peg$resultsCache[key]; if (cached) { @@ -3008,7 +3050,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e22); } + if (peg$silentFails === 0) { peg$fail(peg$e23); } } if (s1 !== peg$FAILED) { s2 = []; @@ -3018,7 +3060,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e23); } + if (peg$silentFails === 0) { peg$fail(peg$e24); } } if (s4 === peg$FAILED) { s4 = null; @@ -3028,7 +3070,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e24); } + if (peg$silentFails === 0) { peg$fail(peg$e25); } } if (s5 !== peg$FAILED) { s4 = [s4, s5]; @@ -3045,7 +3087,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e23); } + if (peg$silentFails === 0) { peg$fail(peg$e24); } } if (s4 === peg$FAILED) { s4 = null; @@ -3055,7 +3097,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e24); } + if (peg$silentFails === 0) { peg$fail(peg$e25); } } if (s5 !== peg$FAILED) { s4 = [s4, s5]; @@ -3066,7 +3108,7 @@ function peg$parse(input, options) { } } peg$savedPos = s0; - s0 = peg$f50(s1, s2); + s0 = peg$f52(s1, s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3080,7 +3122,7 @@ function peg$parse(input, options) { function peg$parseDEC_INT() { let s0, s1, s2, s3, s4, s5; - const key = peg$currPos * 67 + 37; + const key = peg$currPos * 68 + 37; const cached = peg$resultsCache[key]; if (cached) { @@ -3095,7 +3137,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e24); } + if (peg$silentFails === 0) { peg$fail(peg$e25); } } if (s1 !== peg$FAILED) { s2 = []; @@ -3105,7 +3147,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e23); } + if (peg$silentFails === 0) { peg$fail(peg$e24); } } if (s4 === peg$FAILED) { s4 = null; @@ -3115,7 +3157,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e24); } + if (peg$silentFails === 0) { peg$fail(peg$e25); } } if (s5 !== peg$FAILED) { s4 = [s4, s5]; @@ -3132,7 +3174,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e23); } + if (peg$silentFails === 0) { peg$fail(peg$e24); } } if (s4 === peg$FAILED) { s4 = null; @@ -3142,7 +3184,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e24); } + if (peg$silentFails === 0) { peg$fail(peg$e25); } } if (s5 !== peg$FAILED) { s4 = [s4, s5]; @@ -3153,7 +3195,7 @@ function peg$parse(input, options) { } } peg$savedPos = s0; - s0 = peg$f51(s1, s2); + s0 = peg$f53(s1, s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3167,7 +3209,7 @@ function peg$parse(input, options) { function peg$parseHEX_INT() { let s0, s1, s2, s3, s4, s5; - const key = peg$currPos * 67 + 38; + const key = peg$currPos * 68 + 38; const cached = peg$resultsCache[key]; if (cached) { @@ -3182,7 +3224,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e25); } + if (peg$silentFails === 0) { peg$fail(peg$e26); } } if (s1 !== peg$FAILED) { s2 = []; @@ -3192,7 +3234,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e23); } + if (peg$silentFails === 0) { peg$fail(peg$e24); } } if (s4 === peg$FAILED) { s4 = null; @@ -3202,7 +3244,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e25); } + if (peg$silentFails === 0) { peg$fail(peg$e26); } } if (s5 !== peg$FAILED) { s4 = [s4, s5]; @@ -3219,7 +3261,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e23); } + if (peg$silentFails === 0) { peg$fail(peg$e24); } } if (s4 === peg$FAILED) { s4 = null; @@ -3229,7 +3271,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e25); } + if (peg$silentFails === 0) { peg$fail(peg$e26); } } if (s5 !== peg$FAILED) { s4 = [s4, s5]; @@ -3240,7 +3282,7 @@ function peg$parse(input, options) { } } peg$savedPos = s0; - s0 = peg$f52(s1, s2); + s0 = peg$f54(s1, s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3254,7 +3296,7 @@ function peg$parse(input, options) { function peg$parseOCT_INT() { let s0, s1, s2, s3, s4, s5; - const key = peg$currPos * 67 + 39; + const key = peg$currPos * 68 + 39; const cached = peg$resultsCache[key]; if (cached) { @@ -3269,7 +3311,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e26); } + if (peg$silentFails === 0) { peg$fail(peg$e27); } } if (s1 !== peg$FAILED) { s2 = []; @@ -3279,7 +3321,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e23); } + if (peg$silentFails === 0) { peg$fail(peg$e24); } } if (s4 === peg$FAILED) { s4 = null; @@ -3289,7 +3331,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e26); } + if (peg$silentFails === 0) { peg$fail(peg$e27); } } if (s5 !== peg$FAILED) { s4 = [s4, s5]; @@ -3306,7 +3348,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e23); } + if (peg$silentFails === 0) { peg$fail(peg$e24); } } if (s4 === peg$FAILED) { s4 = null; @@ -3316,7 +3358,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e26); } + if (peg$silentFails === 0) { peg$fail(peg$e27); } } if (s5 !== peg$FAILED) { s4 = [s4, s5]; @@ -3327,7 +3369,7 @@ function peg$parse(input, options) { } } peg$savedPos = s0; - s0 = peg$f53(s1, s2); + s0 = peg$f55(s1, s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3341,7 +3383,7 @@ function peg$parse(input, options) { function peg$parseBIN_INT() { let s0, s1, s2, s3, s4, s5; - const key = peg$currPos * 67 + 40; + const key = peg$currPos * 68 + 40; const cached = peg$resultsCache[key]; if (cached) { @@ -3356,7 +3398,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e27); } + if (peg$silentFails === 0) { peg$fail(peg$e28); } } if (s1 !== peg$FAILED) { s2 = []; @@ -3366,7 +3408,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e23); } + if (peg$silentFails === 0) { peg$fail(peg$e24); } } if (s4 === peg$FAILED) { s4 = null; @@ -3376,7 +3418,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e27); } + if (peg$silentFails === 0) { peg$fail(peg$e28); } } if (s5 !== peg$FAILED) { s4 = [s4, s5]; @@ -3393,7 +3435,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e23); } + if (peg$silentFails === 0) { peg$fail(peg$e24); } } if (s4 === peg$FAILED) { s4 = null; @@ -3403,7 +3445,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e27); } + if (peg$silentFails === 0) { peg$fail(peg$e28); } } if (s5 !== peg$FAILED) { s4 = [s4, s5]; @@ -3414,7 +3456,7 @@ function peg$parse(input, options) { } } peg$savedPos = s0; - s0 = peg$f54(s1, s2); + s0 = peg$f56(s1, s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3428,7 +3470,7 @@ function peg$parse(input, options) { function peg$parseboolean() { let s0, s1; - const key = peg$currPos * 67 + 41; + const key = peg$currPos * 68 + 41; const cached = peg$resultsCache[key]; if (cached) { @@ -3438,30 +3480,30 @@ function peg$parse(input, options) { } s0 = peg$currPos; - if (input.substr(peg$currPos, 4) === peg$c18) { - s1 = peg$c18; + if (input.substr(peg$currPos, 4) === peg$c19) { + s1 = peg$c19; peg$currPos += 4; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e28); } + if (peg$silentFails === 0) { peg$fail(peg$e29); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f55(); + s1 = peg$f57(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 5) === peg$c19) { - s1 = peg$c19; + if (input.substr(peg$currPos, 5) === peg$c20) { + s1 = peg$c20; peg$currPos += 5; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e29); } + if (peg$silentFails === 0) { peg$fail(peg$e30); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f56(); + s1 = peg$f58(); } s0 = s1; } @@ -3474,7 +3516,7 @@ function peg$parse(input, options) { function peg$parsearray() { let s0, s1, s2, s3, s4; - const key = peg$currPos * 67 + 42; + const key = peg$currPos * 68 + 42; const cached = peg$resultsCache[key]; if (cached) { @@ -3507,7 +3549,7 @@ function peg$parse(input, options) { } if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f57(); + s0 = peg$f59(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3539,7 +3581,7 @@ function peg$parse(input, options) { } if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f58(s2); + s0 = peg$f60(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3578,7 +3620,7 @@ function peg$parse(input, options) { } if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f59(s2); + s0 = peg$f61(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3623,7 +3665,7 @@ function peg$parse(input, options) { } if (s4 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f60(s2, s3); + s0 = peg$f62(s2, s3); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3652,7 +3694,7 @@ function peg$parse(input, options) { function peg$parsearray_value() { let s0, s1, s2, s3, s4; - const key = peg$currPos * 67 + 43; + const key = peg$currPos * 68 + 43; const cached = peg$resultsCache[key]; if (cached) { @@ -3677,7 +3719,7 @@ function peg$parse(input, options) { s4 = peg$parsearray_sep(); } peg$savedPos = s0; - s0 = peg$f61(s2); + s0 = peg$f63(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3691,7 +3733,7 @@ function peg$parse(input, options) { function peg$parsearray_value_list() { let s0, s1, s2, s3, s4, s5, s6; - const key = peg$currPos * 67 + 44; + const key = peg$currPos * 68 + 44; const cached = peg$resultsCache[key]; if (cached) { @@ -3716,11 +3758,11 @@ function peg$parse(input, options) { s4 = peg$parsearray_sep(); } if (input.charCodeAt(peg$currPos) === 44) { - s4 = peg$c20; + s4 = peg$c21; peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e30); } + if (peg$silentFails === 0) { peg$fail(peg$e31); } } if (s4 !== peg$FAILED) { s5 = []; @@ -3730,7 +3772,7 @@ function peg$parse(input, options) { s6 = peg$parsearray_sep(); } peg$savedPos = s0; - s0 = peg$f62(s2); + s0 = peg$f64(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3748,7 +3790,7 @@ function peg$parse(input, options) { function peg$parsearray_sep() { let s0; - const key = peg$currPos * 67 + 45; + const key = peg$currPos * 68 + 45; const cached = peg$resultsCache[key]; if (cached) { @@ -3773,7 +3815,7 @@ function peg$parse(input, options) { function peg$parseinline_table() { let s0, s1, s2, s3, s4, s5, s6, s7; - const key = peg$currPos * 67 + 46; + const key = peg$currPos * 68 + 46; const cached = peg$resultsCache[key]; if (cached) { @@ -3784,29 +3826,29 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 123) { - s1 = peg$c21; + s1 = peg$c22; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e31); } + if (peg$silentFails === 0) { peg$fail(peg$e32); } } if (s1 !== peg$FAILED) { s2 = []; - s3 = peg$parseS(); + s3 = peg$parseinline_sep(); while (s3 !== peg$FAILED) { s2.push(s3); - s3 = peg$parseS(); + s3 = peg$parseinline_sep(); } if (input.charCodeAt(peg$currPos) === 125) { - s3 = peg$c22; + s3 = peg$c23; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e32); } + if (peg$silentFails === 0) { peg$fail(peg$e33); } } if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f63(); + s0 = peg$f65(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3818,45 +3860,45 @@ function peg$parse(input, options) { if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 123) { - s1 = peg$c21; + s1 = peg$c22; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e31); } + if (peg$silentFails === 0) { peg$fail(peg$e32); } } if (s1 !== peg$FAILED) { s2 = []; - s3 = peg$parseS(); + s3 = peg$parseinline_sep(); while (s3 !== peg$FAILED) { s2.push(s3); - s3 = peg$parseS(); + s3 = peg$parseinline_sep(); } s3 = peg$parseinline_table_entry_list(); if (s3 !== peg$FAILED) { s4 = []; - s5 = peg$parseS(); + s5 = peg$parseinline_sep(); while (s5 !== peg$FAILED) { s4.push(s5); - s5 = peg$parseS(); + s5 = peg$parseinline_sep(); } s5 = peg$parseinline_table_entry(); if (s5 !== peg$FAILED) { s6 = []; - s7 = peg$parseS(); + s7 = peg$parseinline_sep(); while (s7 !== peg$FAILED) { s6.push(s7); - s7 = peg$parseS(); + s7 = peg$parseinline_sep(); } if (input.charCodeAt(peg$currPos) === 125) { - s7 = peg$c22; + s7 = peg$c23; peg$currPos++; } else { s7 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e32); } + if (peg$silentFails === 0) { peg$fail(peg$e33); } } if (s7 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f64(s3, s5); + s0 = peg$f66(s3, s5); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3876,37 +3918,37 @@ function peg$parse(input, options) { if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 123) { - s1 = peg$c21; + s1 = peg$c22; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e31); } + if (peg$silentFails === 0) { peg$fail(peg$e32); } } if (s1 !== peg$FAILED) { s2 = []; - s3 = peg$parseS(); + s3 = peg$parseinline_sep(); while (s3 !== peg$FAILED) { s2.push(s3); - s3 = peg$parseS(); + s3 = peg$parseinline_sep(); } - s3 = peg$parseinline_table_entry(); + s3 = peg$parseinline_table_entry_list(); if (s3 !== peg$FAILED) { s4 = []; - s5 = peg$parseS(); + s5 = peg$parseinline_sep(); while (s5 !== peg$FAILED) { s4.push(s5); - s5 = peg$parseS(); + s5 = peg$parseinline_sep(); } if (input.charCodeAt(peg$currPos) === 125) { - s5 = peg$c22; + s5 = peg$c23; peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e32); } + if (peg$silentFails === 0) { peg$fail(peg$e33); } } if (s5 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f65(s3); + s0 = peg$f67(s3); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3919,6 +3961,53 @@ function peg$parse(input, options) { peg$currPos = s0; s0 = peg$FAILED; } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c22; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e32); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseinline_sep(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseinline_sep(); + } + s3 = peg$parseinline_table_entry(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parseinline_sep(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseinline_sep(); + } + if (input.charCodeAt(peg$currPos) === 125) { + s5 = peg$c23; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e33); } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f68(s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } } } @@ -3930,7 +4019,7 @@ function peg$parse(input, options) { function peg$parseinline_table_entry_list() { let s0, s1, s2, s3, s4, s5, s6; - const key = peg$currPos * 67 + 47; + const key = peg$currPos * 68 + 47; const cached = peg$resultsCache[key]; if (cached) { @@ -3943,29 +4032,29 @@ function peg$parse(input, options) { s1 = []; s2 = peg$currPos; s3 = []; - s4 = peg$parseS(); + s4 = peg$parseinline_sep(); while (s4 !== peg$FAILED) { s3.push(s4); - s4 = peg$parseS(); + s4 = peg$parseinline_sep(); } s4 = peg$parseinline_table_entry(); if (s4 !== peg$FAILED) { s5 = []; - s6 = peg$parseS(); + s6 = peg$parseinline_sep(); while (s6 !== peg$FAILED) { s5.push(s6); - s6 = peg$parseS(); + s6 = peg$parseinline_sep(); } if (input.charCodeAt(peg$currPos) === 44) { - s6 = peg$c20; + s6 = peg$c21; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e30); } + if (peg$silentFails === 0) { peg$fail(peg$e31); } } if (s6 !== peg$FAILED) { peg$savedPos = s2; - s2 = peg$f66(s4); + s2 = peg$f69(s4); } else { peg$currPos = s2; s2 = peg$FAILED; @@ -3979,29 +4068,29 @@ function peg$parse(input, options) { s1.push(s2); s2 = peg$currPos; s3 = []; - s4 = peg$parseS(); + s4 = peg$parseinline_sep(); while (s4 !== peg$FAILED) { s3.push(s4); - s4 = peg$parseS(); + s4 = peg$parseinline_sep(); } s4 = peg$parseinline_table_entry(); if (s4 !== peg$FAILED) { s5 = []; - s6 = peg$parseS(); + s6 = peg$parseinline_sep(); while (s6 !== peg$FAILED) { s5.push(s6); - s6 = peg$parseS(); + s6 = peg$parseinline_sep(); } if (input.charCodeAt(peg$currPos) === 44) { - s6 = peg$c20; + s6 = peg$c21; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e30); } + if (peg$silentFails === 0) { peg$fail(peg$e31); } } if (s6 !== peg$FAILED) { peg$savedPos = s2; - s2 = peg$f66(s4); + s2 = peg$f69(s4); } else { peg$currPos = s2; s2 = peg$FAILED; @@ -4016,7 +4105,7 @@ function peg$parse(input, options) { } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f67(s1); + s1 = peg$f70(s1); } s0 = s1; @@ -4028,7 +4117,7 @@ function peg$parse(input, options) { function peg$parseinline_table_entry() { let s0, s1, s2, s3, s4, s5; - const key = peg$currPos * 67 + 48; + const key = peg$currPos * 68 + 48; const cached = peg$resultsCache[key]; if (cached) { @@ -4063,7 +4152,7 @@ function peg$parse(input, options) { s5 = peg$parsevalue(); if (s5 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f68(s1, s5); + s0 = peg$f71(s1, s5); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4082,10 +4171,35 @@ function peg$parse(input, options) { return s0; } + function peg$parseinline_sep() { + let s0; + + const key = peg$currPos * 68 + 49; + const cached = peg$resultsCache[key]; + + if (cached) { + peg$currPos = cached.nextPos; + + return cached.result; + } + + s0 = peg$parseS(); + if (s0 === peg$FAILED) { + s0 = peg$parseNL(); + if (s0 === peg$FAILED) { + s0 = peg$parsecomment(); + } + } + + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + + return s0; + } + function peg$parseinline_key() { let s0, s1, s2, s3; - const key = peg$currPos * 67 + 49; + const key = peg$currPos * 68 + 50; const cached = peg$resultsCache[key]; if (cached) { @@ -4115,7 +4229,7 @@ function peg$parse(input, options) { s3 = peg$parsesimple_key(); if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f69(s1, s3); + s0 = peg$f72(s1, s3); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4129,7 +4243,7 @@ function peg$parse(input, options) { s1 = peg$parsesimple_key(); if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f70(s1); + s1 = peg$f73(s1); } s0 = s1; } @@ -4142,7 +4256,7 @@ function peg$parse(input, options) { function peg$parseinline_dot_key_part() { let s0, s1, s2, s3, s4; - const key = peg$currPos * 67 + 50; + const key = peg$currPos * 68 + 51; const cached = peg$resultsCache[key]; if (cached) { @@ -4175,7 +4289,7 @@ function peg$parse(input, options) { } if (s4 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f71(s2); + s0 = peg$f74(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4193,7 +4307,7 @@ function peg$parse(input, options) { function peg$parsesimple_key() { let s0; - const key = peg$currPos * 67 + 51; + const key = peg$currPos * 68 + 52; const cached = peg$resultsCache[key]; if (cached) { @@ -4215,7 +4329,7 @@ function peg$parse(input, options) { function peg$parsesecfragment() { let s0, s1, s2, s3; - const key = peg$currPos * 67 + 52; + const key = peg$currPos * 68 + 53; const cached = peg$resultsCache[key]; if (cached) { @@ -4245,7 +4359,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f72(s2); + s0 = peg$f75(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4263,7 +4377,7 @@ function peg$parse(input, options) { function peg$parsedate_part() { let s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11; - const key = peg$currPos * 67 + 53; + const key = peg$currPos * 68 + 54; const cached = peg$resultsCache[key]; if (cached) { @@ -4283,11 +4397,11 @@ function peg$parse(input, options) { s5 = peg$parseDIGIT(); if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 45) { - s6 = peg$c23; + s6 = peg$c24; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e33); } + if (peg$silentFails === 0) { peg$fail(peg$e34); } } if (s6 !== peg$FAILED) { s7 = peg$parseDIGIT(); @@ -4295,11 +4409,11 @@ function peg$parse(input, options) { s8 = peg$parseDIGIT(); if (s8 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 45) { - s9 = peg$c23; + s9 = peg$c24; peg$currPos++; } else { s9 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e33); } + if (peg$silentFails === 0) { peg$fail(peg$e34); } } if (s9 !== peg$FAILED) { s10 = peg$parseDIGIT(); @@ -4350,7 +4464,7 @@ function peg$parse(input, options) { } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f73(s1); + s1 = peg$f76(s1); } s0 = s1; @@ -4362,7 +4476,7 @@ function peg$parse(input, options) { function peg$parsetime_part() { let s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; - const key = peg$currPos * 67 + 54; + const key = peg$currPos * 68 + 55; const cached = peg$resultsCache[key]; if (cached) { @@ -4378,11 +4492,11 @@ function peg$parse(input, options) { s3 = peg$parseDIGIT(); if (s3 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 58) { - s4 = peg$c24; + s4 = peg$c25; peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e34); } + if (peg$silentFails === 0) { peg$fail(peg$e35); } } if (s4 !== peg$FAILED) { s5 = peg$parseDIGIT(); @@ -4390,11 +4504,11 @@ function peg$parse(input, options) { s6 = peg$parseDIGIT(); if (s6 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 58) { - s7 = peg$c24; + s7 = peg$c25; peg$currPos++; } else { s7 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e34); } + if (peg$silentFails === 0) { peg$fail(peg$e35); } } if (s7 !== peg$FAILED) { s8 = peg$parseDIGIT(); @@ -4441,9 +4555,79 @@ function peg$parse(input, options) { } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f74(s1); + s1 = peg$f77(s1); } s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parseDIGIT(); + if (s2 !== peg$FAILED) { + s3 = peg$parseDIGIT(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s4 = peg$c25; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e35); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parseDIGIT(); + if (s5 !== peg$FAILED) { + s6 = peg$parseDIGIT(); + if (s6 !== peg$FAILED) { + s2 = [s2, s3, s4, s5, s6]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 58) { + s3 = peg$c25; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e35); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = undefined; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f78(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; @@ -4453,7 +4637,7 @@ function peg$parse(input, options) { function peg$parseoffset() { let s0, s1, s2, s3, s4, s5, s6; - const key = peg$currPos * 67 + 55; + const key = peg$currPos * 68 + 56; const cached = peg$resultsCache[key]; if (cached) { @@ -4464,15 +4648,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.charAt(peg$currPos); - if (s1.toLowerCase() === peg$c25) { + if (s1.toLowerCase() === peg$c26) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e35); } + if (peg$silentFails === 0) { peg$fail(peg$e36); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f75(); + s1 = peg$f79(); } s0 = s1; if (s0 === peg$FAILED) { @@ -4482,7 +4666,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e13); } + if (peg$silentFails === 0) { peg$fail(peg$e14); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4502,11 +4686,11 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 58) { - s3 = peg$c24; + s3 = peg$c25; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e34); } + if (peg$silentFails === 0) { peg$fail(peg$e35); } } if (s3 !== peg$FAILED) { s4 = peg$currPos; @@ -4526,7 +4710,7 @@ function peg$parse(input, options) { } if (s4 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f76(s1, s2, s4); + s0 = peg$f80(s1, s2, s4); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4553,7 +4737,7 @@ function peg$parse(input, options) { function peg$parsedatetime_delim() { let s0, s1, s2, s3; - const key = peg$currPos * 67 + 56; + const key = peg$currPos * 68 + 57; const cached = peg$resultsCache[key]; if (cached) { @@ -4563,20 +4747,20 @@ function peg$parse(input, options) { } s0 = input.charAt(peg$currPos); - if (s0.toLowerCase() === peg$c26) { + if (s0.toLowerCase() === peg$c27) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e36); } + if (peg$silentFails === 0) { peg$fail(peg$e37); } } if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 32) { - s1 = peg$c27; + s1 = peg$c28; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e37); } + if (peg$silentFails === 0) { peg$fail(peg$e38); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4610,7 +4794,7 @@ function peg$parse(input, options) { function peg$parsedatetime() { let s0, s1, s2, s3, s4; - const key = peg$currPos * 67 + 57; + const key = peg$currPos * 68 + 58; const cached = peg$resultsCache[key]; if (cached) { @@ -4629,7 +4813,7 @@ function peg$parse(input, options) { s4 = peg$parseoffset(); if (s4 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f77(s1, s3, s4); + s0 = peg$f81(s1, s3, s4); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4655,7 +4839,7 @@ function peg$parse(input, options) { s3 = peg$parsetime_part(); if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f78(s1, s3); + s0 = peg$f82(s1, s3); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4684,7 +4868,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f79(s1); + s0 = peg$f83(s1); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4698,7 +4882,7 @@ function peg$parse(input, options) { s1 = peg$parsetime_part(); if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f80(s1); + s1 = peg$f84(s1); } s0 = s1; } @@ -4713,7 +4897,7 @@ function peg$parse(input, options) { function peg$parseS() { let s0; - const key = peg$currPos * 67 + 58; + const key = peg$currPos * 68 + 59; const cached = peg$resultsCache[key]; if (cached) { @@ -4727,7 +4911,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e38); } + if (peg$silentFails === 0) { peg$fail(peg$e39); } } peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; @@ -4738,7 +4922,7 @@ function peg$parse(input, options) { function peg$parseNL() { let s0, s1, s2; - const key = peg$currPos * 67 + 59; + const key = peg$currPos * 68 + 60; const cached = peg$resultsCache[key]; if (cached) { @@ -4748,28 +4932,28 @@ function peg$parse(input, options) { } if (input.charCodeAt(peg$currPos) === 10) { - s0 = peg$c28; + s0 = peg$c29; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e39); } + if (peg$silentFails === 0) { peg$fail(peg$e40); } } if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 13) { - s1 = peg$c29; + s1 = peg$c30; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e40); } + if (peg$silentFails === 0) { peg$fail(peg$e41); } } if (s1 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 10) { - s2 = peg$c28; + s2 = peg$c29; peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e39); } + if (peg$silentFails === 0) { peg$fail(peg$e40); } } if (s2 !== peg$FAILED) { s1 = [s1, s2]; @@ -4792,7 +4976,7 @@ function peg$parse(input, options) { function peg$parseNLS() { let s0; - const key = peg$currPos * 67 + 60; + const key = peg$currPos * 68 + 61; const cached = peg$resultsCache[key]; if (cached) { @@ -4814,7 +4998,7 @@ function peg$parse(input, options) { function peg$parseEOF() { let s0, s1; - const key = peg$currPos * 67 + 61; + const key = peg$currPos * 68 + 62; const cached = peg$resultsCache[key]; if (cached) { @@ -4848,7 +5032,7 @@ function peg$parse(input, options) { function peg$parseDIGIT() { let s0; - const key = peg$currPos * 67 + 62; + const key = peg$currPos * 68 + 63; const cached = peg$resultsCache[key]; if (cached) { @@ -4862,7 +5046,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e24); } + if (peg$silentFails === 0) { peg$fail(peg$e25); } } peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; @@ -4873,7 +5057,7 @@ function peg$parse(input, options) { function peg$parseHEX() { let s0; - const key = peg$currPos * 67 + 63; + const key = peg$currPos * 68 + 64; const cached = peg$resultsCache[key]; if (cached) { @@ -4887,7 +5071,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e25); } + if (peg$silentFails === 0) { peg$fail(peg$e26); } } peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; @@ -4898,7 +5082,7 @@ function peg$parse(input, options) { function peg$parseASCII_BASIC() { let s0; - const key = peg$currPos * 67 + 64; + const key = peg$currPos * 68 + 65; const cached = peg$resultsCache[key]; if (cached) { @@ -4912,7 +5096,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e41); } + if (peg$silentFails === 0) { peg$fail(peg$e42); } } peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; @@ -4923,7 +5107,7 @@ function peg$parse(input, options) { function peg$parseESCAPED() { let s0, s1; - const key = peg$currPos * 67 + 65; + const key = peg$currPos * 68 + 66; const cached = peg$resultsCache[key]; if (cached) { @@ -4933,104 +5117,119 @@ function peg$parse(input, options) { } s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c30) { - s1 = peg$c30; + if (input.substr(peg$currPos, 2) === peg$c31) { + s1 = peg$c31; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e42); } + if (peg$silentFails === 0) { peg$fail(peg$e43); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f81(); + s1 = peg$f85(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c31) { - s1 = peg$c31; + if (input.substr(peg$currPos, 2) === peg$c32) { + s1 = peg$c32; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e43); } + if (peg$silentFails === 0) { peg$fail(peg$e44); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f82(); + s1 = peg$f86(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c32) { - s1 = peg$c32; + if (input.substr(peg$currPos, 2) === peg$c33) { + s1 = peg$c33; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e44); } + if (peg$silentFails === 0) { peg$fail(peg$e45); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f83(); + s1 = peg$f87(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c33) { - s1 = peg$c33; + if (input.substr(peg$currPos, 2) === peg$c34) { + s1 = peg$c34; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e45); } + if (peg$silentFails === 0) { peg$fail(peg$e46); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f84(); + s1 = peg$f88(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c34) { - s1 = peg$c34; + if (input.substr(peg$currPos, 2) === peg$c35) { + s1 = peg$c35; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e46); } + if (peg$silentFails === 0) { peg$fail(peg$e47); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f85(); + s1 = peg$f89(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c35) { - s1 = peg$c35; + if (input.substr(peg$currPos, 2) === peg$c36) { + s1 = peg$c36; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e47); } + if (peg$silentFails === 0) { peg$fail(peg$e48); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f86(); + s1 = peg$f90(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c36) { - s1 = peg$c36; + if (input.substr(peg$currPos, 2) === peg$c37) { + s1 = peg$c37; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e48); } + if (peg$silentFails === 0) { peg$fail(peg$e49); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f87(); + s1 = peg$f91(); } s0 = s1; if (s0 === peg$FAILED) { - s0 = peg$parseESCAPED_UNICODE(); + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c38) { + s1 = peg$c38; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e50); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f92(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$parseESCAPED_UNICODE(); + } } } } @@ -5047,7 +5246,7 @@ function peg$parse(input, options) { function peg$parseESCAPED_UNICODE() { let s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; - const key = peg$currPos * 67 + 66; + const key = peg$currPos * 68 + 67; const cached = peg$resultsCache[key]; if (cached) { @@ -5057,12 +5256,12 @@ function peg$parse(input, options) { } s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c37) { - s1 = peg$c37; + if (input.substr(peg$currPos, 2) === peg$c39) { + s1 = peg$c39; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e49); } + if (peg$silentFails === 0) { peg$fail(peg$e51); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -5118,7 +5317,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f88(s2); + s0 = peg$f93(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -5129,12 +5328,12 @@ function peg$parse(input, options) { } if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c38) { - s1 = peg$c38; + if (input.substr(peg$currPos, 2) === peg$c40) { + s1 = peg$c40; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e50); } + if (peg$silentFails === 0) { peg$fail(peg$e52); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -5166,7 +5365,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f89(s2); + s0 = peg$f94(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -5175,6 +5374,43 @@ function peg$parse(input, options) { peg$currPos = s0; s0 = peg$FAILED; } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c41) { + s1 = peg$c41; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e53); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = peg$parseHEX(); + if (s3 !== peg$FAILED) { + s4 = peg$parseHEX(); + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f95(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } } peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; @@ -5256,8 +5492,9 @@ function peg$parse(input, options) { function isControlCharMultiline(ch) { var code = ch.charCodeAt(0); - // Same as isControlChar but allows newline (0x0A) and carriage return (0x0D) - return (code >= 0x00 && code <= 0x08) || (code >= 0x0B && code <= 0x0C) || (code >= 0x0E && code <= 0x1F) || code === 0x7F; + // Same as isControlChar but allows newline (0x0A). Bare \r (0x0D) is still + // rejected; valid \r\n sequences are handled explicitly in the grammar rules. + return (code >= 0x00 && code <= 0x08) || (code >= 0x0B && code <= 0x1F) || code === 0x7F; } function stripUnderscores(str) { diff --git a/src/toml.pegjs b/src/toml.pegjs index 77f73d4..d3b81e1 100644 --- a/src/toml.pegjs +++ b/src/toml.pegjs @@ -72,8 +72,9 @@ function isControlCharMultiline(ch) { var code = ch.charCodeAt(0); - // Same as isControlChar but allows newline (0x0A) and carriage return (0x0D) - return (code >= 0x00 && code <= 0x08) || (code >= 0x0B && code <= 0x0C) || (code >= 0x0E && code <= 0x1F) || code === 0x7F; + // Same as isControlChar but allows newline (0x0A). Bare \r (0x0D) is still + // rejected; valid \r\n sequences are handled explicitly in the grammar rules. + return (code >= 0x00 && code <= 0x08) || (code >= 0x0B && code <= 0x1F) || code === 0x7F; } function stripUnderscores(str) { @@ -203,6 +204,7 @@ mlb_content = ESCAPED / mlb_escaped_newline / '\\' . { genError("Invalid escape sequence", location().start.line, location().start.column) } + / "\r\n" { return "\n" } / !'"' char:. { if (isControlCharMultiline(char)) genError("Control characters are not allowed in strings", location().start.line, location().start.column); return char } mlb_escaped_newline @@ -225,7 +227,8 @@ mll_body } mll_content - = !"'" char:. { if (isControlCharMultiline(char)) genError("Control characters are not allowed in strings", location().start.line, location().start.column); return char } + = "\r\n" { return "\n" } + / !"'" char:. { if (isControlCharMultiline(char)) genError("Control characters are not allowed in strings", location().start.line, location().start.column); return char } mll_quotes = "''" !"'" { return "''" } @@ -311,15 +314,19 @@ array_sep = S / NL / comment inline_table - = '{' S* '}' { return node('InlineTable', [], location()) } - / '{' S* entries:inline_table_entry_list S* last:inline_table_entry S* '}' { return node('InlineTable', entries.concat(last), location()) } - / '{' S* entry:inline_table_entry S* '}' { return node('InlineTable', [entry], location()) } + = '{' inline_sep* '}' { return node('InlineTable', [], location()) } + / '{' inline_sep* entries:inline_table_entry_list inline_sep* last:inline_table_entry inline_sep* '}' { return node('InlineTable', entries.concat(last), location()) } + / '{' inline_sep* entries:inline_table_entry_list inline_sep* '}' { return node('InlineTable', entries, location()) } + / '{' inline_sep* entry:inline_table_entry inline_sep* '}' { return node('InlineTable', [entry], location()) } inline_table_entry_list - = entries:(S* e:inline_table_entry S* ',' { return e })+ { return entries } + = entries:(inline_sep* e:inline_table_entry inline_sep* ',' { return e })+ { return entries } inline_table_entry - = keys:inline_key S* '=' S* value:value { return node('InlineTableValue', value, location(), keys) } + = keys:inline_key S* '=' S* value:value { return node('InlineTableValue', value, location(), keys) } + +inline_sep + = S / NL / comment inline_key = parts:inline_dot_key_part+ S* last:simple_key { return parts.concat(last) } @@ -340,6 +347,7 @@ date_part time_part = t:(DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT secfragment?) { return t.join('') } + / t:(DIGIT DIGIT ':' DIGIT DIGIT) !(':') { return t.join('') + ':00' } offset = 'Z'i { return "Z" } @@ -369,6 +377,8 @@ ESCAPED = '\\"' { return '"' } / '\\n' { return '\n' } / '\\f' { return '\f' } / '\\r' { return '\r' } + / '\\e' { return '\x1B' } / ESCAPED_UNICODE ESCAPED_UNICODE = "\\U" digits:(HEX HEX HEX HEX HEX HEX HEX HEX) { return convertCodePoint(digits.join('')) } / "\\u" digits:(HEX HEX HEX HEX) { return convertCodePoint(digits.join('')) } + / "\\x" digits:(HEX HEX) { return convertCodePoint(digits.join('')) } diff --git a/test/spec-test.js b/test/spec-test.js index 9e5fdde..a948c64 100644 --- a/test/spec-test.js +++ b/test/spec-test.js @@ -23,7 +23,7 @@ var parser = require("../lib/parser"); // --------------------------------------------------------------------------- var TESTS_DIR = path.join(__dirname, "..", ".binarymuse", "toml-test", "tests"); -var FILES_LIST = path.join(TESTS_DIR, "files-toml-1.0.0"); +var FILES_LIST = path.join(TESTS_DIR, "files-toml-1.1.0"); // Known failures due to JS platform limitations, not parser bugs. // These are excluded from the pass/fail exit code. From 7261002714662c07025ad43b404e572dc0878a6f Mon Sep 17 00:00:00 2001 From: Michelle Tilley Date: Tue, 31 Mar 2026 19:05:10 -0700 Subject: [PATCH 2/2] Update README and package.json for TOML v1.1.0 compliance --- README.md | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 9a111bf..bb47206 100644 --- a/README.md +++ b/README.md @@ -8,28 +8,28 @@ If you haven't heard of TOML, well you're just missing out. [Go check it out now TOML Spec Support ----------------- -toml-node supports [TOML v1.0.0](https://toml.io/en/v1.0.0), scoring **671/678 (99.0%)** on the official [toml-test](https://github.com/toml-lang/toml-test) compliance suite: +toml-node supports [TOML v1.1.0](https://toml.io/en/v1.1.0), scoring **673/680 (99.0%)** on the official [toml-test](https://github.com/toml-lang/toml-test) compliance suite: | | Pass | Total | Rate | |---|---|---|---| -| Valid tests | 204 | 205 | 99.5% | -| Invalid tests | 467 | 473 | 98.7% | -| **Total** | **671** | **678** | **99.0%** | +| Valid tests | 213 | 214 | 99.5% | +| Invalid tests | 460 | 466 | 98.7% | +| **Total** | **673** | **680** | **99.0%** | The 7 remaining failures are inherent JavaScript platform limitations shared by all JS TOML parsers: - 1 valid test: 64-bit integer precision (`Number` can't represent values beyond `Number.MAX_SAFE_INTEGER`) - 6 invalid tests: UTF-8 encoding validation (Node.js handles UTF-8 decoding at the engine level before the parser sees the data) -### v1.0.0 Feature Support +### Feature Support -- **Strings**: basic, literal, multiline, all escape sequences (`\uXXXX`, `\UXXXXXXXX`) +- **Strings**: basic, literal, multiline, all escape sequences (`\uXXXX`, `\UXXXXXXXX`, `\xHH`, `\e`) - **Integers**: decimal, hexadecimal (`0xDEADBEEF`), octal (`0o755`), binary (`0b11010110`) - **Floats**: decimal, scientific notation, `inf`, `-inf`, `nan` - **Booleans**: `true`, `false` -- **Dates/Times**: offset date-time, local date-time, local date, local time +- **Dates/Times**: offset date-time, local date-time, local date, local time; seconds optional - **Arrays**: mixed types allowed -- **Tables**: standard, inline (with dotted and quoted keys), array of tables +- **Tables**: standard, inline (with dotted/quoted keys, newlines, trailing commas), array of tables - **Keys**: bare, quoted, dotted (`fruit.apple.color = "red"`) - **Comments**: `# line comments` diff --git a/package.json b/package.json index 4b2b59d..c6d9b04 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "toml", "version": "4.0.1", - "description": "TOML parser for Node.js (TOML v1.0.0 compliant)", + "description": "TOML parser for Node.js (TOML v1.1.0 compliant)", "main": "index.js", "types": "index.d.ts", "files": [