end-of-semester-report/node_modules/@unified-latex/unified-latex-util-pegjs/index.cjs
2025-05-14 16:14:35 +07:00

16701 lines
491 KiB
JavaScript

"use strict";
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const unifiedLatexUtilMatch = require("@unified-latex/unified-latex-util-match");
function decorateArrayForPegjs(array) {
array.charAt = function(i) {
return this[i];
};
array.charCodeAt = () => 0;
array.substring = function(i, j) {
return this.slice(i, j);
};
array.replace = function(a, b) {
const ret = JSON.stringify(this);
return ret.replace(a, b);
};
return array;
}
function splitStringsIntoSingleChars(nodes) {
return nodes.flatMap(
(node) => unifiedLatexUtilMatch.match.anyString(node) ? Array.from(node.content).map((c) => ({
type: "string",
content: c
})) : node
);
}
const _LatexPegParser = (
// Generated by Peggy 3.0.2.
//
// https://peggyjs.org/
function() {
function peg$subclass(child, parent) {
function C() {
this.constructor = child;
}
C.prototype = parent.prototype;
child.prototype = new C();
}
function peg$SyntaxError(message, expected, found, location) {
var self = Error.call(this, message);
if (Object.setPrototypeOf) {
Object.setPrototypeOf(self, peg$SyntaxError.prototype);
}
self.expected = expected;
self.found = found;
self.location = location;
self.name = "SyntaxError";
return self;
}
peg$subclass(peg$SyntaxError, Error);
function peg$padEnd(str, targetLength, padString) {
padString = padString || " ";
if (str.length > targetLength) {
return str;
}
targetLength -= str.length;
padString += padString.repeat(targetLength);
return str + padString.slice(0, targetLength);
}
peg$SyntaxError.prototype.format = function(sources) {
var str = "Error: " + this.message;
if (this.location) {
var src = null;
var k;
for (k = 0; k < sources.length; k++) {
if (sources[k].source === this.location.source) {
src = sources[k].text.split(/\r\n|\n|\r/g);
break;
}
}
var s = this.location.start;
var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s;
var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column;
if (src) {
var e = this.location.end;
var filler = peg$padEnd("", offset_s.line.toString().length, " ");
var line = src[s.line - 1];
var last = s.line === e.line ? e.column : line.length + 1;
var hatLen = last - s.column || 1;
str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^");
} else {
str += "\n at " + loc;
}
}
return str;
};
peg$SyntaxError.buildMessage = function(expected, found) {
var DESCRIBE_EXPECTATION_FNS = {
literal: function(expectation) {
return '"' + literalEscape(expectation.text) + '"';
},
class: function(expectation) {
var escapedParts = expectation.parts.map(function(part) {
return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part);
});
return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]";
},
any: function() {
return "any character";
},
end: function() {
return "end of input";
},
other: function(expectation) {
return expectation.description;
}
};
function hex(ch) {
return ch.charCodeAt(0).toString(16).toUpperCase();
}
function literalEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function classEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function describeExpectation(expectation) {
return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);
}
function describeExpected(expected2) {
var descriptions = expected2.map(describeExpectation);
var i, j;
descriptions.sort();
if (descriptions.length > 0) {
for (i = 1, j = 1; i < descriptions.length; i++) {
if (descriptions[i - 1] !== descriptions[i]) {
descriptions[j] = descriptions[i];
j++;
}
}
descriptions.length = j;
}
switch (descriptions.length) {
case 1:
return descriptions[0];
case 2:
return descriptions[0] + " or " + descriptions[1];
default:
return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1];
}
}
function describeFound(found2) {
return found2 ? '"' + literalEscape(found2) + '"' : "end of input";
}
return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found.";
};
function peg$parse(input, options) {
options = options !== void 0 ? options : {};
var peg$FAILED = {};
var peg$source = options.grammarSource;
var peg$startRuleFunctions = { document: peg$parsedocument, math: peg$parsemath };
var peg$startRuleFunction = peg$parsedocument;
var peg$c0 = "%";
var peg$c1 = ".";
var peg$c2 = "verb*";
var peg$c3 = "verb";
var peg$c4 = "[";
var peg$c5 = "]";
var peg$c6 = "lstinline";
var peg$c7 = "mintinline";
var peg$c8 = "mint";
var peg$c9 = "minted";
var peg$c10 = "verbatim*";
var peg$c11 = "verbatim";
var peg$c12 = "filecontents*";
var peg$c13 = "filecontents";
var peg$c14 = "comment";
var peg$c15 = "lstlisting";
var peg$c16 = "(";
var peg$c17 = ")";
var peg$c18 = "begin";
var peg$c19 = "end";
var peg$c20 = "equation*";
var peg$c21 = "equation";
var peg$c22 = "align*";
var peg$c23 = "align";
var peg$c24 = "alignat*";
var peg$c25 = "alignat";
var peg$c26 = "gather*";
var peg$c27 = "gather";
var peg$c28 = "multline*";
var peg$c29 = "multline";
var peg$c30 = "flalign*";
var peg$c31 = "flalign";
var peg$c32 = "split";
var peg$c33 = "math";
var peg$c34 = "displaymath";
var peg$c35 = "\\";
var peg$c36 = "{";
var peg$c37 = "}";
var peg$c38 = "$";
var peg$c39 = "&";
var peg$c40 = "\r";
var peg$c41 = "\n";
var peg$c42 = "\r\n";
var peg$c43 = "#";
var peg$c44 = "^";
var peg$c45 = "_";
var peg$c46 = "\0";
var peg$r0 = /^[^ \t\n\r]/;
var peg$r1 = /^[ \t]/;
var peg$r2 = /^[a-zA-Z]/;
var peg$r3 = /^[0-9]/;
var peg$r4 = /^[.,;:\-*\/()!?=+<>[\]`'"~]/;
var peg$e0 = peg$otherExpectation("document");
var peg$e1 = peg$otherExpectation("math");
var peg$e2 = peg$otherExpectation("token");
var peg$e3 = peg$anyExpectation();
var peg$e4 = peg$otherExpectation("parbreak");
var peg$e5 = peg$otherExpectation("math token");
var peg$e6 = peg$otherExpectation("nonchar token");
var peg$e7 = peg$literalExpectation("%", false);
var peg$e8 = peg$otherExpectation("whitespace");
var peg$e9 = peg$otherExpectation("number");
var peg$e10 = peg$literalExpectation(".", false);
var peg$e11 = peg$otherExpectation("special macro");
var peg$e12 = peg$literalExpectation("verb*", false);
var peg$e13 = peg$literalExpectation("verb", false);
var peg$e14 = peg$literalExpectation("[", false);
var peg$e15 = peg$literalExpectation("]", false);
var peg$e16 = peg$classExpectation([" ", " ", "\n", "\r"], true, false);
var peg$e17 = peg$otherExpectation("verbatim listings");
var peg$e18 = peg$literalExpectation("lstinline", false);
var peg$e19 = peg$otherExpectation("verbatim minted");
var peg$e20 = peg$literalExpectation("mintinline", false);
var peg$e21 = peg$literalExpectation("mint", false);
var peg$e22 = peg$otherExpectation("verbatim minted environment");
var peg$e23 = peg$literalExpectation("minted", false);
var peg$e24 = peg$otherExpectation("verbatim environment");
var peg$e25 = peg$literalExpectation("verbatim*", false);
var peg$e26 = peg$literalExpectation("verbatim", false);
var peg$e27 = peg$literalExpectation("filecontents*", false);
var peg$e28 = peg$literalExpectation("filecontents", false);
var peg$e29 = peg$literalExpectation("comment", false);
var peg$e30 = peg$literalExpectation("lstlisting", false);
var peg$e31 = peg$otherExpectation("macro");
var peg$e32 = peg$otherExpectation("group");
var peg$e33 = peg$otherExpectation("environment");
var peg$e34 = peg$otherExpectation("math environment");
var peg$e36 = peg$literalExpectation("(", false);
var peg$e37 = peg$literalExpectation(")", false);
var peg$e38 = peg$literalExpectation("begin", false);
var peg$e39 = peg$literalExpectation("end", false);
var peg$e40 = peg$literalExpectation("equation*", false);
var peg$e41 = peg$literalExpectation("equation", false);
var peg$e42 = peg$literalExpectation("align*", false);
var peg$e43 = peg$literalExpectation("align", false);
var peg$e44 = peg$literalExpectation("alignat*", false);
var peg$e45 = peg$literalExpectation("alignat", false);
var peg$e46 = peg$literalExpectation("gather*", false);
var peg$e47 = peg$literalExpectation("gather", false);
var peg$e48 = peg$literalExpectation("multline*", false);
var peg$e49 = peg$literalExpectation("multline", false);
var peg$e50 = peg$literalExpectation("flalign*", false);
var peg$e51 = peg$literalExpectation("flalign", false);
var peg$e52 = peg$literalExpectation("split", false);
var peg$e53 = peg$literalExpectation("math", false);
var peg$e54 = peg$literalExpectation("displaymath", false);
var peg$e55 = peg$otherExpectation("escape");
var peg$e56 = peg$literalExpectation("\\", false);
var peg$e57 = peg$literalExpectation("{", false);
var peg$e58 = peg$literalExpectation("}", false);
var peg$e59 = peg$literalExpectation("$", false);
var peg$e60 = peg$literalExpectation("&", false);
var peg$e61 = peg$otherExpectation("newline");
var peg$e62 = peg$literalExpectation("\r", false);
var peg$e63 = peg$literalExpectation("\n", false);
var peg$e64 = peg$literalExpectation("\r\n", false);
var peg$e65 = peg$literalExpectation("#", false);
var peg$e66 = peg$literalExpectation("^", false);
var peg$e67 = peg$literalExpectation("_", false);
var peg$e68 = peg$literalExpectation("\0", false);
var peg$e69 = peg$classExpectation([" ", " "], false, false);
var peg$e70 = peg$otherExpectation("letter");
var peg$e71 = peg$classExpectation([["a", "z"], ["A", "Z"]], false, false);
var peg$e72 = peg$otherExpectation("digit");
var peg$e73 = peg$classExpectation([["0", "9"]], false, false);
var peg$e74 = peg$otherExpectation("punctuation");
var peg$e75 = peg$classExpectation([".", ",", ";", ":", "-", "*", "/", "(", ")", "!", "?", "=", "+", "<", ">", "[", "]", "`", "'", '"', "~"], false, false);
var peg$e76 = peg$otherExpectation("full comment");
var peg$e77 = peg$otherExpectation("comment");
var peg$f0 = function(content) {
return createNode("root", { content: content.flatMap((x) => x) });
};
var peg$f1 = function(t) {
return t;
};
var peg$f2 = function(eq) {
return createNode("inlinemath", { content: eq.flatMap((x) => x) });
};
var peg$f3 = function(s) {
return createNode("string", { content: s });
};
var peg$f4 = function(s) {
return createNode("string", { content: s });
};
var peg$f5 = function() {
return createNode("parbreak");
};
var peg$f6 = function(x) {
return x;
};
var peg$f7 = function(x) {
return x;
};
var peg$f8 = function() {
return createNode("macro", { content: "^", escapeToken: "" });
};
var peg$f9 = function() {
return createNode("macro", { content: "_", escapeToken: "" });
};
var peg$f10 = function(s) {
return createNode("string", { content: s });
};
var peg$f11 = function() {
return createNode("whitespace");
};
var peg$f12 = function(a, b) {
return a.join("") + "." + b.join("");
};
var peg$f13 = function(b) {
return "." + b.join("");
};
var peg$f14 = function(a) {
return a.join("") + ".";
};
var peg$f15 = function(s) {
return createNode("string", { content: s });
};
var peg$f16 = function(env, e, end) {
return end == e;
};
var peg$f17 = function(env, e, x) {
return x;
};
var peg$f18 = function(env, e, x, end) {
return end == e;
};
var peg$f19 = function(env, e, x) {
return createNode("verb", {
env,
escape: e,
content: x.join("")
});
};
var peg$f20 = function(x) {
return x;
};
var peg$f21 = function(x) {
return createNode("displaymath", { content: x.flatMap((x2) => x2) });
};
var peg$f22 = function(x) {
return x;
};
var peg$f23 = function(x) {
return createNode("inlinemath", { content: x.flatMap((x2) => x2) });
};
var peg$f24 = function(x) {
return x;
};
var peg$f25 = function(x) {
return createNode("displaymath", { content: x.flatMap((x2) => x2) });
};
var peg$f26 = function(end) {
return end.type === "string" && end.content === "]";
};
var peg$f27 = function(x) {
return x;
};
var peg$f28 = function(o) {
return [
createNode("string", { content: "[" }),
...o,
createNode("string", { content: "]" })
];
};
var peg$f29 = function(x) {
return x;
};
var peg$f30 = function(v) {
return createNode("group", {
content: createNode("string", { content: v.join("") })
});
};
var peg$f31 = function(d, end) {
return end == d;
};
var peg$f32 = function(d, x) {
return x;
};
var peg$f33 = function(d, v, end) {
return end == d;
};
var peg$f34 = function(d, v) {
return [
createNode("string", { content: d }),
createNode("string", { content: v.join("") }),
createNode("string", { content: d })
];
};
var peg$f35 = function(macro, option, verbatim) {
return [
createNode("macro", { content: macro }),
...option || [],
...[].concat(verbatim)
];
};
var peg$f36 = function(macro, option, language, verbatim) {
return [
createNode("macro", { content: macro }),
...option || [],
language,
...[].concat(verbatim)
];
};
var peg$f37 = function(env, option, language, end_env) {
return compare_env({ content: [env] }, end_env);
};
var peg$f38 = function(env, option, language, body) {
const content = [
...option || [],
language,
{ type: "string", content: body }
];
return createNode("environment", {
env,
content
});
};
var peg$f39 = function(env, end_env) {
return compare_env({ content: [env] }, end_env);
};
var peg$f40 = function(env, x) {
return x;
};
var peg$f41 = function(env, body) {
return createNode("verbatim", {
env,
content: body
});
};
var peg$f42 = function(n) {
return n.join("");
};
var peg$f43 = function(n) {
return n;
};
var peg$f44 = function(m) {
return createNode("macro", { content: m });
};
var peg$f45 = function(c) {
return c;
};
var peg$f46 = function(x) {
return createNode("group", { content: x.flatMap((x2) => x2) });
};
var peg$f47 = function(g) {
return text().slice(1, -1);
};
var peg$f48 = function(env, env_comment, end_env) {
return compare_env(env, end_env);
};
var peg$f49 = function(env, env_comment, x) {
return x;
};
var peg$f50 = function(env, env_comment, body) {
body = body.flatMap((x) => x);
return createNode("environment", {
env,
content: env_comment ? [env_comment, ...body] : body
});
};
var peg$f51 = function(env, env_comment, end_env) {
return compare_env({ content: [env] }, end_env);
};
var peg$f52 = function(env, env_comment, x) {
return x;
};
var peg$f53 = function(env, env_comment, body) {
body = body.flatMap((x) => x);
return createNode("mathenv", {
env,
content: env_comment ? [env_comment, ...body] : body
});
};
var peg$f56 = function(e) {
return createNode("string", { content: e });
};
var peg$f57 = function() {
return createNode("string", { content: "\\" });
};
var peg$f58 = function(s) {
return createNode("string", { content: s });
};
var peg$f59 = function(s) {
return createNode("string", { content: s });
};
var peg$f60 = function(s) {
return createNode("string", { content: s });
};
var peg$f61 = function(s) {
return createNode("string", { content: s });
};
var peg$f62 = function(s) {
return createNode("string", { content: s });
};
var peg$f63 = function(s) {
return createNode("string", { content: s });
};
var peg$f64 = function(s) {
return createNode("string", { content: s });
};
var peg$f65 = function() {
return " ";
};
var peg$f66 = function(p) {
return createNode("string", { content: p });
};
var peg$f67 = function(leading_sp, comment) {
return createNode("comment", {
...comment,
sameline: false,
leadingWhitespace: leading_sp.length > 0
});
};
var peg$f68 = function(spaces, x) {
return createNode("comment", {
...x,
sameline: true,
leadingWhitespace: spaces.length > 0
});
};
var peg$f69 = function(c) {
return c;
};
var peg$f70 = function(c) {
return { content: c.join(""), suffixParbreak: true };
};
var peg$f71 = function(c) {
return c;
};
var peg$f72 = function(c) {
return { content: c.join("") };
};
var peg$f73 = function() {
var loc = location();
return loc.start.column === 1;
};
var peg$currPos = 0;
var peg$savedPos = 0;
var peg$posDetailsCache = [{ line: 1, column: 1 }];
var peg$maxFailPos = 0;
var peg$maxFailExpected = [];
var peg$silentFails = 0;
var peg$resultsCache = {};
var peg$result;
if ("startRule" in options) {
if (!(options.startRule in peg$startRuleFunctions)) {
throw new Error(`Can't start parsing from rule "` + options.startRule + '".');
}
peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
}
function text() {
return input.substring(peg$savedPos, peg$currPos);
}
function location() {
return peg$computeLocation(peg$savedPos, peg$currPos);
}
function peg$literalExpectation(text2, ignoreCase) {
return { type: "literal", text: text2, ignoreCase };
}
function peg$classExpectation(parts, inverted, ignoreCase) {
return { type: "class", parts, inverted, ignoreCase };
}
function peg$anyExpectation() {
return { type: "any" };
}
function peg$endExpectation() {
return { type: "end" };
}
function peg$otherExpectation(description) {
return { type: "other", description };
}
function peg$computePosDetails(pos) {
var details = peg$posDetailsCache[pos];
var p;
if (details) {
return details;
} else {
p = pos - 1;
while (!peg$posDetailsCache[p]) {
p--;
}
details = peg$posDetailsCache[p];
details = {
line: details.line,
column: details.column
};
while (p < pos) {
if (input.charCodeAt(p) === 10) {
details.line++;
details.column = 1;
} else {
details.column++;
}
p++;
}
peg$posDetailsCache[pos] = details;
return details;
}
}
function peg$computeLocation(startPos, endPos, offset2) {
var startPosDetails = peg$computePosDetails(startPos);
var endPosDetails = peg$computePosDetails(endPos);
var res = {
source: peg$source,
start: {
offset: startPos,
line: startPosDetails.line,
column: startPosDetails.column
},
end: {
offset: endPos,
line: endPosDetails.line,
column: endPosDetails.column
}
};
return res;
}
function peg$fail(expected2) {
if (peg$currPos < peg$maxFailPos) {
return;
}
if (peg$currPos > peg$maxFailPos) {
peg$maxFailPos = peg$currPos;
peg$maxFailExpected = [];
}
peg$maxFailExpected.push(expected2);
}
function peg$buildStructuredError(expected2, found, location2) {
return new peg$SyntaxError(
peg$SyntaxError.buildMessage(expected2, found),
expected2,
found,
location2
);
}
function peg$parsedocument() {
var s0, s1, s2;
var key = peg$currPos * 52 + 0;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$currPos;
s1 = [];
s2 = peg$parsetoken();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsetoken();
}
peg$savedPos = s0;
s1 = peg$f0(s1);
s0 = s1;
peg$silentFails--;
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsemath() {
var s0, s1;
var key = peg$currPos * 52 + 1;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = [];
s1 = peg$parsemath_token();
while (s1 !== peg$FAILED) {
s0.push(s1);
s1 = peg$parsemath_token();
}
peg$silentFails--;
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e1);
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsetoken() {
var s0, s1, s2, s3, s4, s5;
var key = peg$currPos * 52 + 2;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$parsespecial_macro();
if (s0 === peg$FAILED) {
s0 = peg$parsemacro();
if (s0 === peg$FAILED) {
s0 = peg$parsefull_comment();
if (s0 === peg$FAILED) {
s0 = peg$parsegroup();
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsemath_shift();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$parsemath_shift();
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s5 = peg$parsemath_token();
if (s5 !== peg$FAILED) {
peg$savedPos = s3;
s3 = peg$f1(s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
if (s3 !== peg$FAILED) {
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$parsemath_shift();
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s5 = peg$parsemath_token();
if (s5 !== peg$FAILED) {
peg$savedPos = s3;
s3 = peg$f1(s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
}
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s3 = peg$parsemath_shift();
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f2(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$parsealignment_tab();
if (s0 === peg$FAILED) {
s0 = peg$parseparbreak();
if (s0 === peg$FAILED) {
s0 = peg$parsemacro_parameter();
if (s0 === peg$FAILED) {
s0 = peg$parseignore();
if (s0 === peg$FAILED) {
s0 = peg$parsenumber();
if (s0 === peg$FAILED) {
s0 = peg$parsewhitespace();
if (s0 === peg$FAILED) {
s0 = peg$parsepunctuation();
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$currPos;
s2 = [];
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$parsenonchar_token();
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
if (input.length > peg$currPos) {
s5 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s5 !== peg$FAILED) {
s4 = [s4, s5];
s3 = s4;
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
if (s3 !== peg$FAILED) {
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$parsenonchar_token();
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
if (input.length > peg$currPos) {
s5 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s5 !== peg$FAILED) {
s4 = [s4, s5];
s3 = s4;
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
}
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = input.substring(s1, peg$currPos);
} else {
s1 = s2;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$f3(s1);
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$parsebegin_group();
if (s0 === peg$FAILED) {
s0 = peg$parseend_group();
if (s0 === peg$FAILED) {
s0 = peg$parsemath_shift();
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$f4(s1);
}
s0 = s1;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseparbreak() {
var s0, s1, s2, s3, s4, s5, s6, s7;
var key = peg$currPos * 52 + 3;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = [];
s3 = peg$parsesp();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsesp();
}
s3 = peg$parsenl();
if (s3 !== peg$FAILED) {
s4 = [];
s5 = peg$currPos;
s6 = [];
s7 = peg$parsesp();
while (s7 !== peg$FAILED) {
s6.push(s7);
s7 = peg$parsesp();
}
s7 = peg$parsenl();
if (s7 !== peg$FAILED) {
s6 = [s6, s7];
s5 = s6;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
if (s5 !== peg$FAILED) {
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$currPos;
s6 = [];
s7 = peg$parsesp();
while (s7 !== peg$FAILED) {
s6.push(s7);
s7 = peg$parsesp();
}
s7 = peg$parsenl();
if (s7 !== peg$FAILED) {
s6 = [s6, s7];
s5 = s6;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
}
} else {
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s5 = [];
s6 = peg$parsesp();
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$parsesp();
}
s6 = peg$currPos;
peg$silentFails++;
s7 = peg$parsecomment_start();
peg$silentFails--;
if (s7 === peg$FAILED) {
s6 = void 0;
} else {
peg$currPos = s6;
s6 = peg$FAILED;
}
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;
}
if (s1 === peg$FAILED) {
s1 = peg$currPos;
s2 = [];
s3 = peg$parsesp();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsesp();
}
s3 = peg$parsenl();
if (s3 !== peg$FAILED) {
s4 = [];
s5 = peg$currPos;
s6 = [];
s7 = peg$parsesp();
while (s7 !== peg$FAILED) {
s6.push(s7);
s7 = peg$parsesp();
}
s7 = peg$parsenl();
if (s7 !== peg$FAILED) {
s6 = [s6, s7];
s5 = s6;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
if (s5 !== peg$FAILED) {
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$currPos;
s6 = [];
s7 = peg$parsesp();
while (s7 !== peg$FAILED) {
s6.push(s7);
s7 = peg$parsesp();
}
s7 = peg$parsenl();
if (s7 !== peg$FAILED) {
s6 = [s6, s7];
s5 = s6;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
}
} else {
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s2 = [s2, s3, s4];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$f5();
}
s0 = s1;
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e4);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsemath_token() {
var s0, s1, s2, s3, s4;
var key = peg$currPos * 52 + 4;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$parsespecial_macro();
if (s0 === peg$FAILED) {
s0 = peg$parsemacro();
if (s0 === peg$FAILED) {
s0 = peg$parsefull_comment();
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
s2 = peg$parsewhitespace();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsewhitespace();
}
s2 = peg$parsegroup();
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parsewhitespace();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parsewhitespace();
}
peg$savedPos = s0;
s0 = peg$f6(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
s2 = peg$parsewhitespace();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsewhitespace();
}
s2 = peg$parsealignment_tab();
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parsewhitespace();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parsewhitespace();
}
peg$savedPos = s0;
s0 = peg$f7(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$parsemacro_parameter();
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
s2 = peg$parsewhitespace();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsewhitespace();
}
s2 = peg$parsesuperscript();
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parsewhitespace();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parsewhitespace();
}
peg$savedPos = s0;
s0 = peg$f8();
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
s2 = peg$parsewhitespace();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsewhitespace();
}
s2 = peg$parsesubscript();
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parsewhitespace();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parsewhitespace();
}
peg$savedPos = s0;
s0 = peg$f9();
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$parseignore();
if (s0 === peg$FAILED) {
s0 = peg$parsewhitespace();
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$f10(s1);
}
s0 = s1;
}
}
}
}
}
}
}
}
}
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e5);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsenonchar_token() {
var s0;
var key = peg$currPos * 52 + 5;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$parseescape();
if (s0 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 37) {
s0 = peg$c0;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e7);
}
}
if (s0 === peg$FAILED) {
s0 = peg$parsebegin_group();
if (s0 === peg$FAILED) {
s0 = peg$parseend_group();
if (s0 === peg$FAILED) {
s0 = peg$parsemath_shift();
if (s0 === peg$FAILED) {
s0 = peg$parsealignment_tab();
if (s0 === peg$FAILED) {
s0 = peg$parsenl();
if (s0 === peg$FAILED) {
s0 = peg$parsemacro_parameter();
if (s0 === peg$FAILED) {
s0 = peg$parseignore();
if (s0 === peg$FAILED) {
s0 = peg$parsesp();
if (s0 === peg$FAILED) {
s0 = peg$parsepunctuation();
if (s0 === peg$FAILED) {
s0 = peg$parseEOF();
}
}
}
}
}
}
}
}
}
}
}
peg$silentFails--;
if (s0 === peg$FAILED) {
if (peg$silentFails === 0) {
peg$fail(peg$e6);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsewhitespace() {
var s0, s1, s2, s3, s4, s5, s6, s7;
var key = peg$currPos * 52 + 6;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$parsenl();
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parsesp();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parsesp();
}
s2 = [s2, s3];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 === peg$FAILED) {
s1 = peg$currPos;
s2 = [];
s3 = peg$parsesp();
if (s3 !== peg$FAILED) {
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsesp();
}
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s3 = peg$parsenl();
if (s3 !== peg$FAILED) {
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$parsecomment_start();
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s5 = [];
s6 = peg$parsesp();
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$parsesp();
}
s6 = peg$currPos;
peg$silentFails++;
s7 = peg$parsenl();
peg$silentFails--;
if (s7 === peg$FAILED) {
s6 = void 0;
} else {
peg$currPos = s6;
s6 = peg$FAILED;
}
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;
}
if (s1 === peg$FAILED) {
s1 = [];
s2 = peg$parsesp();
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsesp();
}
} else {
s1 = peg$FAILED;
}
}
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$f11();
}
s0 = s1;
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e8);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsenumber() {
var s0, s1, s2, s3, s4, s5;
var key = peg$currPos * 52 + 7;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = [];
s3 = peg$parsenum();
if (s3 !== peg$FAILED) {
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsenum();
}
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 46) {
s3 = peg$c1;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e10);
}
}
if (s3 !== peg$FAILED) {
s4 = [];
s5 = peg$parsenum();
if (s5 !== peg$FAILED) {
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$parsenum();
}
} else {
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
peg$savedPos = s1;
s1 = peg$f12(s2, s4);
} 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) {
s1 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 46) {
s2 = peg$c1;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e10);
}
}
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parsenum();
if (s4 !== peg$FAILED) {
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parsenum();
}
} else {
s3 = peg$FAILED;
}
if (s3 !== peg$FAILED) {
peg$savedPos = s1;
s1 = peg$f13(s3);
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 === peg$FAILED) {
s1 = peg$currPos;
s2 = [];
s3 = peg$parsenum();
if (s3 !== peg$FAILED) {
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsenum();
}
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 46) {
s3 = peg$c1;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e10);
}
}
if (s3 !== peg$FAILED) {
peg$savedPos = s1;
s1 = peg$f14(s2);
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
}
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$f15(s1);
}
s0 = s1;
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e9);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsespecial_macro() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;
var key = peg$currPos * 52 + 8;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$parseescape();
if (s1 !== peg$FAILED) {
if (input.substr(peg$currPos, 5) === peg$c2) {
s2 = peg$c2;
peg$currPos += 5;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e12);
}
}
if (s2 === peg$FAILED) {
if (input.substr(peg$currPos, 4) === peg$c3) {
s2 = peg$c3;
peg$currPos += 4;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e13);
}
}
}
if (s2 !== peg$FAILED) {
if (input.length > peg$currPos) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s3 !== peg$FAILED) {
s4 = [];
s5 = peg$currPos;
s6 = peg$currPos;
peg$silentFails++;
s7 = peg$currPos;
if (input.length > peg$currPos) {
s8 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s8 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s8 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s9 = peg$f16(s2, s3, s8);
if (s9) {
s9 = void 0;
} else {
s9 = peg$FAILED;
}
if (s9 !== peg$FAILED) {
s8 = [s8, s9];
s7 = s8;
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
peg$silentFails--;
if (s7 === peg$FAILED) {
s6 = void 0;
} else {
peg$currPos = s6;
s6 = peg$FAILED;
}
if (s6 !== peg$FAILED) {
if (input.length > peg$currPos) {
s7 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s7 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s7 !== peg$FAILED) {
peg$savedPos = s5;
s5 = peg$f17(s2, s3, s7);
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$currPos;
s6 = peg$currPos;
peg$silentFails++;
s7 = peg$currPos;
if (input.length > peg$currPos) {
s8 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s8 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s8 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s9 = peg$f16(s2, s3, s8);
if (s9) {
s9 = void 0;
} else {
s9 = peg$FAILED;
}
if (s9 !== peg$FAILED) {
s8 = [s8, s9];
s7 = s8;
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
peg$silentFails--;
if (s7 === peg$FAILED) {
s6 = void 0;
} else {
peg$currPos = s6;
s6 = peg$FAILED;
}
if (s6 !== peg$FAILED) {
if (input.length > peg$currPos) {
s7 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s7 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s7 !== peg$FAILED) {
peg$savedPos = s5;
s5 = peg$f17(s2, s3, s7);
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
}
s5 = peg$currPos;
if (input.length > peg$currPos) {
s6 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s6 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s7 = peg$f18(s2, s3, s4, s6);
if (s7) {
s7 = void 0;
} else {
s7 = peg$FAILED;
}
if (s7 !== peg$FAILED) {
s6 = [s6, s7];
s5 = s6;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
if (s5 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f19(s2, s3, s4);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$parseverbatim_listings();
if (s0 === peg$FAILED) {
s0 = peg$parseverbatim_minted();
if (s0 === peg$FAILED) {
s0 = peg$parseverbatim_minted_environment();
if (s0 === peg$FAILED) {
s0 = peg$parseverbatim_environment();
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsebegin_display_math();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$parseend_display_math();
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s5 = peg$parsemath_token();
if (s5 !== peg$FAILED) {
peg$savedPos = s3;
s3 = peg$f20(s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$parseend_display_math();
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s5 = peg$parsemath_token();
if (s5 !== peg$FAILED) {
peg$savedPos = s3;
s3 = peg$f20(s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
}
s3 = peg$parseend_display_math();
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f21(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsebegin_inline_math();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$parseend_inline_math();
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s5 = peg$parsemath_token();
if (s5 !== peg$FAILED) {
peg$savedPos = s3;
s3 = peg$f22(s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$parseend_inline_math();
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s5 = peg$parsemath_token();
if (s5 !== peg$FAILED) {
peg$savedPos = s3;
s3 = peg$f22(s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
}
s3 = peg$parseend_inline_math();
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f23(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsemath_shift();
if (s1 !== peg$FAILED) {
s2 = peg$parsemath_shift();
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$currPos;
s5 = peg$currPos;
peg$silentFails++;
s6 = peg$currPos;
s7 = peg$parsemath_shift();
if (s7 !== peg$FAILED) {
s8 = peg$parsemath_shift();
if (s8 !== peg$FAILED) {
s7 = [s7, s8];
s6 = s7;
} else {
peg$currPos = s6;
s6 = peg$FAILED;
}
} else {
peg$currPos = s6;
s6 = peg$FAILED;
}
peg$silentFails--;
if (s6 === peg$FAILED) {
s5 = void 0;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
if (s5 !== peg$FAILED) {
s6 = peg$parsemath_token();
if (s6 !== peg$FAILED) {
peg$savedPos = s4;
s4 = peg$f24(s6);
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$currPos;
s5 = peg$currPos;
peg$silentFails++;
s6 = peg$currPos;
s7 = peg$parsemath_shift();
if (s7 !== peg$FAILED) {
s8 = peg$parsemath_shift();
if (s8 !== peg$FAILED) {
s7 = [s7, s8];
s6 = s7;
} else {
peg$currPos = s6;
s6 = peg$FAILED;
}
} else {
peg$currPos = s6;
s6 = peg$FAILED;
}
peg$silentFails--;
if (s6 === peg$FAILED) {
s5 = void 0;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
if (s5 !== peg$FAILED) {
s6 = peg$parsemath_token();
if (s6 !== peg$FAILED) {
peg$savedPos = s4;
s4 = peg$f24(s6);
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
}
s4 = peg$parsemath_shift();
if (s4 !== peg$FAILED) {
s5 = peg$parsemath_shift();
if (s5 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f25(s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$parsemath_environment();
if (s0 === peg$FAILED) {
s0 = peg$parseenvironment();
}
}
}
}
}
}
}
}
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e11);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsesquare_bracket_argument() {
var s0, s1, s2, s3, s4, s5, s6, s7;
var key = peg$currPos * 52 + 9;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 91) {
s1 = peg$c4;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e14);
}
}
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$currPos;
s6 = peg$parsetoken();
if (s6 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s7 = peg$f26(s6);
if (s7) {
s7 = void 0;
} else {
s7 = peg$FAILED;
}
if (s7 !== peg$FAILED) {
s6 = [s6, s7];
s5 = s6;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s5 = peg$parsetoken();
if (s5 !== peg$FAILED) {
peg$savedPos = s3;
s3 = peg$f27(s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$currPos;
s6 = peg$parsetoken();
if (s6 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s7 = peg$f26(s6);
if (s7) {
s7 = void 0;
} else {
s7 = peg$FAILED;
}
if (s7 !== peg$FAILED) {
s6 = [s6, s7];
s5 = s6;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s5 = peg$parsetoken();
if (s5 !== peg$FAILED) {
peg$savedPos = s3;
s3 = peg$f27(s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
}
if (input.charCodeAt(peg$currPos) === 93) {
s3 = peg$c5;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e15);
}
}
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f28(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseverbatim_group() {
var s0, s1, s2, s3, s4, s5;
var key = peg$currPos * 52 + 10;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parsebegin_group();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$parseend_group();
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
if (input.length > peg$currPos) {
s5 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s5 !== peg$FAILED) {
peg$savedPos = s3;
s3 = peg$f29(s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$parseend_group();
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
if (input.length > peg$currPos) {
s5 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s5 !== peg$FAILED) {
peg$savedPos = s3;
s3 = peg$f29(s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
}
s3 = peg$parseend_group();
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f30(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseverbatim_delimited_by_char() {
var s0, s1, s2, s3, s4, s5, s6, s7;
var key = peg$currPos * 52 + 11;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (peg$r0.test(input.charAt(peg$currPos))) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e16);
}
}
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$currPos;
if (input.length > peg$currPos) {
s6 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s6 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s7 = peg$f31(s1, s6);
if (s7) {
s7 = void 0;
} else {
s7 = peg$FAILED;
}
if (s7 !== peg$FAILED) {
s6 = [s6, s7];
s5 = s6;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
if (input.length > peg$currPos) {
s5 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s5 !== peg$FAILED) {
peg$savedPos = s3;
s3 = peg$f32(s1, s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$currPos;
if (input.length > peg$currPos) {
s6 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s6 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s7 = peg$f31(s1, s6);
if (s7) {
s7 = void 0;
} else {
s7 = peg$FAILED;
}
if (s7 !== peg$FAILED) {
s6 = [s6, s7];
s5 = s6;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
if (input.length > peg$currPos) {
s5 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s5 !== peg$FAILED) {
peg$savedPos = s3;
s3 = peg$f32(s1, s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
}
s3 = peg$currPos;
if (input.length > peg$currPos) {
s4 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s4 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s5 = peg$f33(s1, s2, s4);
if (s5) {
s5 = void 0;
} else {
s5 = peg$FAILED;
}
if (s5 !== peg$FAILED) {
s4 = [s4, s5];
s3 = s4;
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f34(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseverbatim_listings() {
var s0, s1, s2, s3, s4;
var key = peg$currPos * 52 + 12;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$parseescape();
if (s1 !== peg$FAILED) {
if (input.substr(peg$currPos, 9) === peg$c6) {
s2 = peg$c6;
peg$currPos += 9;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e18);
}
}
if (s2 !== peg$FAILED) {
s3 = peg$parsesquare_bracket_argument();
if (s3 === peg$FAILED) {
s3 = null;
}
s4 = peg$parseverbatim_group();
if (s4 === peg$FAILED) {
s4 = peg$parseverbatim_delimited_by_char();
}
if (s4 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f35(s2, s3, s4);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e17);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseverbatim_minted() {
var s0, s1, s2, s3, s4, s5;
var key = peg$currPos * 52 + 13;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$parseescape();
if (s1 !== peg$FAILED) {
if (input.substr(peg$currPos, 10) === peg$c7) {
s2 = peg$c7;
peg$currPos += 10;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e20);
}
}
if (s2 === peg$FAILED) {
if (input.substr(peg$currPos, 4) === peg$c8) {
s2 = peg$c8;
peg$currPos += 4;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e21);
}
}
}
if (s2 !== peg$FAILED) {
s3 = peg$parsesquare_bracket_argument();
if (s3 === peg$FAILED) {
s3 = null;
}
s4 = peg$parsegroup();
if (s4 !== peg$FAILED) {
s5 = peg$parseverbatim_group();
if (s5 === peg$FAILED) {
s5 = peg$parseverbatim_delimited_by_char();
}
if (s5 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f36(s2, s3, s4, s5);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e19);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseverbatim_minted_environment() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14;
var key = peg$currPos * 52 + 14;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$parsebegin_env();
if (s1 !== peg$FAILED) {
s2 = peg$parsebegin_group();
if (s2 !== peg$FAILED) {
if (input.substr(peg$currPos, 6) === peg$c9) {
s3 = peg$c9;
peg$currPos += 6;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e23);
}
}
if (s3 !== peg$FAILED) {
s4 = peg$parseend_group();
if (s4 !== peg$FAILED) {
s5 = peg$parsesquare_bracket_argument();
if (s5 === peg$FAILED) {
s5 = null;
}
s6 = peg$parsegroup();
if (s6 !== peg$FAILED) {
s7 = peg$currPos;
s8 = [];
s9 = peg$currPos;
s10 = peg$currPos;
peg$silentFails++;
s11 = peg$currPos;
s12 = peg$parseend_env();
if (s12 !== peg$FAILED) {
s13 = peg$parsegroup();
if (s13 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s14 = peg$f37(s3, s5, s6, s13);
if (s14) {
s14 = void 0;
} else {
s14 = peg$FAILED;
}
if (s14 !== peg$FAILED) {
s12 = [s12, s13, s14];
s11 = s12;
} else {
peg$currPos = s11;
s11 = peg$FAILED;
}
} else {
peg$currPos = s11;
s11 = peg$FAILED;
}
} else {
peg$currPos = s11;
s11 = peg$FAILED;
}
peg$silentFails--;
if (s11 === peg$FAILED) {
s10 = void 0;
} else {
peg$currPos = s10;
s10 = peg$FAILED;
}
if (s10 !== peg$FAILED) {
if (input.length > peg$currPos) {
s11 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s11 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s11 !== peg$FAILED) {
s10 = [s10, s11];
s9 = s10;
} else {
peg$currPos = s9;
s9 = peg$FAILED;
}
} else {
peg$currPos = s9;
s9 = peg$FAILED;
}
while (s9 !== peg$FAILED) {
s8.push(s9);
s9 = peg$currPos;
s10 = peg$currPos;
peg$silentFails++;
s11 = peg$currPos;
s12 = peg$parseend_env();
if (s12 !== peg$FAILED) {
s13 = peg$parsegroup();
if (s13 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s14 = peg$f37(s3, s5, s6, s13);
if (s14) {
s14 = void 0;
} else {
s14 = peg$FAILED;
}
if (s14 !== peg$FAILED) {
s12 = [s12, s13, s14];
s11 = s12;
} else {
peg$currPos = s11;
s11 = peg$FAILED;
}
} else {
peg$currPos = s11;
s11 = peg$FAILED;
}
} else {
peg$currPos = s11;
s11 = peg$FAILED;
}
peg$silentFails--;
if (s11 === peg$FAILED) {
s10 = void 0;
} else {
peg$currPos = s10;
s10 = peg$FAILED;
}
if (s10 !== peg$FAILED) {
if (input.length > peg$currPos) {
s11 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s11 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s11 !== peg$FAILED) {
s10 = [s10, s11];
s9 = s10;
} else {
peg$currPos = s9;
s9 = peg$FAILED;
}
} else {
peg$currPos = s9;
s9 = peg$FAILED;
}
}
s7 = input.substring(s7, peg$currPos);
s8 = peg$parseend_env();
if (s8 !== peg$FAILED) {
s9 = peg$parsebegin_group();
if (s9 !== peg$FAILED) {
if (input.substr(peg$currPos, 6) === peg$c9) {
s10 = peg$c9;
peg$currPos += 6;
} else {
s10 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e23);
}
}
if (s10 !== peg$FAILED) {
s11 = peg$parseend_group();
if (s11 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f38(s3, s5, s6, s7);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e22);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseverbatim_environment() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;
var key = peg$currPos * 52 + 15;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$parsebegin_env();
if (s1 !== peg$FAILED) {
s2 = peg$parsebegin_group();
if (s2 !== peg$FAILED) {
s3 = peg$parseverbatim_env_name();
if (s3 !== peg$FAILED) {
s4 = peg$parseend_group();
if (s4 !== peg$FAILED) {
s5 = peg$currPos;
s6 = [];
s7 = peg$currPos;
s8 = peg$currPos;
peg$silentFails++;
s9 = peg$currPos;
s10 = peg$parseend_env();
if (s10 !== peg$FAILED) {
s11 = peg$parsegroup();
if (s11 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s12 = peg$f39(s3, s11);
if (s12) {
s12 = void 0;
} else {
s12 = peg$FAILED;
}
if (s12 !== peg$FAILED) {
s10 = [s10, s11, s12];
s9 = s10;
} else {
peg$currPos = s9;
s9 = peg$FAILED;
}
} else {
peg$currPos = s9;
s9 = peg$FAILED;
}
} else {
peg$currPos = s9;
s9 = peg$FAILED;
}
peg$silentFails--;
if (s9 === peg$FAILED) {
s8 = void 0;
} else {
peg$currPos = s8;
s8 = peg$FAILED;
}
if (s8 !== peg$FAILED) {
if (input.length > peg$currPos) {
s9 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s9 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s9 !== peg$FAILED) {
peg$savedPos = s7;
s7 = peg$f40(s3, s9);
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
while (s7 !== peg$FAILED) {
s6.push(s7);
s7 = peg$currPos;
s8 = peg$currPos;
peg$silentFails++;
s9 = peg$currPos;
s10 = peg$parseend_env();
if (s10 !== peg$FAILED) {
s11 = peg$parsegroup();
if (s11 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s12 = peg$f39(s3, s11);
if (s12) {
s12 = void 0;
} else {
s12 = peg$FAILED;
}
if (s12 !== peg$FAILED) {
s10 = [s10, s11, s12];
s9 = s10;
} else {
peg$currPos = s9;
s9 = peg$FAILED;
}
} else {
peg$currPos = s9;
s9 = peg$FAILED;
}
} else {
peg$currPos = s9;
s9 = peg$FAILED;
}
peg$silentFails--;
if (s9 === peg$FAILED) {
s8 = void 0;
} else {
peg$currPos = s8;
s8 = peg$FAILED;
}
if (s8 !== peg$FAILED) {
if (input.length > peg$currPos) {
s9 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s9 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s9 !== peg$FAILED) {
peg$savedPos = s7;
s7 = peg$f40(s3, s9);
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
}
s5 = input.substring(s5, peg$currPos);
s6 = peg$parseend_env();
if (s6 !== peg$FAILED) {
s7 = peg$parsebegin_group();
if (s7 !== peg$FAILED) {
s8 = peg$parseverbatim_env_name();
if (s8 !== peg$FAILED) {
s9 = peg$parseend_group();
if (s9 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f41(s3, s5);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e24);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseverbatim_env_name() {
var s0;
var key = peg$currPos * 52 + 16;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.substr(peg$currPos, 9) === peg$c10) {
s0 = peg$c10;
peg$currPos += 9;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e25);
}
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 8) === peg$c11) {
s0 = peg$c11;
peg$currPos += 8;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e26);
}
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 13) === peg$c12) {
s0 = peg$c12;
peg$currPos += 13;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e27);
}
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 12) === peg$c13) {
s0 = peg$c13;
peg$currPos += 12;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e28);
}
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 7) === peg$c14) {
s0 = peg$c14;
peg$currPos += 7;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e29);
}
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 10) === peg$c15) {
s0 = peg$c15;
peg$currPos += 10;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e30);
}
}
}
}
}
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsemacro() {
var s0, s1, s2, s3, s4;
var key = peg$currPos * 52 + 17;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$parseescape();
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parsechar();
if (s4 !== peg$FAILED) {
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parsechar();
}
} else {
s3 = peg$FAILED;
}
if (s3 !== peg$FAILED) {
peg$savedPos = s1;
s1 = peg$f42(s3);
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 === peg$FAILED) {
s1 = peg$currPos;
s2 = peg$parseescape();
if (s2 !== peg$FAILED) {
if (input.length > peg$currPos) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s3 !== peg$FAILED) {
peg$savedPos = s1;
s1 = peg$f43(s3);
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$f44(s1);
}
s0 = s1;
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e31);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsegroup() {
var s0, s1, s2, s3, s4, s5;
var key = peg$currPos * 52 + 18;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$parsebegin_group();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$parseend_group();
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s5 = peg$parsetoken();
if (s5 !== peg$FAILED) {
peg$savedPos = s3;
s3 = peg$f45(s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$parseend_group();
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s5 = peg$parsetoken();
if (s5 !== peg$FAILED) {
peg$savedPos = s3;
s3 = peg$f45(s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
}
s3 = peg$parseend_group();
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f46(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e32);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsegroup_contents_as_string() {
var s0, s1;
var key = peg$currPos * 52 + 19;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parsegroup();
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$f47();
}
s0 = s1;
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseenvironment() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;
var key = peg$currPos * 52 + 20;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$parsebegin_env();
if (s1 !== peg$FAILED) {
s2 = peg$parsegroup_contents_as_string();
if (s2 !== peg$FAILED) {
s3 = peg$parsesameline_comment();
if (s3 === peg$FAILED) {
s3 = null;
}
s4 = [];
s5 = peg$currPos;
s6 = peg$currPos;
peg$silentFails++;
s7 = peg$currPos;
s8 = peg$parseend_env();
if (s8 !== peg$FAILED) {
s9 = peg$parsegroup_contents_as_string();
if (s9 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s10 = peg$f48(s2, s3, s9);
if (s10) {
s10 = void 0;
} else {
s10 = peg$FAILED;
}
if (s10 !== peg$FAILED) {
s8 = [s8, s9, s10];
s7 = s8;
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
peg$silentFails--;
if (s7 === peg$FAILED) {
s6 = void 0;
} else {
peg$currPos = s6;
s6 = peg$FAILED;
}
if (s6 !== peg$FAILED) {
s7 = peg$parsetoken();
if (s7 !== peg$FAILED) {
peg$savedPos = s5;
s5 = peg$f49(s2, s3, s7);
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$currPos;
s6 = peg$currPos;
peg$silentFails++;
s7 = peg$currPos;
s8 = peg$parseend_env();
if (s8 !== peg$FAILED) {
s9 = peg$parsegroup_contents_as_string();
if (s9 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s10 = peg$f48(s2, s3, s9);
if (s10) {
s10 = void 0;
} else {
s10 = peg$FAILED;
}
if (s10 !== peg$FAILED) {
s8 = [s8, s9, s10];
s7 = s8;
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
peg$silentFails--;
if (s7 === peg$FAILED) {
s6 = void 0;
} else {
peg$currPos = s6;
s6 = peg$FAILED;
}
if (s6 !== peg$FAILED) {
s7 = peg$parsetoken();
if (s7 !== peg$FAILED) {
peg$savedPos = s5;
s5 = peg$f49(s2, s3, s7);
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
}
s5 = peg$parseend_env();
if (s5 !== peg$FAILED) {
s6 = peg$parsegroup_contents_as_string();
if (s6 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f50(s2, s3, s4);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e33);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsemath_environment() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;
var key = peg$currPos * 52 + 21;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$parsebegin_env();
if (s1 !== peg$FAILED) {
s2 = peg$parsebegin_group();
if (s2 !== peg$FAILED) {
s3 = peg$parsemath_env_name();
if (s3 !== peg$FAILED) {
s4 = peg$parseend_group();
if (s4 !== peg$FAILED) {
s5 = peg$parsesameline_comment();
if (s5 === peg$FAILED) {
s5 = null;
}
s6 = [];
s7 = peg$currPos;
s8 = peg$currPos;
peg$silentFails++;
s9 = peg$currPos;
s10 = peg$parseend_env();
if (s10 !== peg$FAILED) {
s11 = peg$parsegroup();
if (s11 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s12 = peg$f51(s3, s5, s11);
if (s12) {
s12 = void 0;
} else {
s12 = peg$FAILED;
}
if (s12 !== peg$FAILED) {
s10 = [s10, s11, s12];
s9 = s10;
} else {
peg$currPos = s9;
s9 = peg$FAILED;
}
} else {
peg$currPos = s9;
s9 = peg$FAILED;
}
} else {
peg$currPos = s9;
s9 = peg$FAILED;
}
peg$silentFails--;
if (s9 === peg$FAILED) {
s8 = void 0;
} else {
peg$currPos = s8;
s8 = peg$FAILED;
}
if (s8 !== peg$FAILED) {
s9 = peg$parsemath_token();
if (s9 !== peg$FAILED) {
peg$savedPos = s7;
s7 = peg$f52(s3, s5, s9);
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
while (s7 !== peg$FAILED) {
s6.push(s7);
s7 = peg$currPos;
s8 = peg$currPos;
peg$silentFails++;
s9 = peg$currPos;
s10 = peg$parseend_env();
if (s10 !== peg$FAILED) {
s11 = peg$parsegroup();
if (s11 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s12 = peg$f51(s3, s5, s11);
if (s12) {
s12 = void 0;
} else {
s12 = peg$FAILED;
}
if (s12 !== peg$FAILED) {
s10 = [s10, s11, s12];
s9 = s10;
} else {
peg$currPos = s9;
s9 = peg$FAILED;
}
} else {
peg$currPos = s9;
s9 = peg$FAILED;
}
} else {
peg$currPos = s9;
s9 = peg$FAILED;
}
peg$silentFails--;
if (s9 === peg$FAILED) {
s8 = void 0;
} else {
peg$currPos = s8;
s8 = peg$FAILED;
}
if (s8 !== peg$FAILED) {
s9 = peg$parsemath_token();
if (s9 !== peg$FAILED) {
peg$savedPos = s7;
s7 = peg$f52(s3, s5, s9);
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
}
s7 = peg$parseend_env();
if (s7 !== peg$FAILED) {
s8 = peg$parsebegin_group();
if (s8 !== peg$FAILED) {
s9 = peg$parsemath_env_name();
if (s9 !== peg$FAILED) {
s10 = peg$parseend_group();
if (s10 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f53(s3, s5, s6);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e34);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsebegin_display_math() {
var s0, s1, s2;
var key = peg$currPos * 52 + 23;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parseescape();
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 91) {
s2 = peg$c4;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e14);
}
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseend_display_math() {
var s0, s1, s2;
var key = peg$currPos * 52 + 24;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parseescape();
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 93) {
s2 = peg$c5;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e15);
}
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsebegin_inline_math() {
var s0, s1, s2;
var key = peg$currPos * 52 + 25;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parseescape();
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 40) {
s2 = peg$c16;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e36);
}
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseend_inline_math() {
var s0, s1, s2;
var key = peg$currPos * 52 + 26;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parseescape();
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 41) {
s2 = peg$c17;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e37);
}
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsebegin_env() {
var s0, s1, s2;
var key = peg$currPos * 52 + 27;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parseescape();
if (s1 !== peg$FAILED) {
if (input.substr(peg$currPos, 5) === peg$c18) {
s2 = peg$c18;
peg$currPos += 5;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e38);
}
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseend_env() {
var s0, s1, s2;
var key = peg$currPos * 52 + 28;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$parseescape();
if (s1 !== peg$FAILED) {
if (input.substr(peg$currPos, 3) === peg$c19) {
s2 = peg$c19;
peg$currPos += 3;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e39);
}
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsemath_env_name() {
var s0, s1;
var key = peg$currPos * 52 + 29;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.substr(peg$currPos, 9) === peg$c20) {
s1 = peg$c20;
peg$currPos += 9;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e40);
}
}
if (s1 === peg$FAILED) {
if (input.substr(peg$currPos, 8) === peg$c21) {
s1 = peg$c21;
peg$currPos += 8;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e41);
}
}
if (s1 === peg$FAILED) {
if (input.substr(peg$currPos, 6) === peg$c22) {
s1 = peg$c22;
peg$currPos += 6;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e42);
}
}
if (s1 === peg$FAILED) {
if (input.substr(peg$currPos, 5) === peg$c23) {
s1 = peg$c23;
peg$currPos += 5;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e43);
}
}
if (s1 === peg$FAILED) {
if (input.substr(peg$currPos, 8) === peg$c24) {
s1 = peg$c24;
peg$currPos += 8;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e44);
}
}
if (s1 === peg$FAILED) {
if (input.substr(peg$currPos, 7) === peg$c25) {
s1 = peg$c25;
peg$currPos += 7;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e45);
}
}
if (s1 === peg$FAILED) {
if (input.substr(peg$currPos, 7) === peg$c26) {
s1 = peg$c26;
peg$currPos += 7;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e46);
}
}
if (s1 === peg$FAILED) {
if (input.substr(peg$currPos, 6) === peg$c27) {
s1 = peg$c27;
peg$currPos += 6;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e47);
}
}
if (s1 === peg$FAILED) {
if (input.substr(peg$currPos, 9) === peg$c28) {
s1 = peg$c28;
peg$currPos += 9;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e48);
}
}
if (s1 === peg$FAILED) {
if (input.substr(peg$currPos, 8) === peg$c29) {
s1 = peg$c29;
peg$currPos += 8;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e49);
}
}
if (s1 === peg$FAILED) {
if (input.substr(peg$currPos, 8) === peg$c30) {
s1 = peg$c30;
peg$currPos += 8;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e50);
}
}
if (s1 === peg$FAILED) {
if (input.substr(peg$currPos, 7) === peg$c31) {
s1 = peg$c31;
peg$currPos += 7;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e51);
}
}
if (s1 === peg$FAILED) {
if (input.substr(peg$currPos, 5) === peg$c32) {
s1 = peg$c32;
peg$currPos += 5;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e52);
}
}
if (s1 === peg$FAILED) {
if (input.substr(peg$currPos, 4) === peg$c33) {
s1 = peg$c33;
peg$currPos += 4;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e53);
}
}
if (s1 === peg$FAILED) {
if (input.substr(peg$currPos, 11) === peg$c34) {
s1 = peg$c34;
peg$currPos += 11;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e54);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$f56(s1);
}
s0 = s1;
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseescape() {
var s0, s1;
var key = peg$currPos * 52 + 30;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 92) {
s1 = peg$c35;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e56);
}
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$f57();
}
s0 = s1;
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e55);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsebegin_group() {
var s0, s1;
var key = peg$currPos * 52 + 31;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 123) {
s1 = peg$c36;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e57);
}
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$f58(s1);
}
s0 = s1;
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseend_group() {
var s0, s1;
var key = peg$currPos * 52 + 32;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 125) {
s1 = peg$c37;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e58);
}
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$f59(s1);
}
s0 = s1;
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsemath_shift() {
var s0, s1;
var key = peg$currPos * 52 + 33;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 36) {
s1 = peg$c38;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e59);
}
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$f60(s1);
}
s0 = s1;
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsealignment_tab() {
var s0, s1;
var key = peg$currPos * 52 + 34;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 38) {
s1 = peg$c39;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e60);
}
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$f61(s1);
}
s0 = s1;
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsenl() {
var s0, s1, s2;
var key = peg$currPos * 52 + 35;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$currPos;
peg$silentFails++;
if (input.charCodeAt(peg$currPos) === 13) {
s2 = peg$c40;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e62);
}
}
peg$silentFails--;
if (s2 === peg$FAILED) {
s1 = void 0;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 10) {
s2 = peg$c41;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e63);
}
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 13) {
s0 = peg$c40;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e62);
}
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c42) {
s0 = peg$c42;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e64);
}
}
}
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e61);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsemacro_parameter() {
var s0, s1;
var key = peg$currPos * 52 + 36;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 35) {
s1 = peg$c43;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e65);
}
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$f62(s1);
}
s0 = s1;
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsesuperscript() {
var s0, s1;
var key = peg$currPos * 52 + 37;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 94) {
s1 = peg$c44;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e66);
}
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$f63(s1);
}
s0 = s1;
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsesubscript() {
var s0, s1;
var key = peg$currPos * 52 + 38;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 95) {
s1 = peg$c45;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e67);
}
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$f64(s1);
}
s0 = s1;
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseignore() {
var s0;
var key = peg$currPos * 52 + 39;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.charCodeAt(peg$currPos) === 0) {
s0 = peg$c46;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e68);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsesp() {
var s0, s1, s2;
var key = peg$currPos * 52 + 40;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$currPos;
s1 = [];
if (peg$r1.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e69);
}
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
if (peg$r1.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e69);
}
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$f65();
}
s0 = s1;
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e8);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsechar() {
var s0;
var key = peg$currPos * 52 + 41;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
if (peg$r2.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e71);
}
}
peg$silentFails--;
if (s0 === peg$FAILED) {
if (peg$silentFails === 0) {
peg$fail(peg$e70);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsenum() {
var s0;
var key = peg$currPos * 52 + 42;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
if (peg$r3.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e73);
}
}
peg$silentFails--;
if (s0 === peg$FAILED) {
if (peg$silentFails === 0) {
peg$fail(peg$e72);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsepunctuation() {
var s0, s1;
var key = peg$currPos * 52 + 43;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$currPos;
if (peg$r4.test(input.charAt(peg$currPos))) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e75);
}
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$f66(s1);
}
s0 = s1;
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e74);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsecomment_start() {
var s0;
var key = peg$currPos * 52 + 44;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
if (input.charCodeAt(peg$currPos) === 37) {
s0 = peg$c0;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e7);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsefull_comment() {
var s0;
var key = peg$currPos * 52 + 45;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$parseownline_comment();
if (s0 === peg$FAILED) {
s0 = peg$parsesameline_comment();
}
peg$silentFails--;
if (s0 === peg$FAILED) {
if (peg$silentFails === 0) {
peg$fail(peg$e76);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseownline_comment() {
var s0, s1, s2, s3;
var key = peg$currPos * 52 + 46;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$currPos;
s2 = [];
s3 = peg$parsesp();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsesp();
}
s3 = peg$parsenl();
if (s3 !== peg$FAILED) {
s2 = [s2, s3];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 === peg$FAILED) {
s1 = null;
}
s2 = peg$parseleading_sp();
if (s2 !== peg$FAILED) {
s3 = peg$parsecomment();
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f67(s2, s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsesameline_comment() {
var s0, s1, s2;
var key = peg$currPos * 52 + 47;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = [];
s2 = peg$parsesp();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsesp();
}
s2 = peg$parsecomment();
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f68(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsecomment() {
var s0, s1, s2, s3, s4, s5, s6, s7;
var key = peg$currPos * 52 + 48;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$parsecomment_start();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$parsenl();
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
if (input.length > peg$currPos) {
s5 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s5 !== peg$FAILED) {
peg$savedPos = s3;
s3 = peg$f69(s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$parsenl();
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
if (input.length > peg$currPos) {
s5 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s5 !== peg$FAILED) {
peg$savedPos = s3;
s3 = peg$f69(s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
}
s3 = peg$currPos;
peg$silentFails++;
s4 = peg$parseparbreak();
peg$silentFails--;
if (s4 !== peg$FAILED) {
peg$currPos = s3;
s3 = void 0;
} else {
s3 = peg$FAILED;
}
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f70(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsecomment_start();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$parsenl();
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
if (input.length > peg$currPos) {
s5 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s5 !== peg$FAILED) {
peg$savedPos = s3;
s3 = peg$f71(s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$parsenl();
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
if (input.length > peg$currPos) {
s5 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s5 !== peg$FAILED) {
peg$savedPos = s3;
s3 = peg$f71(s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
}
s3 = peg$currPos;
s4 = peg$parsenl();
if (s4 !== peg$FAILED) {
s5 = [];
s6 = peg$parsesp();
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$parsesp();
}
s6 = peg$currPos;
peg$silentFails++;
s7 = peg$parsecomment_start();
peg$silentFails--;
if (s7 === peg$FAILED) {
s6 = void 0;
} else {
peg$currPos = s6;
s6 = peg$FAILED;
}
if (s6 !== peg$FAILED) {
s4 = [s4, s5, s6];
s3 = s4;
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
if (s3 === peg$FAILED) {
s3 = peg$parsenl();
if (s3 === peg$FAILED) {
s3 = peg$parseEOF();
}
}
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f72(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e77);
}
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseleading_sp() {
var s0, s1, s2, s3, s4;
var key = peg$currPos * 52 + 49;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$parsestart_of_line();
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parsesp();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parsesp();
}
s2 = [s2, s3];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s0 = input.substring(s0, peg$currPos);
} else {
s0 = s1;
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parsestart_of_line() {
var s0;
var key = peg$currPos * 52 + 50;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
peg$savedPos = peg$currPos;
s0 = peg$f73();
if (s0) {
s0 = void 0;
} else {
s0 = peg$FAILED;
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function peg$parseEOF() {
var s0, s1;
var key = peg$currPos * 52 + 51;
var cached = peg$resultsCache[key];
if (cached) {
peg$currPos = cached.nextPos;
return cached.result;
}
s0 = peg$currPos;
peg$silentFails++;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
peg$silentFails--;
if (s1 === peg$FAILED) {
s0 = void 0;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };
return s0;
}
function toString(e) {
if (typeof e === "string") {
return e;
}
if (typeof e.content === "string") {
return e.content;
}
if (e && e.type === "whitespace") {
return " ";
}
return e;
}
function compare_env(g1, g2) {
const g1Name = typeof g1 === "string" ? g1 : g1.content.map(toString).join("");
const g2Name = typeof g2 === "string" ? g2 : g2.content.map(toString).join("");
return g1Name === g2Name;
}
function createNode(type, extra = {}) {
return { type, ...extra, position: location() };
}
peg$result = peg$startRuleFunction();
if (peg$result !== peg$FAILED && peg$currPos === input.length) {
return peg$result;
} else {
if (peg$result !== peg$FAILED && peg$currPos < input.length) {
peg$fail(peg$endExpectation());
}
throw peg$buildStructuredError(
peg$maxFailExpected,
peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,
peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)
);
}
}
return {
SyntaxError: peg$SyntaxError,
parse: peg$parse
};
}()
);
const _AlignEnvironmentPegParser = (
// Generated by Peggy 3.0.2.
//
// https://peggyjs.org/
function() {
function peg$subclass(child, parent) {
function C() {
this.constructor = child;
}
C.prototype = parent.prototype;
child.prototype = new C();
}
function peg$SyntaxError(message, expected, found, location) {
var self = Error.call(this, message);
if (Object.setPrototypeOf) {
Object.setPrototypeOf(self, peg$SyntaxError.prototype);
}
self.expected = expected;
self.found = found;
self.location = location;
self.name = "SyntaxError";
return self;
}
peg$subclass(peg$SyntaxError, Error);
function peg$padEnd(str, targetLength, padString) {
padString = padString || " ";
if (str.length > targetLength) {
return str;
}
targetLength -= str.length;
padString += padString.repeat(targetLength);
return str + padString.slice(0, targetLength);
}
peg$SyntaxError.prototype.format = function(sources) {
var str = "Error: " + this.message;
if (this.location) {
var src = null;
var k;
for (k = 0; k < sources.length; k++) {
if (sources[k].source === this.location.source) {
src = sources[k].text.split(/\r\n|\n|\r/g);
break;
}
}
var s = this.location.start;
var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s;
var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column;
if (src) {
var e = this.location.end;
var filler = peg$padEnd("", offset_s.line.toString().length, " ");
var line = src[s.line - 1];
var last = s.line === e.line ? e.column : line.length + 1;
var hatLen = last - s.column || 1;
str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^");
} else {
str += "\n at " + loc;
}
}
return str;
};
peg$SyntaxError.buildMessage = function(expected, found) {
var DESCRIBE_EXPECTATION_FNS = {
literal: function(expectation) {
return '"' + literalEscape(expectation.text) + '"';
},
class: function(expectation) {
var escapedParts = expectation.parts.map(function(part) {
return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part);
});
return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]";
},
any: function() {
return "any character";
},
end: function() {
return "end of input";
},
other: function(expectation) {
return expectation.description;
}
};
function hex(ch) {
return ch.charCodeAt(0).toString(16).toUpperCase();
}
function literalEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function classEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function describeExpectation(expectation) {
return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);
}
function describeExpected(expected2) {
var descriptions = expected2.map(describeExpectation);
var i, j;
descriptions.sort();
if (descriptions.length > 0) {
for (i = 1, j = 1; i < descriptions.length; i++) {
if (descriptions[i - 1] !== descriptions[i]) {
descriptions[j] = descriptions[i];
j++;
}
}
descriptions.length = j;
}
switch (descriptions.length) {
case 1:
return descriptions[0];
case 2:
return descriptions[0] + " or " + descriptions[1];
default:
return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1];
}
}
function describeFound(found2) {
return found2 ? '"' + literalEscape(found2) + '"' : "end of input";
}
return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found.";
};
function peg$parse(input, options) {
options = options !== void 0 ? options : {};
var peg$FAILED = {};
var peg$source = options.grammarSource;
var peg$startRuleFunctions = { body: peg$parsebody };
var peg$startRuleFunction = peg$parsebody;
var peg$e0 = peg$anyExpectation();
var peg$f0 = function() {
return [];
};
var peg$f1 = function(x) {
return { cells: [], colSeps: [], ...x };
};
var peg$f2 = function(rowItems, rowSep, trailingComment) {
return { ...rowItems, rowSep, trailingComment };
};
var peg$f3 = function(rowItems, trailingComment) {
return { ...rowItems, rowSep: null, trailingComment };
};
var peg$f4 = function(x) {
return x;
};
var peg$f5 = function(x) {
return {
cells: [],
colSeps: [],
rowSep: null,
trailingComment: x
};
};
var peg$f6 = function(x) {
return x;
};
var peg$f7 = function(colSep, cell) {
return { colSep, cell };
};
var peg$f8 = function(colSep) {
return { colSep };
};
var peg$f9 = function(a, b) {
return processRow(a, b);
};
var peg$f10 = function(b) {
return processRow(null, b);
};
var peg$f11 = function(tok) {
return options.isSameLineComment(tok);
};
var peg$f12 = function(tok) {
return tok;
};
var peg$f13 = function(tok) {
return options.isOwnLineComment(tok);
};
var peg$f14 = function(tok) {
return tok;
};
var peg$f15 = function(tok) {
return options.isWhitespace(tok);
};
var peg$f16 = function(tok) {
return tok;
};
var peg$f17 = function(tok) {
return options.isRowSep(tok);
};
var peg$f18 = function(tok) {
return tok;
};
var peg$f19 = function(tok) {
return options.isColSep(tok);
};
var peg$f20 = function(tok) {
return tok;
};
var peg$currPos = 0;
var peg$posDetailsCache = [{ line: 1, column: 1 }];
var peg$maxFailPos = 0;
var peg$maxFailExpected = [];
var peg$silentFails = 0;
var peg$result;
if ("startRule" in options) {
if (!(options.startRule in peg$startRuleFunctions)) {
throw new Error(`Can't start parsing from rule "` + options.startRule + '".');
}
peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
}
function peg$anyExpectation() {
return { type: "any" };
}
function peg$endExpectation() {
return { type: "end" };
}
function peg$computePosDetails(pos) {
var details = peg$posDetailsCache[pos];
var p;
if (details) {
return details;
} else {
p = pos - 1;
while (!peg$posDetailsCache[p]) {
p--;
}
details = peg$posDetailsCache[p];
details = {
line: details.line,
column: details.column
};
while (p < pos) {
if (input.charCodeAt(p) === 10) {
details.line++;
details.column = 1;
} else {
details.column++;
}
p++;
}
peg$posDetailsCache[pos] = details;
return details;
}
}
function peg$computeLocation(startPos, endPos, offset2) {
var startPosDetails = peg$computePosDetails(startPos);
var endPosDetails = peg$computePosDetails(endPos);
var res = {
source: peg$source,
start: {
offset: startPos,
line: startPosDetails.line,
column: startPosDetails.column
},
end: {
offset: endPos,
line: endPosDetails.line,
column: endPosDetails.column
}
};
return res;
}
function peg$fail(expected2) {
if (peg$currPos < peg$maxFailPos) {
return;
}
if (peg$currPos > peg$maxFailPos) {
peg$maxFailPos = peg$currPos;
peg$maxFailExpected = [];
}
peg$maxFailExpected.push(expected2);
}
function peg$buildStructuredError(expected2, found, location2) {
return new peg$SyntaxError(
peg$SyntaxError.buildMessage(expected2, found),
expected2,
found,
location2
);
}
function peg$parsebody() {
var s0, s1;
s0 = [];
s1 = peg$parsecomment_only_line();
if (s1 === peg$FAILED) {
s1 = peg$parserow_with_end();
if (s1 === peg$FAILED) {
s1 = peg$parserow_without_end();
}
}
if (s1 !== peg$FAILED) {
while (s1 !== peg$FAILED) {
s0.push(s1);
s1 = peg$parsecomment_only_line();
if (s1 === peg$FAILED) {
s1 = peg$parserow_with_end();
if (s1 === peg$FAILED) {
s1 = peg$parserow_without_end();
}
}
}
} else {
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parseEOL();
if (s1 !== peg$FAILED) {
s1 = peg$f0();
}
s0 = s1;
}
return s0;
}
function peg$parserow_with_end() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$parserow_items();
if (s2 === peg$FAILED) {
s2 = null;
}
s2 = peg$f1(s2);
s1 = s2;
s2 = peg$parserow_sep();
if (s2 !== peg$FAILED) {
s3 = peg$parsetrailing_comment();
if (s3 === peg$FAILED) {
s3 = null;
}
s0 = peg$f2(s1, s2, s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parserow_without_end() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = peg$parserow_items();
if (s1 !== peg$FAILED) {
s2 = peg$parsetrailing_comment();
if (s2 === peg$FAILED) {
s2 = null;
}
s0 = peg$f3(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsetrailing_comment() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
s2 = peg$parsewhitespace();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsewhitespace();
}
s2 = peg$parsesame_line_comment();
if (s2 !== peg$FAILED) {
s0 = peg$f4(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsecomment_only_line() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
s2 = peg$parsewhitespace();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsewhitespace();
}
s2 = peg$parseown_line_comment();
if (s2 !== peg$FAILED) {
s0 = peg$f5(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsetoken() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = peg$currPos;
peg$silentFails++;
s2 = peg$parserow_sep();
if (s2 === peg$FAILED) {
s2 = peg$parsecol_sep();
if (s2 === peg$FAILED) {
s2 = peg$parsetrailing_comment();
if (s2 === peg$FAILED) {
s2 = peg$parseown_line_comment();
}
}
}
peg$silentFails--;
if (s2 === peg$FAILED) {
s1 = void 0;
} 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$e0);
}
}
if (s2 !== peg$FAILED) {
s0 = peg$f6(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsecell() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
s2 = peg$parsetoken();
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsetoken();
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s0 = input.substring(s0, peg$currPos);
} else {
s0 = s1;
}
return s0;
}
function peg$parseseparated_cell() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = peg$parsecol_sep();
if (s1 !== peg$FAILED) {
s2 = peg$parsecell();
if (s2 !== peg$FAILED) {
s0 = peg$f7(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsecol_sep();
if (s1 !== peg$FAILED) {
s1 = peg$f8(s1);
}
s0 = s1;
}
return s0;
}
function peg$parserow_items() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$parsecell();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parseseparated_cell();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parseseparated_cell();
}
s0 = peg$f9(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
s2 = peg$parseseparated_cell();
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parseseparated_cell();
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s1 = peg$f10(s1);
}
s0 = s1;
}
return s0;
}
function peg$parsesame_line_comment() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f11(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f12(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseown_line_comment() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f13(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f14(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsewhitespace() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f15(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f16(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parserow_sep() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f17(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f18(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsecol_sep() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f19(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f20(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseEOL() {
var s0, s1;
s0 = peg$currPos;
peg$silentFails++;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
peg$silentFails--;
if (s1 === peg$FAILED) {
s0 = void 0;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function processRow(leadCell, otherCells) {
const cells = [leadCell || []];
const seps = [];
for (const x of otherCells) {
cells.push(x.cell || []);
seps.push(x.colSep);
}
return { cells, colSeps: seps };
}
if (!options.isWhitespace) {
try {
Object.assign(
options,
createMatchers(["\\", "hline", "cr"], ["&"])
);
} catch (e) {
console.warn("Error when initializing parser", e);
}
}
peg$result = peg$startRuleFunction();
if (peg$result !== peg$FAILED && peg$currPos === input.length) {
return peg$result;
} else {
if (peg$result !== peg$FAILED && peg$currPos < input.length) {
peg$fail(peg$endExpectation());
}
throw peg$buildStructuredError(
peg$maxFailExpected,
peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,
peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)
);
}
}
return {
SyntaxError: peg$SyntaxError,
parse: peg$parse
};
}()
);
const _ArgSpecPegParser = (
// Generated by Peggy 3.0.2.
//
// https://peggyjs.org/
function() {
function peg$subclass(child, parent) {
function C() {
this.constructor = child;
}
C.prototype = parent.prototype;
child.prototype = new C();
}
function peg$SyntaxError(message, expected, found, location) {
var self = Error.call(this, message);
if (Object.setPrototypeOf) {
Object.setPrototypeOf(self, peg$SyntaxError.prototype);
}
self.expected = expected;
self.found = found;
self.location = location;
self.name = "SyntaxError";
return self;
}
peg$subclass(peg$SyntaxError, Error);
function peg$padEnd(str, targetLength, padString) {
padString = padString || " ";
if (str.length > targetLength) {
return str;
}
targetLength -= str.length;
padString += padString.repeat(targetLength);
return str + padString.slice(0, targetLength);
}
peg$SyntaxError.prototype.format = function(sources) {
var str = "Error: " + this.message;
if (this.location) {
var src = null;
var k;
for (k = 0; k < sources.length; k++) {
if (sources[k].source === this.location.source) {
src = sources[k].text.split(/\r\n|\n|\r/g);
break;
}
}
var s = this.location.start;
var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s;
var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column;
if (src) {
var e = this.location.end;
var filler = peg$padEnd("", offset_s.line.toString().length, " ");
var line = src[s.line - 1];
var last = s.line === e.line ? e.column : line.length + 1;
var hatLen = last - s.column || 1;
str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^");
} else {
str += "\n at " + loc;
}
}
return str;
};
peg$SyntaxError.buildMessage = function(expected, found) {
var DESCRIBE_EXPECTATION_FNS = {
literal: function(expectation) {
return '"' + literalEscape(expectation.text) + '"';
},
class: function(expectation) {
var escapedParts = expectation.parts.map(function(part) {
return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part);
});
return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]";
},
any: function() {
return "any character";
},
end: function() {
return "end of input";
},
other: function(expectation) {
return expectation.description;
}
};
function hex(ch) {
return ch.charCodeAt(0).toString(16).toUpperCase();
}
function literalEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function classEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function describeExpectation(expectation) {
return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);
}
function describeExpected(expected2) {
var descriptions = expected2.map(describeExpectation);
var i, j;
descriptions.sort();
if (descriptions.length > 0) {
for (i = 1, j = 1; i < descriptions.length; i++) {
if (descriptions[i - 1] !== descriptions[i]) {
descriptions[j] = descriptions[i];
j++;
}
}
descriptions.length = j;
}
switch (descriptions.length) {
case 1:
return descriptions[0];
case 2:
return descriptions[0] + " or " + descriptions[1];
default:
return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1];
}
}
function describeFound(found2) {
return found2 ? '"' + literalEscape(found2) + '"' : "end of input";
}
return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found.";
};
function peg$parse(input, options) {
options = options !== void 0 ? options : {};
var peg$FAILED = {};
var peg$source = options.grammarSource;
var peg$startRuleFunctions = { args_spec_list: peg$parseargs_spec_list };
var peg$startRuleFunction = peg$parseargs_spec_list;
var peg$c1 = "v";
var peg$c2 = "b";
var peg$c3 = "!";
var peg$c4 = "D";
var peg$c5 = "d";
var peg$c6 = "s";
var peg$c7 = "O";
var peg$c8 = "o";
var peg$c9 = "e";
var peg$c10 = "E";
var peg$c11 = "t";
var peg$c12 = "R";
var peg$c13 = "r";
var peg$c14 = "u";
var peg$c15 = "m";
var peg$c16 = "{";
var peg$c17 = "}";
var peg$c18 = " ";
var peg$c19 = "\n";
var peg$c20 = "\r";
var peg$c21 = "\\";
var peg$r0 = /^[{ ]/;
var peg$r1 = /^[a-zA-Z]/;
var peg$r2 = /^[{}]/;
var peg$e0 = peg$literalExpectation("+", false);
var peg$e1 = peg$literalExpectation("v", false);
var peg$e2 = peg$anyExpectation();
var peg$e3 = peg$literalExpectation("b", false);
var peg$e4 = peg$literalExpectation("!", false);
var peg$e5 = peg$literalExpectation("D", false);
var peg$e6 = peg$literalExpectation("d", false);
var peg$e7 = peg$literalExpectation("s", false);
var peg$e8 = peg$literalExpectation("O", false);
var peg$e9 = peg$literalExpectation("o", false);
var peg$e10 = peg$literalExpectation("e", false);
var peg$e11 = peg$literalExpectation("E", false);
var peg$e12 = peg$literalExpectation("t", false);
var peg$e13 = peg$literalExpectation("R", false);
var peg$e14 = peg$literalExpectation("r", false);
var peg$e15 = peg$literalExpectation("u", false);
var peg$e16 = peg$classExpectation(["{", " "], false, false);
var peg$e17 = peg$literalExpectation("m", false);
var peg$e18 = peg$literalExpectation("{", false);
var peg$e19 = peg$literalExpectation("}", false);
var peg$e20 = peg$literalExpectation(" ", false);
var peg$e21 = peg$literalExpectation("\n", false);
var peg$e22 = peg$literalExpectation("\r", false);
var peg$e23 = peg$literalExpectation("\\", false);
var peg$e24 = peg$classExpectation([["a", "z"], ["A", "Z"]], false, false);
var peg$e25 = peg$classExpectation(["{", "}"], false, false);
var peg$f0 = function(x) {
return x;
};
var peg$f1 = function(spec) {
return spec;
};
var peg$f2 = function(spec) {
return spec;
};
var peg$f3 = function(openBrace) {
return createNode("verbatim", { openBrace, closeBrace: openBrace });
};
var peg$f4 = function() {
return createNode("body");
};
var peg$f5 = function(leading_bang, spec) {
return leading_bang ? { ...spec, noLeadingWhitespace: true } : spec;
};
var peg$f6 = function(braceSpec, defaultArg) {
return createNode("optional", { ...braceSpec, defaultArg });
};
var peg$f7 = function(braceSpec) {
return createNode("optional", braceSpec);
};
var peg$f8 = function() {
return createNode("optionalStar");
};
var peg$f9 = function(g) {
return createNode("optional", { defaultArg: g });
};
var peg$f10 = function() {
return createNode("optional");
};
var peg$f11 = function(args) {
return createNode("embellishment", {
embellishmentTokens: args
});
};
var peg$f12 = function(args, g) {
return createNode("embellishment", {
embellishmentTokens: args,
defaultArg: g
});
};
var peg$f13 = function(tok) {
return createNode("optionalToken", { token: tok });
};
var peg$f14 = function(braceSpec, defaultArg) {
return createNode("mandatory", { ...braceSpec, defaultArg });
};
var peg$f15 = function(braceSpec) {
return createNode("mandatory", braceSpec);
};
var peg$f16 = function(stopTokens) {
return createNode("until", { stopTokens });
};
var peg$f17 = function(x) {
return [x];
};
var peg$f18 = function(g) {
return g.content;
};
var peg$f19 = function() {
return createNode("mandatory");
};
var peg$f20 = function(openBrace, closeBrace) {
return { openBrace, closeBrace };
};
var peg$f21 = function(g) {
return g.content.map(groupToStr).join("");
};
var peg$f22 = function(t) {
return [t];
};
var peg$f23 = function(args) {
return args.filter((a) => !a.match(/^\s*$/));
};
var peg$f24 = function(content) {
return { type: "group", content };
};
var peg$f25 = function() {
return "";
};
var peg$currPos = 0;
var peg$posDetailsCache = [{ line: 1, column: 1 }];
var peg$maxFailPos = 0;
var peg$maxFailExpected = [];
var peg$silentFails = 0;
var peg$result;
if ("startRule" in options) {
if (!(options.startRule in peg$startRuleFunctions)) {
throw new Error(`Can't start parsing from rule "` + options.startRule + '".');
}
peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
}
function peg$literalExpectation(text2, ignoreCase) {
return { type: "literal", text: text2, ignoreCase };
}
function peg$classExpectation(parts, inverted, ignoreCase) {
return { type: "class", parts, inverted, ignoreCase };
}
function peg$anyExpectation() {
return { type: "any" };
}
function peg$endExpectation() {
return { type: "end" };
}
function peg$computePosDetails(pos) {
var details = peg$posDetailsCache[pos];
var p;
if (details) {
return details;
} else {
p = pos - 1;
while (!peg$posDetailsCache[p]) {
p--;
}
details = peg$posDetailsCache[p];
details = {
line: details.line,
column: details.column
};
while (p < pos) {
if (input.charCodeAt(p) === 10) {
details.line++;
details.column = 1;
} else {
details.column++;
}
p++;
}
peg$posDetailsCache[pos] = details;
return details;
}
}
function peg$computeLocation(startPos, endPos, offset2) {
var startPosDetails = peg$computePosDetails(startPos);
var endPosDetails = peg$computePosDetails(endPos);
var res = {
source: peg$source,
start: {
offset: startPos,
line: startPosDetails.line,
column: startPosDetails.column
},
end: {
offset: endPos,
line: endPosDetails.line,
column: endPosDetails.column
}
};
return res;
}
function peg$fail(expected2) {
if (peg$currPos < peg$maxFailPos) {
return;
}
if (peg$currPos > peg$maxFailPos) {
peg$maxFailPos = peg$currPos;
peg$maxFailExpected = [];
}
peg$maxFailExpected.push(expected2);
}
function peg$buildStructuredError(expected2, found, location2) {
return new peg$SyntaxError(
peg$SyntaxError.buildMessage(expected2, found),
expected2,
found,
location2
);
}
function peg$parseargs_spec_list() {
var s0, s1, s2, s4;
s0 = peg$currPos;
s1 = [];
s2 = peg$currPos;
peg$parsewhitespace();
s4 = peg$parsearg_spec();
if (s4 !== peg$FAILED) {
s2 = peg$f0(s4);
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$currPos;
peg$parsewhitespace();
s4 = peg$parsearg_spec();
if (s4 !== peg$FAILED) {
s2 = peg$f0(s4);
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
}
s2 = peg$parsewhitespace();
s0 = peg$f1(s1);
return s0;
}
function peg$parsearg_spec() {
var s0, s2;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 43) {
peg$currPos++;
} else {
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
s2 = peg$parseoptional();
if (s2 === peg$FAILED) {
s2 = peg$parsemandatory();
if (s2 === peg$FAILED) {
s2 = peg$parseverbatim();
if (s2 === peg$FAILED) {
s2 = peg$parserequired();
if (s2 === peg$FAILED) {
s2 = peg$parsebody();
if (s2 === peg$FAILED) {
s2 = peg$parseuntil();
}
}
}
}
}
if (s2 !== peg$FAILED) {
s0 = peg$f2(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseverbatim() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 118) {
s1 = peg$c1;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e1);
}
}
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$e2);
}
}
if (s2 !== peg$FAILED) {
s0 = peg$f3(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsebody() {
var s0, s1;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 98) {
s1 = peg$c2;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s1 !== peg$FAILED) {
s1 = peg$f4();
}
s0 = s1;
return s0;
}
function peg$parseoptional() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 33) {
s1 = peg$c3;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e4);
}
}
if (s1 === peg$FAILED) {
s1 = null;
}
s2 = peg$parseoptional_star();
if (s2 === peg$FAILED) {
s2 = peg$parseoptional_standard();
if (s2 === peg$FAILED) {
s2 = peg$parseoptional_delimited();
if (s2 === peg$FAILED) {
s2 = peg$parseoptional_embellishment();
if (s2 === peg$FAILED) {
s2 = peg$parseoptional_token();
}
}
}
}
if (s2 !== peg$FAILED) {
s0 = peg$f5(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseoptional_delimited() {
var s0, s1, s2, s3;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 68) {
s1 = peg$c4;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e5);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$parsebrace_spec();
s3 = peg$parsearg();
if (s3 !== peg$FAILED) {
s0 = peg$f6(s2, s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 100) {
s1 = peg$c5;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e6);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$parsebrace_spec();
s0 = peg$f7(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
return s0;
}
function peg$parseoptional_star() {
var s0, s1;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 115) {
s1 = peg$c6;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e7);
}
}
if (s1 !== peg$FAILED) {
s1 = peg$f8();
}
s0 = s1;
return s0;
}
function peg$parseoptional_standard() {
var s0, s1, s3;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 79) {
s1 = peg$c7;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e8);
}
}
if (s1 !== peg$FAILED) {
peg$parsewhitespace();
s3 = peg$parsearg();
if (s3 !== peg$FAILED) {
s0 = peg$f9(s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 111) {
s1 = peg$c8;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e9);
}
}
if (s1 !== peg$FAILED) {
s1 = peg$f10();
}
s0 = s1;
}
return s0;
}
function peg$parseoptional_embellishment() {
var s0, s1, s3, s5;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 101) {
s1 = peg$c9;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e10);
}
}
if (s1 !== peg$FAILED) {
peg$parsewhitespace();
s3 = peg$parseargs();
if (s3 !== peg$FAILED) {
s0 = peg$f11(s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 69) {
s1 = peg$c10;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e11);
}
}
if (s1 !== peg$FAILED) {
peg$parsewhitespace();
s3 = peg$parseargs();
if (s3 !== peg$FAILED) {
peg$parsewhitespace();
s5 = peg$parseargs();
if (s5 !== peg$FAILED) {
s0 = peg$f12(s3, s5);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
return s0;
}
function peg$parseoptional_token() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 116) {
s1 = peg$c11;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e12);
}
}
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$e2);
}
}
if (s2 !== peg$FAILED) {
s0 = peg$f13(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parserequired() {
var s0, s1, s2, s3;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 82) {
s1 = peg$c12;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e13);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$parsebrace_spec();
s3 = peg$parsearg();
if (s3 !== peg$FAILED) {
s0 = peg$f14(s2, s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 114) {
s1 = peg$c13;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e14);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$parsebrace_spec();
s0 = peg$f15(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
return s0;
}
function peg$parseuntil() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 117) {
s1 = peg$c14;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e15);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$parseuntil_stop_token();
if (s2 !== peg$FAILED) {
s0 = peg$f16(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseuntil_stop_token() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = peg$currPos;
peg$silentFails++;
if (peg$r0.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e16);
}
}
peg$silentFails--;
if (s2 === peg$FAILED) {
s1 = void 0;
} 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$e2);
}
}
if (s2 !== peg$FAILED) {
s0 = peg$f17(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsebraced_group();
if (s1 !== peg$FAILED) {
s1 = peg$f18(s1);
}
s0 = s1;
}
return s0;
}
function peg$parsemandatory() {
var s0, s1;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 109) {
s1 = peg$c15;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e17);
}
}
if (s1 !== peg$FAILED) {
s1 = peg$f19();
}
s0 = s1;
return s0;
}
function peg$parsebrace_spec() {
var s0, s1, s2, s3, s4, s5;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$currPos;
s3 = peg$currPos;
peg$silentFails++;
s4 = peg$parsewhitespace_token();
peg$silentFails--;
if (s4 === peg$FAILED) {
s3 = void 0;
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
if (s3 !== peg$FAILED) {
s4 = peg$parsemacro();
if (s4 === peg$FAILED) {
if (input.length > peg$currPos) {
s4 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
}
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) {
s2 = null;
}
s1 = input.substring(s1, peg$currPos);
s2 = peg$currPos;
s3 = peg$currPos;
s4 = peg$currPos;
peg$silentFails++;
s5 = peg$parsewhitespace_token();
peg$silentFails--;
if (s5 === peg$FAILED) {
s4 = void 0;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s5 = peg$parsemacro();
if (s5 === peg$FAILED) {
if (input.length > peg$currPos) {
s5 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
}
if (s5 !== peg$FAILED) {
s4 = [s4, s5];
s3 = s4;
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
if (s3 === peg$FAILED) {
s3 = null;
}
s2 = input.substring(s2, peg$currPos);
s0 = peg$f20(s1, s2);
return s0;
}
function peg$parsearg() {
var s0, s1;
s0 = peg$parsetoken();
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsebraced_group();
if (s1 !== peg$FAILED) {
s1 = peg$f21(s1);
}
s0 = s1;
}
return s0;
}
function peg$parseargs() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$parsetoken();
if (s1 !== peg$FAILED) {
s1 = peg$f22(s1);
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 123) {
s1 = peg$c16;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e18);
}
}
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parsearg();
if (s3 === peg$FAILED) {
s3 = peg$parsewhitespace_token();
}
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsearg();
if (s3 === peg$FAILED) {
s3 = peg$parsewhitespace_token();
}
}
if (input.charCodeAt(peg$currPos) === 125) {
s3 = peg$c17;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e19);
}
}
if (s3 !== peg$FAILED) {
s0 = peg$f23(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
return s0;
}
function peg$parsebraced_group() {
var s0, s1, s2, s3, s4, s5, s6, s7;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 123) {
s1 = peg$c16;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e18);
}
}
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$currPos;
s4 = peg$currPos;
s5 = peg$currPos;
peg$silentFails++;
if (input.charCodeAt(peg$currPos) === 125) {
s6 = peg$c17;
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e19);
}
}
peg$silentFails--;
if (s6 === peg$FAILED) {
s5 = void 0;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
if (s5 !== peg$FAILED) {
s6 = peg$currPos;
peg$silentFails++;
s7 = peg$parsebraced_group();
peg$silentFails--;
if (s7 === peg$FAILED) {
s6 = void 0;
} else {
peg$currPos = s6;
s6 = peg$FAILED;
}
if (s6 !== peg$FAILED) {
s7 = peg$parsetoken();
if (s7 === peg$FAILED) {
s7 = peg$parsewhitespace_token();
}
if (s7 !== peg$FAILED) {
s5 = [s5, s6, s7];
s4 = s5;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s3 = input.substring(s3, peg$currPos);
} else {
s3 = s4;
}
if (s3 === peg$FAILED) {
s3 = peg$parsebraced_group();
}
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$currPos;
s4 = peg$currPos;
s5 = peg$currPos;
peg$silentFails++;
if (input.charCodeAt(peg$currPos) === 125) {
s6 = peg$c17;
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e19);
}
}
peg$silentFails--;
if (s6 === peg$FAILED) {
s5 = void 0;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
if (s5 !== peg$FAILED) {
s6 = peg$currPos;
peg$silentFails++;
s7 = peg$parsebraced_group();
peg$silentFails--;
if (s7 === peg$FAILED) {
s6 = void 0;
} else {
peg$currPos = s6;
s6 = peg$FAILED;
}
if (s6 !== peg$FAILED) {
s7 = peg$parsetoken();
if (s7 === peg$FAILED) {
s7 = peg$parsewhitespace_token();
}
if (s7 !== peg$FAILED) {
s5 = [s5, s6, s7];
s4 = s5;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s3 = input.substring(s3, peg$currPos);
} else {
s3 = s4;
}
if (s3 === peg$FAILED) {
s3 = peg$parsebraced_group();
}
}
if (input.charCodeAt(peg$currPos) === 125) {
s3 = peg$c17;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e19);
}
}
if (s3 !== peg$FAILED) {
s0 = peg$f24(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsewhitespace() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
s2 = peg$parsewhitespace_token();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsewhitespace_token();
}
s1 = peg$f25();
s0 = s1;
return s0;
}
function peg$parsewhitespace_token() {
var s0;
if (input.charCodeAt(peg$currPos) === 32) {
s0 = peg$c18;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e20);
}
}
if (s0 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 10) {
s0 = peg$c19;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e21);
}
}
if (s0 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 13) {
s0 = peg$c20;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e22);
}
}
}
}
return s0;
}
function peg$parsemacro() {
var s0, s1, s2, s3, s4;
s0 = peg$currPos;
s1 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 92) {
s2 = peg$c21;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e23);
}
}
if (s2 !== peg$FAILED) {
s3 = [];
if (peg$r1.test(input.charAt(peg$currPos))) {
s4 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e24);
}
}
if (s4 !== peg$FAILED) {
while (s4 !== peg$FAILED) {
s3.push(s4);
if (peg$r1.test(input.charAt(peg$currPos))) {
s4 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e24);
}
}
}
} else {
s3 = peg$FAILED;
}
if (s3 !== peg$FAILED) {
s2 = [s2, s3];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s0 = input.substring(s0, peg$currPos);
} else {
s0 = s1;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 92) {
s2 = peg$c21;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e23);
}
}
if (s2 !== peg$FAILED) {
s3 = peg$currPos;
peg$silentFails++;
if (peg$r1.test(input.charAt(peg$currPos))) {
s4 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e24);
}
}
peg$silentFails--;
if (s4 === peg$FAILED) {
s3 = void 0;
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
if (s3 !== peg$FAILED) {
if (input.length > peg$currPos) {
s4 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
if (s4 !== peg$FAILED) {
s2 = [s2, s3, s4];
s1 = s2;
} 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) {
s0 = input.substring(s0, peg$currPos);
} else {
s0 = s1;
}
}
return s0;
}
function peg$parsetoken() {
var s0, s1, s2, s3;
s0 = peg$parsemacro();
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$currPos;
peg$silentFails++;
if (peg$r2.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e25);
}
}
peg$silentFails--;
if (s2 === peg$FAILED) {
s1 = void 0;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s2 = peg$currPos;
peg$silentFails++;
s3 = peg$parsewhitespace_token();
peg$silentFails--;
if (s3 === peg$FAILED) {
s2 = void 0;
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
if (input.length > peg$currPos) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
if (s3 !== peg$FAILED) {
s0 = s3;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
return s0;
}
const DEFAULT_OPTIONS = {
optional: { openBrace: "[", closeBrace: "]" },
mandatory: { openBrace: "{", closeBrace: "}" }
};
function createNode(type, options2) {
const computedOptions = DEFAULT_OPTIONS[type] || {};
return { type, ...computedOptions, ...options2 };
}
function groupToStr(node) {
if (typeof node !== "object" || !node) {
return node;
}
if (node.type === "group") {
return `{${node.content.map(groupToStr).join("")}}`;
}
return node;
}
peg$result = peg$startRuleFunction();
if (peg$result !== peg$FAILED && peg$currPos === input.length) {
return peg$result;
} else {
if (peg$result !== peg$FAILED && peg$currPos < input.length) {
peg$fail(peg$endExpectation());
}
throw peg$buildStructuredError(
peg$maxFailExpected,
peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,
peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)
);
}
}
return {
SyntaxError: peg$SyntaxError,
parse: peg$parse
};
}()
);
const _PgfkeysPegParser = (
// Generated by Peggy 3.0.2.
//
// https://peggyjs.org/
function() {
function peg$subclass(child, parent) {
function C() {
this.constructor = child;
}
C.prototype = parent.prototype;
child.prototype = new C();
}
function peg$SyntaxError(message, expected, found, location) {
var self = Error.call(this, message);
if (Object.setPrototypeOf) {
Object.setPrototypeOf(self, peg$SyntaxError.prototype);
}
self.expected = expected;
self.found = found;
self.location = location;
self.name = "SyntaxError";
return self;
}
peg$subclass(peg$SyntaxError, Error);
function peg$padEnd(str, targetLength, padString) {
padString = padString || " ";
if (str.length > targetLength) {
return str;
}
targetLength -= str.length;
padString += padString.repeat(targetLength);
return str + padString.slice(0, targetLength);
}
peg$SyntaxError.prototype.format = function(sources) {
var str = "Error: " + this.message;
if (this.location) {
var src = null;
var k;
for (k = 0; k < sources.length; k++) {
if (sources[k].source === this.location.source) {
src = sources[k].text.split(/\r\n|\n|\r/g);
break;
}
}
var s = this.location.start;
var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s;
var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column;
if (src) {
var e = this.location.end;
var filler = peg$padEnd("", offset_s.line.toString().length, " ");
var line = src[s.line - 1];
var last = s.line === e.line ? e.column : line.length + 1;
var hatLen = last - s.column || 1;
str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^");
} else {
str += "\n at " + loc;
}
}
return str;
};
peg$SyntaxError.buildMessage = function(expected, found) {
var DESCRIBE_EXPECTATION_FNS = {
literal: function(expectation) {
return '"' + literalEscape(expectation.text) + '"';
},
class: function(expectation) {
var escapedParts = expectation.parts.map(function(part) {
return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part);
});
return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]";
},
any: function() {
return "any character";
},
end: function() {
return "end of input";
},
other: function(expectation) {
return expectation.description;
}
};
function hex(ch) {
return ch.charCodeAt(0).toString(16).toUpperCase();
}
function literalEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function classEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function describeExpectation(expectation) {
return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);
}
function describeExpected(expected2) {
var descriptions = expected2.map(describeExpectation);
var i, j;
descriptions.sort();
if (descriptions.length > 0) {
for (i = 1, j = 1; i < descriptions.length; i++) {
if (descriptions[i - 1] !== descriptions[i]) {
descriptions[j] = descriptions[i];
j++;
}
}
descriptions.length = j;
}
switch (descriptions.length) {
case 1:
return descriptions[0];
case 2:
return descriptions[0] + " or " + descriptions[1];
default:
return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1];
}
}
function describeFound(found2) {
return found2 ? '"' + literalEscape(found2) + '"' : "end of input";
}
return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found.";
};
function peg$parse(input, options) {
options = options !== void 0 ? options : {};
var peg$FAILED = {};
var peg$source = options.grammarSource;
var peg$startRuleFunctions = { body: peg$parsebody };
var peg$startRuleFunction = peg$parsebody;
var peg$e0 = peg$anyExpectation();
var peg$f0 = function() {
return [];
};
var peg$f1 = function(rowItems, trailingComment) {
return {
itemParts: [],
...rowItems,
trailingComment,
trailingComma: true
};
};
var peg$f2 = function(rowItems, trailingComment) {
return { ...rowItems, trailingComment };
};
var peg$f3 = function(a, b) {
return processItem(a, b);
};
var peg$f4 = function(b) {
return processItem(null, b);
};
var peg$f5 = function(cell) {
return { cell };
};
var peg$f6 = function() {
return {};
};
var peg$f7 = function(part) {
return part;
};
var peg$f8 = function(x) {
return x;
};
var peg$f9 = function(space, x) {
return {
trailingComment: x,
leadingParbreak: space.parbreak > 0
};
};
var peg$f10 = function(list) {
return {
whitespace: list.filter((x) => options.isWhitespace(x)).length,
parbreak: list.filter((x) => options.isParbreak(x)).length
};
};
var peg$f11 = function() {
return !options.allowParenGroups;
};
var peg$f12 = function(tok) {
return options.isSameLineComment(tok);
};
var peg$f13 = function(tok) {
return tok;
};
var peg$f14 = function(tok) {
return options.isOwnLineComment(tok);
};
var peg$f15 = function(tok) {
return tok;
};
var peg$f16 = function(tok) {
return options.isWhitespace(tok);
};
var peg$f17 = function(tok) {
return tok;
};
var peg$f18 = function(tok) {
return options.isParbreak(tok);
};
var peg$f19 = function(tok) {
return tok;
};
var peg$f20 = function(tok) {
return options.isComma(tok);
};
var peg$f21 = function(tok) {
return tok;
};
var peg$f22 = function(tok) {
return options.isEquals(tok);
};
var peg$f23 = function(tok) {
return tok;
};
var peg$f24 = function(tok) {
return options.isChar(tok, "(");
};
var peg$f25 = function(tok) {
return tok;
};
var peg$f26 = function(tok) {
return options.isChar(tok, ")");
};
var peg$f27 = function(tok) {
return tok;
};
var peg$currPos = 0;
var peg$posDetailsCache = [{ line: 1, column: 1 }];
var peg$maxFailPos = 0;
var peg$maxFailExpected = [];
var peg$silentFails = 0;
var peg$result;
if ("startRule" in options) {
if (!(options.startRule in peg$startRuleFunctions)) {
throw new Error(`Can't start parsing from rule "` + options.startRule + '".');
}
peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
}
function peg$anyExpectation() {
return { type: "any" };
}
function peg$endExpectation() {
return { type: "end" };
}
function peg$computePosDetails(pos) {
var details = peg$posDetailsCache[pos];
var p;
if (details) {
return details;
} else {
p = pos - 1;
while (!peg$posDetailsCache[p]) {
p--;
}
details = peg$posDetailsCache[p];
details = {
line: details.line,
column: details.column
};
while (p < pos) {
if (input.charCodeAt(p) === 10) {
details.line++;
details.column = 1;
} else {
details.column++;
}
p++;
}
peg$posDetailsCache[pos] = details;
return details;
}
}
function peg$computeLocation(startPos, endPos, offset2) {
var startPosDetails = peg$computePosDetails(startPos);
var endPosDetails = peg$computePosDetails(endPos);
var res = {
source: peg$source,
start: {
offset: startPos,
line: startPosDetails.line,
column: startPosDetails.column
},
end: {
offset: endPos,
line: endPosDetails.line,
column: endPosDetails.column
}
};
return res;
}
function peg$fail(expected2) {
if (peg$currPos < peg$maxFailPos) {
return;
}
if (peg$currPos > peg$maxFailPos) {
peg$maxFailPos = peg$currPos;
peg$maxFailExpected = [];
}
peg$maxFailExpected.push(expected2);
}
function peg$buildStructuredError(expected2, found, location2) {
return new peg$SyntaxError(
peg$SyntaxError.buildMessage(expected2, found),
expected2,
found,
location2
);
}
function peg$parsebody() {
var s0, s1, s2;
s0 = [];
s1 = peg$parsecomment_only_line();
if (s1 === peg$FAILED) {
s1 = peg$parseitem_with_end();
if (s1 === peg$FAILED) {
s1 = peg$parseitem_without_end();
}
}
if (s1 !== peg$FAILED) {
while (s1 !== peg$FAILED) {
s0.push(s1);
s1 = peg$parsecomment_only_line();
if (s1 === peg$FAILED) {
s1 = peg$parseitem_with_end();
if (s1 === peg$FAILED) {
s1 = peg$parseitem_without_end();
}
}
}
} else {
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
s2 = peg$parsewhitespace();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsewhitespace();
}
s2 = peg$parseEOL();
if (s2 !== peg$FAILED) {
s0 = peg$f0();
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
return s0;
}
function peg$parseitem_with_end() {
var s0, s2, s4, s5, s6, s7, s8;
s0 = peg$currPos;
peg$parsewhitespace_or_parbreaks();
s2 = peg$parserow_items();
if (s2 === peg$FAILED) {
s2 = null;
}
peg$parsewhitespace_or_parbreaks();
s4 = peg$parseitem_sep();
if (s4 !== peg$FAILED) {
s5 = [];
s6 = peg$parsewhitespace();
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$parsewhitespace();
}
s6 = peg$parsetrailing_comment();
if (s6 === peg$FAILED) {
s6 = null;
}
s7 = [];
s8 = peg$parsewhitespace();
while (s8 !== peg$FAILED) {
s7.push(s8);
s8 = peg$parsewhitespace();
}
s0 = peg$f1(s2, s6);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseitem_without_end() {
var s0, s2, s3;
s0 = peg$currPos;
peg$parsewhitespace_or_parbreaks();
s2 = peg$parserow_items();
if (s2 !== peg$FAILED) {
s3 = peg$parsetrailing_comment();
if (s3 === peg$FAILED) {
s3 = null;
}
s0 = peg$f2(s2, s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parserow_items() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$parseitem_part();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parseseparated_part();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parseseparated_part();
}
s0 = peg$f3(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
s2 = peg$parseseparated_part();
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parseseparated_part();
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s1 = peg$f4(s1);
}
s0 = s1;
}
return s0;
}
function peg$parseseparated_part() {
var s0, s1, s2, s3, s4;
s0 = peg$currPos;
s1 = [];
s2 = peg$parseparbreak();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parseparbreak();
}
s2 = peg$parseequals();
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parseparbreak();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parseparbreak();
}
s4 = peg$parseitem_part();
if (s4 !== peg$FAILED) {
s0 = peg$f5(s4);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
s2 = peg$parseparbreak();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parseparbreak();
}
s2 = peg$parseequals();
if (s2 !== peg$FAILED) {
s0 = peg$f6();
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
return s0;
}
function peg$parseitem_part() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;
s0 = peg$currPos;
s1 = [];
s2 = peg$parsewhitespace();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsewhitespace();
}
s2 = peg$currPos;
s3 = [];
s4 = peg$parsenon_whitespace_non_parbreak_token();
if (s4 === peg$FAILED) {
s4 = peg$currPos;
s5 = peg$parsewhitespace();
if (s5 === peg$FAILED) {
s5 = peg$parseparbreak();
}
if (s5 !== peg$FAILED) {
s6 = peg$currPos;
peg$silentFails++;
s7 = peg$currPos;
s8 = [];
s9 = peg$parsewhitespace();
if (s9 === peg$FAILED) {
s9 = peg$parseparbreak();
}
while (s9 !== peg$FAILED) {
s8.push(s9);
s9 = peg$parsewhitespace();
if (s9 === peg$FAILED) {
s9 = peg$parseparbreak();
}
}
s9 = peg$parsenon_whitespace_non_parbreak_token();
if (s9 !== peg$FAILED) {
s8 = [s8, s9];
s7 = s8;
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
peg$silentFails--;
if (s7 !== peg$FAILED) {
peg$currPos = s6;
s6 = void 0;
} else {
s6 = peg$FAILED;
}
if (s6 !== peg$FAILED) {
s5 = [s5, s6];
s4 = s5;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
}
if (s4 !== peg$FAILED) {
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parsenon_whitespace_non_parbreak_token();
if (s4 === peg$FAILED) {
s4 = peg$currPos;
s5 = peg$parsewhitespace();
if (s5 === peg$FAILED) {
s5 = peg$parseparbreak();
}
if (s5 !== peg$FAILED) {
s6 = peg$currPos;
peg$silentFails++;
s7 = peg$currPos;
s8 = [];
s9 = peg$parsewhitespace();
if (s9 === peg$FAILED) {
s9 = peg$parseparbreak();
}
while (s9 !== peg$FAILED) {
s8.push(s9);
s9 = peg$parsewhitespace();
if (s9 === peg$FAILED) {
s9 = peg$parseparbreak();
}
}
s9 = peg$parsenon_whitespace_non_parbreak_token();
if (s9 !== peg$FAILED) {
s8 = [s8, s9];
s7 = s8;
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
peg$silentFails--;
if (s7 !== peg$FAILED) {
peg$currPos = s6;
s6 = void 0;
} else {
s6 = peg$FAILED;
}
if (s6 !== peg$FAILED) {
s5 = [s5, s6];
s4 = s5;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
}
}
} else {
s3 = peg$FAILED;
}
if (s3 !== peg$FAILED) {
s2 = input.substring(s2, peg$currPos);
} else {
s2 = s3;
}
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parsewhitespace();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parsewhitespace();
}
s0 = peg$f7(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsetrailing_comment() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
s2 = peg$parsewhitespace();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsewhitespace();
}
s2 = peg$parsesame_line_comment();
if (s2 !== peg$FAILED) {
s0 = peg$f8(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsecomment_only_line() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = peg$parsewhitespace_or_parbreaks();
s2 = peg$parseown_line_comment();
if (s2 !== peg$FAILED) {
s0 = peg$f9(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsetoken() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$currPos;
peg$silentFails++;
s3 = peg$parsenon_token();
peg$silentFails--;
if (s3 === peg$FAILED) {
s2 = void 0;
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
if (input.length > peg$currPos) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s3 !== peg$FAILED) {
s2 = [s2, s3];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s0 = input.substring(s0, peg$currPos);
} else {
s0 = s1;
}
return s0;
}
function peg$parsenon_whitespace_non_parbreak_token() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$currPos;
peg$silentFails++;
s3 = peg$parsewhitespace();
if (s3 === peg$FAILED) {
s3 = peg$parseparbreak();
}
peg$silentFails--;
if (s3 === peg$FAILED) {
s2 = void 0;
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s3 = peg$parseparen_block();
if (s3 === peg$FAILED) {
s3 = peg$parsetoken();
}
if (s3 !== peg$FAILED) {
s2 = [s2, s3];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s0 = input.substring(s0, peg$currPos);
} else {
s0 = s1;
}
return s0;
}
function peg$parsenon_token() {
var s0;
s0 = peg$parseitem_sep();
if (s0 === peg$FAILED) {
s0 = peg$parseequals();
if (s0 === peg$FAILED) {
s0 = peg$parsetrailing_comment();
if (s0 === peg$FAILED) {
s0 = peg$parseown_line_comment();
}
}
}
return s0;
}
function peg$parsewhitespace_or_parbreaks() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
s2 = peg$parsewhitespace();
if (s2 === peg$FAILED) {
s2 = peg$parseparbreak();
}
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsewhitespace();
if (s2 === peg$FAILED) {
s2 = peg$parseparbreak();
}
}
s1 = peg$f10(s1);
s0 = s1;
return s0;
}
function peg$parseparen_block() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8;
s0 = peg$currPos;
s1 = peg$f11();
if (s1) {
s1 = peg$FAILED;
} else {
s1 = void 0;
}
if (s1 !== peg$FAILED) {
s2 = peg$currPos;
s3 = peg$currPos;
s4 = peg$parseopen_paren();
if (s4 !== peg$FAILED) {
s5 = [];
s6 = peg$currPos;
s7 = peg$currPos;
peg$silentFails++;
s8 = peg$parseclose_paren();
peg$silentFails--;
if (s8 === peg$FAILED) {
s7 = void 0;
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
if (s7 !== peg$FAILED) {
if (input.length > peg$currPos) {
s8 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s8 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s8 !== peg$FAILED) {
s7 = [s7, s8];
s6 = s7;
} else {
peg$currPos = s6;
s6 = peg$FAILED;
}
} else {
peg$currPos = s6;
s6 = peg$FAILED;
}
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$currPos;
s7 = peg$currPos;
peg$silentFails++;
s8 = peg$parseclose_paren();
peg$silentFails--;
if (s8 === peg$FAILED) {
s7 = void 0;
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
if (s7 !== peg$FAILED) {
if (input.length > peg$currPos) {
s8 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s8 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s8 !== peg$FAILED) {
s7 = [s7, s8];
s6 = s7;
} else {
peg$currPos = s6;
s6 = peg$FAILED;
}
} else {
peg$currPos = s6;
s6 = peg$FAILED;
}
}
s6 = peg$parseclose_paren();
if (s6 !== peg$FAILED) {
s4 = [s4, s5, s6];
s3 = s4;
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
if (s3 !== peg$FAILED) {
s2 = input.substring(s2, peg$currPos);
} else {
s2 = s3;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsesame_line_comment() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f12(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f13(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseown_line_comment() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f14(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f15(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsewhitespace() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f16(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f17(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseparbreak() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f18(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f19(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseitem_sep() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f20(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f21(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseequals() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f22(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f23(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseopen_paren() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f24(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f25(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseclose_paren() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f26(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f27(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseEOL() {
var s0, s1;
s0 = peg$currPos;
peg$silentFails++;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
peg$silentFails--;
if (s1 === peg$FAILED) {
s0 = void 0;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function processItem(leadCell, otherCells) {
const cells = [leadCell || []];
for (const x of otherCells) {
cells.push(x.cell || []);
}
return { itemParts: cells };
}
if (!options.isWhitespace) {
try {
Object.assign(options, {
isChar: (node, char) => node.type === "string" && node.content === char,
isComma(node) {
return node.type === "string" && node.content === ",";
},
isEquals(node) {
return node.type === "string" && node.content === "=";
},
isParbreak(node) {
return node.type === "parbreak";
},
isWhitespace(node) {
return node.type === "whitespace";
},
isSameLineComment: (node) => node.type === "comment" && node.sameline,
isOwnLineComment: (node) => node.type === "comment" && !node.sameline,
isComment: (node) => node.type === "comment",
allowParenGroups: true
});
} catch (e) {
console.warn("Error when initializing parser", e);
}
}
peg$result = peg$startRuleFunction();
if (peg$result !== peg$FAILED && peg$currPos === input.length) {
return peg$result;
} else {
if (peg$result !== peg$FAILED && peg$currPos < input.length) {
peg$fail(peg$endExpectation());
}
throw peg$buildStructuredError(
peg$maxFailExpected,
peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,
peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)
);
}
}
return {
SyntaxError: peg$SyntaxError,
parse: peg$parse
};
}()
);
const _MacroSubstitutionPegParser = (
// Generated by Peggy 3.0.2.
//
// https://peggyjs.org/
function() {
function peg$subclass(child, parent) {
function C() {
this.constructor = child;
}
C.prototype = parent.prototype;
child.prototype = new C();
}
function peg$SyntaxError(message, expected, found, location) {
var self = Error.call(this, message);
if (Object.setPrototypeOf) {
Object.setPrototypeOf(self, peg$SyntaxError.prototype);
}
self.expected = expected;
self.found = found;
self.location = location;
self.name = "SyntaxError";
return self;
}
peg$subclass(peg$SyntaxError, Error);
function peg$padEnd(str, targetLength, padString) {
padString = padString || " ";
if (str.length > targetLength) {
return str;
}
targetLength -= str.length;
padString += padString.repeat(targetLength);
return str + padString.slice(0, targetLength);
}
peg$SyntaxError.prototype.format = function(sources) {
var str = "Error: " + this.message;
if (this.location) {
var src = null;
var k;
for (k = 0; k < sources.length; k++) {
if (sources[k].source === this.location.source) {
src = sources[k].text.split(/\r\n|\n|\r/g);
break;
}
}
var s = this.location.start;
var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s;
var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column;
if (src) {
var e = this.location.end;
var filler = peg$padEnd("", offset_s.line.toString().length, " ");
var line = src[s.line - 1];
var last = s.line === e.line ? e.column : line.length + 1;
var hatLen = last - s.column || 1;
str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^");
} else {
str += "\n at " + loc;
}
}
return str;
};
peg$SyntaxError.buildMessage = function(expected, found) {
var DESCRIBE_EXPECTATION_FNS = {
literal: function(expectation) {
return '"' + literalEscape(expectation.text) + '"';
},
class: function(expectation) {
var escapedParts = expectation.parts.map(function(part) {
return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part);
});
return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]";
},
any: function() {
return "any character";
},
end: function() {
return "end of input";
},
other: function(expectation) {
return expectation.description;
}
};
function hex(ch) {
return ch.charCodeAt(0).toString(16).toUpperCase();
}
function literalEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function classEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function describeExpectation(expectation) {
return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);
}
function describeExpected(expected2) {
var descriptions = expected2.map(describeExpectation);
var i, j;
descriptions.sort();
if (descriptions.length > 0) {
for (i = 1, j = 1; i < descriptions.length; i++) {
if (descriptions[i - 1] !== descriptions[i]) {
descriptions[j] = descriptions[i];
j++;
}
}
descriptions.length = j;
}
switch (descriptions.length) {
case 1:
return descriptions[0];
case 2:
return descriptions[0] + " or " + descriptions[1];
default:
return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1];
}
}
function describeFound(found2) {
return found2 ? '"' + literalEscape(found2) + '"' : "end of input";
}
return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found.";
};
function peg$parse(input, options) {
options = options !== void 0 ? options : {};
var peg$FAILED = {};
var peg$source = options.grammarSource;
var peg$startRuleFunctions = { body: peg$parsebody };
var peg$startRuleFunction = peg$parsebody;
var peg$e0 = peg$anyExpectation();
var peg$f0 = function(e) {
return [].concat(...e).filter((n) => !!n);
};
var peg$f1 = function() {
return [];
};
var peg$f2 = function(tok) {
return options.isHash(tok);
};
var peg$f3 = function(tok) {
return tok;
};
var peg$f4 = function(tok) {
return options.isNumber(tok);
};
var peg$f5 = function(tok) {
return tok;
};
var peg$f6 = function() {
return { type: "string", content: "#" };
};
var peg$f7 = function(num) {
const split = options.splitNumber(num);
return [{ type: "hash_number", number: split.number }, split.rest];
};
var peg$currPos = 0;
var peg$posDetailsCache = [{ line: 1, column: 1 }];
var peg$maxFailPos = 0;
var peg$maxFailExpected = [];
var peg$silentFails = 0;
var peg$result;
if ("startRule" in options) {
if (!(options.startRule in peg$startRuleFunctions)) {
throw new Error(`Can't start parsing from rule "` + options.startRule + '".');
}
peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
}
function peg$anyExpectation() {
return { type: "any" };
}
function peg$endExpectation() {
return { type: "end" };
}
function peg$computePosDetails(pos) {
var details = peg$posDetailsCache[pos];
var p;
if (details) {
return details;
} else {
p = pos - 1;
while (!peg$posDetailsCache[p]) {
p--;
}
details = peg$posDetailsCache[p];
details = {
line: details.line,
column: details.column
};
while (p < pos) {
if (input.charCodeAt(p) === 10) {
details.line++;
details.column = 1;
} else {
details.column++;
}
p++;
}
peg$posDetailsCache[pos] = details;
return details;
}
}
function peg$computeLocation(startPos, endPos, offset2) {
var startPosDetails = peg$computePosDetails(startPos);
var endPosDetails = peg$computePosDetails(endPos);
var res = {
source: peg$source,
start: {
offset: startPos,
line: startPosDetails.line,
column: startPosDetails.column
},
end: {
offset: endPos,
line: endPosDetails.line,
column: endPosDetails.column
}
};
return res;
}
function peg$fail(expected2) {
if (peg$currPos < peg$maxFailPos) {
return;
}
if (peg$currPos > peg$maxFailPos) {
peg$maxFailPos = peg$currPos;
peg$maxFailExpected = [];
}
peg$maxFailExpected.push(expected2);
}
function peg$buildStructuredError(expected2, found, location2) {
return new peg$SyntaxError(
peg$SyntaxError.buildMessage(expected2, found),
expected2,
found,
location2
);
}
function peg$parsebody() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
s2 = peg$parsedouble_hash();
if (s2 === peg$FAILED) {
s2 = peg$parsehash_number();
if (s2 === 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$e0);
}
}
}
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsedouble_hash();
if (s2 === peg$FAILED) {
s2 = peg$parsehash_number();
if (s2 === 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$e0);
}
}
}
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s1 = peg$f0(s1);
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parseEOL();
if (s1 !== peg$FAILED) {
s1 = peg$f1();
}
s0 = s1;
}
return s0;
}
function peg$parsehash() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f2(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f3(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsenumber() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f4(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f5(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsedouble_hash() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = peg$parsehash();
if (s1 !== peg$FAILED) {
s2 = peg$parsehash();
if (s2 !== peg$FAILED) {
s0 = peg$f6();
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsehash_number() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = peg$parsehash();
if (s1 !== peg$FAILED) {
s2 = peg$parsenumber();
if (s2 !== peg$FAILED) {
s0 = peg$f7(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseEOL() {
var s0, s1;
s0 = peg$currPos;
peg$silentFails++;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
peg$silentFails--;
if (s1 === peg$FAILED) {
s0 = void 0;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
if (!options.isHash) {
try {
Object.assign(options, {
isHash: (node) => node.type === "string" && node.content === "#",
isNumber: (node) => node.type === "string" && 0 < +node.content.charAt(0),
splitNumber: (node) => {
const number = +node.content.charAt(0);
if (node.content.length > 1) {
return {
number,
rest: {
type: "string",
content: node.content.slice(1)
}
};
}
return { number };
}
});
} catch (e) {
console.warn("Error when initializing parser", e);
}
}
peg$result = peg$startRuleFunction();
if (peg$result !== peg$FAILED && peg$currPos === input.length) {
return peg$result;
} else {
if (peg$result !== peg$FAILED && peg$currPos < input.length) {
peg$fail(peg$endExpectation());
}
throw peg$buildStructuredError(
peg$maxFailExpected,
peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,
peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)
);
}
}
return {
SyntaxError: peg$SyntaxError,
parse: peg$parse
};
}()
);
const _LigaturesPegParser = (
// Generated by Peggy 3.0.2.
//
// https://peggyjs.org/
function() {
function peg$subclass(child, parent) {
function C() {
this.constructor = child;
}
C.prototype = parent.prototype;
child.prototype = new C();
}
function peg$SyntaxError(message, expected, found, location) {
var self = Error.call(this, message);
if (Object.setPrototypeOf) {
Object.setPrototypeOf(self, peg$SyntaxError.prototype);
}
self.expected = expected;
self.found = found;
self.location = location;
self.name = "SyntaxError";
return self;
}
peg$subclass(peg$SyntaxError, Error);
function peg$padEnd(str, targetLength, padString) {
padString = padString || " ";
if (str.length > targetLength) {
return str;
}
targetLength -= str.length;
padString += padString.repeat(targetLength);
return str + padString.slice(0, targetLength);
}
peg$SyntaxError.prototype.format = function(sources) {
var str = "Error: " + this.message;
if (this.location) {
var src = null;
var k;
for (k = 0; k < sources.length; k++) {
if (sources[k].source === this.location.source) {
src = sources[k].text.split(/\r\n|\n|\r/g);
break;
}
}
var s = this.location.start;
var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s;
var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column;
if (src) {
var e = this.location.end;
var filler = peg$padEnd("", offset_s.line.toString().length, " ");
var line = src[s.line - 1];
var last = s.line === e.line ? e.column : line.length + 1;
var hatLen = last - s.column || 1;
str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^");
} else {
str += "\n at " + loc;
}
}
return str;
};
peg$SyntaxError.buildMessage = function(expected, found) {
var DESCRIBE_EXPECTATION_FNS = {
literal: function(expectation) {
return '"' + literalEscape(expectation.text) + '"';
},
class: function(expectation) {
var escapedParts = expectation.parts.map(function(part) {
return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part);
});
return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]";
},
any: function() {
return "any character";
},
end: function() {
return "end of input";
},
other: function(expectation) {
return expectation.description;
}
};
function hex(ch) {
return ch.charCodeAt(0).toString(16).toUpperCase();
}
function literalEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function classEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function describeExpectation(expectation) {
return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);
}
function describeExpected(expected2) {
var descriptions = expected2.map(describeExpectation);
var i, j;
descriptions.sort();
if (descriptions.length > 0) {
for (i = 1, j = 1; i < descriptions.length; i++) {
if (descriptions[i - 1] !== descriptions[i]) {
descriptions[j] = descriptions[i];
j++;
}
}
descriptions.length = j;
}
switch (descriptions.length) {
case 1:
return descriptions[0];
case 2:
return descriptions[0] + " or " + descriptions[1];
default:
return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1];
}
}
function describeFound(found2) {
return found2 ? '"' + literalEscape(found2) + '"' : "end of input";
}
return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found.";
};
function peg$parse(input, options) {
options = options !== void 0 ? options : {};
var peg$FAILED = {};
var peg$source = options.grammarSource;
var peg$startRuleFunctions = { body: peg$parsebody };
var peg$startRuleFunction = peg$parsebody;
var peg$e0 = peg$anyExpectation();
var peg$f0 = function(e) {
return [].concat(...e).filter((n) => !!n);
};
var peg$f1 = function() {
return [];
};
var peg$f2 = function(toks) {
return options.isRecognized(toks);
};
var peg$f3 = function(toks) {
return options.isRecognized(toks);
};
var peg$f4 = function(tok1, tok2) {
const split = options.split(tok2);
return options.isRecognized([tok1, split[0]]);
};
var peg$f5 = function(tok1, tok2) {
const split = options.split(tok2);
return [options.isRecognized([tok1, split[0]]), split[1]];
};
var peg$f6 = function(tok1, tok2) {
return options.isRecognized([tok1, tok2]);
};
var peg$f7 = function(tok1, tok2) {
return options.isRecognized([tok1, tok2]);
};
var peg$f8 = function(toks) {
return options.isRecognized(toks);
};
var peg$f9 = function(toks) {
return options.isRecognized(toks);
};
var peg$f10 = function(tok) {
return options.isRecognized([tok]);
};
var peg$f11 = function(tok) {
return options.isRecognized([tok]);
};
var peg$f12 = function(tok) {
return options.isMacro(tok);
};
var peg$f13 = function(tok) {
return tok;
};
var peg$f14 = function(tok) {
return options.isWhitespace(tok);
};
var peg$f15 = function(tok) {
return tok;
};
var peg$f16 = function(tok) {
return options.isSplitable(tok);
};
var peg$f17 = function(tok) {
return tok;
};
var peg$currPos = 0;
var peg$posDetailsCache = [{ line: 1, column: 1 }];
var peg$maxFailPos = 0;
var peg$maxFailExpected = [];
var peg$silentFails = 0;
var peg$result;
if ("startRule" in options) {
if (!(options.startRule in peg$startRuleFunctions)) {
throw new Error(`Can't start parsing from rule "` + options.startRule + '".');
}
peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
}
function peg$anyExpectation() {
return { type: "any" };
}
function peg$endExpectation() {
return { type: "end" };
}
function peg$computePosDetails(pos) {
var details = peg$posDetailsCache[pos];
var p;
if (details) {
return details;
} else {
p = pos - 1;
while (!peg$posDetailsCache[p]) {
p--;
}
details = peg$posDetailsCache[p];
details = {
line: details.line,
column: details.column
};
while (p < pos) {
if (input.charCodeAt(p) === 10) {
details.line++;
details.column = 1;
} else {
details.column++;
}
p++;
}
peg$posDetailsCache[pos] = details;
return details;
}
}
function peg$computeLocation(startPos, endPos, offset2) {
var startPosDetails = peg$computePosDetails(startPos);
var endPosDetails = peg$computePosDetails(endPos);
var res = {
source: peg$source,
start: {
offset: startPos,
line: startPosDetails.line,
column: startPosDetails.column
},
end: {
offset: endPos,
line: endPosDetails.line,
column: endPosDetails.column
}
};
return res;
}
function peg$fail(expected2) {
if (peg$currPos < peg$maxFailPos) {
return;
}
if (peg$currPos > peg$maxFailPos) {
peg$maxFailPos = peg$currPos;
peg$maxFailExpected = [];
}
peg$maxFailExpected.push(expected2);
}
function peg$buildStructuredError(expected2, found, location2) {
return new peg$SyntaxError(
peg$SyntaxError.buildMessage(expected2, found),
expected2,
found,
location2
);
}
function peg$parsebody() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
s2 = peg$parsetriple_ligature();
if (s2 === peg$FAILED) {
s2 = peg$parsedouble_ligature();
if (s2 === peg$FAILED) {
s2 = peg$parsemono_ligature();
if (s2 === 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$e0);
}
}
}
}
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsetriple_ligature();
if (s2 === peg$FAILED) {
s2 = peg$parsedouble_ligature();
if (s2 === peg$FAILED) {
s2 = peg$parsemono_ligature();
if (s2 === 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$e0);
}
}
}
}
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s1 = peg$f0(s1);
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parseEOL();
if (s1 !== peg$FAILED) {
s1 = peg$f1();
}
s0 = s1;
}
return s0;
}
function peg$parsetriple_ligature() {
var s0, s1, s2, s3, s4;
s0 = peg$currPos;
s1 = peg$currPos;
if (input.length > peg$currPos) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s2 !== peg$FAILED) {
if (input.length > peg$currPos) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s3 !== peg$FAILED) {
if (input.length > peg$currPos) {
s4 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s4 !== peg$FAILED) {
s2 = [s2, s3, s4];
s1 = s2;
} 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$f2(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f3(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsedouble_ligature() {
var s0;
s0 = peg$parsedouble_macro_ligature();
if (s0 === peg$FAILED) {
s0 = peg$parsedouble_macro_ligature_extracted();
if (s0 === peg$FAILED) {
s0 = peg$parsedouble_char_ligature();
}
}
return s0;
}
function peg$parsedouble_macro_ligature_extracted() {
var s0, s1, s2, s3, s4;
s0 = peg$currPos;
s1 = peg$parsemacro();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parsewhitespace();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsewhitespace();
}
s3 = peg$parsesplitable();
if (s3 !== peg$FAILED) {
s4 = peg$f4(s1, s3);
if (s4) {
s4 = void 0;
} else {
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s0 = peg$f5(s1, s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsedouble_macro_ligature() {
var s0, s1, s2, s3, s4;
s0 = peg$currPos;
s1 = peg$parsemacro();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parsewhitespace();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsewhitespace();
}
if (input.length > peg$currPos) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s3 !== peg$FAILED) {
s4 = peg$f6(s1, s3);
if (s4) {
s4 = void 0;
} else {
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s0 = peg$f7(s1, s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsedouble_char_ligature() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$currPos;
if (input.length > peg$currPos) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s2 !== peg$FAILED) {
if (input.length > peg$currPos) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s3 !== peg$FAILED) {
s2 = [s2, s3];
s1 = s2;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s2 = peg$f8(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f9(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsemono_ligature() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f10(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f11(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsemacro() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f12(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f13(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsewhitespace() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f14(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f15(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsesplitable() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f16(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f17(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseEOL() {
var s0, s1;
s0 = peg$currPos;
peg$silentFails++;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
peg$silentFails--;
if (s1 === peg$FAILED) {
s0 = void 0;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
if (!options.isWhitespace) {
try {
Object.assign(options, {
isMacro: (node) => node.type === "macro",
isWhitespace: (node) => node.type === "whitespace",
isRecognized: (nodes) => {
if (nodes.length == 2 && nodes[0].content === "^" && nodes[1].content === "o") {
return { type: "string", content: "ô" };
}
return null;
},
isSplitable: (node) => node.type === "string" && node.content.length > 1,
split: (node) => [
{ type: "string", content: node.content.charAt(0) },
{ type: "string", content: node.content.slice(1) }
]
});
} catch (e) {
console.warn("Error when initializing parser", e);
}
}
peg$result = peg$startRuleFunction();
if (peg$result !== peg$FAILED && peg$currPos === input.length) {
return peg$result;
} else {
if (peg$result !== peg$FAILED && peg$currPos < input.length) {
peg$fail(peg$endExpectation());
}
throw peg$buildStructuredError(
peg$maxFailExpected,
peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,
peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)
);
}
}
return {
SyntaxError: peg$SyntaxError,
parse: peg$parse
};
}()
);
const _XColorPegParser = (
// Generated by Peggy 3.0.2.
//
// https://peggyjs.org/
function() {
function peg$subclass(child, parent) {
function C() {
this.constructor = child;
}
C.prototype = parent.prototype;
child.prototype = new C();
}
function peg$SyntaxError(message, expected, found, location) {
var self = Error.call(this, message);
if (Object.setPrototypeOf) {
Object.setPrototypeOf(self, peg$SyntaxError.prototype);
}
self.expected = expected;
self.found = found;
self.location = location;
self.name = "SyntaxError";
return self;
}
peg$subclass(peg$SyntaxError, Error);
function peg$padEnd(str, targetLength, padString) {
padString = padString || " ";
if (str.length > targetLength) {
return str;
}
targetLength -= str.length;
padString += padString.repeat(targetLength);
return str + padString.slice(0, targetLength);
}
peg$SyntaxError.prototype.format = function(sources) {
var str = "Error: " + this.message;
if (this.location) {
var src = null;
var k;
for (k = 0; k < sources.length; k++) {
if (sources[k].source === this.location.source) {
src = sources[k].text.split(/\r\n|\n|\r/g);
break;
}
}
var s = this.location.start;
var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s;
var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column;
if (src) {
var e = this.location.end;
var filler = peg$padEnd("", offset_s.line.toString().length, " ");
var line = src[s.line - 1];
var last = s.line === e.line ? e.column : line.length + 1;
var hatLen = last - s.column || 1;
str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^");
} else {
str += "\n at " + loc;
}
}
return str;
};
peg$SyntaxError.buildMessage = function(expected, found) {
var DESCRIBE_EXPECTATION_FNS = {
literal: function(expectation) {
return '"' + literalEscape(expectation.text) + '"';
},
class: function(expectation) {
var escapedParts = expectation.parts.map(function(part) {
return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part);
});
return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]";
},
any: function() {
return "any character";
},
end: function() {
return "end of input";
},
other: function(expectation) {
return expectation.description;
}
};
function hex(ch) {
return ch.charCodeAt(0).toString(16).toUpperCase();
}
function literalEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function classEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function describeExpectation(expectation) {
return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);
}
function describeExpected(expected2) {
var descriptions = expected2.map(describeExpectation);
var i, j;
descriptions.sort();
if (descriptions.length > 0) {
for (i = 1, j = 1; i < descriptions.length; i++) {
if (descriptions[i - 1] !== descriptions[i]) {
descriptions[j] = descriptions[i];
j++;
}
}
descriptions.length = j;
}
switch (descriptions.length) {
case 1:
return descriptions[0];
case 2:
return descriptions[0] + " or " + descriptions[1];
default:
return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1];
}
}
function describeFound(found2) {
return found2 ? '"' + literalEscape(found2) + '"' : "end of input";
}
return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found.";
};
function peg$parse(input, options) {
options = options !== void 0 ? options : {};
var peg$FAILED = {};
var peg$source = options.grammarSource;
var peg$startRuleFunctions = { start: peg$parsestart };
var peg$startRuleFunction = peg$parsestart;
var peg$c0 = ";";
var peg$c1 = ",";
var peg$c2 = ":";
var peg$c3 = "/";
var peg$c4 = ">";
var peg$c5 = "!";
var peg$c6 = ".";
var peg$c7 = "!![";
var peg$c8 = "]";
var peg$c9 = "!!";
var peg$c10 = "+";
var peg$c11 = "-";
var peg$r0 = /^[a-zA-Z0-9]/;
var peg$r1 = /^[0-9]/;
var peg$r2 = /^[ \t\n\r]/;
var peg$r3 = /^[0-9a-fA-F]/;
var peg$e0 = peg$anyExpectation();
var peg$e1 = peg$literalExpectation(";", false);
var peg$e2 = peg$literalExpectation(",", false);
var peg$e3 = peg$otherExpectation("model list");
var peg$e4 = peg$literalExpectation(":", false);
var peg$e5 = peg$literalExpectation("/", false);
var peg$e6 = peg$otherExpectation("model");
var peg$e7 = peg$otherExpectation("color spec list");
var peg$e8 = peg$otherExpectation("color spec");
var peg$e9 = peg$otherExpectation("color");
var peg$e10 = peg$otherExpectation("function expression");
var peg$e11 = peg$literalExpectation(">", false);
var peg$e12 = peg$otherExpectation("function");
var peg$e13 = peg$otherExpectation("extended expression");
var peg$e14 = peg$otherExpectation("core model");
var peg$e15 = peg$otherExpectation("expr");
var peg$e16 = peg$literalExpectation("!", false);
var peg$e17 = peg$otherExpectation("mix expr");
var peg$e18 = peg$otherExpectation("name");
var peg$e19 = peg$literalExpectation(".", false);
var peg$e20 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false);
var peg$e21 = peg$otherExpectation("postfix");
var peg$e22 = peg$literalExpectation("!![", false);
var peg$e23 = peg$literalExpectation("]", false);
var peg$e24 = peg$literalExpectation("!!", false);
var peg$e25 = peg$otherExpectation("prefix");
var peg$e26 = peg$otherExpectation("plus");
var peg$e27 = peg$literalExpectation("+", false);
var peg$e28 = peg$otherExpectation("minus");
var peg$e29 = peg$literalExpectation("-", false);
var peg$e30 = peg$otherExpectation("num");
var peg$e31 = peg$classExpectation([["0", "9"]], false, false);
var peg$e32 = peg$otherExpectation("positive float");
var peg$e33 = peg$otherExpectation("divisor");
var peg$e34 = peg$otherExpectation("int");
var peg$e36 = peg$classExpectation([" ", " ", "\n", "\r"], false, false);
var peg$e37 = peg$classExpectation([["0", "9"], ["a", "f"], ["A", "F"]], false, false);
var peg$f0 = function(m) {
return m;
};
var peg$f1 = function(m) {
return m;
};
var peg$f2 = function(m) {
return m;
};
var peg$f3 = function(m) {
return m;
};
var peg$f4 = function(m) {
return m;
};
var peg$f5 = function(a) {
return { type: "invalid_spec", content: a };
};
var peg$f6 = function(f, c) {
return c;
};
var peg$f7 = function(f, r) {
return { type: "color_set", content: [f].concat(r) };
};
var peg$f8 = function(n, s) {
return { type: "color_set_item", name: n, spec_list: s };
};
var peg$f9 = function(c, m) {
return { type: "model_list", contents: m, core_model: c };
};
var peg$f10 = function(m) {
return { type: "model_list", contents: m, core_model: null };
};
var peg$f11 = function(m, a) {
return a;
};
var peg$f12 = function(m, r) {
return [m].concat(r);
};
var peg$f13 = function(s, a) {
return a;
};
var peg$f14 = function(s, r) {
return { type: "spec_list", content: [s].concat(r) };
};
var peg$f15 = function(c) {
return { type: "hex_spec", content: [c] };
};
var peg$f16 = function(c, d) {
return d;
};
var peg$f17 = function(c, d) {
return d;
};
var peg$f18 = function(c, r) {
return { type: "num_spec", content: r ? [c].concat(r) : [c] };
};
var peg$f19 = function(c, fs) {
return { type: "color", color: c, functions: fs };
};
var peg$f20 = function(f, n) {
return n;
};
var peg$f21 = function(f, args) {
return { type: "function", name: f, args };
};
var peg$f22 = function(core, d, e, es) {
return {
type: "extended_expr",
core_model: core,
div: d,
expressions: [e].concat(es)
};
};
var peg$f23 = function(core, e, es) {
return {
type: "extended_expr",
core_model: core,
div: null,
expressions: [e].concat(es)
};
};
var peg$f24 = function(e, d) {
return { type: "weighted_expr", color: e, weight: d };
};
var peg$f25 = function(e) {
return e;
};
var peg$f26 = function(p, n, e, po) {
return {
type: "expr",
prefix: p,
name: n,
mix_expr: e,
postfix: po
};
};
var peg$f27 = function(p, n) {
return { type: "complete_mix", mix_percent: p, name: n };
};
var peg$f28 = function(p) {
return { type: "partial_mix", mix_percent: p };
};
var peg$f29 = function(c, p) {
return c.concat(p || []);
};
var peg$f30 = function(n) {
return { type: "postfix", num: n };
};
var peg$f31 = function(p) {
return { type: "postfix", plusses: p };
};
var peg$f32 = function(n) {
return parseInt(n, 10);
};
var peg$f33 = function(n) {
return parseFloat(n);
};
var peg$f34 = function(n) {
return n;
};
var peg$f35 = function(n) {
return -n;
};
var peg$f36 = function(m, n) {
return m ? -n : n;
};
var peg$f37 = function(h) {
return h.toUpperCase();
};
var peg$currPos = 0;
var peg$posDetailsCache = [{ line: 1, column: 1 }];
var peg$maxFailPos = 0;
var peg$maxFailExpected = [];
var peg$silentFails = 0;
var peg$result;
if ("startRule" in options) {
if (!(options.startRule in peg$startRuleFunctions)) {
throw new Error(`Can't start parsing from rule "` + options.startRule + '".');
}
peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
}
function peg$literalExpectation(text2, ignoreCase) {
return { type: "literal", text: text2, ignoreCase };
}
function peg$classExpectation(parts, inverted, ignoreCase) {
return { type: "class", parts, inverted, ignoreCase };
}
function peg$anyExpectation() {
return { type: "any" };
}
function peg$endExpectation() {
return { type: "end" };
}
function peg$otherExpectation(description) {
return { type: "other", description };
}
function peg$computePosDetails(pos) {
var details = peg$posDetailsCache[pos];
var p;
if (details) {
return details;
} else {
p = pos - 1;
while (!peg$posDetailsCache[p]) {
p--;
}
details = peg$posDetailsCache[p];
details = {
line: details.line,
column: details.column
};
while (p < pos) {
if (input.charCodeAt(p) === 10) {
details.line++;
details.column = 1;
} else {
details.column++;
}
p++;
}
peg$posDetailsCache[pos] = details;
return details;
}
}
function peg$computeLocation(startPos, endPos, offset2) {
var startPosDetails = peg$computePosDetails(startPos);
var endPosDetails = peg$computePosDetails(endPos);
var res = {
source: peg$source,
start: {
offset: startPos,
line: startPosDetails.line,
column: startPosDetails.column
},
end: {
offset: endPos,
line: endPosDetails.line,
column: endPosDetails.column
}
};
return res;
}
function peg$fail(expected2) {
if (peg$currPos < peg$maxFailPos) {
return;
}
if (peg$currPos > peg$maxFailPos) {
peg$maxFailPos = peg$currPos;
peg$maxFailExpected = [];
}
peg$maxFailExpected.push(expected2);
}
function peg$buildStructuredError(expected2, found, location2) {
return new peg$SyntaxError(
peg$SyntaxError.buildMessage(expected2, found),
expected2,
found,
location2
);
}
function peg$parsestart() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$parsespec();
if (s1 !== peg$FAILED) {
s2 = peg$parseEOL();
if (s2 !== peg$FAILED) {
s0 = peg$f0(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsespec_list();
if (s1 !== peg$FAILED) {
s2 = peg$parseEOL();
if (s2 !== peg$FAILED) {
s0 = peg$f1(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsecolor();
if (s1 !== peg$FAILED) {
s2 = peg$parseEOL();
if (s2 !== peg$FAILED) {
s0 = peg$f2(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsemodel_list();
if (s1 !== peg$FAILED) {
s2 = peg$parseEOL();
if (s2 !== peg$FAILED) {
s0 = peg$f3(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsecolor_set_spec();
if (s1 !== peg$FAILED) {
s2 = peg$parseEOL();
if (s2 !== peg$FAILED) {
s0 = peg$f4(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$currPos;
s2 = [];
if (input.length > peg$currPos) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
while (s3 !== peg$FAILED) {
s2.push(s3);
if (input.length > peg$currPos) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
}
s1 = input.substring(s1, peg$currPos);
s1 = peg$f5(s1);
s0 = s1;
}
}
}
}
}
return s0;
}
function peg$parsecolor_set_spec() {
var s0, s1, s2, s3, s4, s5;
s0 = peg$currPos;
s1 = peg$parsecolor_set_item();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 59) {
s4 = peg$c0;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e1);
}
}
if (s4 !== peg$FAILED) {
s5 = peg$parsecolor_set_item();
if (s5 !== peg$FAILED) {
s3 = peg$f6(s1, s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 59) {
s4 = peg$c0;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e1);
}
}
if (s4 !== peg$FAILED) {
s5 = peg$parsecolor_set_item();
if (s5 !== peg$FAILED) {
s3 = peg$f6(s1, s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
}
s0 = peg$f7(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsecolor_set_item() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$parsename();
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 44) {
s2 = peg$c1;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
if (s2 !== peg$FAILED) {
s3 = peg$parsespec_list();
if (s3 !== peg$FAILED) {
s0 = peg$f8(s1, s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsemodel_list() {
var s0, s1, s2, s3;
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$parsecore_model();
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 58) {
s2 = peg$c2;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e4);
}
}
if (s2 !== peg$FAILED) {
s3 = peg$parsemodel_list_tail();
if (s3 !== peg$FAILED) {
s0 = peg$f9(s1, s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsemodel_list_tail();
if (s1 !== peg$FAILED) {
s1 = peg$f10(s1);
}
s0 = s1;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
return s0;
}
function peg$parsemodel_list_tail() {
var s0, s1, s2, s3, s4, s5;
s0 = peg$currPos;
s1 = peg$parsemodel();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 47) {
s4 = peg$c3;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e5);
}
}
if (s4 !== peg$FAILED) {
s5 = peg$parsemodel();
if (s5 !== peg$FAILED) {
s3 = peg$f11(s1, s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 47) {
s4 = peg$c3;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e5);
}
}
if (s4 !== peg$FAILED) {
s5 = peg$parsemodel();
if (s5 !== peg$FAILED) {
s3 = peg$f11(s1, s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
}
s0 = peg$f12(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsemodel() {
var s0;
peg$silentFails++;
s0 = peg$parsecore_model();
peg$silentFails--;
if (s0 === peg$FAILED) {
if (peg$silentFails === 0) {
peg$fail(peg$e6);
}
}
return s0;
}
function peg$parsespec_list() {
var s0, s1, s2, s3, s4, s5;
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$parsespec();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 47) {
s4 = peg$c3;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e5);
}
}
if (s4 !== peg$FAILED) {
s5 = peg$parsespec();
if (s5 !== peg$FAILED) {
s3 = peg$f13(s1, s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 47) {
s4 = peg$c3;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e5);
}
}
if (s4 !== peg$FAILED) {
s5 = peg$parsespec();
if (s5 !== peg$FAILED) {
s3 = peg$f13(s1, s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
}
s0 = peg$f14(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e7);
}
}
return s0;
}
function peg$parsespec() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8;
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$currPos;
s3 = peg$parsehex();
if (s3 !== peg$FAILED) {
s4 = peg$parsehex();
if (s4 !== peg$FAILED) {
s5 = peg$parsehex();
if (s5 !== peg$FAILED) {
s6 = peg$parsehex();
if (s6 !== peg$FAILED) {
s7 = peg$parsehex();
if (s7 !== peg$FAILED) {
s8 = peg$parsehex();
if (s8 !== peg$FAILED) {
s3 = [s3, s4, s5, s6, s7, s8];
s2 = s3;
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = input.substring(s1, peg$currPos);
} else {
s1 = s2;
}
if (s1 !== peg$FAILED) {
s1 = peg$f15(s1);
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsedec();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 44) {
s4 = peg$c1;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
if (s4 !== peg$FAILED) {
s5 = peg$parsedec();
if (s5 !== peg$FAILED) {
s3 = peg$f16(s1, s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
if (s3 !== peg$FAILED) {
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 44) {
s4 = peg$c1;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
if (s4 !== peg$FAILED) {
s5 = peg$parsedec();
if (s5 !== peg$FAILED) {
s3 = peg$f16(s1, s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
}
} else {
s2 = peg$FAILED;
}
if (s2 === peg$FAILED) {
s2 = [];
s3 = peg$currPos;
s4 = peg$parsesp();
if (s4 !== peg$FAILED) {
s5 = peg$parsedec();
if (s5 !== peg$FAILED) {
s3 = peg$f17(s1, s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
if (s3 !== peg$FAILED) {
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$currPos;
s4 = peg$parsesp();
if (s4 !== peg$FAILED) {
s5 = peg$parsedec();
if (s5 !== peg$FAILED) {
s3 = peg$f17(s1, s5);
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
}
} else {
s2 = peg$FAILED;
}
}
if (s2 === peg$FAILED) {
s2 = null;
}
s0 = peg$f18(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e8);
}
}
return s0;
}
function peg$parsecolor() {
var s0, s1, s2, s3;
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$parsecolor_expr();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parsefunc_expr();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsefunc_expr();
}
s0 = peg$f19(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e9);
}
}
return s0;
}
function peg$parsecolor_expr() {
var s0;
s0 = peg$parseext_expr();
if (s0 === peg$FAILED) {
s0 = peg$parseexpr();
if (s0 === peg$FAILED) {
s0 = peg$parsename();
}
}
return s0;
}
function peg$parsefunc_expr() {
var s0, s1, s2, s3, s4, s5, s6;
peg$silentFails++;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 62) {
s1 = peg$c4;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e11);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$parsefunction();
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 44) {
s5 = peg$c1;
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
if (s5 !== peg$FAILED) {
s6 = peg$parseint();
if (s6 !== peg$FAILED) {
s4 = peg$f20(s2, s6);
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 44) {
s5 = peg$c1;
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
if (s5 !== peg$FAILED) {
s6 = peg$parseint();
if (s6 !== peg$FAILED) {
s4 = peg$f20(s2, s6);
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
}
s0 = peg$f21(s2, s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e10);
}
}
return s0;
}
function peg$parsefunction() {
var s0;
peg$silentFails++;
s0 = peg$parsename();
peg$silentFails--;
if (s0 === peg$FAILED) {
if (peg$silentFails === 0) {
peg$fail(peg$e12);
}
}
return s0;
}
function peg$parseext_expr() {
var s0, s1, s2, s3, s4, s5, s6, s7;
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$parsecore_model();
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 44) {
s2 = peg$c1;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
if (s2 !== peg$FAILED) {
s3 = peg$parsediv();
if (s3 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 58) {
s4 = peg$c2;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e4);
}
}
if (s4 !== peg$FAILED) {
s5 = peg$parseweighted_expr();
if (s5 !== peg$FAILED) {
s6 = [];
s7 = peg$parseadditional_weighted_expr();
while (s7 !== peg$FAILED) {
s6.push(s7);
s7 = peg$parseadditional_weighted_expr();
}
s0 = peg$f22(s1, s3, s5, s6);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsecore_model();
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 58) {
s2 = peg$c2;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e4);
}
}
if (s2 !== peg$FAILED) {
s3 = peg$parseweighted_expr();
if (s3 !== peg$FAILED) {
s4 = [];
s5 = peg$parseadditional_weighted_expr();
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$parseadditional_weighted_expr();
}
s0 = peg$f23(s1, s3, s4);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e13);
}
}
return s0;
}
function peg$parseweighted_expr() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$parseexpr();
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 44) {
s2 = peg$c1;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
if (s2 !== peg$FAILED) {
s3 = peg$parsedec();
if (s3 !== peg$FAILED) {
s0 = peg$f24(s1, s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseadditional_weighted_expr() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 59) {
s1 = peg$c0;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e1);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$parseweighted_expr();
if (s2 !== peg$FAILED) {
s0 = peg$f25(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsecore_model() {
var s0;
peg$silentFails++;
s0 = peg$parsename();
peg$silentFails--;
if (s0 === peg$FAILED) {
if (peg$silentFails === 0) {
peg$fail(peg$e14);
}
}
return s0;
}
function peg$parseexpr() {
var s0, s1, s2, s3, s4;
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$parseprefix();
s2 = peg$parsename();
if (s2 !== peg$FAILED) {
s3 = peg$parsemix_expr();
s4 = peg$parsepostfix();
if (s4 === peg$FAILED) {
s4 = null;
}
s0 = peg$f26(s1, s2, s3, s4);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e15);
}
}
return s0;
}
function peg$parsecomplete_mix() {
var s0, s1, s2, s3, s4;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 33) {
s1 = peg$c5;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e16);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$parsepct();
if (s2 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 33) {
s3 = peg$c5;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e16);
}
}
if (s3 !== peg$FAILED) {
s4 = peg$parsename();
if (s4 !== peg$FAILED) {
s0 = peg$f27(s2, s4);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsepartial_mix() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 33) {
s1 = peg$c5;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e16);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$parsepct();
if (s2 !== peg$FAILED) {
s0 = peg$f28(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsemix_expr() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
s1 = [];
s2 = peg$parsecomplete_mix();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsecomplete_mix();
}
s2 = peg$parsepartial_mix();
if (s2 === peg$FAILED) {
s2 = null;
}
s0 = peg$f29(s1, s2);
peg$silentFails--;
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e17);
}
return s0;
}
function peg$parsename() {
var s0, s1, s2;
peg$silentFails++;
if (input.charCodeAt(peg$currPos) === 46) {
s0 = peg$c6;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e19);
}
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
if (peg$r0.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e20);
}
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
if (peg$r0.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e20);
}
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s0 = input.substring(s0, peg$currPos);
} else {
s0 = s1;
}
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e18);
}
}
return s0;
}
function peg$parsepostfix() {
var s0, s1, s2, s3, s4;
peg$silentFails++;
s0 = peg$currPos;
if (input.substr(peg$currPos, 3) === peg$c7) {
s1 = peg$c7;
peg$currPos += 3;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e22);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$parsenum();
if (s2 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 93) {
s3 = peg$c8;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e23);
}
}
if (s3 !== peg$FAILED) {
s0 = peg$f30(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.substr(peg$currPos, 2) === peg$c9) {
s1 = peg$c9;
peg$currPos += 2;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e24);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$currPos;
s3 = [];
s4 = peg$parseplus();
if (s4 !== peg$FAILED) {
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parseplus();
}
} else {
s3 = peg$FAILED;
}
if (s3 !== peg$FAILED) {
s2 = input.substring(s2, peg$currPos);
} else {
s2 = s3;
}
if (s2 !== peg$FAILED) {
s0 = peg$f31(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e21);
}
}
return s0;
}
function peg$parseprefix() {
var s0;
peg$silentFails++;
s0 = peg$parseminus();
if (s0 === peg$FAILED) {
s0 = null;
}
peg$silentFails--;
if (peg$silentFails === 0) {
peg$fail(peg$e25);
}
return s0;
}
function peg$parseplus() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
s1 = [];
if (input.charCodeAt(peg$currPos) === 43) {
s2 = peg$c10;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e27);
}
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
if (input.charCodeAt(peg$currPos) === 43) {
s2 = peg$c10;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e27);
}
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s0 = input.substring(s0, peg$currPos);
} else {
s0 = s1;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e26);
}
}
return s0;
}
function peg$parseminus() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
s1 = [];
if (input.charCodeAt(peg$currPos) === 45) {
s2 = peg$c11;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e29);
}
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
if (input.charCodeAt(peg$currPos) === 45) {
s2 = peg$c11;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e29);
}
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s0 = input.substring(s0, peg$currPos);
} else {
s0 = s1;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e28);
}
}
return s0;
}
function peg$parsenum() {
var s0, s1, s2, s3;
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = [];
if (peg$r1.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e31);
}
}
if (s3 !== peg$FAILED) {
while (s3 !== peg$FAILED) {
s2.push(s3);
if (peg$r1.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e31);
}
}
}
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = input.substring(s1, peg$currPos);
} else {
s1 = s2;
}
if (s1 !== peg$FAILED) {
s1 = peg$f32(s1);
}
s0 = s1;
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e30);
}
}
return s0;
}
function peg$parsepct() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$currPos;
s3 = peg$currPos;
s4 = [];
if (peg$r1.test(input.charAt(peg$currPos))) {
s5 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e31);
}
}
if (s5 !== peg$FAILED) {
while (s5 !== peg$FAILED) {
s4.push(s5);
if (peg$r1.test(input.charAt(peg$currPos))) {
s5 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e31);
}
}
}
} else {
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s3 = input.substring(s3, peg$currPos);
} else {
s3 = s4;
}
if (s3 !== peg$FAILED) {
s4 = peg$currPos;
s5 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 46) {
s6 = peg$c6;
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e19);
}
}
if (s6 !== peg$FAILED) {
s7 = peg$currPos;
s8 = [];
if (peg$r1.test(input.charAt(peg$currPos))) {
s9 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s9 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e31);
}
}
while (s9 !== peg$FAILED) {
s8.push(s9);
if (peg$r1.test(input.charAt(peg$currPos))) {
s9 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s9 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e31);
}
}
}
s7 = input.substring(s7, peg$currPos);
s6 = [s6, s7];
s5 = s6;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
if (s5 === peg$FAILED) {
s5 = null;
}
s4 = input.substring(s4, peg$currPos);
s3 = [s3, s4];
s2 = s3;
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = input.substring(s1, peg$currPos);
} else {
s1 = s2;
}
if (s1 === peg$FAILED) {
s1 = peg$currPos;
s2 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 46) {
s3 = peg$c6;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e19);
}
}
if (s3 !== peg$FAILED) {
s4 = peg$currPos;
s5 = [];
if (peg$r1.test(input.charAt(peg$currPos))) {
s6 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e31);
}
}
if (s6 !== peg$FAILED) {
while (s6 !== peg$FAILED) {
s5.push(s6);
if (peg$r1.test(input.charAt(peg$currPos))) {
s6 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e31);
}
}
}
} else {
s5 = peg$FAILED;
}
if (s5 !== peg$FAILED) {
s4 = input.substring(s4, peg$currPos);
} else {
s4 = s5;
}
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) {
s1 = input.substring(s1, peg$currPos);
} else {
s1 = s2;
}
}
if (s1 !== peg$FAILED) {
s1 = peg$f33(s1);
}
s0 = s1;
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e32);
}
}
return s0;
}
function peg$parsediv() {
var s0;
peg$silentFails++;
s0 = peg$parsepct();
peg$silentFails--;
if (s0 === peg$FAILED) {
if (peg$silentFails === 0) {
peg$fail(peg$e33);
}
}
return s0;
}
function peg$parsedec() {
var s0, s1, s2;
s0 = peg$parsepct();
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 43) {
s1 = peg$c10;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e27);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$parsepct();
if (s2 !== peg$FAILED) {
s0 = peg$f34(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 45) {
s1 = peg$c11;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e29);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$parsepct();
if (s2 !== peg$FAILED) {
s0 = peg$f35(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
}
return s0;
}
function peg$parseint() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$parseminus();
if (s1 === peg$FAILED) {
s1 = null;
}
s2 = peg$parsenum();
if (s2 !== peg$FAILED) {
s0 = peg$f36(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e34);
}
}
return s0;
}
function peg$parsesp() {
var s0, s1;
s0 = [];
if (peg$r2.test(input.charAt(peg$currPos))) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e36);
}
}
if (s1 !== peg$FAILED) {
while (s1 !== peg$FAILED) {
s0.push(s1);
if (peg$r2.test(input.charAt(peg$currPos))) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e36);
}
}
}
} else {
s0 = peg$FAILED;
}
return s0;
}
function peg$parsehex() {
var s0, s1;
s0 = peg$currPos;
if (peg$r3.test(input.charAt(peg$currPos))) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e37);
}
}
if (s1 !== peg$FAILED) {
s1 = peg$f37(s1);
}
s0 = s1;
return s0;
}
function peg$parseEOL() {
var s0, s1;
s0 = peg$currPos;
peg$silentFails++;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
peg$silentFails--;
if (s1 === peg$FAILED) {
s0 = void 0;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
peg$result = peg$startRuleFunction();
if (peg$result !== peg$FAILED && peg$currPos === input.length) {
return peg$result;
} else {
if (peg$result !== peg$FAILED && peg$currPos < input.length) {
peg$fail(peg$endExpectation());
}
throw peg$buildStructuredError(
peg$maxFailExpected,
peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,
peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)
);
}
}
return {
SyntaxError: peg$SyntaxError,
parse: peg$parse
};
}()
);
const _TabularPegParser = (
// Generated by Peggy 3.0.2.
//
// https://peggyjs.org/
function() {
function peg$subclass(child, parent) {
function C() {
this.constructor = child;
}
C.prototype = parent.prototype;
child.prototype = new C();
}
function peg$SyntaxError(message, expected, found, location) {
var self = Error.call(this, message);
if (Object.setPrototypeOf) {
Object.setPrototypeOf(self, peg$SyntaxError.prototype);
}
self.expected = expected;
self.found = found;
self.location = location;
self.name = "SyntaxError";
return self;
}
peg$subclass(peg$SyntaxError, Error);
function peg$padEnd(str, targetLength, padString) {
padString = padString || " ";
if (str.length > targetLength) {
return str;
}
targetLength -= str.length;
padString += padString.repeat(targetLength);
return str + padString.slice(0, targetLength);
}
peg$SyntaxError.prototype.format = function(sources) {
var str = "Error: " + this.message;
if (this.location) {
var src = null;
var k;
for (k = 0; k < sources.length; k++) {
if (sources[k].source === this.location.source) {
src = sources[k].text.split(/\r\n|\n|\r/g);
break;
}
}
var s = this.location.start;
var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s;
var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column;
if (src) {
var e = this.location.end;
var filler = peg$padEnd("", offset_s.line.toString().length, " ");
var line = src[s.line - 1];
var last = s.line === e.line ? e.column : line.length + 1;
var hatLen = last - s.column || 1;
str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^");
} else {
str += "\n at " + loc;
}
}
return str;
};
peg$SyntaxError.buildMessage = function(expected, found) {
var DESCRIBE_EXPECTATION_FNS = {
literal: function(expectation) {
return '"' + literalEscape(expectation.text) + '"';
},
class: function(expectation) {
var escapedParts = expectation.parts.map(function(part) {
return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part);
});
return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]";
},
any: function() {
return "any character";
},
end: function() {
return "end of input";
},
other: function(expectation) {
return expectation.description;
}
};
function hex(ch) {
return ch.charCodeAt(0).toString(16).toUpperCase();
}
function literalEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function classEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function describeExpectation(expectation) {
return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);
}
function describeExpected(expected2) {
var descriptions = expected2.map(describeExpectation);
var i, j;
descriptions.sort();
if (descriptions.length > 0) {
for (i = 1, j = 1; i < descriptions.length; i++) {
if (descriptions[i - 1] !== descriptions[i]) {
descriptions[j] = descriptions[i];
j++;
}
}
descriptions.length = j;
}
switch (descriptions.length) {
case 1:
return descriptions[0];
case 2:
return descriptions[0] + " or " + descriptions[1];
default:
return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1];
}
}
function describeFound(found2) {
return found2 ? '"' + literalEscape(found2) + '"' : "end of input";
}
return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found.";
};
function peg$parse(input, options) {
options = options !== void 0 ? options : {};
var peg$FAILED = {};
var peg$source = options.grammarSource;
var peg$startRuleFunctions = { body: peg$parsebody };
var peg$startRuleFunction = peg$parsebody;
var peg$e0 = peg$otherExpectation("decl_start");
var peg$e1 = peg$otherExpectation("decl_end");
var peg$e2 = peg$otherExpectation("vert");
var peg$e3 = peg$anyExpectation();
var peg$e4 = peg$otherExpectation("l");
var peg$e5 = peg$otherExpectation("r");
var peg$e6 = peg$otherExpectation("c");
var peg$e7 = peg$otherExpectation("p");
var peg$e8 = peg$otherExpectation("m");
var peg$e9 = peg$otherExpectation("b");
var peg$e10 = peg$otherExpectation("w");
var peg$e11 = peg$otherExpectation("W");
var peg$e12 = peg$otherExpectation("X");
var peg$e13 = peg$otherExpectation("!");
var peg$e14 = peg$otherExpectation("@");
var peg$e15 = peg$otherExpectation("<");
var peg$e16 = peg$otherExpectation(">");
var peg$e17 = peg$otherExpectation("group");
var peg$e18 = peg$otherExpectation("whitespace");
var peg$f0 = function(c) {
return c;
};
var peg$f1 = function(cols) {
return cols;
};
var peg$f2 = function() {
return [];
};
var peg$f3 = function(divs1, start, a, end, divs2) {
return {
type: "column",
pre_dividers: divs1,
post_dividers: divs2,
before_start_code: start,
before_end_code: end,
alignment: a
};
};
var peg$f4 = function() {
return {
type: "vert_divider"
};
};
var peg$f5 = function(b, g) {
return {
type: "bang_divider",
content: g[0].content
};
};
var peg$f6 = function(g) {
return {
type: "at_divider",
content: g[0].content
};
};
var peg$f7 = function(div) {
return div;
};
var peg$f8 = function(g) {
return { type: "decl_code", code: g[0].content };
};
var peg$f9 = function(g) {
return { type: "decl_code", code: g[0].content };
};
var peg$f10 = function() {
return { type: "alignment", alignment: "left" };
};
var peg$f11 = function() {
return { type: "alignment", alignment: "center" };
};
var peg$f12 = function() {
return { type: "alignment", alignment: "right" };
};
var peg$f13 = function() {
return { type: "alignment", alignment: "X" };
};
var peg$f14 = function() {
return "top";
};
var peg$f15 = function() {
return "default";
};
var peg$f16 = function() {
return "bottom";
};
var peg$f17 = function(a, g) {
return {
type: "alignment",
alignment: "parbox",
baseline: a,
size: g[0].content
};
};
var peg$f18 = function(g1, g2) {
return {
type: "alignment",
alignment: "parbox",
baseline: g1[0].content,
size: g2[0].content
};
};
var peg$f19 = function(tok) {
return options.matchChar(tok, "|");
};
var peg$f20 = function(tok) {
return options.matchChar(tok, "l");
};
var peg$f21 = function(tok) {
return options.matchChar(tok, "r");
};
var peg$f22 = function(tok) {
return options.matchChar(tok, "c");
};
var peg$f23 = function(tok) {
return options.matchChar(tok, "p");
};
var peg$f24 = function(tok) {
return options.matchChar(tok, "m");
};
var peg$f25 = function(tok) {
return options.matchChar(tok, "b");
};
var peg$f26 = function(tok) {
return options.matchChar(tok, "w");
};
var peg$f27 = function(tok) {
return options.matchChar(tok, "W");
};
var peg$f28 = function(tok) {
return options.matchChar(tok, "X");
};
var peg$f29 = function(tok) {
return options.matchChar(tok, "!");
};
var peg$f30 = function(tok) {
return options.matchChar(tok, "@");
};
var peg$f31 = function(tok) {
return options.matchChar(tok, "<");
};
var peg$f32 = function(tok) {
return options.matchChar(tok, ">");
};
var peg$f33 = function(tok) {
return options.isGroup(tok);
};
var peg$f34 = function(tok) {
return options.isWhitespace(tok);
};
var peg$currPos = 0;
var peg$posDetailsCache = [{ line: 1, column: 1 }];
var peg$maxFailPos = 0;
var peg$maxFailExpected = [];
var peg$silentFails = 0;
var peg$result;
if ("startRule" in options) {
if (!(options.startRule in peg$startRuleFunctions)) {
throw new Error(`Can't start parsing from rule "` + options.startRule + '".');
}
peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
}
function peg$anyExpectation() {
return { type: "any" };
}
function peg$endExpectation() {
return { type: "end" };
}
function peg$otherExpectation(description) {
return { type: "other", description };
}
function peg$computePosDetails(pos) {
var details = peg$posDetailsCache[pos];
var p;
if (details) {
return details;
} else {
p = pos - 1;
while (!peg$posDetailsCache[p]) {
p--;
}
details = peg$posDetailsCache[p];
details = {
line: details.line,
column: details.column
};
while (p < pos) {
if (input.charCodeAt(p) === 10) {
details.line++;
details.column = 1;
} else {
details.column++;
}
p++;
}
peg$posDetailsCache[pos] = details;
return details;
}
}
function peg$computeLocation(startPos, endPos, offset2) {
var startPosDetails = peg$computePosDetails(startPos);
var endPosDetails = peg$computePosDetails(endPos);
var res = {
source: peg$source,
start: {
offset: startPos,
line: startPosDetails.line,
column: startPosDetails.column
},
end: {
offset: endPos,
line: endPosDetails.line,
column: endPosDetails.column
}
};
return res;
}
function peg$fail(expected2) {
if (peg$currPos < peg$maxFailPos) {
return;
}
if (peg$currPos > peg$maxFailPos) {
peg$maxFailPos = peg$currPos;
peg$maxFailExpected = [];
}
peg$maxFailExpected.push(expected2);
}
function peg$buildStructuredError(expected2, found, location2) {
return new peg$SyntaxError(
peg$SyntaxError.buildMessage(expected2, found),
expected2,
found,
location2
);
}
function peg$parsebody() {
var s0, s1, s2, s3, s4, s5;
s0 = peg$currPos;
s1 = [];
s2 = peg$currPos;
s3 = peg$parsecolumn();
if (s3 !== peg$FAILED) {
s4 = [];
s5 = peg$parse_();
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$parse_();
}
s2 = peg$f0(s3);
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$currPos;
s3 = peg$parsecolumn();
if (s3 !== peg$FAILED) {
s4 = [];
s5 = peg$parse_();
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$parse_();
}
s2 = peg$f0(s3);
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s1 = peg$f1(s1);
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parseEOL();
if (s1 !== peg$FAILED) {
s1 = peg$f2();
}
s0 = s1;
}
return s0;
}
function peg$parsecolumn() {
var s0, s1, s2, s3, s4, s5, s6;
s0 = peg$currPos;
s1 = [];
s2 = peg$parsecolumn_divider();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsecolumn_divider();
}
s2 = peg$parsedecl_start();
if (s2 === peg$FAILED) {
s2 = null;
}
s3 = peg$parsealignment();
if (s3 !== peg$FAILED) {
s4 = peg$parsedecl_end();
if (s4 === peg$FAILED) {
s4 = null;
}
s5 = [];
s6 = peg$parsecolumn_divider();
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$parsecolumn_divider();
}
s0 = peg$f3(s1, s2, s3, s4, s5);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsecolumn_divider() {
var s0, s1, s2, s3, s4;
s0 = peg$currPos;
s1 = [];
s2 = peg$parse_();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parse_();
}
s2 = peg$currPos;
s3 = peg$parsevert();
if (s3 !== peg$FAILED) {
s3 = peg$f4();
}
s2 = s3;
if (s2 === peg$FAILED) {
s2 = peg$currPos;
s3 = peg$parsebang();
if (s3 !== peg$FAILED) {
s4 = peg$parsegroup();
if (s4 !== peg$FAILED) {
s2 = peg$f5(s3, s4);
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
if (s2 === peg$FAILED) {
s2 = peg$currPos;
s3 = peg$parseat();
if (s3 !== peg$FAILED) {
s4 = peg$parsegroup();
if (s4 !== peg$FAILED) {
s2 = peg$f6(s4);
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
}
}
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parse_();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parse_();
}
s0 = peg$f7(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsedecl_start() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$parsegreater();
if (s1 !== peg$FAILED) {
s2 = peg$parsegroup();
if (s2 !== peg$FAILED) {
s0 = peg$f8(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
return s0;
}
function peg$parsedecl_end() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$parseless();
if (s1 !== peg$FAILED) {
s2 = peg$parsegroup();
if (s2 !== peg$FAILED) {
s0 = peg$f9(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e1);
}
}
return s0;
}
function peg$parsealignment() {
var s0, s1, s2, s3, s4, s5;
s0 = peg$currPos;
s1 = peg$parsel();
if (s1 !== peg$FAILED) {
s1 = peg$f10();
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsec();
if (s1 !== peg$FAILED) {
s1 = peg$f11();
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parser();
if (s1 !== peg$FAILED) {
s1 = peg$f12();
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parseX();
if (s1 !== peg$FAILED) {
s1 = peg$f13();
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$parsep();
if (s2 !== peg$FAILED) {
s2 = peg$f14();
}
s1 = s2;
if (s1 === peg$FAILED) {
s1 = peg$currPos;
s2 = peg$parsem();
if (s2 !== peg$FAILED) {
s2 = peg$f15();
}
s1 = s2;
if (s1 === peg$FAILED) {
s1 = peg$currPos;
s2 = peg$parseb();
if (s2 !== peg$FAILED) {
s2 = peg$f16();
}
s1 = s2;
}
}
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parse_();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parse_();
}
s3 = peg$parsegroup();
if (s3 !== peg$FAILED) {
s0 = peg$f17(s1, s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsew();
if (s1 === peg$FAILED) {
s1 = peg$parseW();
}
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parse_();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parse_();
}
s3 = peg$parsegroup();
if (s3 !== peg$FAILED) {
s4 = [];
s5 = peg$parse_();
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$parse_();
}
s5 = peg$parsegroup();
if (s5 !== peg$FAILED) {
s0 = peg$f18(s3, s5);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
}
}
}
}
return s0;
}
function peg$parsevert() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f19(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
return s0;
}
function peg$parsel() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f20(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e4);
}
}
return s0;
}
function peg$parser() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f21(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e5);
}
}
return s0;
}
function peg$parsec() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f22(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e6);
}
}
return s0;
}
function peg$parsep() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f23(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e7);
}
}
return s0;
}
function peg$parsem() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f24(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e8);
}
}
return s0;
}
function peg$parseb() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f25(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e9);
}
}
return s0;
}
function peg$parsew() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f26(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e10);
}
}
return s0;
}
function peg$parseW() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f27(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e11);
}
}
return s0;
}
function peg$parseX() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f28(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e12);
}
}
return s0;
}
function peg$parsebang() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f29(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e13);
}
}
return s0;
}
function peg$parseat() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f30(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e14);
}
}
return s0;
}
function peg$parseless() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f31(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e15);
}
}
return s0;
}
function peg$parsegreater() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f32(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e16);
}
}
return s0;
}
function peg$parsegroup() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f33(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e17);
}
}
return s0;
}
function peg$parse_() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f34(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e18);
}
}
return s0;
}
function peg$parseEOL() {
var s0, s1;
s0 = peg$currPos;
peg$silentFails++;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
peg$silentFails--;
if (s1 === peg$FAILED) {
s0 = void 0;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
if (!options.isHash) {
try {
Object.assign(options, {
matchChar: (node, char) => node.type === "string" && node.content === char,
isGroup: (node) => node.type === "group",
isWhitespace: (node) => node.type === "whitespace"
});
} catch (e) {
console.warn("Error when initializing parser", e);
}
}
peg$result = peg$startRuleFunction();
if (peg$result !== peg$FAILED && peg$currPos === input.length) {
return peg$result;
} else {
if (peg$result !== peg$FAILED && peg$currPos < input.length) {
peg$fail(peg$endExpectation());
}
throw peg$buildStructuredError(
peg$maxFailExpected,
peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,
peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)
);
}
}
return {
SyntaxError: peg$SyntaxError,
parse: peg$parse
};
}()
);
const _SystemePegParser = (
// Generated by Peggy 3.0.2.
//
// https://peggyjs.org/
function() {
function peg$subclass(child, parent) {
function C() {
this.constructor = child;
}
C.prototype = parent.prototype;
child.prototype = new C();
}
function peg$SyntaxError(message, expected, found, location) {
var self = Error.call(this, message);
if (Object.setPrototypeOf) {
Object.setPrototypeOf(self, peg$SyntaxError.prototype);
}
self.expected = expected;
self.found = found;
self.location = location;
self.name = "SyntaxError";
return self;
}
peg$subclass(peg$SyntaxError, Error);
function peg$padEnd(str, targetLength, padString) {
padString = padString || " ";
if (str.length > targetLength) {
return str;
}
targetLength -= str.length;
padString += padString.repeat(targetLength);
return str + padString.slice(0, targetLength);
}
peg$SyntaxError.prototype.format = function(sources) {
var str = "Error: " + this.message;
if (this.location) {
var src = null;
var k;
for (k = 0; k < sources.length; k++) {
if (sources[k].source === this.location.source) {
src = sources[k].text.split(/\r\n|\n|\r/g);
break;
}
}
var s = this.location.start;
var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s;
var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column;
if (src) {
var e = this.location.end;
var filler = peg$padEnd("", offset_s.line.toString().length, " ");
var line = src[s.line - 1];
var last = s.line === e.line ? e.column : line.length + 1;
var hatLen = last - s.column || 1;
str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^");
} else {
str += "\n at " + loc;
}
}
return str;
};
peg$SyntaxError.buildMessage = function(expected, found) {
var DESCRIBE_EXPECTATION_FNS = {
literal: function(expectation) {
return '"' + literalEscape(expectation.text) + '"';
},
class: function(expectation) {
var escapedParts = expectation.parts.map(function(part) {
return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part);
});
return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]";
},
any: function() {
return "any character";
},
end: function() {
return "end of input";
},
other: function(expectation) {
return expectation.description;
}
};
function hex(ch) {
return ch.charCodeAt(0).toString(16).toUpperCase();
}
function literalEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function classEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function describeExpectation(expectation) {
return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);
}
function describeExpected(expected2) {
var descriptions = expected2.map(describeExpectation);
var i, j;
descriptions.sort();
if (descriptions.length > 0) {
for (i = 1, j = 1; i < descriptions.length; i++) {
if (descriptions[i - 1] !== descriptions[i]) {
descriptions[j] = descriptions[i];
j++;
}
}
descriptions.length = j;
}
switch (descriptions.length) {
case 1:
return descriptions[0];
case 2:
return descriptions[0] + " or " + descriptions[1];
default:
return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1];
}
}
function describeFound(found2) {
return found2 ? '"' + literalEscape(found2) + '"' : "end of input";
}
return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found.";
};
function peg$parse(input, options) {
options = options !== void 0 ? options : {};
var peg$FAILED = {};
var peg$source = options.grammarSource;
var peg$startRuleFunctions = { body: peg$parsebody };
var peg$startRuleFunction = peg$parsebody;
var peg$e1 = peg$otherExpectation("item");
var peg$e2 = peg$anyExpectation();
var peg$e3 = peg$otherExpectation("equation");
var peg$e4 = peg$otherExpectation("trailing comment");
var peg$e5 = peg$otherExpectation("comment only line");
var peg$e6 = peg$otherExpectation("non-var token");
var peg$e7 = peg$otherExpectation("token");
var peg$e8 = peg$otherExpectation("same line comment");
var peg$e9 = peg$otherExpectation("own line comment");
var peg$e10 = peg$otherExpectation(",");
var peg$e11 = peg$otherExpectation("@");
var peg$e12 = peg$otherExpectation("variable token");
var peg$e13 = peg$otherExpectation("+/-");
var peg$e14 = peg$otherExpectation("=");
var peg$f0 = function(a, b) {
return a.concat(b ? b : []);
};
var peg$f1 = function() {
return [];
};
var peg$f3 = function(op, a, b, c) {
return { type: "item", op, variable: b, content: a.concat(b, c) };
};
var peg$f4 = function(op, a) {
return { type: "item", op, variable: null, content: a };
};
var peg$f5 = function(line, sep, comment) {
return { ...line, sep: [].concat(sep), trailingComment: comment };
};
var peg$f6 = function(line, comment) {
return { ...line, trailingComment: comment };
};
var peg$f7 = function(eq, ann) {
return {
type: "line",
equation: eq,
annotation: ann,
sep: null
};
};
var peg$f8 = function(at, ann) {
return at ? { type: "annotation", marker: at, content: ann } : null;
};
var peg$f9 = function(left, eq, right) {
return { type: "equation", left, right, equals: eq };
};
var peg$f10 = function(x) {
return x;
};
var peg$f11 = function(x) {
return {
type: "line",
trailingComment: x
};
};
var peg$f12 = function(v, s) {
return [v].concat(s ? s : []);
};
var peg$f13 = function(t) {
return t;
};
var peg$f14 = function(x) {
return x;
};
var peg$f15 = function(x) {
return x;
};
var peg$f16 = function(tok) {
return options.isSameLineComment(tok);
};
var peg$f17 = function(tok) {
return tok;
};
var peg$f18 = function(tok) {
return options.isOwnLineComment(tok);
};
var peg$f19 = function(tok) {
return tok;
};
var peg$f20 = function(tok) {
return options.isWhitespace(tok);
};
var peg$f21 = function(tok) {
return tok;
};
var peg$f22 = function(tok) {
return options.isSep(tok);
};
var peg$f23 = function(tok) {
return tok;
};
var peg$f24 = function(tok) {
return options.isAt(tok);
};
var peg$f25 = function(tok) {
return tok;
};
var peg$f26 = function(tok) {
return options.isVar(tok);
};
var peg$f27 = function(tok) {
return tok;
};
var peg$f28 = function(tok) {
return options.isOperation(tok);
};
var peg$f29 = function(tok) {
return tok;
};
var peg$f30 = function(tok) {
return options.isEquals(tok);
};
var peg$f31 = function(tok) {
return tok;
};
var peg$f32 = function(tok) {
return options.isSubscript(tok);
};
var peg$f33 = function(tok) {
return tok;
};
var peg$currPos = 0;
var peg$posDetailsCache = [{ line: 1, column: 1 }];
var peg$maxFailPos = 0;
var peg$maxFailExpected = [];
var peg$silentFails = 0;
var peg$result;
if ("startRule" in options) {
if (!(options.startRule in peg$startRuleFunctions)) {
throw new Error(`Can't start parsing from rule "` + options.startRule + '".');
}
peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
}
function peg$anyExpectation() {
return { type: "any" };
}
function peg$endExpectation() {
return { type: "end" };
}
function peg$otherExpectation(description) {
return { type: "other", description };
}
function peg$computePosDetails(pos) {
var details = peg$posDetailsCache[pos];
var p;
if (details) {
return details;
} else {
p = pos - 1;
while (!peg$posDetailsCache[p]) {
p--;
}
details = peg$posDetailsCache[p];
details = {
line: details.line,
column: details.column
};
while (p < pos) {
if (input.charCodeAt(p) === 10) {
details.line++;
details.column = 1;
} else {
details.column++;
}
p++;
}
peg$posDetailsCache[pos] = details;
return details;
}
}
function peg$computeLocation(startPos, endPos, offset2) {
var startPosDetails = peg$computePosDetails(startPos);
var endPosDetails = peg$computePosDetails(endPos);
var res = {
source: peg$source,
start: {
offset: startPos,
line: startPosDetails.line,
column: startPosDetails.column
},
end: {
offset: endPos,
line: endPosDetails.line,
column: endPosDetails.column
}
};
return res;
}
function peg$fail(expected2) {
if (peg$currPos < peg$maxFailPos) {
return;
}
if (peg$currPos > peg$maxFailPos) {
peg$maxFailPos = peg$currPos;
peg$maxFailExpected = [];
}
peg$maxFailExpected.push(expected2);
}
function peg$buildStructuredError(expected2, found, location2) {
return new peg$SyntaxError(
peg$SyntaxError.buildMessage(expected2, found),
expected2,
found,
location2
);
}
function peg$parsebody() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
s2 = peg$parsecomment_only_line();
if (s2 === peg$FAILED) {
s2 = peg$parseline_with_sep();
if (s2 === peg$FAILED) {
s2 = peg$parsepartial_line_with_comment();
}
}
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsecomment_only_line();
if (s2 === peg$FAILED) {
s2 = peg$parseline_with_sep();
if (s2 === peg$FAILED) {
s2 = peg$parsepartial_line_with_comment();
}
}
}
s2 = peg$parseline_without_sep();
if (s2 === peg$FAILED) {
s2 = peg$parseEOL();
}
if (s2 !== peg$FAILED) {
s0 = peg$f0(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parseEOL();
if (s1 !== peg$FAILED) {
s1 = peg$f1();
}
s0 = s1;
}
return s0;
}
function peg$parseitem() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$parseoperation();
if (s1 === peg$FAILED) {
s1 = null;
}
s2 = [];
s3 = peg$parse_();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parse_();
}
s3 = [];
s4 = peg$parsenon_var_token();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parsenon_var_token();
}
s4 = [];
s5 = peg$parse_();
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$parse_();
}
s5 = peg$parsevar();
if (s5 !== peg$FAILED) {
s6 = [];
s7 = peg$parse_();
while (s7 !== peg$FAILED) {
s6.push(s7);
s7 = peg$parse_();
}
s7 = [];
s8 = peg$parsetoken();
while (s8 !== peg$FAILED) {
s7.push(s8);
s8 = peg$parsetoken();
}
s8 = [];
s9 = peg$parse_();
while (s9 !== peg$FAILED) {
s8.push(s9);
s9 = peg$parse_();
}
s0 = peg$f3(s1, s3, s5, s7);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parseoperation();
if (s1 === peg$FAILED) {
s1 = null;
}
s2 = [];
s3 = peg$parse_();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parse_();
}
s3 = [];
s4 = peg$parsenon_var_token();
if (s4 !== peg$FAILED) {
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parsenon_var_token();
}
} else {
s3 = peg$FAILED;
}
if (s3 !== peg$FAILED) {
s4 = [];
s5 = peg$parse_();
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$parse_();
}
s0 = peg$f4(s1, s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e1);
}
}
return s0;
}
function peg$parseline_with_sep() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$parseline_without_sep();
if (s1 !== peg$FAILED) {
s2 = peg$parsesep();
if (s2 !== peg$FAILED) {
s3 = peg$parsetrailing_comment();
if (s3 === peg$FAILED) {
s3 = null;
}
s0 = peg$f5(s1, s2, s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsepartial_line_with_comment() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = peg$parseline_without_sep();
if (s1 !== peg$FAILED) {
s2 = peg$parsetrailing_comment();
if (s2 !== peg$FAILED) {
s0 = peg$f6(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseline_without_sep() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$currPos;
peg$silentFails++;
if (input.length > peg$currPos) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
peg$silentFails--;
if (s2 !== peg$FAILED) {
peg$currPos = s1;
s1 = void 0;
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s2 = peg$parseequation();
s3 = peg$parseannotation();
if (s3 === peg$FAILED) {
s3 = null;
}
s0 = peg$f7(s2, s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseannotation() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$parseat();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parsenon_sep_token();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsenon_sep_token();
}
s0 = peg$f8(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseequation() {
var s0, s1, s2, s3, s4;
peg$silentFails++;
s0 = peg$currPos;
s1 = [];
s2 = peg$parseitem();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parseitem();
}
s2 = peg$parseequals();
if (s2 === peg$FAILED) {
s2 = null;
}
s3 = [];
s4 = peg$parsetoken();
if (s4 === peg$FAILED) {
s4 = peg$parseoperation();
}
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parsetoken();
if (s4 === peg$FAILED) {
s4 = peg$parseoperation();
}
}
s0 = peg$f9(s1, s2, s3);
peg$silentFails--;
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
return s0;
}
function peg$parsetrailing_comment() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
s1 = [];
s2 = peg$parse_();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parse_();
}
s2 = peg$parsesame_line_comment();
if (s2 !== peg$FAILED) {
s0 = peg$f10(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e4);
}
}
return s0;
}
function peg$parsecomment_only_line() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
s1 = [];
s2 = peg$parse_();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parse_();
}
s2 = peg$parseown_line_comment();
if (s2 !== peg$FAILED) {
s0 = peg$f11(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e5);
}
}
return s0;
}
function peg$parsevar() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$parsevar_token();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parse_();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parse_();
}
s3 = peg$parsesubscript();
if (s3 === peg$FAILED) {
s3 = null;
}
s0 = peg$f12(s1, s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsenon_var_token() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$currPos;
peg$silentFails++;
s2 = peg$parsevar();
peg$silentFails--;
if (s2 === peg$FAILED) {
s1 = void 0;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s2 = peg$parsetoken();
if (s2 !== peg$FAILED) {
s0 = peg$f13(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e6);
}
}
return s0;
}
function peg$parsenon_sep_token() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = peg$currPos;
peg$silentFails++;
s2 = peg$parsesep();
if (s2 === peg$FAILED) {
s2 = peg$parsetrailing_comment();
if (s2 === peg$FAILED) {
s2 = peg$parseown_line_comment();
}
}
peg$silentFails--;
if (s2 === peg$FAILED) {
s1 = void 0;
} 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$e2);
}
}
if (s2 !== peg$FAILED) {
s0 = peg$f14(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsetoken() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$currPos;
peg$silentFails++;
s2 = peg$parsesep();
if (s2 === peg$FAILED) {
s2 = peg$parseat();
if (s2 === peg$FAILED) {
s2 = peg$parseoperation();
if (s2 === peg$FAILED) {
s2 = peg$parseequals();
if (s2 === peg$FAILED) {
s2 = peg$parsetrailing_comment();
if (s2 === peg$FAILED) {
s2 = peg$parseown_line_comment();
}
}
}
}
}
peg$silentFails--;
if (s2 === peg$FAILED) {
s1 = void 0;
} 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$e2);
}
}
if (s2 !== peg$FAILED) {
s0 = peg$f15(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e7);
}
}
return s0;
}
function peg$parsesame_line_comment() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f16(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f17(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e8);
}
}
return s0;
}
function peg$parseown_line_comment() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f18(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f19(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e9);
}
}
return s0;
}
function peg$parse_() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f20(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f21(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsesep() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f22(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f23(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e10);
}
}
return s0;
}
function peg$parseat() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f24(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f25(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e11);
}
}
return s0;
}
function peg$parsevar_token() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f26(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f27(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e12);
}
}
return s0;
}
function peg$parseoperation() {
var s0, s1, s2, s3, s4;
peg$silentFails++;
s0 = peg$currPos;
s1 = [];
s2 = peg$parse_();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parse_();
}
if (input.length > peg$currPos) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parse_();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parse_();
}
s4 = peg$f28(s2);
if (s4) {
s4 = void 0;
} else {
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
s0 = peg$f29(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e13);
}
}
return s0;
}
function peg$parseequals() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f30(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f31(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e14);
}
}
return s0;
}
function peg$parsesubscript() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f32(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f33(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseEOL() {
var s0, s1;
s0 = peg$currPos;
peg$silentFails++;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
peg$silentFails--;
if (s1 === peg$FAILED) {
s0 = void 0;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
if (!options.isWhitespace) {
try {
Object.assign(options, {
isSep: (node) => node.type === "string" && node.content === ",",
isVar: (node) => node.type === "string" && node.content.match(/[a-zA-Z]/),
isOperation: (node) => node.type === "string" && node.content.match(/[+-]/),
isEquals: (node) => node.type === "string" && node.content === "=",
isAt: (node) => node.type === "string" && node.content === "@",
isSubscript: (node) => node.content === "_",
isWhitespace: (node) => node.type === "whitespace",
isSameLineComment: (node) => node.type === "comment" && node.sameline,
isOwnLineComment: (node) => node.type === "comment" && !node.sameline
});
} catch (e) {
console.warn("Error when initializing parser", e);
}
}
peg$result = peg$startRuleFunction();
if (peg$result !== peg$FAILED && peg$currPos === input.length) {
return peg$result;
} else {
if (peg$result !== peg$FAILED && peg$currPos < input.length) {
peg$fail(peg$endExpectation());
}
throw peg$buildStructuredError(
peg$maxFailExpected,
peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,
peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)
);
}
}
return {
SyntaxError: peg$SyntaxError,
parse: peg$parse
};
}()
);
const _GluePegParser = (
// Generated by Peggy 3.0.2.
//
// https://peggyjs.org/
function() {
function peg$subclass(child, parent) {
function C() {
this.constructor = child;
}
C.prototype = parent.prototype;
child.prototype = new C();
}
function peg$SyntaxError(message, expected, found, location) {
var self = Error.call(this, message);
if (Object.setPrototypeOf) {
Object.setPrototypeOf(self, peg$SyntaxError.prototype);
}
self.expected = expected;
self.found = found;
self.location = location;
self.name = "SyntaxError";
return self;
}
peg$subclass(peg$SyntaxError, Error);
function peg$padEnd(str, targetLength, padString) {
padString = padString || " ";
if (str.length > targetLength) {
return str;
}
targetLength -= str.length;
padString += padString.repeat(targetLength);
return str + padString.slice(0, targetLength);
}
peg$SyntaxError.prototype.format = function(sources) {
var str = "Error: " + this.message;
if (this.location) {
var src = null;
var k;
for (k = 0; k < sources.length; k++) {
if (sources[k].source === this.location.source) {
src = sources[k].text.split(/\r\n|\n|\r/g);
break;
}
}
var s = this.location.start;
var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s;
var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column;
if (src) {
var e = this.location.end;
var filler = peg$padEnd("", offset_s.line.toString().length, " ");
var line = src[s.line - 1];
var last = s.line === e.line ? e.column : line.length + 1;
var hatLen = last - s.column || 1;
str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^");
} else {
str += "\n at " + loc;
}
}
return str;
};
peg$SyntaxError.buildMessage = function(expected, found) {
var DESCRIBE_EXPECTATION_FNS = {
literal: function(expectation) {
return '"' + literalEscape(expectation.text) + '"';
},
class: function(expectation) {
var escapedParts = expectation.parts.map(function(part) {
return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part);
});
return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]";
},
any: function() {
return "any character";
},
end: function() {
return "end of input";
},
other: function(expectation) {
return expectation.description;
}
};
function hex(ch) {
return ch.charCodeAt(0).toString(16).toUpperCase();
}
function literalEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function classEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function describeExpectation(expectation) {
return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);
}
function describeExpected(expected2) {
var descriptions = expected2.map(describeExpectation);
var i, j;
descriptions.sort();
if (descriptions.length > 0) {
for (i = 1, j = 1; i < descriptions.length; i++) {
if (descriptions[i - 1] !== descriptions[i]) {
descriptions[j] = descriptions[i];
j++;
}
}
descriptions.length = j;
}
switch (descriptions.length) {
case 1:
return descriptions[0];
case 2:
return descriptions[0] + " or " + descriptions[1];
default:
return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1];
}
}
function describeFound(found2) {
return found2 ? '"' + literalEscape(found2) + '"' : "end of input";
}
return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found.";
};
function peg$parse(input, options) {
options = options !== void 0 ? options : {};
var peg$FAILED = {};
var peg$source = options.grammarSource;
var peg$startRuleFunctions = { root: peg$parseroot };
var peg$startRuleFunction = peg$parseroot;
var peg$c0 = "plus";
var peg$c1 = "minus";
var peg$c2 = "pt";
var peg$c3 = "mm";
var peg$c4 = "cm";
var peg$c5 = "in";
var peg$c6 = "ex";
var peg$c7 = "em";
var peg$c8 = "bp";
var peg$c9 = "pc";
var peg$c10 = "dd";
var peg$c11 = "cc";
var peg$c12 = "nd";
var peg$c13 = "nc";
var peg$c14 = "sp";
var peg$c15 = "filll";
var peg$c16 = "fill";
var peg$c17 = "fil";
var peg$c18 = ".";
var peg$c19 = "+";
var peg$c20 = "-";
var peg$r0 = /^[0-9]/;
var peg$e0 = peg$anyExpectation();
var peg$e1 = peg$literalExpectation("plus", false);
var peg$e2 = peg$literalExpectation("minus", false);
var peg$e3 = peg$literalExpectation("pt", false);
var peg$e4 = peg$literalExpectation("mm", false);
var peg$e5 = peg$literalExpectation("cm", false);
var peg$e6 = peg$literalExpectation("in", false);
var peg$e7 = peg$literalExpectation("ex", false);
var peg$e8 = peg$literalExpectation("em", false);
var peg$e9 = peg$literalExpectation("bp", false);
var peg$e10 = peg$literalExpectation("pc", false);
var peg$e11 = peg$literalExpectation("dd", false);
var peg$e12 = peg$literalExpectation("cc", false);
var peg$e13 = peg$literalExpectation("nd", false);
var peg$e14 = peg$literalExpectation("nc", false);
var peg$e15 = peg$literalExpectation("sp", false);
var peg$e16 = peg$literalExpectation("filll", false);
var peg$e17 = peg$literalExpectation("fill", false);
var peg$e18 = peg$literalExpectation("fil", false);
var peg$e19 = peg$otherExpectation("number");
var peg$e20 = peg$classExpectation([["0", "9"]], false, false);
var peg$e21 = peg$literalExpectation(".", false);
var peg$e22 = peg$literalExpectation("+", false);
var peg$e23 = peg$literalExpectation("-", false);
var peg$f0 = function(b, st, sh) {
return {
type: "glue",
fixed: b,
stretchable: st,
shrinkable: sh,
position: location()
};
};
var peg$f1 = function(glue) {
return glue;
};
var peg$f2 = function(n, u) {
return { type: "dim", value: n, unit: u };
};
var peg$f3 = function(n, u) {
return { type: "dim", value: n, unit: u };
};
var peg$f4 = function(n, u) {
return { type: "dim", value: n, unit: u };
};
var peg$f5 = function(n) {
return parseFloat(n);
};
var peg$currPos = 0;
var peg$savedPos = 0;
var peg$posDetailsCache = [{ line: 1, column: 1 }];
var peg$maxFailPos = 0;
var peg$maxFailExpected = [];
var peg$silentFails = 0;
var peg$result;
if ("startRule" in options) {
if (!(options.startRule in peg$startRuleFunctions)) {
throw new Error(`Can't start parsing from rule "` + options.startRule + '".');
}
peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
}
function location() {
return peg$computeLocation(peg$savedPos, peg$currPos);
}
function peg$literalExpectation(text2, ignoreCase) {
return { type: "literal", text: text2, ignoreCase };
}
function peg$classExpectation(parts, inverted, ignoreCase) {
return { type: "class", parts, inverted, ignoreCase };
}
function peg$anyExpectation() {
return { type: "any" };
}
function peg$endExpectation() {
return { type: "end" };
}
function peg$otherExpectation(description) {
return { type: "other", description };
}
function peg$computePosDetails(pos) {
var details = peg$posDetailsCache[pos];
var p;
if (details) {
return details;
} else {
p = pos - 1;
while (!peg$posDetailsCache[p]) {
p--;
}
details = peg$posDetailsCache[p];
details = {
line: details.line,
column: details.column
};
while (p < pos) {
if (input.charCodeAt(p) === 10) {
details.line++;
details.column = 1;
} else {
details.column++;
}
p++;
}
peg$posDetailsCache[pos] = details;
return details;
}
}
function peg$computeLocation(startPos, endPos, offset2) {
var startPosDetails = peg$computePosDetails(startPos);
var endPosDetails = peg$computePosDetails(endPos);
var res = {
source: peg$source,
start: {
offset: startPos,
line: startPosDetails.line,
column: startPosDetails.column
},
end: {
offset: endPos,
line: endPosDetails.line,
column: endPosDetails.column
}
};
return res;
}
function peg$fail(expected2) {
if (peg$currPos < peg$maxFailPos) {
return;
}
if (peg$currPos > peg$maxFailPos) {
peg$maxFailPos = peg$currPos;
peg$maxFailExpected = [];
}
peg$maxFailExpected.push(expected2);
}
function peg$buildStructuredError(expected2, found, location2) {
return new peg$SyntaxError(
peg$SyntaxError.buildMessage(expected2, found),
expected2,
found,
location2
);
}
function peg$parseroot() {
var s0, s1, s2, s3, s4;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$parsebase();
if (s2 !== peg$FAILED) {
s3 = peg$parsestretchable();
if (s3 === peg$FAILED) {
s3 = null;
}
s4 = peg$parseshrinkable();
if (s4 === peg$FAILED) {
s4 = null;
}
peg$savedPos = s1;
s1 = peg$f0(s2, s3, s4);
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s2 = [];
if (input.length > peg$currPos) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
while (s3 !== peg$FAILED) {
s2.push(s3);
if (input.length > peg$currPos) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
}
peg$savedPos = s0;
s0 = peg$f1(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsebase() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = peg$parsenumber();
if (s1 !== peg$FAILED) {
s2 = peg$parseunit();
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f2(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsestretchable() {
var s0, s1, s2, s3;
s0 = peg$currPos;
if (input.substr(peg$currPos, 4) === peg$c0) {
s1 = peg$c0;
peg$currPos += 4;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e1);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$parsenumber();
if (s2 !== peg$FAILED) {
s3 = peg$parserubber_unit();
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f3(s2, s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseshrinkable() {
var s0, s1, s2, s3;
s0 = peg$currPos;
if (input.substr(peg$currPos, 5) === peg$c1) {
s1 = peg$c1;
peg$currPos += 5;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e2);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$parsenumber();
if (s2 !== peg$FAILED) {
s3 = peg$parserubber_unit();
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f4(s2, s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseunit() {
var s0;
if (input.substr(peg$currPos, 2) === peg$c2) {
s0 = peg$c2;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c3) {
s0 = peg$c3;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e4);
}
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c4) {
s0 = peg$c4;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e5);
}
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c5) {
s0 = peg$c5;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e6);
}
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c6) {
s0 = peg$c6;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e7);
}
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c7) {
s0 = peg$c7;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e8);
}
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c8) {
s0 = peg$c8;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e9);
}
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c9) {
s0 = peg$c9;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e10);
}
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c10) {
s0 = peg$c10;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e11);
}
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c11) {
s0 = peg$c11;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e12);
}
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c12) {
s0 = peg$c12;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e13);
}
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c13) {
s0 = peg$c13;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e14);
}
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2) === peg$c14) {
s0 = peg$c14;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e15);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
return s0;
}
function peg$parserubber_unit() {
var s0;
s0 = peg$parseunit();
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 5) === peg$c15) {
s0 = peg$c15;
peg$currPos += 5;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e16);
}
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 4) === peg$c16) {
s0 = peg$c16;
peg$currPos += 4;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e17);
}
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 3) === peg$c17) {
s0 = peg$c17;
peg$currPos += 3;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e18);
}
}
}
}
}
return s0;
}
function peg$parsenumber() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8;
peg$silentFails++;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$currPos;
s3 = peg$parsesign();
if (s3 === peg$FAILED) {
s3 = null;
}
s4 = peg$currPos;
s5 = [];
if (peg$r0.test(input.charAt(peg$currPos))) {
s6 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e20);
}
}
while (s6 !== peg$FAILED) {
s5.push(s6);
if (peg$r0.test(input.charAt(peg$currPos))) {
s6 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e20);
}
}
}
if (input.charCodeAt(peg$currPos) === 46) {
s6 = peg$c18;
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e21);
}
}
if (s6 !== peg$FAILED) {
s7 = [];
if (peg$r0.test(input.charAt(peg$currPos))) {
s8 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s8 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e20);
}
}
if (s8 !== peg$FAILED) {
while (s8 !== peg$FAILED) {
s7.push(s8);
if (peg$r0.test(input.charAt(peg$currPos))) {
s8 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s8 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e20);
}
}
}
} else {
s7 = peg$FAILED;
}
if (s7 !== peg$FAILED) {
s5 = [s5, s6, s7];
s4 = s5;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 === peg$FAILED) {
s4 = [];
if (peg$r0.test(input.charAt(peg$currPos))) {
s5 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e20);
}
}
if (s5 !== peg$FAILED) {
while (s5 !== peg$FAILED) {
s4.push(s5);
if (peg$r0.test(input.charAt(peg$currPos))) {
s5 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e20);
}
}
}
} else {
s4 = peg$FAILED;
}
}
if (s4 !== peg$FAILED) {
s3 = [s3, s4];
s2 = s3;
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = input.substring(s1, peg$currPos);
} else {
s1 = s2;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$f5(s1);
}
s0 = s1;
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e19);
}
}
return s0;
}
function peg$parsesign() {
var s0;
if (input.charCodeAt(peg$currPos) === 43) {
s0 = peg$c19;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e22);
}
}
if (s0 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 45) {
s0 = peg$c20;
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e23);
}
}
}
return s0;
}
peg$result = peg$startRuleFunction();
if (peg$result !== peg$FAILED && peg$currPos === input.length) {
return peg$result;
} else {
if (peg$result !== peg$FAILED && peg$currPos < input.length) {
peg$fail(peg$endExpectation());
}
throw peg$buildStructuredError(
peg$maxFailExpected,
peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,
peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)
);
}
}
return {
SyntaxError: peg$SyntaxError,
parse: peg$parse
};
}()
);
const _TikzPegParser = (
// Generated by Peggy 3.0.2.
//
// https://peggyjs.org/
function() {
function peg$subclass(child, parent) {
function C() {
this.constructor = child;
}
C.prototype = parent.prototype;
child.prototype = new C();
}
function peg$SyntaxError(message, expected, found, location) {
var self = Error.call(this, message);
if (Object.setPrototypeOf) {
Object.setPrototypeOf(self, peg$SyntaxError.prototype);
}
self.expected = expected;
self.found = found;
self.location = location;
self.name = "SyntaxError";
return self;
}
peg$subclass(peg$SyntaxError, Error);
function peg$padEnd(str, targetLength, padString) {
padString = padString || " ";
if (str.length > targetLength) {
return str;
}
targetLength -= str.length;
padString += padString.repeat(targetLength);
return str + padString.slice(0, targetLength);
}
peg$SyntaxError.prototype.format = function(sources) {
var str = "Error: " + this.message;
if (this.location) {
var src = null;
var k;
for (k = 0; k < sources.length; k++) {
if (sources[k].source === this.location.source) {
src = sources[k].text.split(/\r\n|\n|\r/g);
break;
}
}
var s = this.location.start;
var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s;
var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column;
if (src) {
var e = this.location.end;
var filler = peg$padEnd("", offset_s.line.toString().length, " ");
var line = src[s.line - 1];
var last = s.line === e.line ? e.column : line.length + 1;
var hatLen = last - s.column || 1;
str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^");
} else {
str += "\n at " + loc;
}
}
return str;
};
peg$SyntaxError.buildMessage = function(expected, found) {
var DESCRIBE_EXPECTATION_FNS = {
literal: function(expectation) {
return '"' + literalEscape(expectation.text) + '"';
},
class: function(expectation) {
var escapedParts = expectation.parts.map(function(part) {
return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part);
});
return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]";
},
any: function() {
return "any character";
},
end: function() {
return "end of input";
},
other: function(expectation) {
return expectation.description;
}
};
function hex(ch) {
return ch.charCodeAt(0).toString(16).toUpperCase();
}
function literalEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function classEscape(s) {
return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
return "\\x0" + hex(ch);
}).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return "\\x" + hex(ch);
});
}
function describeExpectation(expectation) {
return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);
}
function describeExpected(expected2) {
var descriptions = expected2.map(describeExpectation);
var i, j;
descriptions.sort();
if (descriptions.length > 0) {
for (i = 1, j = 1; i < descriptions.length; i++) {
if (descriptions[i - 1] !== descriptions[i]) {
descriptions[j] = descriptions[i];
j++;
}
}
descriptions.length = j;
}
switch (descriptions.length) {
case 1:
return descriptions[0];
case 2:
return descriptions[0] + " or " + descriptions[1];
default:
return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1];
}
}
function describeFound(found2) {
return found2 ? '"' + literalEscape(found2) + '"' : "end of input";
}
return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found.";
};
function peg$parse(input, options) {
options = options !== void 0 ? options : {};
var peg$FAILED = {};
var peg$source = options.grammarSource;
var peg$startRuleFunctions = { path_spec: peg$parsepath_spec, foreach_body: peg$parseforeach_body };
var peg$startRuleFunction = peg$parsepath_spec;
var peg$e0 = peg$anyExpectation();
var peg$e3 = peg$otherExpectation("comment");
var peg$e4 = peg$otherExpectation("floating comment");
var peg$e5 = peg$otherExpectation("operation");
var peg$e6 = peg$otherExpectation("=");
var peg$f0 = function(v) {
return v;
};
var peg$f1 = function(ops) {
return { type: "path_spec", content: ops };
};
var peg$f2 = function(c1, op, comment) {
return { op, comment };
};
var peg$f3 = function(c1, ops, c2, body) {
const comments = [c1, ...ops.map((x) => x.comment), c2].filter(
(x) => x
);
const attribute = ops.map((x) => x.op.content.content).join(" ");
return {
type: "animation",
comments,
attribute,
content: body.content
};
};
var peg$f4 = function(start, b) {
return { ...b, start, type: "foreach" };
};
var peg$f5 = function(c1, variables, options2, c2, c3, list, c4, command) {
const comments = [c1, c2, c3, c4].filter((x) => x);
return {
type: "foreach_body",
variables,
options: options2 && options2.content,
list,
command,
comments
};
};
var peg$f6 = function(c1, options2, c2, body) {
const comments = [c1, c2].filter((x) => x);
return {
type: "svg_operation",
options: options2 && options2.content,
content: body,
comments
};
};
var peg$f7 = function(c1, c2, coord, c3, c4, x) {
return { coord: x, comment: c4 };
};
var peg$f8 = function(c1, c2, coord, c3, a, c5) {
const comments = [c1, c2, c3, a && a.comment, c5].filter((x) => x);
return {
type: "curve_to",
controls: a ? [coord, a.coord] : [coord],
comments
};
};
var peg$f9 = function() {
return { type: "line_to", command: "|-" };
};
var peg$f10 = function() {
return { type: "line_to", command: "-|" };
};
var peg$f11 = function() {
return { type: "line_to", command: "--" };
};
var peg$f12 = function(prefix, content) {
return { type: "coordinate", content, prefix };
};
var peg$f13 = function(content) {
return { type: "square_brace_group", content };
};
var peg$f14 = function(v) {
return { type: "unknown", content: v };
};
var peg$f19 = function(tok) {
return options.isComment(tok);
};
var peg$f20 = function(tok) {
return tok;
};
var peg$f21 = function(tok) {
return options.isWhitespace(tok);
};
var peg$f22 = function(tok) {
return tok;
};
var peg$f23 = function(c) {
return c;
};
var peg$f24 = function(tok) {
return options.isOperation(tok);
};
var peg$f25 = function(tok) {
return { type: "operation", content: tok };
};
var peg$f26 = function(tok) {
return options.isChar(tok, "=");
};
var peg$f27 = function(tok) {
return tok;
};
var peg$f28 = function(tok) {
return options.isChar(tok, "[");
};
var peg$f29 = function(tok) {
return tok;
};
var peg$f30 = function(tok) {
return options.isChar(tok, "]");
};
var peg$f31 = function(tok) {
return tok;
};
var peg$f32 = function(tok) {
return options.isChar(tok, "(");
};
var peg$f33 = function(tok) {
return tok;
};
var peg$f34 = function(tok) {
return options.isChar(tok, ")");
};
var peg$f35 = function(tok) {
return tok;
};
var peg$f36 = function(tok) {
return options.isChar(tok, "+");
};
var peg$f37 = function(tok) {
return tok;
};
var peg$f38 = function(tok) {
return options.isChar(tok, "-");
};
var peg$f39 = function(tok) {
return tok;
};
var peg$f40 = function(tok) {
return options.isChar(tok, "|");
};
var peg$f41 = function(tok) {
return tok;
};
var peg$f42 = function(tok) {
return options.isChar(tok, ".");
};
var peg$f43 = function(tok) {
return tok;
};
var peg$f44 = function(tok) {
return options.isChar(tok, "controls");
};
var peg$f45 = function(tok) {
return tok;
};
var peg$f46 = function(tok) {
return options.isChar(tok, "and");
};
var peg$f47 = function(tok) {
return tok;
};
var peg$f48 = function(tok) {
return options.isChar(tok, "svg");
};
var peg$f49 = function(tok) {
return tok;
};
var peg$f50 = function(tok) {
return options.isGroup(tok);
};
var peg$f51 = function(tok) {
return tok;
};
var peg$f52 = function(tok) {
return options.isAnyMacro(tok);
};
var peg$f53 = function(tok) {
return tok;
};
var peg$f54 = function(tok) {
return options.isChar(tok, "foreach");
};
var peg$f55 = function(tok) {
return tok;
};
var peg$f56 = function(tok) {
return options.isMacro(tok, "foreach");
};
var peg$f57 = function(tok) {
return tok;
};
var peg$f58 = function(tok) {
return options.isChar(tok, "in");
};
var peg$f59 = function(tok) {
return tok;
};
var peg$f60 = function(tok) {
return options.isChar(tok, ":");
};
var peg$f61 = function(tok) {
return tok;
};
var peg$currPos = 0;
var peg$posDetailsCache = [{ line: 1, column: 1 }];
var peg$maxFailPos = 0;
var peg$maxFailExpected = [];
var peg$silentFails = 0;
var peg$result;
if ("startRule" in options) {
if (!(options.startRule in peg$startRuleFunctions)) {
throw new Error(`Can't start parsing from rule "` + options.startRule + '".');
}
peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
}
function peg$anyExpectation() {
return { type: "any" };
}
function peg$endExpectation() {
return { type: "end" };
}
function peg$otherExpectation(description) {
return { type: "other", description };
}
function peg$computePosDetails(pos) {
var details = peg$posDetailsCache[pos];
var p;
if (details) {
return details;
} else {
p = pos - 1;
while (!peg$posDetailsCache[p]) {
p--;
}
details = peg$posDetailsCache[p];
details = {
line: details.line,
column: details.column
};
while (p < pos) {
if (input.charCodeAt(p) === 10) {
details.line++;
details.column = 1;
} else {
details.column++;
}
p++;
}
peg$posDetailsCache[pos] = details;
return details;
}
}
function peg$computeLocation(startPos, endPos, offset2) {
var startPosDetails = peg$computePosDetails(startPos);
var endPosDetails = peg$computePosDetails(endPos);
var res = {
source: peg$source,
start: {
offset: startPos,
line: startPosDetails.line,
column: startPosDetails.column
},
end: {
offset: endPos,
line: endPosDetails.line,
column: endPosDetails.column
}
};
return res;
}
function peg$fail(expected2) {
if (peg$currPos < peg$maxFailPos) {
return;
}
if (peg$currPos > peg$maxFailPos) {
peg$maxFailPos = peg$currPos;
peg$maxFailExpected = [];
}
peg$maxFailExpected.push(expected2);
}
function peg$buildStructuredError(expected2, found, location2) {
return new peg$SyntaxError(
peg$SyntaxError.buildMessage(expected2, found),
expected2,
found,
location2
);
}
function peg$parsepath_spec() {
var s0, s1, s2, s3, s4, s5;
s0 = peg$currPos;
s1 = [];
s2 = peg$currPos;
s3 = peg$parsesquare_brace_group();
if (s3 === peg$FAILED) {
s3 = peg$parsecoordinate();
if (s3 === peg$FAILED) {
s3 = peg$parsecurve_to();
if (s3 === peg$FAILED) {
s3 = peg$parseline_to();
if (s3 === peg$FAILED) {
s3 = peg$parsesvg();
if (s3 === peg$FAILED) {
s3 = peg$parseforeach();
if (s3 === peg$FAILED) {
s3 = peg$parseoperation();
if (s3 === peg$FAILED) {
s3 = peg$parsecomment();
if (s3 === peg$FAILED) {
s3 = peg$parseanimation();
if (s3 === peg$FAILED) {
s3 = peg$parseunknown();
}
}
}
}
}
}
}
}
}
if (s3 !== peg$FAILED) {
s4 = [];
s5 = peg$parse_();
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$parse_();
}
s2 = peg$f0(s3);
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$currPos;
s3 = peg$parsesquare_brace_group();
if (s3 === peg$FAILED) {
s3 = peg$parsecoordinate();
if (s3 === peg$FAILED) {
s3 = peg$parsecurve_to();
if (s3 === peg$FAILED) {
s3 = peg$parseline_to();
if (s3 === peg$FAILED) {
s3 = peg$parsesvg();
if (s3 === peg$FAILED) {
s3 = peg$parseforeach();
if (s3 === peg$FAILED) {
s3 = peg$parseoperation();
if (s3 === peg$FAILED) {
s3 = peg$parsecomment();
if (s3 === peg$FAILED) {
s3 = peg$parseanimation();
if (s3 === peg$FAILED) {
s3 = peg$parseunknown();
}
}
}
}
}
}
}
}
}
if (s3 !== peg$FAILED) {
s4 = [];
s5 = peg$parse_();
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$parse_();
}
s2 = peg$f0(s3);
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s1 = peg$f1(s1);
}
s0 = s1;
return s0;
}
function peg$parseanimation() {
var s0, s1, s2, s3, s4, s5, s6;
s0 = peg$currPos;
s1 = peg$parsecolon();
if (s1 !== peg$FAILED) {
s2 = peg$parse_comment_();
s3 = [];
s4 = peg$currPos;
s5 = peg$parseoperation();
if (s5 !== peg$FAILED) {
s6 = peg$parse_comment_();
s4 = peg$f2(s2, s5, s6);
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$currPos;
s5 = peg$parseoperation();
if (s5 !== peg$FAILED) {
s6 = peg$parse_comment_();
s4 = peg$f2(s2, s5, s6);
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
}
} else {
s3 = peg$FAILED;
}
if (s3 !== peg$FAILED) {
s4 = peg$parseequals();
if (s4 !== peg$FAILED) {
s5 = peg$parse_comment_();
s6 = peg$parsegroup();
if (s6 !== peg$FAILED) {
s0 = peg$f3(s2, s3, s5, s6);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseforeach() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = peg$parseforeach_keyword();
if (s1 === peg$FAILED) {
s1 = peg$parseforeach_macro();
}
if (s1 !== peg$FAILED) {
s2 = peg$parseforeach_body();
if (s2 !== peg$FAILED) {
s0 = peg$f4(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseforeach_body() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;
s0 = peg$currPos;
s1 = peg$parse_comment_();
s2 = peg$currPos;
s3 = [];
s4 = peg$currPos;
s5 = peg$currPos;
peg$silentFails++;
s6 = peg$parsein_keyword();
if (s6 === peg$FAILED) {
s6 = peg$parsesquare_brace_group();
}
peg$silentFails--;
if (s6 === peg$FAILED) {
s5 = void 0;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
if (s5 !== peg$FAILED) {
if (input.length > peg$currPos) {
s6 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s6 !== peg$FAILED) {
s5 = [s5, s6];
s4 = s5;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$currPos;
s5 = peg$currPos;
peg$silentFails++;
s6 = peg$parsein_keyword();
if (s6 === peg$FAILED) {
s6 = peg$parsesquare_brace_group();
}
peg$silentFails--;
if (s6 === peg$FAILED) {
s5 = void 0;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
if (s5 !== peg$FAILED) {
if (input.length > peg$currPos) {
s6 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s6 !== peg$FAILED) {
s5 = [s5, s6];
s4 = s5;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
}
s2 = input.substring(s2, peg$currPos);
s3 = peg$parsesquare_brace_group();
if (s3 === peg$FAILED) {
s3 = null;
}
s4 = peg$parse_comment_();
s5 = peg$parsein_keyword();
if (s5 !== peg$FAILED) {
s6 = peg$parse_comment_();
s7 = peg$parsegroup();
if (s7 === peg$FAILED) {
s7 = peg$parsemacro();
}
if (s7 !== peg$FAILED) {
s8 = peg$parse_comment_();
s9 = peg$parseforeach();
if (s9 === peg$FAILED) {
s9 = peg$parsegroup();
if (s9 === peg$FAILED) {
s9 = peg$parsemacro();
}
}
if (s9 !== peg$FAILED) {
s0 = peg$f5(s1, s2, s3, s4, s6, s7, s8, s9);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsesvg() {
var s0, s1, s2, s3, s4, s5;
s0 = peg$currPos;
s1 = peg$parsesvg_keyword();
if (s1 !== peg$FAILED) {
s2 = peg$parse_comment_();
s3 = peg$parsesquare_brace_group();
if (s3 === peg$FAILED) {
s3 = null;
}
s4 = peg$parse_comment_();
s5 = peg$parsegroup();
if (s5 !== peg$FAILED) {
s0 = peg$f6(s2, s3, s4, s5);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsecurve_to() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;
s0 = peg$currPos;
s1 = peg$parsedotdot();
if (s1 !== peg$FAILED) {
s2 = peg$parse_comment_();
s3 = peg$parsecontrols_keyword();
if (s3 !== peg$FAILED) {
s4 = peg$parse_comment_();
s5 = peg$parsecoordinate();
if (s5 !== peg$FAILED) {
s6 = peg$parse_comment_();
s7 = peg$currPos;
s8 = peg$parseand_keyword();
if (s8 !== peg$FAILED) {
s9 = peg$parse_comment_();
s10 = peg$parsecoordinate();
if (s10 !== peg$FAILED) {
s7 = peg$f7(s2, s4, s5, s6, s9, s10);
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
} else {
peg$currPos = s7;
s7 = peg$FAILED;
}
if (s7 === peg$FAILED) {
s7 = null;
}
s8 = peg$parse_comment_();
s9 = peg$parsedotdot();
if (s9 !== peg$FAILED) {
s0 = peg$f8(s2, s4, s5, s6, s7, s8);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseline_to() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = peg$parsepipe();
if (s1 !== peg$FAILED) {
s2 = peg$parseminus();
if (s2 !== peg$FAILED) {
s0 = peg$f9();
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parseminus();
if (s1 !== peg$FAILED) {
s2 = peg$parsepipe();
if (s2 !== peg$FAILED) {
s0 = peg$f10();
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parseminus();
if (s1 !== peg$FAILED) {
s2 = peg$parseminus();
if (s2 !== peg$FAILED) {
s0 = peg$f11();
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
}
return s0;
}
function peg$parsecoordinate() {
var s0, s1, s2, s3, s4, s5, s6, s7;
s0 = peg$currPos;
s1 = peg$currPos;
s2 = peg$currPos;
s3 = peg$parseplus();
if (s3 !== peg$FAILED) {
s4 = peg$parseplus();
if (s4 === peg$FAILED) {
s4 = null;
}
s3 = [s3, s4];
s2 = s3;
} else {
peg$currPos = s2;
s2 = peg$FAILED;
}
if (s2 === peg$FAILED) {
s2 = null;
}
s1 = input.substring(s1, peg$currPos);
s2 = peg$parseopen_paren();
if (s2 !== peg$FAILED) {
s3 = peg$currPos;
s4 = [];
s5 = peg$currPos;
s6 = peg$currPos;
peg$silentFails++;
s7 = peg$parseclose_paren();
peg$silentFails--;
if (s7 === peg$FAILED) {
s6 = void 0;
} else {
peg$currPos = s6;
s6 = peg$FAILED;
}
if (s6 !== peg$FAILED) {
if (input.length > peg$currPos) {
s7 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s7 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s7 !== peg$FAILED) {
s6 = [s6, s7];
s5 = s6;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$currPos;
s6 = peg$currPos;
peg$silentFails++;
s7 = peg$parseclose_paren();
peg$silentFails--;
if (s7 === peg$FAILED) {
s6 = void 0;
} else {
peg$currPos = s6;
s6 = peg$FAILED;
}
if (s6 !== peg$FAILED) {
if (input.length > peg$currPos) {
s7 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s7 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s7 !== peg$FAILED) {
s6 = [s6, s7];
s5 = s6;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
}
s3 = input.substring(s3, peg$currPos);
s4 = peg$parseclose_paren();
if (s4 !== peg$FAILED) {
s0 = peg$f12(s1, s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsesquare_brace_group() {
var s0, s1, s2, s3, s4, s5, s6;
s0 = peg$currPos;
s1 = peg$parseopen_square_brace();
if (s1 !== peg$FAILED) {
s2 = peg$currPos;
s3 = [];
s4 = peg$currPos;
s5 = peg$currPos;
peg$silentFails++;
s6 = peg$parseclose_square_brace();
peg$silentFails--;
if (s6 === peg$FAILED) {
s5 = void 0;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
if (s5 !== peg$FAILED) {
if (input.length > peg$currPos) {
s6 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s6 !== peg$FAILED) {
s5 = [s5, s6];
s4 = s5;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$currPos;
s5 = peg$currPos;
peg$silentFails++;
s6 = peg$parseclose_square_brace();
peg$silentFails--;
if (s6 === peg$FAILED) {
s5 = void 0;
} else {
peg$currPos = s5;
s5 = peg$FAILED;
}
if (s5 !== peg$FAILED) {
if (input.length > peg$currPos) {
s6 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s6 !== peg$FAILED) {
s5 = [s5, s6];
s4 = s5;
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
} else {
peg$currPos = s4;
s4 = peg$FAILED;
}
}
s2 = input.substring(s2, peg$currPos);
s3 = peg$parseclose_square_brace();
if (s3 !== peg$FAILED) {
s0 = peg$f13(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsedotdot() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = peg$parsedot();
if (s1 !== peg$FAILED) {
s2 = peg$parsedot();
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseunknown() {
var s0, s1;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s1 = peg$f14(s1);
}
s0 = s1;
return s0;
}
function peg$parsecomment() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f19(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f20(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e3);
}
}
return s0;
}
function peg$parse_() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f21(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f22(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parse_comment_() {
var s0, s1, s2, s3, s4;
peg$silentFails++;
s0 = peg$currPos;
s1 = [];
s2 = peg$parse_();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parse_();
}
s2 = peg$parsecomment();
if (s2 === peg$FAILED) {
s2 = null;
}
s3 = [];
s4 = peg$parse_();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parse_();
}
s0 = peg$f23(s2);
peg$silentFails--;
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e4);
}
return s0;
}
function peg$parseoperation() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f24(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f25(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e5);
}
}
return s0;
}
function peg$parseequals() {
var s0, s1, s2;
peg$silentFails++;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f26(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f27(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
peg$silentFails--;
if (s0 === peg$FAILED) {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e6);
}
}
return s0;
}
function peg$parseopen_square_brace() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f28(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f29(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseclose_square_brace() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f30(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f31(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseopen_paren() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f32(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f33(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseclose_paren() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f34(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f35(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseplus() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f36(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f37(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseminus() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f38(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f39(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsepipe() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f40(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f41(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsedot() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f42(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f43(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsecontrols_keyword() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f44(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f45(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseand_keyword() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f46(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f47(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsesvg_keyword() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f48(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f49(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsegroup() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f50(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f51(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsemacro() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f52(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f53(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseforeach_keyword() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f54(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f55(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseforeach_macro() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f56(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f57(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsein_keyword() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f58(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f59(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsecolon() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) {
peg$fail(peg$e0);
}
}
if (s1 !== peg$FAILED) {
s2 = peg$f60(s1);
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s0 = peg$f61(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
if (!options.isWhitespace) {
try {
Object.assign(options, {
isChar: (node, char) => node.type === "string" && node.content === char,
isOperation: (node) => node.type === "string" && node.content.match(/[a-zA-Z]/),
isWhitespace: (node) => node.type === "whitespace" || node.type === "parbreak",
isSameLineComment: (node) => node.type === "comment" && node.sameline,
isOwnLineComment: (node) => node.type === "comment" && !node.sameline,
isComment: (node) => node.type === "comment",
isGroup: (node) => node.type === "group",
isMacro: (node, name) => node.type === "macro" && node.content === name,
isAnyMacro: (node) => node.type === "macro"
});
} catch (e) {
console.warn("Error when initializing parser", e);
}
}
peg$result = peg$startRuleFunction();
if (peg$result !== peg$FAILED && peg$currPos === input.length) {
return peg$result;
} else {
if (peg$result !== peg$FAILED && peg$currPos < input.length) {
peg$fail(peg$endExpectation());
}
throw peg$buildStructuredError(
peg$maxFailExpected,
peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,
peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)
);
}
}
return {
SyntaxError: peg$SyntaxError,
parse: peg$parse
};
}()
);
const LatexPegParser = _LatexPegParser;
const AlignEnvironmentPegParser = _AlignEnvironmentPegParser;
const ArgSpecPegParser = _ArgSpecPegParser;
const PgfkeysPegParser = _PgfkeysPegParser;
const MacroSubstitutionPegParser = _MacroSubstitutionPegParser;
const LigaturesPegParser = _LigaturesPegParser;
const XColorPegParser = _XColorPegParser;
const TabularPegParser = _TabularPegParser;
const SystemePegParser = _SystemePegParser;
const GluePegParser = _GluePegParser;
const TikzPegParser = _TikzPegParser;
exports.AlignEnvironmentPegParser = AlignEnvironmentPegParser;
exports.ArgSpecPegParser = ArgSpecPegParser;
exports.GluePegParser = GluePegParser;
exports.LatexPegParser = LatexPegParser;
exports.LigaturesPegParser = LigaturesPegParser;
exports.MacroSubstitutionPegParser = MacroSubstitutionPegParser;
exports.PgfkeysPegParser = PgfkeysPegParser;
exports.SystemePegParser = SystemePegParser;
exports.TabularPegParser = TabularPegParser;
exports.TikzPegParser = TikzPegParser;
exports.XColorPegParser = XColorPegParser;
exports.decorateArrayForPegjs = decorateArrayForPegjs;
exports.splitStringsIntoSingleChars = splitStringsIntoSingleChars;
//# sourceMappingURL=index.cjs.map