diff --git a/package.json b/package.json new file mode 100644 index 0000000..aba68cf --- /dev/null +++ b/package.json @@ -0,0 +1,48 @@ +{ + "name": "unicodemath-ml", + "version": "1.0.0", + "description": "JavaScript library for converting UnicodeMath to MathML in Node.js", + "main": "src/index.js", + "module": "src/index.mjs", + "types": "src/index.d.ts", + "exports": { + ".": { + "import": "./src/index.mjs", + "require": "./src/index.js", + "types": "./src/index.d.ts" + } + }, + "scripts": { + "build:parser": "pegjs --format commonjs -o src/parser.js src/unicodemathml-parser.pegjs", + "build": "npm run build:parser", + "test": "npm run build && node test/test.js", + "example": "npm run build && node examples/node-example.js", + "prepublishOnly": "npm run build" + }, + "keywords": [ + "math", + "mathml", + "unicodemath", + "mathematics", + "parser", + "converter" + ], + "author": "Community (based on work by Noah Doersing and Murray Sargent III)", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/MurrayIII/UnicodeMathML.git" + }, + "engines": { + "node": ">=12.0.0" + }, + "files": [ + "src/", + "dist/", + "README.md", + "LICENSE" + ], + "devDependencies": { + "pegjs": "^0.10.0" + } +} \ No newline at end of file diff --git a/src/build.js b/src/build.js new file mode 100644 index 0000000..7d11781 --- /dev/null +++ b/src/build.js @@ -0,0 +1,53 @@ +// scripts/build.js +const fs = require('fs'); +const path = require('path'); +const { exec } = require('child_process'); +const util = require('util'); + +const execAsync = util.promisify(exec); + +async function buildParser() { + console.log('Building parser from PEG.js grammar...'); + + try { + // Generate parser from .pegjs file + await execAsync('npx pegjs --format commonjs -o src/parser.js src/unicodemathml-parser.pegjs'); + console.log('✓ Parser generated successfully'); + + // Verify the generated parser works + const parser = require('../src/parser.js'); + const testResult = parser.parse('x^2'); + console.log('✓ Parser test passed'); + + } catch (error) { + console.error('✗ Parser generation failed:', error.message); + process.exit(1); + } +} + +async function copyGrammarFile() { + // Copy the original .pegjs file to src/ if it's not there + const sourcePath = path.join(__dirname, '../unicodemathml-parser.pegjs'); + const destPath = path.join(__dirname, '../src/unicodemathml-parser.pegjs'); + + if (fs.existsSync(sourcePath) && !fs.existsSync(destPath)) { + console.log('Copying grammar file to src/...'); + fs.copyFileSync(sourcePath, destPath); + console.log('✓ Grammar file copied'); + } +} + +async function main() { + console.log('Building UnicodeMathML Node.js module...\n'); + + await copyGrammarFile(); + await buildParser(); + + console.log('\n✓ Build completed successfully'); +} + +if (require.main === module) { + main().catch(console.error); +} + +module.exports = { buildParser, copyGrammarFile }; \ No newline at end of file diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..6c19717 --- /dev/null +++ b/src/index.js @@ -0,0 +1,131 @@ +const { resolveControlWords, normalizeOptions } = require('./utils'); + +// Import the main conversion function from the existing unicodemathml.js +const unicodemathmlModule = require('./unicodemathml.js'); + +// Check if unicodemathml function exists - it should be a global function in that file +// Since the file uses a UMD pattern, we need to extract it differently +let unicodemathmlFunction; + +if (typeof unicodemathmlModule === 'function') { + unicodemathmlFunction = unicodemathmlModule; +} else if (typeof unicodemathml !== 'undefined') { + // The function might be global after requiring the file + unicodemathmlFunction = unicodemathml; +} else { + // Fallback: try to execute the file in a way that creates the global + const vm = require('vm'); + const fs = require('fs'); + const path = require('path'); + + const code = fs.readFileSync(path.join(__dirname, 'unicodemathml.js'), 'utf8'); + const context = { + require: require, + module: { exports: {} }, + exports: {}, + console: console, + performance: { now: () => Date.now() }, + // Create a minimal window-like object for the browser code + window: {}, + document: {}, + ummlParser: require('./parser.js') + }; + + vm.createContext(context); + vm.runInContext(code, context); + + unicodemathmlFunction = context.unicodemathml; +} + +/** + * Convert UnicodeMath string to MathML + * @param {string} unicodeMath - The UnicodeMath expression to convert + * @param {Object} options - Conversion options + * @returns {string} The resulting MathML string + */ +function convertUnicodeToMathML(unicodeMath, options = {}) { + const opts = normalizeOptions(options); + + try { + // Set up global config for the unicodemathml function + global.ummlConfig = { + resolveControlWords: opts.resolveControlWords, + customControlWords: opts.customControlWords, + doubleStruckMode: opts.doubleStruckMode, + debug: false, + tracing: false + }; + + // Create a simple parser object that the unicodemathml.js expects + if (typeof global.ummlParser === 'undefined') { + global.ummlParser = require('./parser.js'); + } + + // Call the conversion function + const result = unicodemathmlFunction(unicodeMath, opts.displayMode); + + if (result && result.mathml) { + return result.mathml; + } else if (typeof result === 'string') { + return result; + } else { + throw new Error('Unexpected result format from unicodemathml function'); + } + + } catch (error) { + throw new Error(`UnicodeMath conversion failed: ${error.message}`); + } finally { + // Clean up global config + if (global.ummlConfig) { + delete global.ummlConfig; + } + } +} + +/** + * Parse UnicodeMath to AST (for advanced users) + * @param {string} unicodeMath - The UnicodeMath expression to parse + * @param {Object} options - Parse options + * @returns {Object} The Abstract Syntax Tree + */ +function parseUnicodeMath(unicodeMath, options = {}) { + const opts = normalizeOptions(options); + + try { + // Set up global config + global.ummlConfig = { + resolveControlWords: opts.resolveControlWords, + customControlWords: opts.customControlWords, + doubleStruckMode: opts.doubleStruckMode, + debug: false, + tracing: false + }; + + if (typeof global.ummlParser === 'undefined') { + global.ummlParser = require('./parser.js'); + } + + const result = unicodemathmlFunction(unicodeMath, opts.displayMode); + + if (result && result.details && result.details.intermediates) { + return result.details.intermediates.parse; + } else { + // Fallback: just try to parse directly + const parser = require('./parser.js'); + return parser.parse(unicodeMath); + } + + } catch (error) { + throw new Error(`UnicodeMath parsing failed: ${error.message}`); + } finally { + // Clean up + if (global.ummlConfig) { + delete global.ummlConfig; + } + } +} + +module.exports = { + convertUnicodeToMathML, + parseUnicodeMath +}; diff --git a/src/parser.js b/src/parser.js new file mode 100644 index 0000000..8ad403f --- /dev/null +++ b/src/parser.js @@ -0,0 +1,8829 @@ +/* + * Generated by PEG.js 0.10.0. + * + * http://pegjs.org/ + */ + +"use strict"; + +function peg$subclass(child, parent) { + function ctor() { this.constructor = child; } + ctor.prototype = parent.prototype; + child.prototype = new ctor(); +} + +function peg$SyntaxError(message, expected, found, location) { + this.message = message; + this.expected = expected; + this.found = found; + this.location = location; + this.name = "SyntaxError"; + + if (typeof Error.captureStackTrace === "function") { + Error.captureStackTrace(this, peg$SyntaxError); + } +} + +peg$subclass(peg$SyntaxError, Error); + +peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return "\"" + literalEscape(expectation.text) + "\""; + }, + + "class": function(expectation) { + var escapedParts = "", + i; + + for (i = 0; i < expectation.parts.length; i++) { + escapedParts += expectation.parts[i] instanceof Array + ? classEscape(expectation.parts[i][0]) + "-" + classEscape(expectation.parts[i][1]) + : classEscape(expectation.parts[i]); + } + + return "[" + (expectation.inverted ? "^" : "") + escapedParts + "]"; + }, + + any: function(expectation) { + return "any character"; + }, + + end: function(expectation) { + 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(expected) { + var descriptions = new Array(expected.length), + i, j; + + for (i = 0; i < expected.length; i++) { + descriptions[i] = describeExpectation(expected[i]); + } + + 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(found) { + return found ? "\"" + literalEscape(found) + "\"" : "end of input"; + } + + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; +}; + +function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + + var peg$FAILED = {}, + + peg$startRuleFunctions = { unicodemath: peg$parseunicodemath }, + peg$startRuleFunction = peg$parseunicodemath, + + peg$c0 = "\n", + peg$c1 = peg$literalExpectation("\n", false), + peg$c2 = function(c, n) { + return {unicodemath: {content: flatten(c.map(e => [e[0]].concat(e[1]))), eqnumber: n}}; + }, + peg$c3 = function(n) { + return n.map(x => ({newline: null})); + }, + peg$c4 = function(n) { + return n.map(x => x[1]).join(""); + }, + peg$c5 = /^[0-9]/, + peg$c6 = peg$classExpectation([["0", "9"]], false, false), + peg$c7 = function(n) { + return parseInt(n.join('')) + }, + peg$c8 = " ", + peg$c9 = peg$literalExpectation(" ", false), + peg$c10 = function(w) { + return w.join(''); + }, + peg$c11 = /^[\u208A\u208B]/, + peg$c12 = peg$classExpectation(["\u208A", "\u208B"], false, false), + peg$c13 = /^[\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089]/, + peg$c14 = peg$classExpectation(["\u2080", "\u2081", "\u2082", "\u2083", "\u2084", "\u2085", "\u2086", "\u2087", "\u2088", "\u2089"], false, false), + peg$c15 = function(s, n) { + var nPrime = {number: replaceMap("₀₁₂₃₄₅₆₇₈₉", "0123456789", n)}; + if (s) { + return [{operator: replaceMap("₊₋", "+-", s)}, nPrime]; + } + return nPrime; + }, + peg$c16 = "\u208A\u208B", + peg$c17 = peg$literalExpectation("\u208A\u208B", false), + peg$c18 = function(o) {return {operator: "\u00B1"}}, + peg$c19 = "\u208B\u208A", + peg$c20 = peg$literalExpectation("\u208B\u208A", false), + peg$c21 = function(o) {return {operator: "\u2213"}}, + peg$c22 = /^[\u208A\u208B\u208C]/, + peg$c23 = peg$classExpectation(["\u208A", "\u208B", "\u208C"], false, false), + peg$c24 = function(o) { + return {operator: replaceMap("₊₋₌", "+-=", o)}; + }, + peg$c25 = "\u208D", + peg$c26 = peg$literalExpectation("\u208D", false), + peg$c27 = "\u208E", + peg$c28 = peg$literalExpectation("\u208E", false), + peg$c29 = function(e) { + return {bracketed: {open: "(", close: ")", content: e}}; + }, + peg$c30 = function(ex) { + return {expr: ex}; + }, + peg$c31 = /^[\u207A\u207B]/, + peg$c32 = peg$classExpectation(["\u207A", "\u207B"], false, false), + peg$c33 = /^[\u2070\xB9\xB2\xB3\u2074\u2075\u2076\u2077\u2078\u2079]/, + peg$c34 = peg$classExpectation(["\u2070", "\xB9", "\xB2", "\xB3", "\u2074", "\u2075", "\u2076", "\u2077", "\u2078", "\u2079"], false, false), + peg$c35 = function(s, n) { + var nPrime = {number: replaceMap("⁰¹²³⁴⁵⁶⁷⁸⁹", "0123456789", n)}; + if (s) { + return [{operator: replaceMap("⁺⁻", "+-", s)}, nPrime]; + } + return nPrime; + }, + peg$c36 = /^[\u2071\u207F]/, + peg$c37 = peg$classExpectation(["\u2071", "\u207F"], false, false), + peg$c38 = function(a) { + return {atoms: {chars: replaceMap("ⁱⁿ", "in", a)}}; + }, + peg$c39 = "\u207A\u207B", + peg$c40 = peg$literalExpectation("\u207A\u207B", false), + peg$c41 = "\u207B\u207A", + peg$c42 = peg$literalExpectation("\u207B\u207A", false), + peg$c43 = /^[\u207A\u207B\u207C]/, + peg$c44 = peg$classExpectation(["\u207A", "\u207B", "\u207C"], false, false), + peg$c45 = function(o) { + return {operator: replaceMap("⁺⁻⁼", "+-=", o)}; + }, + peg$c46 = "\u207D", + peg$c47 = peg$literalExpectation("\u207D", false), + peg$c48 = "\u207E", + peg$c49 = peg$literalExpectation("\u207E", false), + peg$c50 = "", + peg$c51 = peg$anyExpectation(), + peg$c52 = /^[0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19]/, + peg$c53 = peg$classExpectation([["0", "9"], ["\u0660", "\u0669"], ["\u06F0", "\u06F9"], ["\u07C0", "\u07C9"], ["\u0966", "\u096F"], ["\u09E6", "\u09EF"], ["\u0A66", "\u0A6F"], ["\u0AE6", "\u0AEF"], ["\u0B66", "\u0B6F"], ["\u0BE6", "\u0BEF"], ["\u0C66", "\u0C6F"], ["\u0CE6", "\u0CEF"], ["\u0D66", "\u0D6F"], ["\u0DE6", "\u0DEF"], ["\u0E50", "\u0E59"], ["\u0ED0", "\u0ED9"], ["\u0F20", "\u0F29"], ["\u1040", "\u1049"], ["\u1090", "\u1099"], ["\u17E0", "\u17E9"], ["\u1810", "\u1819"], ["\u1946", "\u194F"], ["\u19D0", "\u19D9"], ["\u1A80", "\u1A89"], ["\u1A90", "\u1A99"], ["\u1B50", "\u1B59"], ["\u1BB0", "\u1BB9"], ["\u1C40", "\u1C49"], ["\u1C50", "\u1C59"], ["\uA620", "\uA629"], ["\uA8D0", "\uA8D9"], ["\uA900", "\uA909"], ["\uA9D0", "\uA9D9"], ["\uA9F0", "\uA9F9"], ["\uAA50", "\uAA59"], ["\uABF0", "\uABF9"], ["\uFF10", "\uFF19"]], false, false), + peg$c54 = /^[A-Za-z]/, + peg$c55 = peg$classExpectation([["A", "Z"], ["a", "z"]], false, false), + peg$c56 = /^[\uE000-\uE3FF\u2102-\u2131\u2133\u2134]/, + peg$c57 = peg$classExpectation([["\uE000", "\uE3FF"], ["\u2102", "\u2131"], "\u2133", "\u2134"], false, false), + peg$c58 = /^[\u231A-\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD-\u25FE\u2614-\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA-\u26AB\u26BD-\u26BE\u26C4-\u26C5\u26CE\u26D4\u26EA\u26F2-\u26F3\u26F5\u26FA\u26FD\u2705\u270A-\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B-\u2B1C\u2B50\u2B55\uE400-\uE808]/, + peg$c59 = peg$classExpectation([["\u231A", "\u231B"], ["\u23E9", "\u23EC"], "\u23F0", "\u23F3", ["\u25FD", "\u25FE"], ["\u2614", "\u2615"], ["\u2648", "\u2653"], "\u267F", "\u2693", "\u26A1", ["\u26AA", "\u26AB"], ["\u26BD", "\u26BE"], ["\u26C4", "\u26C5"], "\u26CE", "\u26D4", "\u26EA", ["\u26F2", "\u26F3"], "\u26F5", "\u26FA", "\u26FD", "\u2705", ["\u270A", "\u270B"], "\u2728", "\u274C", "\u274E", ["\u2753", "\u2755"], "\u2757", ["\u2795", "\u2797"], "\u27B0", "\u27BF", ["\u2B1B", "\u2B1C"], "\u2B50", "\u2B55", ["\uE400", "\uE808"]], false, false), + peg$c60 = /^[\u0391-\u03A9\u03B1-\u03C9]/, + peg$c61 = peg$classExpectation([["\u0391", "\u03A9"], ["\u03B1", "\u03C9"]], false, false), + peg$c62 = /^[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEF\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7BF\uA7C2-\uA7C6\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB67\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD6\uFFDA-\uFFDC]/, + peg$c63 = peg$classExpectation([["A", "Z"], ["a", "z"], "\xAA", "\xB5", "\xBA", ["\xC0", "\xD6"], ["\xD8", "\xF6"], ["\xF8", "\u02C1"], ["\u02C6", "\u02D1"], ["\u02E0", "\u02E4"], "\u02EC", "\u02EE", ["\u0370", "\u0374"], "\u0376", "\u0377", ["\u037A", "\u037D"], "\u037F", "\u0386", ["\u0388", "\u038A"], "\u038C", ["\u038E", "\u03A1"], ["\u03A3", "\u03F5"], ["\u03F7", "\u0481"], ["\u048A", "\u052F"], ["\u0531", "\u0556"], "\u0559", ["\u0560", "\u0588"], ["\u05D0", "\u05EA"], ["\u05EF", "\u05F2"], ["\u0620", "\u064A"], "\u066E", "\u066F", ["\u0671", "\u06D3"], "\u06D5", "\u06E5", "\u06E6", "\u06EE", "\u06EF", ["\u06FA", "\u06FC"], "\u06FF", "\u0710", ["\u0712", "\u072F"], ["\u074D", "\u07A5"], "\u07B1", ["\u07CA", "\u07EA"], "\u07F4", "\u07F5", "\u07FA", ["\u0800", "\u0815"], "\u081A", "\u0824", "\u0828", ["\u0840", "\u0858"], ["\u0860", "\u086A"], ["\u08A0", "\u08B4"], ["\u08B6", "\u08BD"], ["\u0904", "\u0939"], "\u093D", "\u0950", ["\u0958", "\u0961"], ["\u0971", "\u0980"], ["\u0985", "\u098C"], "\u098F", "\u0990", ["\u0993", "\u09A8"], ["\u09AA", "\u09B0"], "\u09B2", ["\u09B6", "\u09B9"], "\u09BD", "\u09CE", "\u09DC", "\u09DD", ["\u09DF", "\u09E1"], "\u09F0", "\u09F1", "\u09FC", ["\u0A05", "\u0A0A"], "\u0A0F", "\u0A10", ["\u0A13", "\u0A28"], ["\u0A2A", "\u0A30"], "\u0A32", "\u0A33", "\u0A35", "\u0A36", "\u0A38", "\u0A39", ["\u0A59", "\u0A5C"], "\u0A5E", ["\u0A72", "\u0A74"], ["\u0A85", "\u0A8D"], ["\u0A8F", "\u0A91"], ["\u0A93", "\u0AA8"], ["\u0AAA", "\u0AB0"], "\u0AB2", "\u0AB3", ["\u0AB5", "\u0AB9"], "\u0ABD", "\u0AD0", "\u0AE0", "\u0AE1", "\u0AF9", ["\u0B05", "\u0B0C"], "\u0B0F", "\u0B10", ["\u0B13", "\u0B28"], ["\u0B2A", "\u0B30"], "\u0B32", "\u0B33", ["\u0B35", "\u0B39"], "\u0B3D", "\u0B5C", "\u0B5D", ["\u0B5F", "\u0B61"], "\u0B71", "\u0B83", ["\u0B85", "\u0B8A"], ["\u0B8E", "\u0B90"], ["\u0B92", "\u0B95"], "\u0B99", "\u0B9A", "\u0B9C", "\u0B9E", "\u0B9F", "\u0BA3", "\u0BA4", ["\u0BA8", "\u0BAA"], ["\u0BAE", "\u0BB9"], "\u0BD0", ["\u0C05", "\u0C0C"], ["\u0C0E", "\u0C10"], ["\u0C12", "\u0C28"], ["\u0C2A", "\u0C39"], "\u0C3D", ["\u0C58", "\u0C5A"], "\u0C60", "\u0C61", "\u0C80", ["\u0C85", "\u0C8C"], ["\u0C8E", "\u0C90"], ["\u0C92", "\u0CA8"], ["\u0CAA", "\u0CB3"], ["\u0CB5", "\u0CB9"], "\u0CBD", "\u0CDE", "\u0CE0", "\u0CE1", "\u0CF1", "\u0CF2", ["\u0D05", "\u0D0C"], ["\u0D0E", "\u0D10"], ["\u0D12", "\u0D3A"], "\u0D3D", "\u0D4E", ["\u0D54", "\u0D56"], ["\u0D5F", "\u0D61"], ["\u0D7A", "\u0D7F"], ["\u0D85", "\u0D96"], ["\u0D9A", "\u0DB1"], ["\u0DB3", "\u0DBB"], "\u0DBD", ["\u0DC0", "\u0DC6"], ["\u0E01", "\u0E30"], "\u0E32", "\u0E33", ["\u0E40", "\u0E46"], "\u0E81", "\u0E82", "\u0E84", ["\u0E86", "\u0E8A"], ["\u0E8C", "\u0EA3"], "\u0EA5", ["\u0EA7", "\u0EB0"], "\u0EB2", "\u0EB3", "\u0EBD", ["\u0EC0", "\u0EC4"], "\u0EC6", ["\u0EDC", "\u0EDF"], "\u0F00", ["\u0F40", "\u0F47"], ["\u0F49", "\u0F6C"], ["\u0F88", "\u0F8C"], ["\u1000", "\u102A"], "\u103F", ["\u1050", "\u1055"], ["\u105A", "\u105D"], "\u1061", "\u1065", "\u1066", ["\u106E", "\u1070"], ["\u1075", "\u1081"], "\u108E", ["\u10A0", "\u10C5"], "\u10C7", "\u10CD", ["\u10D0", "\u10FA"], ["\u10FC", "\u1248"], ["\u124A", "\u124D"], ["\u1250", "\u1256"], "\u1258", ["\u125A", "\u125D"], ["\u1260", "\u1288"], ["\u128A", "\u128D"], ["\u1290", "\u12B0"], ["\u12B2", "\u12B5"], ["\u12B8", "\u12BE"], "\u12C0", ["\u12C2", "\u12C5"], ["\u12C8", "\u12D6"], ["\u12D8", "\u1310"], ["\u1312", "\u1315"], ["\u1318", "\u135A"], ["\u1380", "\u138F"], ["\u13A0", "\u13F5"], ["\u13F8", "\u13FD"], ["\u1401", "\u166C"], ["\u166F", "\u167F"], ["\u1681", "\u169A"], ["\u16A0", "\u16EA"], ["\u16F1", "\u16F8"], ["\u1700", "\u170C"], ["\u170E", "\u1711"], ["\u1720", "\u1731"], ["\u1740", "\u1751"], ["\u1760", "\u176C"], ["\u176E", "\u1770"], ["\u1780", "\u17B3"], "\u17D7", "\u17DC", ["\u1820", "\u1878"], ["\u1880", "\u1884"], ["\u1887", "\u18A8"], "\u18AA", ["\u18B0", "\u18F5"], ["\u1900", "\u191E"], ["\u1950", "\u196D"], ["\u1970", "\u1974"], ["\u1980", "\u19AB"], ["\u19B0", "\u19C9"], ["\u1A00", "\u1A16"], ["\u1A20", "\u1A54"], "\u1AA7", ["\u1B05", "\u1B33"], ["\u1B45", "\u1B4B"], ["\u1B83", "\u1BA0"], "\u1BAE", "\u1BAF", ["\u1BBA", "\u1BE5"], ["\u1C00", "\u1C23"], ["\u1C4D", "\u1C4F"], ["\u1C5A", "\u1C7D"], ["\u1C80", "\u1C88"], ["\u1C90", "\u1CBA"], ["\u1CBD", "\u1CBF"], ["\u1CE9", "\u1CEC"], ["\u1CEE", "\u1CF3"], "\u1CF5", "\u1CF6", "\u1CFA", ["\u1D00", "\u1DBF"], ["\u1E00", "\u1F15"], ["\u1F18", "\u1F1D"], ["\u1F20", "\u1F45"], ["\u1F48", "\u1F4D"], ["\u1F50", "\u1F57"], "\u1F59", "\u1F5B", "\u1F5D", ["\u1F5F", "\u1F7D"], ["\u1F80", "\u1FB4"], ["\u1FB6", "\u1FBC"], "\u1FBE", ["\u1FC2", "\u1FC4"], ["\u1FC6", "\u1FCC"], ["\u1FD0", "\u1FD3"], ["\u1FD6", "\u1FDB"], ["\u1FE0", "\u1FEC"], ["\u1FF2", "\u1FF4"], ["\u1FF6", "\u1FFC"], "\u2071", "\u207F", ["\u2090", "\u209C"], "\u2102", "\u2107", ["\u210A", "\u2113"], "\u2115", ["\u2119", "\u211D"], "\u2124", "\u2126", "\u2128", ["\u212A", "\u212D"], ["\u212F", "\u2139"], ["\u213C", "\u213F"], "\u214E", "\u2183", "\u2184", ["\u2C00", "\u2C2E"], ["\u2C30", "\u2C5E"], ["\u2C60", "\u2CE4"], ["\u2CEB", "\u2CEE"], "\u2CF2", "\u2CF3", ["\u2D00", "\u2D25"], "\u2D27", "\u2D2D", ["\u2D30", "\u2D67"], "\u2D6F", ["\u2D80", "\u2D96"], ["\u2DA0", "\u2DA6"], ["\u2DA8", "\u2DAE"], ["\u2DB0", "\u2DB6"], ["\u2DB8", "\u2DBE"], ["\u2DC0", "\u2DC6"], ["\u2DC8", "\u2DCE"], ["\u2DD0", "\u2DD6"], ["\u2DD8", "\u2DDE"], "\u2E2F", "\u3005", "\u3006", ["\u3031", "\u3035"], "\u303B", "\u303C", ["\u3041", "\u3096"], ["\u309D", "\u309F"], ["\u30A1", "\u30FA"], ["\u30FC", "\u30FF"], ["\u3105", "\u312F"], ["\u3131", "\u318E"], ["\u31A0", "\u31BA"], ["\u31F0", "\u31FF"], ["\u3400", "\u4DB5"], ["\u4E00", "\u9FEF"], ["\uA000", "\uA48C"], ["\uA4D0", "\uA4FD"], ["\uA500", "\uA60C"], ["\uA610", "\uA61F"], "\uA62A", "\uA62B", ["\uA640", "\uA66E"], ["\uA67F", "\uA69D"], ["\uA6A0", "\uA6E5"], ["\uA717", "\uA71F"], ["\uA722", "\uA788"], ["\uA78B", "\uA7BF"], ["\uA7C2", "\uA7C6"], ["\uA7F7", "\uA801"], ["\uA803", "\uA805"], ["\uA807", "\uA80A"], ["\uA80C", "\uA822"], ["\uA840", "\uA873"], ["\uA882", "\uA8B3"], ["\uA8F2", "\uA8F7"], "\uA8FB", "\uA8FD", "\uA8FE", ["\uA90A", "\uA925"], ["\uA930", "\uA946"], ["\uA960", "\uA97C"], ["\uA984", "\uA9B2"], "\uA9CF", ["\uA9E0", "\uA9E4"], ["\uA9E6", "\uA9EF"], ["\uA9FA", "\uA9FE"], ["\uAA00", "\uAA28"], ["\uAA40", "\uAA42"], ["\uAA44", "\uAA4B"], ["\uAA60", "\uAA76"], "\uAA7A", ["\uAA7E", "\uAAAF"], "\uAAB1", "\uAAB5", "\uAAB6", ["\uAAB9", "\uAABD"], "\uAAC0", "\uAAC2", ["\uAADB", "\uAADD"], ["\uAAE0", "\uAAEA"], ["\uAAF2", "\uAAF4"], ["\uAB01", "\uAB06"], ["\uAB09", "\uAB0E"], ["\uAB11", "\uAB16"], ["\uAB20", "\uAB26"], ["\uAB28", "\uAB2E"], ["\uAB30", "\uAB5A"], ["\uAB5C", "\uAB67"], ["\uAB70", "\uABE2"], ["\uAC00", "\uD7A3"], ["\uD7B0", "\uD7C6"], ["\uD7CB", "\uD7FB"], ["\uF900", "\uFA6D"], ["\uFA70", "\uFAD9"], ["\uFB00", "\uFB06"], ["\uFB13", "\uFB17"], "\uFB1D", ["\uFB1F", "\uFB28"], ["\uFB2A", "\uFB36"], ["\uFB38", "\uFB3C"], "\uFB3E", "\uFB40", "\uFB41", "\uFB43", "\uFB44", ["\uFB46", "\uFBB1"], ["\uFBD3", "\uFD3D"], ["\uFD50", "\uFD8F"], ["\uFD92", "\uFDC7"], ["\uFDF0", "\uFDFB"], ["\uFE70", "\uFE74"], ["\uFE76", "\uFEFC"], ["\uFF21", "\uFF3A"], ["\uFF41", "\uFF5A"], ["\uFF66", "\uFFBE"], ["\uFFC2", "\uFFC7"], ["\uFFCA", "\uFFCF"], ["\uFFD2", "\uFFD6"], ["\uFFDA", "\uFFDC"]], false, false), + peg$c64 = /^[\u0300-\u036F\u20D0-\u20FF]/, + peg$c65 = peg$classExpectation([["\u0300", "\u036F"], ["\u20D0", "\u20FF"]], false, false), + peg$c66 = /^[\u2189\xBD\u2153\u2154\xBC\xBE\u2155\u2156\u2157\u2158\u2159\u215A\u2150\u215B\u215C\u215D\u215E\u2151]/, + peg$c67 = peg$classExpectation(["\u2189", "\xBD", "\u2153", "\u2154", "\xBC", "\xBE", "\u2155", "\u2156", "\u2157", "\u2158", "\u2159", "\u215A", "\u2150", "\u215B", "\u215C", "\u215D", "\u215E", "\u2151"], false, false), + peg$c68 = "\u2588", + peg$c69 = peg$literalExpectation("\u2588", false), + peg$c70 = "\u25A0", + peg$c71 = peg$literalExpectation("\u25A0", false), + peg$c72 = "@", + peg$c73 = peg$literalExpectation("@", false), + peg$c74 = "&", + peg$c75 = peg$literalExpectation("&", false), + peg$c76 = /^[([{\u27E8\u3016\u2308\u230A]/, + peg$c77 = peg$classExpectation(["(", "[", "{", "\u27E8", "\u3016", "\u2308", "\u230A"], false, false), + peg$c78 = /^[)}\u27E9\u3017\u2309\u230B]/, + peg$c79 = peg$classExpectation([")", "}", "\u27E9", "\u3017", "\u2309", "\u230B"], false, false), + peg$c80 = "]", + peg$c81 = peg$literalExpectation("]", false), + peg$c82 = ".", + peg$c83 = peg$literalExpectation(".", false), + peg$c84 = ",", + peg$c85 = peg$literalExpectation(",", false), + peg$c86 = /^[\u23DC\u23DD\u23DE\u23DF\u23E0\u23E1\u23B4\u23B5\xAF]/, + peg$c87 = peg$classExpectation(["\u23DC", "\u23DD", "\u23DE", "\u23DF", "\u23E0", "\u23E1", "\u23B4", "\u23B5", "\xAF"], false, false), + peg$c88 = /^[\u2190\u2192\u2194\u21D0\u21D2\u21D4\u21A9\u21AA\u21BC\u21C0\u21BD\u21C1\u22A2\u22A3\u27F5\u27F6\u27F7\u27F8\u27F9\u27FA\u21A6\u22A8]/, + peg$c89 = peg$classExpectation(["\u2190", "\u2192", "\u2194", "\u21D0", "\u21D2", "\u21D4", "\u21A9", "\u21AA", "\u21BC", "\u21C0", "\u21BD", "\u21C1", "\u22A2", "\u22A3", "\u27F5", "\u27F6", "\u27F7", "\u27F8", "\u27F9", "\u27FA", "\u21A6", "\u22A8"], false, false), + peg$c90 = /^[\u2211\u2140\u2A0A\u220F\u2210\u2A0B\u222B\u222C\u222D\u2A0C\u222E\u222F\u2230\u2231\u2A11\u2232\u2233\u2A0D\u2A0E\u2A0F\u2A15\u2A16\u2A17\u2A18\u2A19\u2A1A\u2A1B\u2A1C\u2A12\u2A13\u2A14\u22C0\u22C1\u22C2\u22C3\u2A03\u2A04\u2A05\u2A06\u2A00\u2A01\u2A02\u2A09\u2AFF]/, + peg$c91 = peg$classExpectation(["\u2211", "\u2140", "\u2A0A", "\u220F", "\u2210", "\u2A0B", "\u222B", "\u222C", "\u222D", "\u2A0C", "\u222E", "\u222F", "\u2230", "\u2231", "\u2A11", "\u2232", "\u2233", "\u2A0D", "\u2A0E", "\u2A0F", "\u2A15", "\u2A16", "\u2A17", "\u2A18", "\u2A19", "\u2A1A", "\u2A1B", "\u2A1C", "\u2A12", "\u2A13", "\u2A14", "\u22C0", "\u22C1", "\u22C2", "\u22C3", "\u2A03", "\u2A04", "\u2A05", "\u2A06", "\u2A00", "\u2A01", "\u2A02", "\u2A09", "\u2AFF"], false, false), + peg$c92 = "\u2592", + peg$c93 = peg$literalExpectation("\u2592", false), + peg$c94 = /^[\u2145\u2146\u2147\u2148\u2149]/, + peg$c95 = peg$classExpectation(["\u2145", "\u2146", "\u2147", "\u2148", "\u2149"], false, false), + peg$c96 = "\xA6", + peg$c97 = peg$literalExpectation("\xA6", false), + peg$c98 = "\u249E", + peg$c99 = peg$literalExpectation("\u249E", false), + peg$c100 = "/", + peg$c101 = peg$literalExpectation("/", false), + peg$c102 = "\u2044", + peg$c103 = peg$literalExpectation("\u2044", false), + peg$c104 = "\u2215", + peg$c105 = peg$literalExpectation("\u2215", false), + peg$c106 = "\u2298", + peg$c107 = peg$literalExpectation("\u2298", false), + peg$c108 = "\u25AD", + peg$c109 = peg$literalExpectation("\u25AD", false), + peg$c110 = "\u0304", + peg$c111 = peg$literalExpectation("\u0304", false), + peg$c112 = "\u2581", + peg$c113 = peg$literalExpectation("\u2581", false), + peg$c114 = "\u25A2", + peg$c115 = peg$literalExpectation("\u25A2", false), + peg$c116 = "\u25CB", + peg$c117 = peg$literalExpectation("\u25CB", false), + peg$c118 = "\u27CC", + peg$c119 = peg$literalExpectation("\u27CC", false), + peg$c120 = "\u20E7", + peg$c121 = peg$literalExpectation("\u20E7", false), + peg$c122 = "\u2B2D", + peg$c123 = peg$literalExpectation("\u2B2D", false), + peg$c124 = "#", + peg$c125 = peg$literalExpectation("#", false), + peg$c126 = "\u27E1", + peg$c127 = peg$literalExpectation("\u27E1", false), + peg$c128 = "\u2B04", + peg$c129 = peg$literalExpectation("\u2B04", false), + peg$c130 = "\u21F3", + peg$c131 = peg$literalExpectation("\u21F3", false), + peg$c132 = "\u2B0D", + peg$c133 = peg$literalExpectation("\u2B0D", false), + peg$c134 = "\u2B06", + peg$c135 = peg$literalExpectation("\u2B06", false), + peg$c136 = "\u2B07", + peg$c137 = peg$literalExpectation("\u2B07", false), + peg$c138 = "\u2B0C", + peg$c139 = peg$literalExpectation("\u2B0C", false), + peg$c140 = "\u25A1", + peg$c141 = peg$literalExpectation("\u25A1", false), + peg$c142 = "\u221A", + peg$c143 = peg$literalExpectation("\u221A", false), + peg$c144 = "\u221B", + peg$c145 = peg$literalExpectation("\u221B", false), + peg$c146 = "\u221C", + peg$c147 = peg$literalExpectation("\u221C", false), + peg$c148 = "_", + peg$c149 = peg$literalExpectation("_", false), + peg$c150 = "^", + peg$c151 = peg$literalExpectation("^", false), + peg$c152 = "\u252C", + peg$c153 = peg$literalExpectation("\u252C", false), + peg$c154 = "\u2534", + peg$c155 = peg$literalExpectation("\u2534", false), + peg$c156 = "\u2132", + peg$c157 = peg$literalExpectation("\u2132", false), + peg$c158 = "\u270E", + peg$c159 = peg$literalExpectation("\u270E", false), + peg$c160 = "\u2601", + peg$c161 = peg$literalExpectation("\u2601", false), + peg$c162 = "\u2AF7", + peg$c163 = peg$literalExpectation("\u2AF7", false), + peg$c164 = "\u2AF8", + peg$c165 = peg$literalExpectation("\u2AF8", false), + peg$c166 = "\uFFD7", + peg$c167 = peg$literalExpectation("\uFFD7", false), + peg$c168 = /^[\u2588\u25A0@&([{\u27E8\u3016\u2308\u230A\u251C)}\u27E9\u3017\u2309\u230B\u2524|\u2502\u2223\u23DC\u23DD\u23DE\u23DF\u23E0\u23E1\u23B4\u23B5\xAF\u2211\u2140\u2A0A\u220F\u2210\u2A0B\u222B\u222C\u222D\u2A0C\u222E\u222F\u2230\u2231\u2A11\u2232\u2233\u2A0D\u2A0E\u2A0F\u2A15\u2A16\u2A17\u2A18\u2A19\u2A1A\u2A1B\u2A1C\u2A12\u2A13\u2A14\u22C0\u22C1\u22C2\u22C3\u2A03\u2A04\u2A05\u2A06\u2A00\u2A01\u2A02\u2A09\u2AFF\u2592\u2145\u2146\u2147\u2148\u2149\xA6\u249E\/\u2044\u2215\u2298\u25AD\u0304\u2581\u25A2\u25CB\u27CC\u20E7\u2B2D#\u27E1\u2B04\u21F3\u2B0D\u2B06\u2B07\u2B0C\u25A1\u221A\u221B\u221C_\^\u252C\u2534\u2132\u270E\u2601\u2AF7\u2AF8\uFFD7]/, + peg$c169 = peg$classExpectation(["\u2588", "\u25A0", "@", "&", "(", "[", "{", "\u27E8", "\u3016", "\u2308", "\u230A", "\u251C", ")", "}", "\u27E9", "\u3017", "\u2309", "\u230B", "\u2524", "|", "\u2502", "\u2223", "\u23DC", "\u23DD", "\u23DE", "\u23DF", "\u23E0", "\u23E1", "\u23B4", "\u23B5", "\xAF", "\u2211", "\u2140", "\u2A0A", "\u220F", "\u2210", "\u2A0B", "\u222B", "\u222C", "\u222D", "\u2A0C", "\u222E", "\u222F", "\u2230", "\u2231", "\u2A11", "\u2232", "\u2233", "\u2A0D", "\u2A0E", "\u2A0F", "\u2A15", "\u2A16", "\u2A17", "\u2A18", "\u2A19", "\u2A1A", "\u2A1B", "\u2A1C", "\u2A12", "\u2A13", "\u2A14", "\u22C0", "\u22C1", "\u22C2", "\u22C3", "\u2A03", "\u2A04", "\u2A05", "\u2A06", "\u2A00", "\u2A01", "\u2A02", "\u2A09", "\u2AFF", "\u2592", "\u2145", "\u2146", "\u2147", "\u2148", "\u2149", "\xA6", "\u249E", "/", "\u2044", "\u2215", "\u2298", "\u25AD", "\u0304", "\u2581", "\u25A2", "\u25CB", "\u27CC", "\u20E7", "\u2B2D", "#", "\u27E1", "\u2B04", "\u21F3", "\u2B0D", "\u2B06", "\u2B07", "\u2B0C", "\u25A1", "\u221A", "\u221B", "\u221C", "_", "^", "\u252C", "\u2534", "\u2132", "\u270E", "\u2601", "\u2AF7", "\u2AF8", "\uFFD7"], false, false), + peg$c170 = function(ex) { + return {expr: ex.map(e => e[0])}; + }, + peg$c171 = function(s) { // spaces + return s + }, + peg$c172 = ", ", + peg$c173 = peg$literalExpectation(", ", false), + peg$c174 = function() { // tech note, section 3.14: "If two spaces follow, the comma is + // rendered as a clause separator (a relatively large space + // follows the comma)." + return [{operator: ","}, {spaces: {space: 9}}]; + }, + peg$c175 = " :", + peg$c176 = peg$literalExpectation(" :", false), + peg$c177 = function() { // tech note, section 3.14: " ‘:’ is displayed as Unicode + // RATIO U+2236." + return {operator: "\u2236"}; + }, + peg$c178 = function(e) { // scripted opers + return e; + }, + peg$c179 = function(o) { + return {operator: o}; + }, + peg$c180 = "\u0338", + peg$c181 = peg$literalExpectation("\u0338", false), + peg$c182 = function(o) { // negated operators + return {negatedoperator: o}; + }, + peg$c183 = function(o) { + return o[1]; + }, + peg$c184 = "*", + peg$c185 = peg$literalExpectation("*", false), + peg$c186 = function() {return "\u2217"}, + peg$c187 = "-+", + peg$c188 = peg$literalExpectation("-+", false), + peg$c189 = function() {return "\u2213"}, + peg$c190 = "-", + peg$c191 = peg$literalExpectation("-", false), + peg$c192 = function() {return "\u2212"}, + peg$c193 = "+-", + peg$c194 = peg$literalExpectation("+-", false), + peg$c195 = function() {return "\u00B1"}, + peg$c196 = "<=", + peg$c197 = peg$literalExpectation("<=", false), + peg$c198 = function() {return "\u2264"}, + peg$c199 = ">=", + peg$c200 = peg$literalExpectation(">=", false), + peg$c201 = function() {return "\u2265"}, + peg$c202 = "~=", + peg$c203 = peg$literalExpectation("~=", false), + peg$c204 = function() {return "\u2245"}, + peg$c205 = "::", + peg$c206 = peg$literalExpectation("::", false), + peg$c207 = function() {return "\u2237"}, + peg$c208 = ":=", + peg$c209 = peg$literalExpectation(":=", false), + peg$c210 = function() {return "\u2254"}, + peg$c211 = "<<", + peg$c212 = peg$literalExpectation("<<", false), + peg$c213 = function() {return "\u226A"}, + peg$c214 = ">>", + peg$c215 = peg$literalExpectation(">>", false), + peg$c216 = function() {return "\u226B"}, + peg$c217 = "->", + peg$c218 = peg$literalExpectation("->", false), + peg$c219 = function() {return "\u2192"}, + peg$c220 = "!!", + peg$c221 = peg$literalExpectation("!!", false), + peg$c222 = function() {return "\u203C"}, + peg$c223 = "...", + peg$c224 = peg$literalExpectation("...", false), + peg$c225 = function() {return "…"}, + peg$c226 = function(o) {return o}, + peg$c227 = "\u2588(", + peg$c228 = peg$literalExpectation("\u2588(", false), + peg$c229 = ")", + peg$c230 = peg$literalExpectation(")", false), + peg$c231 = function(r) { + return {array: r}; + }, + peg$c232 = function(h, t) { + return {arows: [h].concat(t.map(a => a[1]))}; + }, + peg$c233 = function(h, t) { + return {arow: [h].concat(t.map(a => a[3]))}; + }, + peg$c234 = function() { + return {atoms: {spaces: {space: 0}}}; + }, + peg$c235 = "\u25A0(", + peg$c236 = peg$literalExpectation("\u25A0(", false), + peg$c237 = function(r) { + return {matrix: r}; + }, + peg$c238 = "\u24A8(", + peg$c239 = peg$literalExpectation("\u24A8(", false), + peg$c240 = function(r) { + return {bracketed: {open: "(", close: ")", content: {matrix: r}}}; + }, + peg$c241 = function(h, t) { + return {mrows: [h].concat(t.map(a => a[1]))}; + }, + peg$c242 = function(h, t) { + return {mrow: [h].concat(t.map(a => a[3]))}; + }, + peg$c243 = function(o, m, s, a) { + if (s == null) { + s = {type: "subsup"} + } + s.base = {opnary: o}; + return {nary: {mask: m, limits: {script: s}, naryand: a}}; + }, + peg$c244 = "\u27E1(", + peg$c245 = peg$literalExpectation("\u27E1(", false), + peg$c246 = function(m, e) { + return {phantom: {mask: m, symbol: null, of: e}}; + }, + peg$c247 = "(", + peg$c248 = peg$literalExpectation("(", false), + peg$c249 = function(s, e) { + return {phantom: {mask: null, symbol: s, of: e}}; + }, + peg$c250 = function(s, e) { + return {smash: {symbol: s, of: e}}; + }, + peg$c251 = function(f) { // not mentioned in the tech note, but should clearly + // be syntactic sugar for the corresponding "proper" + // fractions, via unicodefractions.com + return {unicodefraction: f}; + }, + peg$c252 = function(r, t) { + return nestRight2("fraction", r.map(a => [a[0], a[2]]).concat([t])); + }, + peg$c253 = function(r, t) { + return nestRight("atop", r.map(a => a[0]).concat([t])); + }, + peg$c254 = function(r, t) { // syntactic sugar for binomial + // coefficients + return {binom: {top: r, bottom: t}}; + }, + peg$c255 = "'", + peg$c256 = peg$literalExpectation("'", false), + peg$c257 = "\u2032", + peg$c258 = peg$literalExpectation("\u2032", false), + peg$c259 = "\u2033", + peg$c260 = peg$literalExpectation("\u2033", false), + peg$c261 = "\u2034", + peg$c262 = peg$literalExpectation("\u2034", false), + peg$c263 = "\u2057", + peg$c264 = peg$literalExpectation("\u2057", false), + peg$c265 = "\u203C", + peg$c266 = peg$literalExpectation("\u203C", false), + peg$c267 = "!", + peg$c268 = peg$literalExpectation("!", false), + peg$c269 = /^[\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u208A\u208B\u208C\u208D\u208E\u2070\xB9\xB2\xB3\u2074\u2075\u2076\u2077\u2078\u2079\u2071\u207F\u207A\u207B\u207C\u207D\u207E]/, + peg$c270 = peg$classExpectation(["\u2080", "\u2081", "\u2082", "\u2083", "\u2084", "\u2085", "\u2086", "\u2087", "\u2088", "\u2089", "\u208A", "\u208B", "\u208C", "\u208D", "\u208E", "\u2070", "\xB9", "\xB2", "\xB3", "\u2074", "\u2075", "\u2076", "\u2077", "\u2078", "\u2079", "\u2071", "\u207F", "\u207A", "\u207B", "\u207C", "\u207D", "\u207E"], false, false), + peg$c271 = function(e) {return e}, + peg$c272 = function(s) { + s.type = "subsup"; + return s; + }, + peg$c273 = function(o, s) { + s.base = o; + s.type = "subsup"; + return {script: s}; + }, + peg$c274 = function(b, p) { + return {low: b.low, high: p.high}; + }, + peg$c275 = function(p, b) { + return {low: b.low, high: p.high}; + }, + peg$c276 = function(b) { + return {low: b}; + }, + peg$c277 = function(b) { // allow nested subscripts + var prevLow = b[0][1]; + for (let x of b.slice(1)) { + prevLow = {script: {type: "subsup", base: prevLow, low: x[1]}}; + } + return {low: prevLow}; + }, + peg$c278 = function(p) { + return {high: p}; + }, + peg$c279 = function(p) { // allow nested subscripts + var prevHigh = p[0][1]; + for (let x of p.slice(1)) { + prevHigh = {script: {type: "subsup", base: prevHigh, high: x[1]}}; + } + return {high: prevHigh}; + }, + peg$c280 = function(s, o) { + s.base = o; + s.type = "pre"; + if (s.hasOwnProperty("low")) { + s.prelow = s.low; + delete s.low; + } + if (s.hasOwnProperty("high")) { + s.prehigh = s.high; + delete s.high; + } + return {script: s}; + }, + peg$c281 = function(s, o) { // Unicode scripts require no space between + // prescript and base + s.base = o; + s.type = "pre"; + if (s.hasOwnProperty("low")) { + s.prelow = s.low; + delete s.low; + } + if (s.hasOwnProperty("high")) { + s.prehigh = s.high; + delete s.high; + } + return {script: s}; + }, + peg$c282 = function(s, o) { // mixed or LaTeX-style-only scripts *do* require + // a space between prescript and base (in fact, if + // the second script of a subsup were a Unicode + // script, no space would be strictly required – + // but that'd be a mess to integrate into the + // grammar) + s.base = o; + s.type = "pre"; + if (s.hasOwnProperty("low")) { + s.prelow = s.low; + delete s.low; + } + if (s.hasOwnProperty("high")) { + s.prehigh = s.high; + delete s.high; + } + return {script: s}; + }, + peg$c283 = function(s) { + s.type = "abovebelow"; + return s; + }, + peg$c284 = function(o, s) { + s.base = o; + s.type = "abovebelow"; + return {script: s}; + }, + peg$c285 = function(b, p) { + return {low: b, high: p}; + }, + peg$c286 = function(p, b) { + return {low: b, high: p}; + }, + peg$c287 = function(p) { + return {high: p}; + }, + peg$c288 = function(b) { + return {low: b}; + }, + peg$c289 = "|", + peg$c290 = peg$literalExpectation("|", false), + peg$c291 = function() { // enable using pipe symbol as scriptbase + return {atoms: {chars: "|"}}; + }, + peg$c292 = function(o, e) { // for e.g. ∫_-∞^∞ + return [o, e]; + }, + peg$c293 = function(o) { // for e.g. ℕ^+ + return o; + }, + peg$c294 = function(o, s) { // this could be called subsupSubsupU, but + // without potential trailing spaces + s.base = o; + return {script: s}; + }, + peg$c295 = "\u221E", + peg$c296 = peg$literalExpectation("\u221E", false), + peg$c297 = function() { // for correct spacing of e.g. ∫_-∞^∞ + return {atoms: {chars: "∞"}}; + }, + peg$c298 = "\u25AD(", + peg$c299 = peg$literalExpectation("\u25AD(", false), + peg$c300 = function(m, o) { + return {enclosed: {mask: m, symbol: null, of: o}}; + }, + peg$c301 = function(e, o) { // ⚡ performance optimization + return {enclosed: {mask: null, symbol: e, of: o}}; + }, + peg$c302 = function(e, o) { + return {enclosed: {mask: null, symbol: e, of: o}}; + }, + peg$c303 = function(m, o) { + return {abstractbox: {mask: m, of: o}}; + }, + peg$c304 = function(b, o) { + return {hbrack: {bracket: b, of: o}}; + }, + peg$c305 = "\u221A(", + peg$c306 = peg$literalExpectation("\u221A(", false), + peg$c307 = function(d, o) { // *can* use exp here due to the presence + // of a closing backet (could use it for + // the other roots as well if PEG.js could + // be switched into a less greedy mode) + return {root: {degree: d, of: o}}; + }, + peg$c308 = function(d, o) { // alternate notation, e.g. √a+b▒c + return {root: {degree: d, of: o}}; + }, + peg$c309 = function(o) { + return {sqrt: o}; // could return {root: {degree: null, of: o}} here, + // but treating this as a special case allows + // emitting the more semantically meaningful + // tag + }, + peg$c310 = function(o) { + return {root: {degree: {number: "3"}, of: o}}; + }, + peg$c311 = function(o) { + return {root: {degree: {number: "4"}, of: o}}; + }, + peg$c312 = "\u2061", + peg$c313 = peg$literalExpectation("\u2061", false), + peg$c314 = function(f, s, o) { + if (s != null) { + s.base = {atoms: {chars: f}}; + return {function: {f: {script: s}, of: o}}; + } else { + return {function: {f: {atoms: {chars: f}}, of: o}}; + } + }, + peg$c315 = function(f, o) { + return {function: {f: {atoms: {chars: f}}, of: o}}; + }, + peg$c316 = "sin", + peg$c317 = peg$literalExpectation("sin", false), + peg$c318 = "sec", + peg$c319 = peg$literalExpectation("sec", false), + peg$c320 = "asin", + peg$c321 = peg$literalExpectation("asin", false), + peg$c322 = "asec", + peg$c323 = peg$literalExpectation("asec", false), + peg$c324 = "arcsin", + peg$c325 = peg$literalExpectation("arcsin", false), + peg$c326 = "arcsec", + peg$c327 = peg$literalExpectation("arcsec", false), + peg$c328 = "sinh", + peg$c329 = peg$literalExpectation("sinh", false), + peg$c330 = "sech", + peg$c331 = peg$literalExpectation("sech", false), + peg$c332 = "asinh", + peg$c333 = peg$literalExpectation("asinh", false), + peg$c334 = "asech", + peg$c335 = peg$literalExpectation("asech", false), + peg$c336 = "arcsinh", + peg$c337 = peg$literalExpectation("arcsinh", false), + peg$c338 = "arcsech", + peg$c339 = peg$literalExpectation("arcsech", false), + peg$c340 = "cos", + peg$c341 = peg$literalExpectation("cos", false), + peg$c342 = "csc", + peg$c343 = peg$literalExpectation("csc", false), + peg$c344 = "acos", + peg$c345 = peg$literalExpectation("acos", false), + peg$c346 = "acsc", + peg$c347 = peg$literalExpectation("acsc", false), + peg$c348 = "arccos", + peg$c349 = peg$literalExpectation("arccos", false), + peg$c350 = "arccsc", + peg$c351 = peg$literalExpectation("arccsc", false), + peg$c352 = "cosh", + peg$c353 = peg$literalExpectation("cosh", false), + peg$c354 = "csch", + peg$c355 = peg$literalExpectation("csch", false), + peg$c356 = "acosh", + peg$c357 = peg$literalExpectation("acosh", false), + peg$c358 = "acsch", + peg$c359 = peg$literalExpectation("acsch", false), + peg$c360 = "arccosh", + peg$c361 = peg$literalExpectation("arccosh", false), + peg$c362 = "arccsch", + peg$c363 = peg$literalExpectation("arccsch", false), + peg$c364 = "tan", + peg$c365 = peg$literalExpectation("tan", false), + peg$c366 = "cot", + peg$c367 = peg$literalExpectation("cot", false), + peg$c368 = "atan", + peg$c369 = peg$literalExpectation("atan", false), + peg$c370 = "acot", + peg$c371 = peg$literalExpectation("acot", false), + peg$c372 = "arctan", + peg$c373 = peg$literalExpectation("arctan", false), + peg$c374 = "arccot", + peg$c375 = peg$literalExpectation("arccot", false), + peg$c376 = "tanh", + peg$c377 = peg$literalExpectation("tanh", false), + peg$c378 = "coth", + peg$c379 = peg$literalExpectation("coth", false), + peg$c380 = "atanh", + peg$c381 = peg$literalExpectation("atanh", false), + peg$c382 = "acoth", + peg$c383 = peg$literalExpectation("acoth", false), + peg$c384 = "arctanh", + peg$c385 = peg$literalExpectation("arctanh", false), + peg$c386 = "arccoth", + peg$c387 = peg$literalExpectation("arccoth", false), + peg$c388 = "arg", + peg$c389 = peg$literalExpectation("arg", false), + peg$c390 = "det", + peg$c391 = peg$literalExpectation("det", false), + peg$c392 = "exp", + peg$c393 = peg$literalExpectation("exp", false), + peg$c394 = "lim", + peg$c395 = peg$literalExpectation("lim", false), + peg$c396 = "def", + peg$c397 = peg$literalExpectation("def", false), + peg$c398 = "dim", + peg$c399 = peg$literalExpectation("dim", false), + peg$c400 = "gcd", + peg$c401 = peg$literalExpectation("gcd", false), + peg$c402 = "ker", + peg$c403 = peg$literalExpectation("ker", false), + peg$c404 = "Pr", + peg$c405 = peg$literalExpectation("Pr", false), + peg$c406 = "deg", + peg$c407 = peg$literalExpectation("deg", false), + peg$c408 = "erf", + peg$c409 = peg$literalExpectation("erf", false), + peg$c410 = "hom", + peg$c411 = peg$literalExpectation("hom", false), + peg$c412 = "log", + peg$c413 = peg$literalExpectation("log", false), + peg$c414 = "lg", + peg$c415 = peg$literalExpectation("lg", false), + peg$c416 = "ln", + peg$c417 = peg$literalExpectation("ln", false), + peg$c418 = "min", + peg$c419 = peg$literalExpectation("min", false), + peg$c420 = "max", + peg$c421 = peg$literalExpectation("max", false), + peg$c422 = "inf", + peg$c423 = peg$literalExpectation("inf", false), + peg$c424 = "sup", + peg$c425 = peg$literalExpectation("sup", false), + peg$c426 = "mod", + peg$c427 = peg$literalExpectation("mod", false), + peg$c428 = "lcm", + peg$c429 = peg$literalExpectation("lcm", false), + peg$c430 = "lub", + peg$c431 = peg$literalExpectation("lub", false), + peg$c432 = "glb", + peg$c433 = peg$literalExpectation("glb", false), + peg$c434 = "lim\xA0inf", + peg$c435 = peg$literalExpectation("lim\xA0inf", false), + peg$c436 = "lim\xA0sup", + peg$c437 = peg$literalExpectation("lim\xA0sup", false), + peg$c438 = "\"", + peg$c439 = peg$literalExpectation("\"", false), + peg$c440 = "\\\"", + peg$c441 = peg$literalExpectation("\\\"", false), + peg$c442 = function(c) { // see sec. 3.15 + return {text: c.map(v => v[1]).join("")}; + }, + peg$c443 = /^[A-D]/, + peg$c444 = peg$classExpectation([["A", "D"]], false, false), + peg$c445 = function(s, o) { + return {sizeoverride: {size: s, of: o}}; + }, + peg$c446 = function(c, o) { + return {colored: {color: c, of: o}}; + }, + peg$c447 = function(c, o) { + return {bgcolored: {color: c, of: o}}; + }, + peg$c448 = function(co) { // colors can be anything – it's up to the mathml + // renderer to interpret these + return co.map(c => c[1]).join(''); + }, + peg$c449 = "\\", + peg$c450 = peg$literalExpectation("\\", false), + peg$c451 = function(c) { + return {comment: c.map(v => v[1]).join("")}; + }, + peg$c452 = "\\)", + peg$c453 = peg$literalExpectation("\\)", false), + peg$c454 = function(t) { + return {tt: t.map(v => v[1]).join("")}; + }, + peg$c455 = function(e, p) { + return {primed: {base: e, primes: p.reduce((a, b) => a + b, 0)}} + }, + peg$c456 = function(o) { + return {opnary: o}; + }, + peg$c457 = function() { + return 1; // for later conversion into one or more Unicode primes + }, + peg$c458 = function() { + return 2; + }, + peg$c459 = function() { + return 3; + }, + peg$c460 = function() { + return 4; + }, + peg$c461 = function(e) { + return {factorial: {factorial: e}}; + }, + peg$c462 = function(e) { + return {factorial: e}; + }, + peg$c463 = "\xA0", + peg$c464 = peg$literalExpectation("\xA0", false), + peg$c465 = function(as) { + function k(obj) { + return Object.keys(obj)[0]; + } + function v(obj) { + return Object.values(obj)[0]; + } + + // group successive characters into one "chars" node. this is made a bit + // complicated by the presence of diacriticized terms, which are + // interspersed with these "groupable" nodes + var atoms = []; + var curChars = ""; + for (var a of as) { + if (k(a) == "char") { + curChars += v(a); + } else { + if (curChars != "") { + atoms.push({chars: curChars}); + curChars = "" + } + atoms.push(a); + } + } + if (curChars != "") { + atoms.push({chars: curChars}); + } + + return {atoms: atoms}; + }, + peg$c466 = function(c) { // "literal"/escape operator + return {operator: c}; + }, + peg$c467 = function(c) { + return {char: c}; + }, + peg$c468 = function(b, d) { + return {diacriticized: {base: b, diacritics: d}}; + }, + peg$c469 = function(c) { + return {chars: c}; + }, + peg$c470 = function(n) { + return {number: n}; + }, + peg$c471 = function(e) { // optional non-breaking space to visually + // decouple diacritic from closing bracket in + // plaintext + return e; + }, + peg$c472 = function(d) { + return d; + }, + peg$c473 = function(s) { + return {spaces: s}; + }, + peg$c474 = "\u200B", + peg$c475 = peg$literalExpectation("\u200B", false), + peg$c476 = function() { + return {space: 0}; // 0/18 em + }, + peg$c477 = "\u200A", + peg$c478 = peg$literalExpectation("\u200A", false), + peg$c479 = function() { + return {space: 1}; + }, + peg$c480 = function() { + return {space: 2}; + }, + peg$c481 = "\u2009", + peg$c482 = peg$literalExpectation("\u2009", false), + peg$c483 = function() { + return {space: 3}; + }, + peg$c484 = "\u205F", + peg$c485 = peg$literalExpectation("\u205F", false), + peg$c486 = function() { + return {space: 4}; + }, + peg$c487 = "\u2005", + peg$c488 = peg$literalExpectation("\u2005", false), + peg$c489 = function() { + return {space: 5}; + }, + peg$c490 = "\u2004", + peg$c491 = peg$literalExpectation("\u2004", false), + peg$c492 = function() { + return {space: 6}; + }, + peg$c493 = function() { + return {space: 7}; + }, + peg$c494 = "\u2002", + peg$c495 = peg$literalExpectation("\u2002", false), + peg$c496 = function() { + return {space: 9}; + }, + peg$c497 = "\u2003", + peg$c498 = peg$literalExpectation("\u2003", false), + peg$c499 = function() { + return {space: 18}; + }, + peg$c500 = "\u2007", + peg$c501 = peg$literalExpectation("\u2007", false), + peg$c502 = function() { + return {space: "digit"}; + }, + peg$c503 = function() { + return {space: "space"}; + }, + peg$c504 = function(o, b) { + return {number: o + b}; + }, + peg$c505 = function(a, o, b) { + return {number: a + o + b}; + }, + peg$c506 = function(a) { + return {number: a}; + }, + peg$c507 = function(n) { + return n.join(''); + }, + peg$c508 = function(d) { + return {doublestruck: d}; + }, + peg$c509 = function() { + + // better error message than PEG.js would emit, also removes long + // blocking (which stems almost entirely from PEG.js's error message + // assembly) when parens are not matched in some situations + error("Non-matching brackets present or error within brackets") + }, + peg$c510 = "||", + peg$c511 = peg$literalExpectation("||", false), + peg$c512 = "\u2016", + peg$c513 = peg$literalExpectation("\u2016", false), + peg$c514 = function(e) { + return {bracketed: {open: "‖", close: "‖", content: e}}; + }, + peg$c515 = function(e) { + return {bracketed: {open: "|", close: "|", content: e}}; + }, + peg$c516 = function(e, cl) { // not explicitly mentioned in the + // tech note, but enables + // 𝜌 = ∑_𝜓▒P_𝜓 |𝜓⟩⟨𝜓| + 1 + return {bracketed: {open: "|", close: cl, content: e}}; + }, + peg$c517 = function(op, cl) { // empty bracket pairs + return {bracketed: {open: op, close: cl, content: {atoms: {spaces: {space: 0}}}}}; + }, + peg$c518 = function(op, e, cl) { + return {bracketed: {open: op, close: cl, content: e}}; + }, + peg$c519 = "\xA9(", + peg$c520 = peg$literalExpectation("\xA9(", false), + peg$c521 = function(r) { // cases + return {bracketed: {open: "{", close: "", content: {array: r}}}; // } + }, + peg$c522 = "\u3016", + peg$c523 = peg$literalExpectation("\u3016", false), + peg$c524 = function() { + return ""; + }, + peg$c525 = function(op) { + return op; + }, + peg$c526 = "\u251C", + peg$c527 = peg$literalExpectation("\u251C", false), + peg$c528 = function(m, op) { + return {bracket: op, size: m}; + }, + peg$c529 = "\u3017", + peg$c530 = peg$literalExpectation("\u3017", false), + peg$c531 = function(cl) { + return cl; + }, + peg$c532 = "| ", + peg$c533 = peg$literalExpectation("| ", false), + peg$c534 = function() { // followed by space, to support bra vectors in dirac notation + return "|"; + }, + peg$c535 = "|| ", + peg$c536 = peg$literalExpectation("|| ", false), + peg$c537 = "\u2016 ", + peg$c538 = peg$literalExpectation("\u2016 ", false), + peg$c539 = function() { // to support bra vectors in dirac notation + return "‖"; + }, + peg$c540 = "\u2524", + peg$c541 = peg$literalExpectation("\u2524", false), + peg$c542 = function(m, cl) { + return {bracket: cl, size: m}; + }, + peg$c543 = "\u2502", + peg$c544 = peg$literalExpectation("\u2502", false), + peg$c545 = "\u2223", + peg$c546 = peg$literalExpectation("\u2223", false), + peg$c547 = function(r, t) { // U+2502 + return {separated: {separator: "│", of: r.map(a => a[0]).concat([t])}}; + }, + peg$c548 = function(r, t) { // U+2223 + return {separated: {separator: "∣", of: r.map(a => a[0]).concat([t])}}; + }, + + peg$currPos = 0, + peg$savedPos = 0, + peg$posDetailsCache = [{ line: 1, column: 1 }], + peg$maxFailPos = 0, + peg$maxFailExpected = [], + peg$silentFails = 0, + + 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 expected(description, location) { + location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos) + + throw peg$buildStructuredError( + [peg$otherExpectation(description)], + input.substring(peg$savedPos, peg$currPos), + location + ); + } + + function error(message, location) { + location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos) + + throw peg$buildSimpleError(message, location); + } + + function peg$literalExpectation(text, ignoreCase) { + return { type: "literal", text: text, ignoreCase: ignoreCase }; + } + + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts: parts, inverted: inverted, ignoreCase: ignoreCase }; + } + + function peg$anyExpectation() { + return { type: "any" }; + } + + function peg$endExpectation() { + return { type: "end" }; + } + + function peg$otherExpectation(description) { + return { type: "other", description: description }; + } + + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos], 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) { + var startPosDetails = peg$computePosDetails(startPos), + endPosDetails = peg$computePosDetails(endPos); + + return { + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + + function peg$fail(expected) { + if (peg$currPos < peg$maxFailPos) { return; } + + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + + peg$maxFailExpected.push(expected); + } + + function peg$buildSimpleError(message, location) { + return new peg$SyntaxError(message, null, null, location); + } + + function peg$buildStructuredError(expected, found, location) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected, found), + expected, + found, + location + ); + } + + function peg$parseunicodemath() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + s1 = []; + if (input.charCodeAt(peg$currPos) === 10) { + s2 = peg$c0; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c1); } + } + while (s2 !== peg$FAILED) { + s1.push(s2); + if (input.charCodeAt(peg$currPos) === 10) { + s2 = peg$c0; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c1); } + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$parseexp(); + if (s4 !== peg$FAILED) { + s5 = peg$parsenewlines(); + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } 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$parseexp(); + if (s4 !== peg$FAILED) { + s5 = peg$parsenewlines(); + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parseeqnumber(); + if (s3 === peg$FAILED) { + s3 = null; + } + if (s3 !== peg$FAILED) { + s4 = []; + if (input.charCodeAt(peg$currPos) === 10) { + s5 = peg$c0; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c1); } + } + while (s5 !== peg$FAILED) { + s4.push(s5); + if (input.charCodeAt(peg$currPos) === 10) { + s5 = peg$c0; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c1); } + } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c2(s2, s3); + s0 = s1; + } 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$parsenewlines() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + if (input.charCodeAt(peg$currPos) === 10) { + s2 = peg$c0; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c1); } + } + while (s2 !== peg$FAILED) { + s1.push(s2); + if (input.charCodeAt(peg$currPos) === 10) { + s2 = peg$c0; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c1); } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c3(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseeqnumber() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + s1 = peg$parseopEqNumber(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 10) { + s5 = peg$c0; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c1); } + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsechar(); + 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++; + if (input.charCodeAt(peg$currPos) === 10) { + s5 = peg$c0; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c1); } + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsechar(); + 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) { + peg$savedPos = s0; + s1 = peg$c4(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parsebitmask() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + if (peg$c5.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c6); } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$c5.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c6); } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c7(s1); + } + s0 = s1; + + return s0; + } + + function peg$parse_() { + var s0; + + if (input.charCodeAt(peg$currPos) === 32) { + s0 = peg$c8; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } + } + + return s0; + } + + function peg$parse__() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c10(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsenUnicodeSub() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (peg$c11.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c12); } + } + if (s1 === peg$FAILED) { + s1 = null; + } + if (s1 !== peg$FAILED) { + s2 = []; + if (peg$c13.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c14); } + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$c13.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c14); } + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c15(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseopUnicodeSub() { + var s0, s1; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c16) { + s1 = peg$c16; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c17); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c18(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c19) { + s1 = peg$c19; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c21(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (peg$c22.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c24(s1); + } + s0 = s1; + } + } + + return s0; + } + + function peg$parsefactorUnicodeSub() { + var s0, s1, s2, s3; + + s0 = peg$parsenUnicodeSub(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 8333) { + s1 = peg$c25; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c26); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseunicodeSub(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8334) { + s3 = peg$c27; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c28); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c29(s2); + s0 = s1; + } 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$parseelementUnicodeSub() { + var s0, s1; + + s0 = []; + s1 = peg$parsefactorUnicodeSub(); + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + s1 = peg$parsefactorUnicodeSub(); + } + } else { + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseunicodeSub() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parseelementUnicodeSub(); + if (s2 === peg$FAILED) { + s2 = peg$parseopUnicodeSub(); + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseelementUnicodeSub(); + if (s2 === peg$FAILED) { + s2 = peg$parseopUnicodeSub(); + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c30(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsenUnicodeSup() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (peg$c31.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c32); } + } + if (s1 === peg$FAILED) { + s1 = null; + } + if (s1 !== peg$FAILED) { + s2 = []; + if (peg$c33.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c34); } + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$c33.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c34); } + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c35(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseatomsUnicodeSup() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + if (peg$c36.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c37); } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$c36.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c37); } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c38(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseopUnicodeSup() { + var s0, s1; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c39) { + s1 = peg$c39; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c40); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c18(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c41) { + s1 = peg$c41; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c42); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c21(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (peg$c43.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c44); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c45(s1); + } + s0 = s1; + } + } + + return s0; + } + + function peg$parsefactorUnicodeSup() { + var s0, s1, s2, s3; + + s0 = peg$parseatomsUnicodeSup(); + if (s0 === peg$FAILED) { + s0 = peg$parsenUnicodeSup(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 8317) { + s1 = peg$c46; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c47); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseunicodeSup(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8318) { + s3 = peg$c48; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c29(s2); + s0 = s1; + } 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$parseelementUnicodeSup() { + var s0, s1; + + s0 = []; + s1 = peg$parsefactorUnicodeSup(); + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + s1 = peg$parsefactorUnicodeSup(); + } + } else { + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseunicodeSup() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parseelementUnicodeSup(); + if (s2 === peg$FAILED) { + s2 = peg$parseopUnicodeSup(); + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseelementUnicodeSup(); + if (s2 === peg$FAILED) { + s2 = peg$parseopUnicodeSup(); + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c30(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseε() { + var s0; + + s0 = peg$c50; + + return s0; + } + + function peg$parsechar() { + var s0; + + if (input.length > peg$currPos) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c51); } + } + + return s0; + } + + function peg$parsenASCII() { + var s0; + + if (peg$c5.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c6); } + } + + return s0; + } + + function peg$parsenn() { + var s0; + + s0 = peg$parsenASCII(); + if (s0 === peg$FAILED) { + if (peg$c52.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c53); } + } + } + + return s0; + } + + function peg$parseαASCII() { + var s0; + + if (peg$c54.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c55); } + } + + return s0; + } + + function peg$parseαnMath() { + var s0; + + if (peg$c56.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c57); } + } + + return s0; + } + + function peg$parseemoji() { + var s0; + + if (peg$c58.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c59); } + } + + return s0; + } + + function peg$parseαnOther() { + var s0; + + s0 = peg$parseαASCII(); + if (s0 === peg$FAILED) { + if (peg$c60.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c61); } + } + if (s0 === peg$FAILED) { + if (peg$c62.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c63); } + } + } + } + + return s0; + } + + function peg$parseαn() { + var s0; + + s0 = peg$parseαnMath(); + if (s0 === peg$FAILED) { + s0 = peg$parseαnOther(); + if (s0 === peg$FAILED) { + s0 = peg$parseemoji(); + } + } + + return s0; + } + + function peg$parsediacritic() { + var s0; + + if (peg$c64.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c65); } + } + + return s0; + } + + function peg$parseunicodeFraction() { + var s0; + + if (peg$c66.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c67); } + } + + return s0; + } + + function peg$parseopArray() { + var s0; + + if (input.charCodeAt(peg$currPos) === 9608) { + s0 = peg$c68; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c69); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 9632) { + s0 = peg$c70; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c71); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 64) { + s0 = peg$c72; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 38) { + s0 = peg$c74; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + } + } + } + + return s0; + } + + function peg$parseopOpen() { + var s0; + + if (peg$c76.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c77); } + } + + return s0; + } + + function peg$parseopClose() { + var s0; + + if (peg$c78.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c79); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s0 = peg$c80; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + } + + return s0; + } + + function peg$parseopDecimal() { + var s0; + + if (input.charCodeAt(peg$currPos) === 46) { + s0 = peg$c82; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c83); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s0 = peg$c84; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c85); } + } + } + + return s0; + } + + function peg$parseopHbracket() { + var s0; + + if (peg$c86.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c87); } + } + + return s0; + } + + function peg$parseopStretchyArrow() { + var s0; + + if (peg$c88.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c89); } + } + + return s0; + } + + function peg$parseopNary() { + var s0; + + if (peg$c90.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c91); } + } + + return s0; + } + + function peg$parseopNaryand() { + var s0; + + if (input.charCodeAt(peg$currPos) === 9618) { + s0 = peg$c92; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c93); } + } + + return s0; + } + + function peg$parseopDoublestruck() { + var s0; + + if (peg$c94.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c95); } + } + + return s0; + } + + function peg$parseopAtop() { + var s0; + + if (input.charCodeAt(peg$currPos) === 166) { + s0 = peg$c96; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c97); } + } + + return s0; + } + + function peg$parseopChoose() { + var s0; + + if (input.charCodeAt(peg$currPos) === 9374) { + s0 = peg$c98; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c99); } + } + + return s0; + } + + function peg$parseopFraction() { + var s0; + + if (input.charCodeAt(peg$currPos) === 47) { + s0 = peg$c100; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c101); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8260) { + s0 = peg$c102; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c103); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8725) { + s0 = peg$c104; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c105); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8856) { + s0 = peg$c106; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c107); } + } + } + } + } + + return s0; + } + + function peg$parseopEnclosure() { + var s0; + + if (input.charCodeAt(peg$currPos) === 9645) { + s0 = peg$c108; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c109); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 772) { + s0 = peg$c110; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c111); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 9601) { + s0 = peg$c112; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c113); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 9634) { + s0 = peg$c114; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c115); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 9675) { + s0 = peg$c116; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c117); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 10188) { + s0 = peg$c118; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c119); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8423) { + s0 = peg$c120; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c121); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 11053) { + s0 = peg$c122; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c123); } + } + } + } + } + } + } + } + } + + return s0; + } + + function peg$parseopEqNumber() { + var s0; + + if (input.charCodeAt(peg$currPos) === 35) { + s0 = peg$c124; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c125); } + } + + return s0; + } + + function peg$parseopPhantom() { + var s0; + + if (input.charCodeAt(peg$currPos) === 10209) { + s0 = peg$c126; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c127); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 11012) { + s0 = peg$c128; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c129); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8691) { + s0 = peg$c130; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c131); } + } + } + } + + return s0; + } + + function peg$parseopSmash() { + var s0; + + if (input.charCodeAt(peg$currPos) === 11021) { + s0 = peg$c132; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c133); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 11014) { + s0 = peg$c134; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c135); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 11015) { + s0 = peg$c136; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c137); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 11020) { + s0 = peg$c138; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c139); } + } + } + } + } + + return s0; + } + + function peg$parseopAbstractBox() { + var s0; + + if (input.charCodeAt(peg$currPos) === 9633) { + s0 = peg$c140; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c141); } + } + + return s0; + } + + function peg$parseopRoot() { + var s0; + + if (input.charCodeAt(peg$currPos) === 8730) { + s0 = peg$c142; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c143); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8731) { + s0 = peg$c144; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c145); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8732) { + s0 = peg$c146; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c147); } + } + } + } + + return s0; + } + + function peg$parseopSubSup() { + var s0; + + if (input.charCodeAt(peg$currPos) === 95) { + s0 = peg$c148; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c149); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 94) { + s0 = peg$c150; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c151); } + } + } + + return s0; + } + + function peg$parseopAboveBelow() { + var s0; + + if (input.charCodeAt(peg$currPos) === 9516) { + s0 = peg$c152; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c153); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 9524) { + s0 = peg$c154; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c155); } + } + } + + return s0; + } + + function peg$parseopSizeOverride() { + var s0; + + if (input.charCodeAt(peg$currPos) === 8498) { + s0 = peg$c156; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c157); } + } + + return s0; + } + + function peg$parseopColor() { + var s0; + + if (input.charCodeAt(peg$currPos) === 9998) { + s0 = peg$c158; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c159); } + } + + return s0; + } + + function peg$parseopBgColor() { + var s0; + + if (input.charCodeAt(peg$currPos) === 9729) { + s0 = peg$c160; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c161); } + } + + return s0; + } + + function peg$parseopCommentOpen() { + var s0; + + if (input.charCodeAt(peg$currPos) === 10999) { + s0 = peg$c162; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c163); } + } + + return s0; + } + + function peg$parseopCommentClose() { + var s0; + + if (input.charCodeAt(peg$currPos) === 11000) { + s0 = peg$c164; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c165); } + } + + return s0; + } + + function peg$parseopTt() { + var s0; + + if (input.charCodeAt(peg$currPos) === 65495) { + s0 = peg$c166; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c167); } + } + + return s0; + } + + function peg$parseopBuildup() { + var s0; + + if (peg$c168.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c169); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s0 = peg$c80; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + } + + return s0; + } + + function peg$parseother() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parse_(); + if (s2 === peg$FAILED) { + s2 = peg$parseαn(); + if (s2 === peg$FAILED) { + s2 = peg$parsenn(); + if (s2 === peg$FAILED) { + s2 = peg$parsediacritic(); + if (s2 === peg$FAILED) { + s2 = peg$parseunicodeFraction(); + if (s2 === peg$FAILED) { + s2 = peg$parseopBuildup(); + if (s2 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 10) { + s2 = peg$c0; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c1); } + } + } + } + } + } + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$parsechar(); + 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$parseexp() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 === peg$FAILED) { + s1 = null; + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$parseelement(); + if (s4 === peg$FAILED) { + s4 = peg$parseoperator(); + } + if (s4 !== peg$FAILED) { + s5 = peg$parse__(); + if (s5 === peg$FAILED) { + s5 = null; + } + 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$parseelement(); + if (s4 === peg$FAILED) { + s4 = peg$parseoperator(); + } + if (s4 !== peg$FAILED) { + s5 = peg$parse__(); + if (s5 === peg$FAILED) { + s5 = null; + } + 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) { + peg$savedPos = s0; + s1 = peg$c170(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseoperator() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$parsemathspaces(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c171(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 3) === peg$c172) { + s1 = peg$c172; + peg$currPos += 3; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c173); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c174(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c175) { + s1 = peg$c175; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c176); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c177(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parsebasicOperator(); + peg$silentFails--; + if (s2 !== peg$FAILED) { + peg$currPos = s1; + s1 = void 0; + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$parsesubsupScript(); + if (s2 === peg$FAILED) { + s2 = peg$parseabovebelowScript(); + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c178(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parsebasicOperator(); + } + } + } + } + + return s0; + } + + function peg$parsebasicOperator() { + var s0, s1; + + s0 = peg$parsenegatedOperator(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parserawOperator(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c179(s1); + } + s0 = s1; + } + + return s0; + } + + function peg$parsenegatedOperator() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$parserawOperator(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 824) { + s2 = peg$c180; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c181); } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c182(s1); + s0 = s1; + } 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) === 47) { + s1 = peg$c100; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c101); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parserawOperator(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c182(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + + return s0; + } + + function peg$parserawOperator() { + var s0, s1; + + s0 = peg$parsemappedOperator(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseother(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c183(s1); + } + s0 = s1; + } + + return s0; + } + + function peg$parsemappedOperator() { + var s0, s1; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 42) { + s1 = peg$c184; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c185); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c186(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c187) { + s1 = peg$c187; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c188); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c189(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 45) { + s1 = peg$c190; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c191); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c192(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c193) { + s1 = peg$c193; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c194); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c195(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c196) { + s1 = peg$c196; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c197); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c198(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c199) { + s1 = peg$c199; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c200); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c201(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c202) { + s1 = peg$c202; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c203); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c204(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c205) { + s1 = peg$c205; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c206); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c207(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c208) { + s1 = peg$c208; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c209); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c210(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c211) { + s1 = peg$c211; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c212); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c213(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c214) { + s1 = peg$c214; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c215); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c216(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c217) { + s1 = peg$c217; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c218); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c219(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c220) { + s1 = peg$c220; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c221); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c222(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 3) === peg$c223) { + s1 = peg$c223; + peg$currPos += 3; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c224); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c225(); + } + s0 = s1; + } + } + } + } + } + } + } + } + } + } + } + } + } + + return s0; + } + + function peg$parseelement() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + + s0 = peg$parsearray(); + if (s0 === peg$FAILED) { + s0 = peg$parsematrix(); + if (s0 === peg$FAILED) { + s0 = peg$parsenary(); + if (s0 === peg$FAILED) { + s0 = peg$parsephantomSmash(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseoperand(); + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + s3 = peg$currPos; + s4 = peg$parse__(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + s5 = peg$currPos; + s6 = peg$parseopFraction(); + if (s6 !== peg$FAILED) { + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$parserawOperator(); + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = void 0; + } else { + peg$currPos = s7; + 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) { + s5 = peg$parseopAtop(); + if (s5 === peg$FAILED) { + s5 = peg$parseopChoose(); + } + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c226(s1); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parsefraction(); + if (s0 === peg$FAILED) { + s0 = peg$parseatop(); + } + } + } + } + } + } + + return s0; + } + + function peg$parsearray() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c227) { + s1 = peg$c227; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c228); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsearows(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s3 = peg$c229; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c230); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c231(s2); + s0 = s1; + } 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$parsearows() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + s1 = peg$parsearow(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s4 = peg$c72; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsearow(); + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } 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) === 64) { + s4 = peg$c72; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsearow(); + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c232(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parsearow() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 === peg$FAILED) { + s1 = null; + } + if (s1 !== peg$FAILED) { + s2 = peg$parseexp(); + if (s2 === peg$FAILED) { + s2 = peg$parseemptycell(); + } + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$currPos; + s5 = peg$parse__(); + if (s5 === peg$FAILED) { + s5 = null; + } + if (s5 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 38) { + s6 = peg$c74; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + if (s6 !== peg$FAILED) { + s7 = peg$parse__(); + if (s7 === peg$FAILED) { + s7 = null; + } + if (s7 !== peg$FAILED) { + s8 = peg$parseexp(); + if (s8 === peg$FAILED) { + s8 = peg$parseemptycell(); + } + if (s8 !== peg$FAILED) { + s5 = [s5, s6, s7, s8]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } 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$parse__(); + if (s5 === peg$FAILED) { + s5 = null; + } + if (s5 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 38) { + s6 = peg$c74; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + if (s6 !== peg$FAILED) { + s7 = peg$parse__(); + if (s7 === peg$FAILED) { + s7 = null; + } + if (s7 !== peg$FAILED) { + s8 = peg$parseexp(); + if (s8 === peg$FAILED) { + s8 = peg$parseemptycell(); + } + if (s8 !== peg$FAILED) { + s5 = [s5, s6, s7, s8]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c233(s2, s3); + s0 = s1; + } 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$parseemptycell() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$c50; + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c234(); + } + s0 = s1; + + return s0; + } + + function peg$parsematrix() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c235) { + s1 = peg$c235; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c236); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsemrows(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s3 = peg$c229; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c230); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c237(s2); + s0 = s1; + } 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$c238) { + s1 = peg$c238; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c239); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsemrows(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s3 = peg$c229; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c230); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c240(s2); + s0 = s1; + } 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$parsemrows() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + s1 = peg$parsemrow(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s4 = peg$c72; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemrow(); + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } 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) === 64) { + s4 = peg$c72; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemrow(); + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c241(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parsemrow() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 === peg$FAILED) { + s1 = null; + } + if (s1 !== peg$FAILED) { + s2 = peg$parseexp(); + if (s2 === peg$FAILED) { + s2 = peg$parseemptycell(); + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$currPos; + s5 = peg$parse__(); + if (s5 === peg$FAILED) { + s5 = null; + } + if (s5 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 38) { + s6 = peg$c74; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + if (s6 !== peg$FAILED) { + s7 = peg$parse__(); + if (s7 === peg$FAILED) { + s7 = null; + } + if (s7 !== peg$FAILED) { + s8 = peg$parseexp(); + if (s8 === peg$FAILED) { + s8 = peg$parseemptycell(); + } + if (s8 !== peg$FAILED) { + s5 = [s5, s6, s7, s8]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } 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$parse__(); + if (s5 === peg$FAILED) { + s5 = null; + } + if (s5 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 38) { + s6 = peg$c74; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + if (s6 !== peg$FAILED) { + s7 = peg$parse__(); + if (s7 === peg$FAILED) { + s7 = null; + } + if (s7 !== peg$FAILED) { + s8 = peg$parseexp(); + if (s8 === peg$FAILED) { + s8 = peg$parseemptycell(); + } + if (s8 !== peg$FAILED) { + s5 = [s5, s6, s7, s8]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c242(s2, s3); + s0 = s1; + } 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$parsenary() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + s1 = peg$parseopNary(); + if (s1 !== peg$FAILED) { + s2 = peg$parsebitmask(); + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + s3 = peg$parsescript(); + if (s3 === peg$FAILED) { + s3 = peg$parseabscript(); + } + if (s3 === peg$FAILED) { + s3 = null; + } + if (s3 !== peg$FAILED) { + s4 = peg$parseopNaryand(); + if (s4 !== peg$FAILED) { + s5 = peg$parseelement(); + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c243(s1, s2, s3, s5); + s0 = s1; + } 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; + } + + return s0; + } + + function peg$parsephantomSmash() { + var s0; + + s0 = peg$parsephantom(); + if (s0 === peg$FAILED) { + s0 = peg$parsesmash(); + } + + return s0; + } + + function peg$parsephantom() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c244) { + s1 = peg$c244; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c245); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebitmask(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 38) { + s3 = peg$c74; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parseexp(); + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s5 = peg$c229; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c230); } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c246(s2, s4); + s0 = s1; + } 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$parseopPhantom(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 40) { + s2 = peg$c247; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c248); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parseexp(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s4 = peg$c229; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c230); } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c249(s1, s3); + s0 = s1; + } 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$parsesmash() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = peg$parseopSmash(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 40) { + s2 = peg$c247; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c248); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parseexp(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s4 = peg$c229; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c230); } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c250(s1, s3); + s0 = s1; + } 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$parsefraction() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + s1 = peg$parseunicodeFraction(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c251(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$parseoperand(); + if (s3 !== peg$FAILED) { + s4 = peg$parse__(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + s5 = peg$parseopFraction(); + if (s5 !== peg$FAILED) { + s6 = peg$parse__(); + if (s6 === peg$FAILED) { + s6 = null; + } + if (s6 !== peg$FAILED) { + s3 = [s3, s4, s5, s6]; + 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; + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$parseoperand(); + if (s3 !== peg$FAILED) { + s4 = peg$parse__(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + s5 = peg$parseopFraction(); + if (s5 !== peg$FAILED) { + s6 = peg$parse__(); + if (s6 === peg$FAILED) { + s6 = null; + } + if (s6 !== peg$FAILED) { + s3 = [s3, s4, s5, s6]; + 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 { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$parseoperand(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c252(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + + return s0; + } + + function peg$parseatop() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$parseoperand(); + if (s3 !== peg$FAILED) { + s4 = peg$parse__(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + s5 = peg$parseopAtop(); + if (s5 !== peg$FAILED) { + s6 = peg$parse__(); + if (s6 === peg$FAILED) { + s6 = null; + } + if (s6 !== peg$FAILED) { + s3 = [s3, s4, s5, s6]; + 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; + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$parseoperand(); + if (s3 !== peg$FAILED) { + s4 = peg$parse__(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + s5 = peg$parseopAtop(); + if (s5 !== peg$FAILED) { + s6 = peg$parse__(); + if (s6 === peg$FAILED) { + s6 = null; + } + if (s6 !== peg$FAILED) { + s3 = [s3, s4, s5, s6]; + 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 { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$parseoperand(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c253(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseoperand(); + if (s1 !== peg$FAILED) { + s2 = peg$parse__(); + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + s3 = peg$parseopChoose(); + if (s3 !== peg$FAILED) { + s4 = peg$parse__(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + s5 = peg$parseoperand(); + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c254(s1, s5); + s0 = s1; + } 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; + } + } + + return s0; + } + + function peg$parseoperand() { + var s0, s1; + + s0 = []; + s1 = peg$parsefactor(); + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + s1 = peg$parsefactor(); + } + } else { + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parsefactor() { + var s0, s1, s2, s3, s4; + + s0 = peg$parsepreScript(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parsefunctionName(); + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$parseentity(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 95) { + s4 = peg$c148; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c149); } + } + if (s4 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 94) { + s4 = peg$c150; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c151); } + } + if (s4 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 9516) { + s4 = peg$c152; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c153); } + } + if (s4 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 9524) { + s4 = peg$c154; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c155); } + } + if (s4 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 39) { + s4 = peg$c255; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c256); } + } + if (s4 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8242) { + s4 = peg$c257; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c258); } + } + if (s4 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8243) { + s4 = peg$c259; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c260); } + } + if (s4 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8244) { + s4 = peg$c261; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c262); } + } + if (s4 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8279) { + s4 = peg$c263; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c264); } + } + if (s4 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8252) { + s4 = peg$c265; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c266); } + } + if (s4 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 33) { + s4 = peg$c267; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c268); } + } + if (s4 === peg$FAILED) { + if (peg$c269.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c270); } + } + } + } + } + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c271(s2); + s0 = s1; + } 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$parsesubsupScript(); + if (s0 === peg$FAILED) { + s0 = peg$parseabovebelowScript(); + if (s0 === peg$FAILED) { + s0 = peg$parsesfactor(); + } + } + } + } + + return s0; + } + + function peg$parsesubsupScript() { + var s0; + + s0 = peg$parsesubsupSubsup(); + if (s0 === peg$FAILED) { + s0 = peg$parsesubsupSubscript(); + if (s0 === peg$FAILED) { + s0 = peg$parsesubsupSuperscript(); + } + } + + return s0; + } + + function peg$parsescript() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parsesubsup(); + if (s1 === peg$FAILED) { + s1 = peg$parsesub(); + if (s1 === peg$FAILED) { + s1 = peg$parsesup(); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c272(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsescriptU() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parsesubsupU(); + if (s1 === peg$FAILED) { + s1 = peg$parsesubU(); + if (s1 === peg$FAILED) { + s1 = peg$parsesupU(); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c272(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsescriptL() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parsesubsupL(); + if (s1 === peg$FAILED) { + s1 = peg$parsesubL(); + if (s1 === peg$FAILED) { + s1 = peg$parsesupL(); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c272(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsesubsupSubsup() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parsescriptbase(); + if (s1 !== peg$FAILED) { + s2 = peg$parsesubsup(); + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 === peg$FAILED) { + s3 = null; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c273(s1, s2); + s0 = s1; + } 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$parsesubsup() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$parsesubU(); + if (s1 !== peg$FAILED) { + s2 = peg$parsesupU(); + if (s2 === peg$FAILED) { + s2 = peg$parsesupL(); + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c274(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsesupU(); + if (s1 !== peg$FAILED) { + s2 = peg$parsesubU(); + if (s2 === peg$FAILED) { + s2 = peg$parsesubL(); + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c275(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parsesubsupL(); + } + } + + return s0; + } + + function peg$parsesubsupU() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$parsesubU(); + if (s1 !== peg$FAILED) { + s2 = peg$parsesupU(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c274(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsesupU(); + if (s1 !== peg$FAILED) { + s2 = peg$parsesubU(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c275(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + + return s0; + } + + function peg$parsesubsupL() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$parsesubL(); + if (s1 !== peg$FAILED) { + s2 = peg$parsesupL(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c274(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsesupL(); + if (s1 !== peg$FAILED) { + s2 = peg$parsesubL(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c275(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + + return s0; + } + + function peg$parsesubsupSubscript() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parsescriptbase(); + if (s1 !== peg$FAILED) { + s2 = peg$parsesub(); + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 === peg$FAILED) { + s3 = null; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c273(s1, s2); + s0 = s1; + } 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$parsesub() { + var s0; + + s0 = peg$parsesubU(); + if (s0 === peg$FAILED) { + s0 = peg$parsesubL(); + } + + return s0; + } + + function peg$parsesubU() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parseunicodeSub(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c276(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsesubL() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 95) { + s3 = peg$c148; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c149); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parsesoperand(); + 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) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 95) { + s3 = peg$c148; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c149); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parsesoperand(); + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c277(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsesubsupSuperscript() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parsescriptbase(); + if (s1 !== peg$FAILED) { + s2 = peg$parsesup(); + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 === peg$FAILED) { + s3 = null; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c273(s1, s2); + s0 = s1; + } 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$parsesup() { + var s0; + + s0 = peg$parsesupU(); + if (s0 === peg$FAILED) { + s0 = peg$parsesupL(); + } + + return s0; + } + + function peg$parsesupU() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parseunicodeSup(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c278(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsesupL() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 94) { + s3 = peg$c150; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c151); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parsesoperand(); + 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) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 94) { + s3 = peg$c150; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c151); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parsesoperand(); + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c279(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsepreScript() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 40) { + s1 = peg$c247; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c248); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__(); + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + s3 = peg$parsescript(); + if (s3 !== peg$FAILED) { + s4 = peg$parse__(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s5 = peg$c229; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c230); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parseoperand(); + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c280(s3, s6); + s0 = s1; + } 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; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsescriptU(); + if (s1 !== peg$FAILED) { + s2 = peg$parseoperand(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c281(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsescript(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_(); + if (s2 !== peg$FAILED) { + s3 = peg$parseoperand(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c282(s1, s3); + s0 = s1; + } 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$parseabovebelowScript() { + var s0; + + s0 = peg$parseabovebelowAbovebelow(); + if (s0 === peg$FAILED) { + s0 = peg$parseabovebelowAbove(); + if (s0 === peg$FAILED) { + s0 = peg$parseabovebelowBelow(); + } + } + + return s0; + } + + function peg$parseabscript() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parseabovebelow(); + if (s1 === peg$FAILED) { + s1 = peg$parseabove(); + if (s1 === peg$FAILED) { + s1 = peg$parsebelow(); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c283(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseabovebelowAbovebelow() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parsescriptbase(); + if (s1 !== peg$FAILED) { + s2 = peg$parseabovebelow(); + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 === peg$FAILED) { + s3 = null; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c284(s1, s2); + s0 = s1; + } 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$parseabovebelow() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 9516) { + s1 = peg$c152; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c153); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsesoperand(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 9524) { + s3 = peg$c154; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c155); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parsesoperand(); + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c285(s2, s4); + s0 = s1; + } 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; + if (input.charCodeAt(peg$currPos) === 9524) { + s1 = peg$c154; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c155); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsesoperand(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 9516) { + s3 = peg$c152; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c153); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parsesoperand(); + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c286(s2, s4); + s0 = s1; + } 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$parseabovebelowAbove() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parsescriptbase(); + if (s1 !== peg$FAILED) { + s2 = peg$parseabove(); + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 === peg$FAILED) { + s3 = null; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c284(s1, s2); + s0 = s1; + } 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$parseabove() { + var s0, s1, s2; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 9524) { + s1 = peg$c154; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c155); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseabovebelowAbove(); + if (s2 === peg$FAILED) { + s2 = peg$parsesoperand(); + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c287(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseabovebelowBelow() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parsescriptbase(); + if (s1 !== peg$FAILED) { + s2 = peg$parsebelow(); + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 === peg$FAILED) { + s3 = null; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c284(s1, s2); + s0 = s1; + } 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$parsebelow() { + var s0, s1, s2; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 9516) { + s1 = peg$c152; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c153); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseabovebelowBelow(); + if (s2 === peg$FAILED) { + s2 = peg$parsesoperand(); + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c288(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parsescriptbase() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 124) { + s1 = peg$c289; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c290); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c291(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseprimedbase(); + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + s3 = peg$parseprime(); + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c271(s1); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parseprimed(); + } + } + + return s0; + } + + function peg$parsesoperand() { + var s0, s1, s2, s3; + + s0 = []; + s1 = peg$parsesfactor(); + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + s1 = peg$parsesfactor(); + } + } else { + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsebasicOperator(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsesfactor(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesfactor(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c292(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsebasicOperator(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsebasicOperator(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c293(s1); + } + s0 = s1; + } + } + + return s0; + } + + function peg$parsesfactor() { + var s0, s1, s2, s3; + + s0 = peg$parseenclosed(); + if (s0 === peg$FAILED) { + s0 = peg$parseabstractbox(); + if (s0 === peg$FAILED) { + s0 = peg$parsehbrack(); + if (s0 === peg$FAILED) { + s0 = peg$parseroot(); + if (s0 === peg$FAILED) { + s0 = peg$parsefunction(); + if (s0 === peg$FAILED) { + s0 = peg$parsetext(); + if (s0 === peg$FAILED) { + s0 = peg$parsesizeOverride(); + if (s0 === peg$FAILED) { + s0 = peg$parsecolored(); + if (s0 === peg$FAILED) { + s0 = peg$parsecomment(); + if (s0 === peg$FAILED) { + s0 = peg$parsett(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsescriptbase(); + if (s1 !== peg$FAILED) { + s2 = peg$parsescriptU(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c294(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseentity(); + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 39) { + s3 = peg$c255; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c256); } + } + if (s3 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8242) { + s3 = peg$c257; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c258); } + } + if (s3 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8243) { + s3 = peg$c259; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c260); } + } + if (s3 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8244) { + s3 = peg$c261; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c262); } + } + if (s3 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8279) { + s3 = peg$c263; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c264); } + } + if (s3 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8252) { + s3 = peg$c265; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c266); } + } + if (s3 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 33) { + s3 = peg$c267; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c268); } + } + } + } + } + } + } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c271(s1); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parseprimed(); + if (s0 === peg$FAILED) { + s0 = peg$parsefactorial(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 8734) { + s1 = peg$c295; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c296); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c297(); + } + s0 = s1; + } + } + } + } + } + } + } + } + } + } + } + } + } + } + + return s0; + } + + function peg$parseenclosed() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c298) { + s1 = peg$c298; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c299); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebitmask(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 38) { + s3 = peg$c74; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parseexp(); + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s5 = peg$c229; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c230); } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c300(s2, s4); + s0 = s1; + } 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$parseopEnclosure(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 40) { + s2 = peg$c247; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c248); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parseexp(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s4 = peg$c229; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c230); } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c301(s1, s3); + s0 = s1; + } 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$parseopEnclosure(); + if (s1 !== peg$FAILED) { + s2 = peg$parseoperand(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c302(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + + return s0; + } + + function peg$parseabstractbox() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + s1 = peg$parseopAbstractBox(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 40) { + s2 = peg$c247; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c248); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsebitmask(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 38) { + s4 = peg$c74; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parseexp(); + if (s5 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s6 = peg$c229; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c230); } + } + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c303(s3, s5); + s0 = s1; + } 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; + } + + return s0; + } + + function peg$parsehbrack() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$parseopHbracket(); + if (s1 !== peg$FAILED) { + s2 = peg$parseoperand(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c304(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseroot() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c305) { + s1 = peg$c305; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c306); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseoperand(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 38) { + s3 = peg$c74; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parseexp(); + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s5 = peg$c229; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c230); } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c307(s2, s4); + s0 = s1; + } 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; + if (input.charCodeAt(peg$currPos) === 8730) { + s1 = peg$c142; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c143); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseexp(); + if (s2 !== peg$FAILED) { + s3 = peg$parseopNaryand(); + if (s3 !== peg$FAILED) { + s4 = peg$parseoperand(); + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c308(s2, s4); + s0 = s1; + } 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; + if (input.charCodeAt(peg$currPos) === 8730) { + s1 = peg$c142; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c143); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseoperand(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c309(s2); + s0 = s1; + } 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) === 8731) { + s1 = peg$c144; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c145); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseoperand(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c310(s2); + s0 = s1; + } 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) === 8732) { + s1 = peg$c146; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c147); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseoperand(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c311(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + } + } + + return s0; + } + + function peg$parsefunction() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + s1 = peg$parsefunctionName(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8289) { + s2 = peg$c312; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c313); } + } + if (s2 === peg$FAILED) { + s2 = peg$parseopNaryand(); + } + if (s2 !== peg$FAILED) { + s3 = peg$parsescript(); + if (s3 === peg$FAILED) { + s3 = null; + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + s5 = peg$parseoperand(); + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c314(s1, s3, s5); + s0 = s1; + } 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$parsefunctionName(); + if (s1 !== peg$FAILED) { + s2 = peg$parse__(); + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + s3 = peg$parseoperand(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c315(s1, s3); + s0 = s1; + } 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$parsefunctionName() { + var s0; + + if (input.substr(peg$currPos, 3) === peg$c316) { + s0 = peg$c316; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c317); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c318) { + s0 = peg$c318; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c319); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c320) { + s0 = peg$c320; + peg$currPos += 4; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c321); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c322) { + s0 = peg$c322; + peg$currPos += 4; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c323); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c324) { + s0 = peg$c324; + peg$currPos += 6; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c325); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c326) { + s0 = peg$c326; + peg$currPos += 6; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c327); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c328) { + s0 = peg$c328; + peg$currPos += 4; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c329); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c330) { + s0 = peg$c330; + peg$currPos += 4; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c331); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c332) { + s0 = peg$c332; + peg$currPos += 5; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c333); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c334) { + s0 = peg$c334; + peg$currPos += 5; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c335); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c336) { + s0 = peg$c336; + peg$currPos += 7; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c337); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c338) { + s0 = peg$c338; + peg$currPos += 7; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c339); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c340) { + s0 = peg$c340; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c341); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c342) { + s0 = peg$c342; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c343); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c344) { + s0 = peg$c344; + peg$currPos += 4; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c345); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c346) { + s0 = peg$c346; + peg$currPos += 4; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c347); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c348) { + s0 = peg$c348; + peg$currPos += 6; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c349); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c350) { + s0 = peg$c350; + peg$currPos += 6; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c351); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c352) { + s0 = peg$c352; + peg$currPos += 4; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c353); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c354) { + s0 = peg$c354; + peg$currPos += 4; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c355); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c356) { + s0 = peg$c356; + peg$currPos += 5; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c357); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c358) { + s0 = peg$c358; + peg$currPos += 5; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c359); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c360) { + s0 = peg$c360; + peg$currPos += 7; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c361); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c362) { + s0 = peg$c362; + peg$currPos += 7; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c363); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c364) { + s0 = peg$c364; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c365); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c366) { + s0 = peg$c366; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c367); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c368) { + s0 = peg$c368; + peg$currPos += 4; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c369); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c370) { + s0 = peg$c370; + peg$currPos += 4; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c371); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c372) { + s0 = peg$c372; + peg$currPos += 6; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c373); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c374) { + s0 = peg$c374; + peg$currPos += 6; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c375); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c376) { + s0 = peg$c376; + peg$currPos += 4; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c377); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c378) { + s0 = peg$c378; + peg$currPos += 4; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c379); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c380) { + s0 = peg$c380; + peg$currPos += 5; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c381); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c382) { + s0 = peg$c382; + peg$currPos += 5; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c383); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c384) { + s0 = peg$c384; + peg$currPos += 7; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c385); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c386) { + s0 = peg$c386; + peg$currPos += 7; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c387); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c388) { + s0 = peg$c388; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c389); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c390) { + s0 = peg$c390; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c391); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c392) { + s0 = peg$c392; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c393); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c394) { + s0 = peg$c394; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c395); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c396) { + s0 = peg$c396; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c397); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c398) { + s0 = peg$c398; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c399); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c400) { + s0 = peg$c400; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c401); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c402) { + s0 = peg$c402; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c403); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c404) { + s0 = peg$c404; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c405); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c406) { + s0 = peg$c406; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c407); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c408) { + s0 = peg$c408; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c409); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c410) { + s0 = peg$c410; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c411); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c412) { + s0 = peg$c412; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c413); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c414) { + s0 = peg$c414; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c415); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c416) { + s0 = peg$c416; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c417); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c418) { + s0 = peg$c418; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c419); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c420) { + s0 = peg$c420; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c421); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c422) { + s0 = peg$c422; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c423); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c424) { + s0 = peg$c424; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c425); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c426) { + s0 = peg$c426; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c427); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c428) { + s0 = peg$c428; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c429); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c430) { + s0 = peg$c430; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c431); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c432) { + s0 = peg$c432; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c433); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c434) { + s0 = peg$c434; + peg$currPos += 7; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c435); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c436) { + s0 = peg$c436; + peg$currPos += 7; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c437); } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + + return s0; + } + + function peg$parsetext() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 34) { + s1 = peg$c438; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c439); } + } + if (s1 !== peg$FAILED) { + s2 = []; + if (input.substr(peg$currPos, 2) === peg$c440) { + s3 = peg$c440; + peg$currPos += 2; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c441); } + } + if (s3 === peg$FAILED) { + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 34) { + s5 = peg$c438; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c439); } + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsechar(); + 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); + if (input.substr(peg$currPos, 2) === peg$c440) { + s3 = peg$c440; + peg$currPos += 2; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c441); } + } + if (s3 === peg$FAILED) { + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 34) { + s5 = peg$c438; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c439); } + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsechar(); + 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) { + if (input.charCodeAt(peg$currPos) === 34) { + s3 = peg$c438; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c439); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c442(s2); + s0 = s1; + } 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$parsesizeOverride() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parseopSizeOverride(); + if (s1 !== peg$FAILED) { + if (peg$c443.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c444); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parseoperand(); + if (s3 === peg$FAILED) { + s3 = peg$parsebasicOperator(); + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c445(s2, s3); + s0 = s1; + } 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$parsecolored() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + s1 = peg$parseopColor(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 40) { + s2 = peg$c247; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c248); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsecolor(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 38) { + s4 = peg$c74; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parseexp(); + if (s5 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s6 = peg$c229; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c230); } + } + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c446(s3, s5); + s0 = s1; + } 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; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseopBgColor(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 40) { + s2 = peg$c247; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c248); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsecolor(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 38) { + s4 = peg$c74; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parseexp(); + if (s5 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s6 = peg$c229; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c230); } + } + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c447(s3, s5); + s0 = s1; + } 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; + } + } + + return s0; + } + + function peg$parsecolor() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 38) { + s4 = peg$c74; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$parsechar(); + 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) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 38) { + s4 = peg$c74; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$parsechar(); + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c448(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsecomment() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + s1 = peg$parseopCommentOpen(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s4 = peg$c449; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c450); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parseopCommentClose(); + 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 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseopCommentClose(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsechar(); + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } 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) === 92) { + s4 = peg$c449; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c450); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parseopCommentClose(); + 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 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseopCommentClose(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsechar(); + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parseopCommentClose(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c451(s2); + s0 = s1; + } 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$parsett() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + s1 = peg$parseopTt(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 40) { + s2 = peg$c247; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c248); } + } + if (s2 !== peg$FAILED) { + s3 = []; + if (input.substr(peg$currPos, 2) === peg$c452) { + s4 = peg$c452; + peg$currPos += 2; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c453); } + } + if (s4 === peg$FAILED) { + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 41) { + s6 = peg$c229; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c230); } + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$parsechar(); + 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); + if (input.substr(peg$currPos, 2) === peg$c452) { + s4 = peg$c452; + peg$currPos += 2; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c453); } + } + if (s4 === peg$FAILED) { + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 41) { + s6 = peg$c229; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c230); } + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$parsechar(); + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + } + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s4 = peg$c229; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c230); } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c454(s3); + s0 = s1; + } 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$parseprimed() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parseprimedbase(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseprime(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseprime(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c455(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseprimedbase() { + var s0, s1; + + s0 = peg$parseentity(); + if (s0 === peg$FAILED) { + s0 = peg$parsebasicOperator(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseopNary(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c456(s1); + } + s0 = s1; + } + } + + return s0; + } + + function peg$parseprime() { + var s0, s1; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 39) { + s1 = peg$c255; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c256); } + } + if (s1 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8242) { + s1 = peg$c257; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c258); } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c457(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 8243) { + s1 = peg$c259; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c260); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c458(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 8244) { + s1 = peg$c261; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c262); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c459(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 8279) { + s1 = peg$c263; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c264); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c460(); + } + s0 = s1; + } + } + } + + return s0; + } + + function peg$parsefactorial() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$parseentity(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8252) { + s2 = peg$c265; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c266); } + } + if (s2 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c220) { + s2 = peg$c220; + peg$currPos += 2; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c221); } + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c461(s1); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseentity(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 33) { + s2 = peg$c267; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c268); } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c462(s1); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + + return s0; + } + + function peg$parseentity() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parseexpBracket(); + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 160) { + s3 = peg$c463; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c464); } + } + if (s3 === peg$FAILED) { + s3 = peg$parsediacritic(); + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c271(s1); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parseatoms(); + if (s0 === peg$FAILED) { + s0 = peg$parsedoublestruck(); + if (s0 === peg$FAILED) { + s0 = peg$parsenumber(); + } + } + } + + return s0; + } + + function peg$parseatoms() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parseatom(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseatom(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c465(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseatom() { + var s0, s1, s2; + + s0 = peg$parsediacriticized(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c449; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c450); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsechar(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c466(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseαn(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c467(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$parsemathspaces(); + } + } + } + + return s0; + } + + function peg$parsediacriticized() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$parsediacriticbase(); + if (s1 !== peg$FAILED) { + s2 = peg$parsediacritics(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c468(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parsediacriticbase() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = peg$parseαn(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c469(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsenn(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c470(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 40) { + s1 = peg$c247; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c248); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseexp(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s3 = peg$c229; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c230); } + } + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 160) { + s4 = peg$c463; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c464); } + } + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c471(s2); + s0 = s1; + } 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$parsediacritics() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parsediacritic(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsediacritic(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c472(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsemathspaces() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parsemathspace(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsemathspace(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c473(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsemathspace() { + var s0, s1, s2; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 8203) { + s1 = peg$c474; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c475); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c476(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 8202) { + s1 = peg$c477; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c478); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c479(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 8202) { + s1 = peg$c477; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c478); } + } + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8202) { + s2 = peg$c477; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c478); } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c480(); + s0 = s1; + } 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) === 8201) { + s1 = peg$c481; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c482); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c483(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 8287) { + s1 = peg$c484; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c485); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c486(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 8197) { + s1 = peg$c487; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c488); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c489(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 8196) { + s1 = peg$c490; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c491); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c492(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 8196) { + s1 = peg$c490; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c491); } + } + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8202) { + s2 = peg$c477; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c478); } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c493(); + s0 = s1; + } 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) === 8194) { + s1 = peg$c494; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c495); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c496(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 8195) { + s1 = peg$c497; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c498); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c499(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 8199) { + s1 = peg$c500; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c501); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c502(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 160) { + s1 = peg$c463; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c464); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c503(); + } + s0 = s1; + } + } + } + } + } + } + } + } + } + } + } + + return s0; + } + + function peg$parsenumber() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parseopDecimal(); + if (s1 !== peg$FAILED) { + s2 = peg$parsedigits(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c504(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsedigits(); + if (s1 !== peg$FAILED) { + s2 = peg$parseopDecimal(); + if (s2 !== peg$FAILED) { + s3 = peg$parsedigits(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c505(s1, s2, s3); + s0 = s1; + } 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$parsedigits(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c506(s1); + } + s0 = s1; + } + } + + return s0; + } + + function peg$parsedigits() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parsenn(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsenn(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c507(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsedoublestruck() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parseopDoublestruck(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c508(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseexpBracket() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = peg$parseexpBracketOpen(); + if (s1 !== peg$FAILED) { + s2 = peg$parseexpBracketContents(); + if (s2 === peg$FAILED) { + s2 = peg$parseε(); + } + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parseexpBracketClose(); + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c509(); + s0 = s1; + } 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$c510) { + s1 = peg$c510; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c511); } + } + if (s1 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8214) { + s1 = peg$c512; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c513); } + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseexp(); + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c510) { + s3 = peg$c510; + peg$currPos += 2; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c511); } + } + if (s3 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8214) { + s3 = peg$c512; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c513); } + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c514(s2); + s0 = s1; + } 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.charCodeAt(peg$currPos) === 124) { + s1 = peg$c289; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c290); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseexp(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 124) { + s3 = peg$c289; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c290); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c515(s2); + s0 = s1; + } 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.charCodeAt(peg$currPos) === 124) { + s1 = peg$c289; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c290); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseexp(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 41) { + s4 = peg$c229; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c230); } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$parseexpBracketClose(); + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c516(s2, s4); + s0 = s1; + } 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$parseexpBracketOpen(); + if (s1 !== peg$FAILED) { + s2 = peg$parse__(); + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + s3 = peg$parseexpBracketClose(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c517(s1, s3); + s0 = s1; + } 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$parseexpBracketOpen(); + if (s1 !== peg$FAILED) { + s2 = peg$parseexpBracketContents(); + if (s2 !== peg$FAILED) { + s3 = peg$parseexpBracketClose(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c518(s1, s2, s3); + s0 = s1; + } 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$c519) { + s1 = peg$c519; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c520); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsearows(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s3 = peg$c229; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c230); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c521(s2); + s0 = s1; + } 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$parseexpBracketOpen() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 12310) { + s1 = peg$c522; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c523); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c524(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseopOpen(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c525(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 9500) { + s1 = peg$c526; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c527); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebitmask(); + if (s2 !== peg$FAILED) { + s3 = peg$parseopOpen(); + if (s3 === peg$FAILED) { + s3 = peg$parseopClose(); + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c528(s2, s3); + s0 = s1; + } 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.charCodeAt(peg$currPos) === 9500) { + s1 = peg$c526; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c527); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseopOpen(); + if (s2 === peg$FAILED) { + s2 = peg$parseopClose(); + if (s2 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 124) { + s2 = peg$c289; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c290); } + } + if (s2 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8214) { + s2 = peg$c512; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c513); } + } + } + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c525(s2); + s0 = s1; + } 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) === 9500) { + s1 = peg$c526; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c527); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c524(); + } + s0 = s1; + } + } + } + } + + return s0; + } + + function peg$parseexpBracketClose() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 12311) { + s1 = peg$c529; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c530); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c524(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseopClose(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c531(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c532) { + s1 = peg$c532; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c533); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c534(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 3) === peg$c535) { + s1 = peg$c535; + peg$currPos += 3; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c536); } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c537) { + s1 = peg$c537; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c538); } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c539(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 9508) { + s1 = peg$c540; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c541); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebitmask(); + if (s2 !== peg$FAILED) { + s3 = peg$parseopOpen(); + if (s3 === peg$FAILED) { + s3 = peg$parseopClose(); + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c542(s2, s3); + s0 = s1; + } 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.charCodeAt(peg$currPos) === 9508) { + s1 = peg$c540; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c541); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseopOpen(); + if (s2 === peg$FAILED) { + s2 = peg$parseopClose(); + if (s2 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 124) { + s2 = peg$c289; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c290); } + } + if (s2 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8214) { + s2 = peg$c512; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c513); } + } + } + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c531(s2); + s0 = s1; + } 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) === 9508) { + s1 = peg$c540; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c541); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c524(); + } + s0 = s1; + } + } + } + } + } + } + + return s0; + } + + function peg$parseexpBracketContents() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = peg$parseexp(); + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 9474) { + s3 = peg$c543; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c544); } + } + if (s3 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8739) { + s3 = peg$c545; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c546); } + } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c271(s1); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$parseexp(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 9474) { + s4 = peg$c543; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c544); } + } + 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) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$parseexp(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 9474) { + s4 = peg$c543; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c544); } + } + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$parseexp(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c547(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$parseexp(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8739) { + s4 = peg$c545; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c546); } + } + 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) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$parseexp(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8739) { + s4 = peg$c545; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c546); } + } + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$parseexp(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c548(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + + return s0; + } + + + // wrap value in JSON object {label: value} + function label(lbl, val) { + return {[lbl]: val}; + } + + // left-associative (i.e. right-deep) nesting with labeling + // [a, b, c] => {label: [a, {label: [b, c]}]} + // currently unused + /*function nestLeft(lbl, lis) { + lis.reverse(); + var ret = lis[0]; + lis = lis.slice(1,lis.length); + for (var elem in lis) { + ret = label(lbl, [lis[elem], ret]); + } + return ret; + }*/ + + // right-associative (i.e. left-deep) nesting with labeling + // [a, b, c] => {label: [{label: [a, b]}, c]} + function nestRight(lbl, lis) { + var ret = lis[0]; + lis = lis.slice(1); + for (var elem in lis) { + ret = label(lbl, [ret, lis[elem]]); + } + return ret; + } + + // special case of right-associative (i.e. left-deep) nesting with labeling + // [[a, +], [b, /], c] => {label: {symbol: /, of: [{label: {symbol: +, of: [a, b]}}, c]}} + function nestRight2(lbl, lis) { + var ret = lis[0][0]; + var sym = lis[0][1]; + for (var i = 1; i < lis.length; i++) { + if (i == lis.length - 1) { + // don't forget the second component of the final element of lis + ret = label(lbl, {symbol: sym, of: [ret, lis[i]]}); + } else { + ret = label(lbl, {symbol: sym, of: [ret, lis[i][0]]}); + sym = lis[i][1]; + } + } + return ret; + } + + // replaces characters of "chars" found in "sources" with correspondingly + // positioned characters in "targets". all arguments can be strings or + // lists. returns a string + function replaceMap(sources, targets, chars) { + + // convert all inputs to lists if necessary + if (typeof sources === 'string') { + sources = sources.split(''); + } + if (typeof targets === 'string') { + targets = targets.split(''); + } + if (typeof chars === 'string') { + chars = chars.split(''); + } + + // perform the lookups + return chars.map(c => targets[sources.indexOf(c)]).join(''); + } + + // flattens an array of values and arrays + // flatten([[1,2],3,[4]]) => [1, 2, 3, 4] + function flatten(a) { + var aFlat = []; + a.forEach(e => { + if (Array.isArray(e)) { + e.forEach(i => aFlat.push(i)); + } else { + aFlat.push(e); + } + }); + return aFlat; + } + + + 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) + ); + } +} + +module.exports = { + SyntaxError: peg$SyntaxError, + parse: peg$parse +}; diff --git a/src/utils.js b/src/utils.js new file mode 100644 index 0000000..a4a9494 --- /dev/null +++ b/src/utils.js @@ -0,0 +1,140 @@ +/** + * Default options for UnicodeMath conversion + */ +const DEFAULT_OPTIONS = { + resolveControlWords: false, + customControlWords: {}, + doubleStruckMode: 'us-tech', + displayMode: false +}; + +/** + * Control words to Unicode mapping + */ +const CONTROL_WORDS = { + // Greek letters + 'alpha': 'α', + 'beta': 'β', + 'gamma': 'γ', + 'delta': 'δ', + 'epsilon': 'ε', + 'zeta': 'ζ', + 'eta': 'η', + 'theta': 'θ', + 'iota': 'ι', + 'kappa': 'κ', + 'lambda': 'λ', + 'mu': 'μ', + 'nu': 'ν', + 'xi': 'ξ', + 'omicron': 'ο', + 'pi': 'π', + 'rho': 'ρ', + 'sigma': 'σ', + 'tau': 'τ', + 'upsilon': 'υ', + 'phi': 'φ', + 'chi': 'χ', + 'psi': 'ψ', + 'omega': 'ω', + // Capital Greek letters + 'Alpha': 'Α', + 'Beta': 'Β', + 'Gamma': 'Γ', + 'Delta': 'Δ', + 'Epsilon': 'Ε', + 'Zeta': 'Ζ', + 'Eta': 'Η', + 'Theta': 'Θ', + 'Iota': 'Ι', + 'Kappa': 'Κ', + 'Lambda': 'Λ', + 'Mu': 'Μ', + 'Nu': 'Ν', + 'Xi': 'Ξ', + 'Omicron': 'Ο', + 'Pi': 'Π', + 'Rho': 'Ρ', + 'Sigma': 'Σ', + 'Tau': 'Τ', + 'Upsilon': 'Υ', + 'Phi': 'Φ', + 'Chi': 'Χ', + 'Psi': 'Ψ', + 'Omega': 'Ω', + // Math symbols + 'infty': '∞', + 'sum': '∑', + 'prod': '∏', + 'int': '∫', + 'partial': '∂', + 'nabla': '∇', + 'pm': '±', + 'mp': '∓', + 'times': '×', + 'div': '÷', + 'ne': '≠', + 'le': '≤', + 'ge': '≥', + 'approx': '≈', + 'equiv': '≡', + 'propto': '∝', + 'in': '∈', + 'notin': '∉', + 'subset': '⊂', + 'supset': '⊃', + 'subseteq': '⊆', + 'supseteq': '⊇', + 'cup': '∪', + 'cap': '∩', + 'wedge': '∧', + 'vee': '∨', + 'neg': '¬', + 'forall': '∀', + 'exists': '∃', + 'emptyset': '∅', + 'angle': '∠', + 'perp': '⊥', + 'parallel': '∥' +}; + +/** + * Normalize and validate options + */ +function normalizeOptions(options) { + return { + ...DEFAULT_OPTIONS, + ...options, + customControlWords: { + ...CONTROL_WORDS, + ...(options.customControlWords || {}) + } + }; +} + +/** + * Resolve control words in UnicodeMath string + */ +function resolveControlWords(unicodeMath, controlWords) { + let result = unicodeMath; + + // Replace control words + for (const [word, unicode] of Object.entries(controlWords)) { + const regex = new RegExp(`\\\\${word}\\b`, 'g'); + result = result.replace(regex, unicode); + } + + // Handle Unicode escapes like \u1234 + result = result.replace(/\\u([0-9a-fA-F]{4})/g, (match, code) => { + return String.fromCharCode(parseInt(code, 16)); + }); + + return result; +} + +module.exports = { + DEFAULT_OPTIONS, + CONTROL_WORDS, + normalizeOptions, + resolveControlWords +}; \ No newline at end of file