Files
phanpy-cz/assets/temml-D21kwrgi.js.map
2025-09-18 19:34:46 +02:00

1 line
745 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"version":3,"file":"temml-D21kwrgi.js","sources":["../../node_modules/temml/dist/temml.mjs"],"sourcesContent":["/**\n * This is the ParseError class, which is the main error thrown by Temml\n * functions when something has gone wrong. This is used to distinguish internal\n * errors from errors in the expression that the user provided.\n *\n * If possible, a caller should provide a Token or ParseNode with information\n * about where in the source string the problem occurred.\n */\nclass ParseError {\n constructor(\n message, // The error message\n token // An object providing position information\n ) {\n let error = \" \" + message;\n let start;\n\n const loc = token && token.loc;\n if (loc && loc.start <= loc.end) {\n // If we have the input and a position, make the error a bit fancier\n\n // Get the input\n const input = loc.lexer.input;\n\n // Prepend some information\n start = loc.start;\n const end = loc.end;\n if (start === input.length) {\n error += \" at end of input: \";\n } else {\n error += \" at position \" + (start + 1) + \": \\n\";\n }\n\n // Underline token in question using combining underscores\n const underlined = input.slice(start, end).replace(/[^]/g, \"$&\\u0332\");\n\n // Extract some context from the input and add it to the error\n let left;\n if (start > 15) {\n left = \"…\" + input.slice(start - 15, start);\n } else {\n left = input.slice(0, start);\n }\n let right;\n if (end + 15 < input.length) {\n right = input.slice(end, end + 15) + \"…\";\n } else {\n right = input.slice(end);\n }\n error += left + underlined + right;\n }\n\n // Some hackery to make ParseError a prototype of Error\n // See http://stackoverflow.com/a/8460753\n const self = new Error(error);\n self.name = \"ParseError\";\n self.__proto__ = ParseError.prototype;\n self.position = start;\n return self;\n }\n}\n\nParseError.prototype.__proto__ = Error.prototype;\n\n//\n/**\n * This file contains a list of utility functions which are useful in other\n * files.\n */\n\n/**\n * Provide a default value if a setting is undefined\n */\nconst deflt = function(setting, defaultIfUndefined) {\n return setting === undefined ? defaultIfUndefined : setting;\n};\n\n// hyphenate and escape adapted from Facebook's React under Apache 2 license\n\nconst uppercase = /([A-Z])/g;\nconst hyphenate = function(str) {\n return str.replace(uppercase, \"-$1\").toLowerCase();\n};\n\nconst ESCAPE_LOOKUP = {\n \"&\": \"&amp;\",\n \">\": \"&gt;\",\n \"<\": \"&lt;\",\n '\"': \"&quot;\",\n \"'\": \"&#x27;\"\n};\n\nconst ESCAPE_REGEX = /[&><\"']/g;\n\n/**\n * Escapes text to prevent scripting attacks.\n */\nfunction escape(text) {\n return String(text).replace(ESCAPE_REGEX, (match) => ESCAPE_LOOKUP[match]);\n}\n\n/**\n * Sometimes we want to pull out the innermost element of a group. In most\n * cases, this will just be the group itself, but when ordgroups and colors have\n * a single element, we want to pull that out.\n */\nconst getBaseElem = function(group) {\n if (group.type === \"ordgroup\") {\n if (group.body.length === 1) {\n return getBaseElem(group.body[0]);\n } else {\n return group;\n }\n } else if (group.type === \"color\") {\n if (group.body.length === 1) {\n return getBaseElem(group.body[0]);\n } else {\n return group;\n }\n } else if (group.type === \"font\") {\n return getBaseElem(group.body);\n } else {\n return group;\n }\n};\n\n/**\n * TeXbook algorithms often reference \"character boxes\", which are simply groups\n * with a single character in them. To decide if something is a character box,\n * we find its innermost group, and see if it is a single character.\n */\nconst isCharacterBox = function(group) {\n const baseElem = getBaseElem(group);\n\n // These are all the types of groups which hold single characters\n return baseElem.type === \"mathord\" || baseElem.type === \"textord\" || baseElem.type === \"atom\"\n};\n\nconst assert = function(value) {\n if (!value) {\n throw new Error(\"Expected non-null, but got \" + String(value));\n }\n return value;\n};\n\n/**\n * Return the protocol of a URL, or \"_relative\" if the URL does not specify a\n * protocol (and thus is relative), or `null` if URL has invalid protocol\n * (so should be outright rejected).\n */\nconst protocolFromUrl = function(url) {\n // Check for possible leading protocol.\n // https://url.spec.whatwg.org/#url-parsing strips leading whitespace\n // (\\x00) or C0 control (\\x00-\\x1F) characters.\n // eslint-disable-next-line no-control-regex\n const protocol = /^[\\x00-\\x20]*([^\\\\/#?]*?)(:|&#0*58|&#x0*3a|&colon)/i.exec(url);\n if (!protocol) {\n return \"_relative\";\n }\n // Reject weird colons\n if (protocol[2] !== \":\") {\n return null;\n }\n // Reject invalid characters in scheme according to\n // https://datatracker.ietf.org/doc/html/rfc3986#section-3.1\n if (!/^[a-zA-Z][a-zA-Z0-9+\\-.]*$/.test(protocol[1])) {\n return null;\n }\n // Lowercase the protocol\n return protocol[1].toLowerCase();\n};\n\n/**\n * Round `n` to 4 decimal places, or to the nearest 1/10,000th em. The TeXbook\n * gives an acceptable rounding error of 100sp (which would be the nearest\n * 1/6551.6em with our ptPerEm = 10):\n * http://www.ctex.org/documents/shredder/src/texbook.pdf#page=69\n */\nconst round = function(n) {\n return +n.toFixed(4);\n};\n\nvar utils = {\n deflt,\n escape,\n hyphenate,\n getBaseElem,\n isCharacterBox,\n protocolFromUrl,\n round\n};\n\n/**\n * This is a module for storing settings passed into Temml. It correctly handles\n * default settings.\n */\n\n\n/**\n * The main Settings object\n */\nclass Settings {\n constructor(options) {\n // allow null options\n options = options || {};\n this.displayMode = utils.deflt(options.displayMode, false); // boolean\n this.annotate = utils.deflt(options.annotate, false); // boolean\n this.leqno = utils.deflt(options.leqno, false); // boolean\n this.throwOnError = utils.deflt(options.throwOnError, false); // boolean\n this.errorColor = utils.deflt(options.errorColor, \"#b22222\"); // string\n this.macros = options.macros || {};\n this.wrap = utils.deflt(options.wrap, \"tex\"); // \"tex\" | \"=\"\n this.xml = utils.deflt(options.xml, false); // boolean\n this.colorIsTextColor = utils.deflt(options.colorIsTextColor, false); // booelean\n this.strict = utils.deflt(options.strict, false); // boolean\n this.trust = utils.deflt(options.trust, false); // trust context. See html.js.\n this.maxSize = (options.maxSize === undefined\n ? [Infinity, Infinity]\n : Array.isArray(options.maxSize)\n ? options.maxSize\n : [Infinity, Infinity]\n );\n this.maxExpand = Math.max(0, utils.deflt(options.maxExpand, 1000)); // number\n }\n\n /**\n * Check whether to test potentially dangerous input, and return\n * `true` (trusted) or `false` (untrusted). The sole argument `context`\n * should be an object with `command` field specifying the relevant LaTeX\n * command (as a string starting with `\\`), and any other arguments, etc.\n * If `context` has a `url` field, a `protocol` field will automatically\n * get added by this function (changing the specified object).\n */\n isTrusted(context) {\n if (context.url && !context.protocol) {\n const protocol = utils.protocolFromUrl(context.url);\n if (protocol == null) {\n return false\n }\n context.protocol = protocol;\n }\n const trust = typeof this.trust === \"function\" ? this.trust(context) : this.trust;\n return Boolean(trust);\n }\n}\n\n/**\n * All registered functions.\n * `functions.js` just exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary.\n */\nconst _functions = {};\n\n/**\n * All MathML builders. Should be only used in the `define*` and the `build*ML`\n * functions.\n */\nconst _mathmlGroupBuilders = {};\n\nfunction defineFunction({\n type,\n names,\n props,\n handler,\n mathmlBuilder\n}) {\n // Set default values of functions\n const data = {\n type,\n numArgs: props.numArgs,\n argTypes: props.argTypes,\n allowedInArgument: !!props.allowedInArgument,\n allowedInText: !!props.allowedInText,\n allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath,\n numOptionalArgs: props.numOptionalArgs || 0,\n infix: !!props.infix,\n primitive: !!props.primitive,\n handler: handler\n };\n for (let i = 0; i < names.length; ++i) {\n _functions[names[i]] = data;\n }\n if (type) {\n if (mathmlBuilder) {\n _mathmlGroupBuilders[type] = mathmlBuilder;\n }\n }\n}\n\n/**\n * Use this to register only the MathML builder for a function(e.g.\n * if the function's ParseNode is generated in Parser.js rather than via a\n * stand-alone handler provided to `defineFunction`).\n */\nfunction defineFunctionBuilders({ type, mathmlBuilder }) {\n defineFunction({\n type,\n names: [],\n props: { numArgs: 0 },\n handler() {\n throw new Error(\"Should never be called.\")\n },\n mathmlBuilder\n });\n}\n\nconst normalizeArgument = function(arg) {\n return arg.type === \"ordgroup\" && arg.body.length === 1 ? arg.body[0] : arg\n};\n\n// Since the corresponding buildMathML function expects a\n// list of elements, we normalize for different kinds of arguments\nconst ordargument = function(arg) {\n return arg.type === \"ordgroup\" ? arg.body : [arg]\n};\n\n/**\n * This node represents a document fragment, which contains elements, but when\n * placed into the DOM doesn't have any representation itself. It only contains\n * children and doesn't have any DOM node properties.\n */\nclass DocumentFragment {\n constructor(children) {\n this.children = children;\n this.classes = [];\n this.style = {};\n }\n\n hasClass(className) {\n return this.classes.includes(className);\n }\n\n /** Convert the fragment into a node. */\n toNode() {\n const frag = document.createDocumentFragment();\n\n for (let i = 0; i < this.children.length; i++) {\n frag.appendChild(this.children[i].toNode());\n }\n\n return frag;\n }\n\n /** Convert the fragment into HTML markup. */\n toMarkup() {\n let markup = \"\";\n\n // Simply concatenate the markup for the children together.\n for (let i = 0; i < this.children.length; i++) {\n markup += this.children[i].toMarkup();\n }\n\n return markup;\n }\n\n /**\n * Converts the math node into a string, similar to innerText. Applies to\n * MathDomNode's only.\n */\n toText() {\n // To avoid this, we would subclass documentFragment separately for\n // MathML, but polyfills for subclassing is expensive per PR 1469.\n const toText = (child) => child.toText();\n return this.children.map(toText).join(\"\");\n }\n}\n\n/**\n * These objects store the data about the DOM nodes we create, as well as some\n * extra data. They can then be transformed into real DOM nodes with the\n * `toNode` function or HTML markup using `toMarkup`. They are useful for both\n * storing extra properties on the nodes, as well as providing a way to easily\n * work with the DOM.\n *\n * Similar functions for working with MathML nodes exist in mathMLTree.js.\n *\n */\n\n/**\n * Create an HTML className based on a list of classes. In addition to joining\n * with spaces, we also remove empty classes.\n */\nconst createClass = function(classes) {\n return classes.filter((cls) => cls).join(\" \");\n};\n\nconst initNode = function(classes, style) {\n this.classes = classes || [];\n this.attributes = {};\n this.style = style || {};\n};\n\n/**\n * Convert into an HTML node\n */\nconst toNode = function(tagName) {\n const node = document.createElement(tagName);\n\n // Apply the class\n node.className = createClass(this.classes);\n\n // Apply inline styles\n for (const style in this.style) {\n if (Object.prototype.hasOwnProperty.call(this.style, style )) {\n node.style[style] = this.style[style];\n }\n }\n\n // Apply attributes\n for (const attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr )) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n }\n\n // Append the children, also as HTML nodes\n for (let i = 0; i < this.children.length; i++) {\n node.appendChild(this.children[i].toNode());\n }\n\n return node;\n};\n\n/**\n * Convert into an HTML markup string\n */\nconst toMarkup = function(tagName) {\n let markup = `<${tagName}`;\n\n // Add the class\n if (this.classes.length) {\n markup += ` class=\"${utils.escape(createClass(this.classes))}\"`;\n }\n\n let styles = \"\";\n\n // Add the styles, after hyphenation\n for (const style in this.style) {\n if (Object.prototype.hasOwnProperty.call(this.style, style )) {\n styles += `${utils.hyphenate(style)}:${this.style[style]};`;\n }\n }\n\n if (styles) {\n markup += ` style=\"${styles}\"`;\n }\n\n // Add the attributes\n for (const attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr )) {\n markup += ` ${attr}=\"${utils.escape(this.attributes[attr])}\"`;\n }\n }\n\n markup += \">\";\n\n // Add the markup of the children, also as markup\n for (let i = 0; i < this.children.length; i++) {\n markup += this.children[i].toMarkup();\n }\n\n markup += `</${tagName}>`;\n\n return markup;\n};\n\n/**\n * This node represents a span node, with a className, a list of children, and\n * an inline style.\n *\n */\nclass Span {\n constructor(classes, children, style) {\n initNode.call(this, classes, style);\n this.children = children || [];\n }\n\n setAttribute(attribute, value) {\n this.attributes[attribute] = value;\n }\n\n toNode() {\n return toNode.call(this, \"span\");\n }\n\n toMarkup() {\n return toMarkup.call(this, \"span\");\n }\n}\n\nlet TextNode$1 = class TextNode {\n constructor(text) {\n this.text = text;\n }\n toNode() {\n return document.createTextNode(this.text);\n }\n toMarkup() {\n return utils.escape(this.text);\n }\n};\n\n// Create an <a href=\"…\"> node.\nclass AnchorNode {\n constructor(href, classes, children) {\n this.href = href;\n this.classes = classes;\n this.children = children || [];\n }\n\n toNode() {\n const node = document.createElement(\"a\");\n node.setAttribute(\"href\", this.href);\n if (this.classes.length > 0) {\n node.className = createClass(this.classes);\n }\n for (let i = 0; i < this.children.length; i++) {\n node.appendChild(this.children[i].toNode());\n }\n return node\n }\n\n toMarkup() {\n let markup = `<a href='${utils.escape(this.href)}'`;\n if (this.classes.length > 0) {\n markup += ` class=\"${utils.escape(createClass(this.classes))}\"`;\n }\n markup += \">\";\n for (let i = 0; i < this.children.length; i++) {\n markup += this.children[i].toMarkup();\n }\n markup += \"</a>\";\n return markup\n }\n}\n\n/*\n * This node represents an image embed (<img>) element.\n */\nclass Img {\n constructor(src, alt, style) {\n this.alt = alt;\n this.src = src;\n this.classes = [\"mord\"];\n this.style = style;\n }\n\n hasClass(className) {\n return this.classes.includes(className);\n }\n\n toNode() {\n const node = document.createElement(\"img\");\n node.src = this.src;\n node.alt = this.alt;\n node.className = \"mord\";\n\n // Apply inline styles\n for (const style in this.style) {\n if (Object.prototype.hasOwnProperty.call(this.style, style )) {\n node.style[style] = this.style[style];\n }\n }\n\n return node;\n }\n\n toMarkup() {\n let markup = `<img src='${this.src}' alt='${this.alt}'`;\n\n // Add the styles, after hyphenation\n let styles = \"\";\n for (const style in this.style) {\n if (Object.prototype.hasOwnProperty.call(this.style, style )) {\n styles += `${utils.hyphenate(style)}:${this.style[style]};`;\n }\n }\n if (styles) {\n markup += ` style=\"${utils.escape(styles)}\"`;\n }\n\n markup += \">\";\n return markup;\n }\n}\n\n//\n/**\n * These objects store data about MathML nodes.\n * The `toNode` and `toMarkup` functions create namespaced DOM nodes and\n * HTML text markup respectively.\n */\n\n\nfunction newDocumentFragment(children) {\n return new DocumentFragment(children);\n}\n\n/**\n * This node represents a general purpose MathML node of any type,\n * for example, `\"mo\"` or `\"mspace\"`, corresponding to `<mo>` and\n * `<mspace>` tags).\n */\nclass MathNode {\n constructor(type, children, classes, style) {\n this.type = type;\n this.attributes = {};\n this.children = children || [];\n this.classes = classes || [];\n this.style = style || {}; // Used for <mstyle> elements\n this.label = \"\";\n }\n\n /**\n * Sets an attribute on a MathML node. MathML depends on attributes to convey a\n * semantic content, so this is used heavily.\n */\n setAttribute(name, value) {\n this.attributes[name] = value;\n }\n\n /**\n * Gets an attribute on a MathML node.\n */\n getAttribute(name) {\n return this.attributes[name];\n }\n\n setLabel(value) {\n this.label = value;\n }\n\n /**\n * Converts the math node into a MathML-namespaced DOM element.\n */\n toNode() {\n const node = document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", this.type);\n\n for (const attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n }\n\n if (this.classes.length > 0) {\n node.className = createClass(this.classes);\n }\n\n // Apply inline styles\n for (const style in this.style) {\n if (Object.prototype.hasOwnProperty.call(this.style, style )) {\n node.style[style] = this.style[style];\n }\n }\n\n for (let i = 0; i < this.children.length; i++) {\n node.appendChild(this.children[i].toNode());\n }\n\n return node;\n }\n\n /**\n * Converts the math node into an HTML markup string.\n */\n toMarkup() {\n let markup = \"<\" + this.type;\n\n // Add the attributes\n for (const attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n markup += \" \" + attr + '=\"';\n markup += utils.escape(this.attributes[attr]);\n markup += '\"';\n }\n }\n\n if (this.classes.length > 0) {\n markup += ` class=\"${utils.escape(createClass(this.classes))}\"`;\n }\n\n let styles = \"\";\n\n // Add the styles, after hyphenation\n for (const style in this.style) {\n if (Object.prototype.hasOwnProperty.call(this.style, style )) {\n styles += `${utils.hyphenate(style)}:${this.style[style]};`;\n }\n }\n\n if (styles) {\n markup += ` style=\"${styles}\"`;\n }\n\n markup += \">\";\n\n for (let i = 0; i < this.children.length; i++) {\n markup += this.children[i].toMarkup();\n }\n\n markup += \"</\" + this.type + \">\";\n\n return markup;\n }\n\n /**\n * Converts the math node into a string, similar to innerText, but escaped.\n */\n toText() {\n return this.children.map((child) => child.toText()).join(\"\");\n }\n}\n\n/**\n * This node represents a piece of text.\n */\nclass TextNode {\n constructor(text) {\n this.text = text;\n }\n\n /**\n * Converts the text node into a DOM text node.\n */\n toNode() {\n return document.createTextNode(this.text);\n }\n\n /**\n * Converts the text node into escaped HTML markup\n * (representing the text itself).\n */\n toMarkup() {\n return utils.escape(this.toText());\n }\n\n /**\n * Converts the text node into a string\n * (representing the text itself).\n */\n toText() {\n return this.text;\n }\n}\n\n// Do not make an <mrow> the only child of a <mstyle>.\n// An <mstyle> acts as its own implicit <mrow>.\nconst wrapWithMstyle = expression => {\n let node;\n if (expression.length === 1 && expression[0].type === \"mrow\") {\n node = expression.pop();\n node.type = \"mstyle\";\n } else {\n node = new MathNode(\"mstyle\", expression);\n }\n return node\n};\n\nvar mathMLTree = {\n MathNode,\n TextNode,\n newDocumentFragment\n};\n\n/**\n * This file provides support for building horizontal stretchy elements.\n */\n\n\n// TODO: Remove when Chromium stretches \\widetilde & \\widehat\nconst estimatedWidth = node => {\n let width = 0;\n if (node.body && Array.isArray(node.body)) {\n for (const item of node.body) {\n width += estimatedWidth(item);\n }\n } else if (node.body) {\n width += estimatedWidth(node.body);\n } else if (node.type === \"supsub\") {\n width += estimatedWidth(node.base);\n if (node.sub) { width += 0.7 * estimatedWidth(node.sub); }\n if (node.sup) { width += 0.7 * estimatedWidth(node.sup); }\n } else if (node.type === \"mathord\" || node.type === \"textord\") {\n for (const ch of node.text.split('')) {\n const codePoint = ch.codePointAt(0);\n if ((0x60 < codePoint && codePoint < 0x7B) || (0x03B0 < codePoint && codePoint < 0x3CA)) {\n width += 0.56; // lower case latin or greek. Use advance width of letter n\n } else if (0x2F < codePoint && codePoint < 0x3A) {\n width += 0.50; // numerals.\n } else {\n width += 0.92; // advance width of letter M\n }\n }\n } else {\n width += 1.0;\n }\n return width\n};\n\nconst stretchyCodePoint = {\n widehat: \"^\",\n widecheck: \"ˇ\",\n widetilde: \"~\",\n wideparen: \"⏜\", // \\u23dc\n utilde: \"~\",\n overleftarrow: \"\\u2190\",\n underleftarrow: \"\\u2190\",\n xleftarrow: \"\\u2190\",\n overrightarrow: \"\\u2192\",\n underrightarrow: \"\\u2192\",\n xrightarrow: \"\\u2192\",\n underbrace: \"\\u23df\",\n overbrace: \"\\u23de\",\n overgroup: \"\\u23e0\",\n overparen: \"⏜\",\n undergroup: \"\\u23e1\",\n underparen: \"\\u23dd\",\n overleftrightarrow: \"\\u2194\",\n underleftrightarrow: \"\\u2194\",\n xleftrightarrow: \"\\u2194\",\n Overrightarrow: \"\\u21d2\",\n xRightarrow: \"\\u21d2\",\n overleftharpoon: \"\\u21bc\",\n xleftharpoonup: \"\\u21bc\",\n overrightharpoon: \"\\u21c0\",\n xrightharpoonup: \"\\u21c0\",\n xLeftarrow: \"\\u21d0\",\n xLeftrightarrow: \"\\u21d4\",\n xhookleftarrow: \"\\u21a9\",\n xhookrightarrow: \"\\u21aa\",\n xmapsto: \"\\u21a6\",\n xrightharpoondown: \"\\u21c1\",\n xleftharpoondown: \"\\u21bd\",\n xtwoheadleftarrow: \"\\u219e\",\n xtwoheadrightarrow: \"\\u21a0\",\n xlongequal: \"=\",\n xrightleftarrows: \"\\u21c4\",\n xtofrom: \"\\u21c4\",\n xleftrightharpoons: \"\\u21cb\",\n xrightleftharpoons: \"\\u21cc\",\n yields: \"\\u2192\",\n yieldsLeft: \"\\u2190\",\n mesomerism: \"\\u2194\",\n longrightharpoonup: \"\\u21c0\",\n longleftharpoondown: \"\\u21bd\",\n eqrightharpoonup: \"\\u21c0\",\n eqleftharpoondown: \"\\u21bd\",\n \"\\\\cdrightarrow\": \"\\u2192\",\n \"\\\\cdleftarrow\": \"\\u2190\",\n \"\\\\cdlongequal\": \"=\",\n yieldsLeftRight: \"\\u21c4\",\n chemequilibrium: \"\\u21cc\"\n};\n\nconst mathMLnode = function(label) {\n const child = new mathMLTree.TextNode(stretchyCodePoint[label.slice(1)]);\n const node = new mathMLTree.MathNode(\"mo\", [child]);\n node.setAttribute(\"stretchy\", \"true\");\n return node\n};\n\nconst crookedWides = [\"\\\\widetilde\", \"\\\\widehat\", \"\\\\widecheck\", \"\\\\utilde\"];\n\n// TODO: Remove when Chromium stretches \\widetilde & \\widehat\nconst accentNode = (group) => {\n const mo = mathMLnode(group.label);\n if (crookedWides.includes(group.label)) {\n const width = estimatedWidth(group.base);\n if (1 < width && width < 1.6) {\n mo.classes.push(\"tml-crooked-2\");\n } else if (1.6 <= width && width < 2.5) {\n mo.classes.push(\"tml-crooked-3\");\n } else if (2.5 <= width) {\n mo.classes.push(\"tml-crooked-4\");\n }\n }\n return mo\n};\n\nvar stretchy = {\n mathMLnode,\n accentNode\n};\n\n/**\n * This file holds a list of all no-argument functions and single-character\n * symbols (like 'a' or ';').\n *\n * For each of the symbols, there are two properties they can have:\n * - group (required): the ParseNode group type the symbol should have (i.e.\n \"textord\", \"mathord\", etc).\n * - replace: the character that this symbol or function should be\n * replaced with (i.e. \"\\phi\" has a replace value of \"\\u03d5\", the phi\n * character in the main font).\n *\n * The outermost map in the table indicates what mode the symbols should be\n * accepted in (e.g. \"math\" or \"text\").\n */\n\n// Some of these have a \"-token\" suffix since these are also used as `ParseNode`\n// types for raw text tokens, and we want to avoid conflicts with higher-level\n// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by\n// looking up the `symbols` map.\nconst ATOMS = {\n bin: 1,\n close: 1,\n inner: 1,\n open: 1,\n punct: 1,\n rel: 1\n};\nconst NON_ATOMS = {\n \"accent-token\": 1,\n mathord: 1,\n \"op-token\": 1,\n spacing: 1,\n textord: 1\n};\n\nconst symbols = {\n math: {},\n text: {}\n};\n\n/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */\nfunction defineSymbol(mode, group, replace, name, acceptUnicodeChar) {\n symbols[mode][name] = { group, replace };\n\n if (acceptUnicodeChar && replace) {\n symbols[mode][replace] = symbols[mode][name];\n }\n}\n\n// Some abbreviations for commonly used strings.\n// This helps minify the code, and also spotting typos using jshint.\n\n// modes:\nconst math = \"math\";\nconst text = \"text\";\n\n// groups:\nconst accent = \"accent-token\";\nconst bin = \"bin\";\nconst close = \"close\";\nconst inner = \"inner\";\nconst mathord = \"mathord\";\nconst op = \"op-token\";\nconst open = \"open\";\nconst punct = \"punct\";\nconst rel = \"rel\";\nconst spacing = \"spacing\";\nconst textord = \"textord\";\n\n// Now comes the symbol table\n\n// Relation Symbols\ndefineSymbol(math, rel, \"\\u2261\", \"\\\\equiv\", true);\ndefineSymbol(math, rel, \"\\u227a\", \"\\\\prec\", true);\ndefineSymbol(math, rel, \"\\u227b\", \"\\\\succ\", true);\ndefineSymbol(math, rel, \"\\u223c\", \"\\\\sim\", true);\ndefineSymbol(math, rel, \"\\u27c2\", \"\\\\perp\", true);\ndefineSymbol(math, rel, \"\\u2aaf\", \"\\\\preceq\", true);\ndefineSymbol(math, rel, \"\\u2ab0\", \"\\\\succeq\", true);\ndefineSymbol(math, rel, \"\\u2243\", \"\\\\simeq\", true);\ndefineSymbol(math, rel, \"\\u224c\", \"\\\\backcong\", true);\ndefineSymbol(math, rel, \"|\", \"\\\\mid\", true);\ndefineSymbol(math, rel, \"\\u226a\", \"\\\\ll\", true);\ndefineSymbol(math, rel, \"\\u226b\", \"\\\\gg\", true);\ndefineSymbol(math, rel, \"\\u224d\", \"\\\\asymp\", true);\ndefineSymbol(math, rel, \"\\u2225\", \"\\\\parallel\");\ndefineSymbol(math, rel, \"\\u2323\", \"\\\\smile\", true);\ndefineSymbol(math, rel, \"\\u2291\", \"\\\\sqsubseteq\", true);\ndefineSymbol(math, rel, \"\\u2292\", \"\\\\sqsupseteq\", true);\ndefineSymbol(math, rel, \"\\u2250\", \"\\\\doteq\", true);\ndefineSymbol(math, rel, \"\\u2322\", \"\\\\frown\", true);\ndefineSymbol(math, rel, \"\\u220b\", \"\\\\ni\", true);\ndefineSymbol(math, rel, \"\\u220c\", \"\\\\notni\", true);\ndefineSymbol(math, rel, \"\\u221d\", \"\\\\propto\", true);\ndefineSymbol(math, rel, \"\\u22a2\", \"\\\\vdash\", true);\ndefineSymbol(math, rel, \"\\u22a3\", \"\\\\dashv\", true);\ndefineSymbol(math, rel, \"\\u220b\", \"\\\\owns\");\ndefineSymbol(math, rel, \"\\u2258\", \"\\\\arceq\", true);\ndefineSymbol(math, rel, \"\\u2259\", \"\\\\wedgeq\", true);\ndefineSymbol(math, rel, \"\\u225a\", \"\\\\veeeq\", true);\ndefineSymbol(math, rel, \"\\u225b\", \"\\\\stareq\", true);\ndefineSymbol(math, rel, \"\\u225d\", \"\\\\eqdef\", true);\ndefineSymbol(math, rel, \"\\u225e\", \"\\\\measeq\", true);\ndefineSymbol(math, rel, \"\\u225f\", \"\\\\questeq\", true);\ndefineSymbol(math, rel, \"\\u2260\", \"\\\\ne\", true);\ndefineSymbol(math, rel, \"\\u2260\", \"\\\\neq\");\n// unicodemath\ndefineSymbol(math, rel, \"\\u2a75\", \"\\\\eqeq\", true);\ndefineSymbol(math, rel, \"\\u2a76\", \"\\\\eqeqeq\", true);\n// mathtools.sty\ndefineSymbol(math, rel, \"\\u2237\", \"\\\\dblcolon\", true);\ndefineSymbol(math, rel, \"\\u2254\", \"\\\\coloneqq\", true);\ndefineSymbol(math, rel, \"\\u2255\", \"\\\\eqqcolon\", true);\ndefineSymbol(math, rel, \"\\u2239\", \"\\\\eqcolon\", true);\ndefineSymbol(math, rel, \"\\u2A74\", \"\\\\Coloneqq\", true);\n\n// Punctuation\ndefineSymbol(math, punct, \"\\u002e\", \"\\\\ldotp\");\ndefineSymbol(math, punct, \"\\u00b7\", \"\\\\cdotp\");\n\n// Misc Symbols\ndefineSymbol(math, textord, \"\\u0023\", \"\\\\#\");\ndefineSymbol(text, textord, \"\\u0023\", \"\\\\#\");\ndefineSymbol(math, textord, \"\\u0026\", \"\\\\&\");\ndefineSymbol(text, textord, \"\\u0026\", \"\\\\&\");\ndefineSymbol(math, textord, \"\\u2135\", \"\\\\aleph\", true);\ndefineSymbol(math, textord, \"\\u2200\", \"\\\\forall\", true);\ndefineSymbol(math, textord, \"\\u210f\", \"\\\\hbar\", true);\ndefineSymbol(math, textord, \"\\u2203\", \"\\\\exists\", true);\n// ∇ is actually a unary operator, not binary. But this works.\ndefineSymbol(math, bin, \"\\u2207\", \"\\\\nabla\", true);\ndefineSymbol(math, textord, \"\\u266d\", \"\\\\flat\", true);\ndefineSymbol(math, textord, \"\\u2113\", \"\\\\ell\", true);\ndefineSymbol(math, textord, \"\\u266e\", \"\\\\natural\", true);\ndefineSymbol(math, textord, \"Å\", \"\\\\Angstrom\", true);\ndefineSymbol(text, textord, \"Å\", \"\\\\Angstrom\", true);\ndefineSymbol(math, textord, \"\\u2663\", \"\\\\clubsuit\", true);\ndefineSymbol(math, textord, \"\\u2667\", \"\\\\varclubsuit\", true);\ndefineSymbol(math, textord, \"\\u2118\", \"\\\\wp\", true);\ndefineSymbol(math, textord, \"\\u266f\", \"\\\\sharp\", true);\ndefineSymbol(math, textord, \"\\u2662\", \"\\\\diamondsuit\", true);\ndefineSymbol(math, textord, \"\\u2666\", \"\\\\vardiamondsuit\", true);\ndefineSymbol(math, textord, \"\\u211c\", \"\\\\Re\", true);\ndefineSymbol(math, textord, \"\\u2661\", \"\\\\heartsuit\", true);\ndefineSymbol(math, textord, \"\\u2665\", \"\\\\varheartsuit\", true);\ndefineSymbol(math, textord, \"\\u2111\", \"\\\\Im\", true);\ndefineSymbol(math, textord, \"\\u2660\", \"\\\\spadesuit\", true);\ndefineSymbol(math, textord, \"\\u2664\", \"\\\\varspadesuit\", true);\ndefineSymbol(math, textord, \"\\u2640\", \"\\\\female\", true);\ndefineSymbol(math, textord, \"\\u2642\", \"\\\\male\", true);\ndefineSymbol(math, textord, \"\\u00a7\", \"\\\\S\", true);\ndefineSymbol(text, textord, \"\\u00a7\", \"\\\\S\");\ndefineSymbol(math, textord, \"\\u00b6\", \"\\\\P\", true);\ndefineSymbol(text, textord, \"\\u00b6\", \"\\\\P\");\ndefineSymbol(text, textord, \"\\u263a\", \"\\\\smiley\", true);\ndefineSymbol(math, textord, \"\\u263a\", \"\\\\smiley\", true);\n\n// Math and Text\ndefineSymbol(math, textord, \"\\u2020\", \"\\\\dag\");\ndefineSymbol(text, textord, \"\\u2020\", \"\\\\dag\");\ndefineSymbol(text, textord, \"\\u2020\", \"\\\\textdagger\");\ndefineSymbol(math, textord, \"\\u2021\", \"\\\\ddag\");\ndefineSymbol(text, textord, \"\\u2021\", \"\\\\ddag\");\ndefineSymbol(text, textord, \"\\u2021\", \"\\\\textdaggerdbl\");\n\n// Large Delimiters\ndefineSymbol(math, close, \"\\u23b1\", \"\\\\rmoustache\", true);\ndefineSymbol(math, open, \"\\u23b0\", \"\\\\lmoustache\", true);\ndefineSymbol(math, close, \"\\u27ef\", \"\\\\rgroup\", true);\ndefineSymbol(math, open, \"\\u27ee\", \"\\\\lgroup\", true);\n\n// Binary Operators\ndefineSymbol(math, bin, \"\\u2213\", \"\\\\mp\", true);\ndefineSymbol(math, bin, \"\\u2296\", \"\\\\ominus\", true);\ndefineSymbol(math, bin, \"\\u228e\", \"\\\\uplus\", true);\ndefineSymbol(math, bin, \"\\u2293\", \"\\\\sqcap\", true);\ndefineSymbol(math, bin, \"\\u2217\", \"\\\\ast\");\ndefineSymbol(math, bin, \"\\u2294\", \"\\\\sqcup\", true);\ndefineSymbol(math, bin, \"\\u25ef\", \"\\\\bigcirc\", true);\ndefineSymbol(math, bin, \"\\u2219\", \"\\\\bullet\", true);\ndefineSymbol(math, bin, \"\\u2021\", \"\\\\ddagger\");\ndefineSymbol(math, bin, \"\\u2240\", \"\\\\wr\", true);\ndefineSymbol(math, bin, \"\\u2a3f\", \"\\\\amalg\");\ndefineSymbol(math, bin, \"\\u0026\", \"\\\\And\"); // from amsmath\ndefineSymbol(math, bin, \"\\u2AFD\", \"\\\\sslash\", true); // from stmaryrd\n\n// Arrow Symbols\ndefineSymbol(math, rel, \"\\u27f5\", \"\\\\longleftarrow\", true);\ndefineSymbol(math, rel, \"\\u21d0\", \"\\\\Leftarrow\", true);\ndefineSymbol(math, rel, \"\\u27f8\", \"\\\\Longleftarrow\", true);\ndefineSymbol(math, rel, \"\\u27f6\", \"\\\\longrightarrow\", true);\ndefineSymbol(math, rel, \"\\u21d2\", \"\\\\Rightarrow\", true);\ndefineSymbol(math, rel, \"\\u27f9\", \"\\\\Longrightarrow\", true);\ndefineSymbol(math, rel, \"\\u2194\", \"\\\\leftrightarrow\", true);\ndefineSymbol(math, rel, \"\\u27f7\", \"\\\\longleftrightarrow\", true);\ndefineSymbol(math, rel, \"\\u21d4\", \"\\\\Leftrightarrow\", true);\ndefineSymbol(math, rel, \"\\u27fa\", \"\\\\Longleftrightarrow\", true);\ndefineSymbol(math, rel, \"\\u21a4\", \"\\\\mapsfrom\", true);\ndefineSymbol(math, rel, \"\\u21a6\", \"\\\\mapsto\", true);\ndefineSymbol(math, rel, \"\\u27fc\", \"\\\\longmapsto\", true);\ndefineSymbol(math, rel, \"\\u2197\", \"\\\\nearrow\", true);\ndefineSymbol(math, rel, \"\\u21a9\", \"\\\\hookleftarrow\", true);\ndefineSymbol(math, rel, \"\\u21aa\", \"\\\\hookrightarrow\", true);\ndefineSymbol(math, rel, \"\\u2198\", \"\\\\searrow\", true);\ndefineSymbol(math, rel, \"\\u21bc\", \"\\\\leftharpoonup\", true);\ndefineSymbol(math, rel, \"\\u21c0\", \"\\\\rightharpoonup\", true);\ndefineSymbol(math, rel, \"\\u2199\", \"\\\\swarrow\", true);\ndefineSymbol(math, rel, \"\\u21bd\", \"\\\\leftharpoondown\", true);\ndefineSymbol(math, rel, \"\\u21c1\", \"\\\\rightharpoondown\", true);\ndefineSymbol(math, rel, \"\\u2196\", \"\\\\nwarrow\", true);\ndefineSymbol(math, rel, \"\\u21cc\", \"\\\\rightleftharpoons\", true);\ndefineSymbol(math, mathord, \"\\u21af\", \"\\\\lightning\", true);\ndefineSymbol(math, mathord, \"\\u220E\", \"\\\\QED\", true);\ndefineSymbol(math, mathord, \"\\u2030\", \"\\\\permil\", true);\ndefineSymbol(text, textord, \"\\u2030\", \"\\\\permil\");\ndefineSymbol(math, mathord, \"\\u2609\", \"\\\\astrosun\", true);\ndefineSymbol(math, mathord, \"\\u263c\", \"\\\\sun\", true);\ndefineSymbol(math, mathord, \"\\u263e\", \"\\\\leftmoon\", true);\ndefineSymbol(math, mathord, \"\\u263d\", \"\\\\rightmoon\", true);\ndefineSymbol(math, mathord, \"\\u2295\", \"\\\\Earth\");\n\n// AMS Negated Binary Relations\ndefineSymbol(math, rel, \"\\u226e\", \"\\\\nless\", true);\n// Symbol names preceeded by \"@\" each have a corresponding macro.\ndefineSymbol(math, rel, \"\\u2a87\", \"\\\\lneq\", true);\ndefineSymbol(math, rel, \"\\u2268\", \"\\\\lneqq\", true);\ndefineSymbol(math, rel, \"\\u2268\\ufe00\", \"\\\\lvertneqq\");\ndefineSymbol(math, rel, \"\\u22e6\", \"\\\\lnsim\", true);\ndefineSymbol(math, rel, \"\\u2a89\", \"\\\\lnapprox\", true);\ndefineSymbol(math, rel, \"\\u2280\", \"\\\\nprec\", true);\n// unicode-math maps \\u22e0 to \\npreccurlyeq. We'll use the AMS synonym.\ndefineSymbol(math, rel, \"\\u22e0\", \"\\\\npreceq\", true);\ndefineSymbol(math, rel, \"\\u22e8\", \"\\\\precnsim\", true);\ndefineSymbol(math, rel, \"\\u2ab9\", \"\\\\precnapprox\", true);\ndefineSymbol(math, rel, \"\\u2241\", \"\\\\nsim\", true);\ndefineSymbol(math, rel, \"\\u2224\", \"\\\\nmid\", true);\ndefineSymbol(math, rel, \"\\u2224\", \"\\\\nshortmid\");\ndefineSymbol(math, rel, \"\\u22ac\", \"\\\\nvdash\", true);\ndefineSymbol(math, rel, \"\\u22ad\", \"\\\\nvDash\", true);\ndefineSymbol(math, rel, \"\\u22ea\", \"\\\\ntriangleleft\");\ndefineSymbol(math, rel, \"\\u22ec\", \"\\\\ntrianglelefteq\", true);\ndefineSymbol(math, rel, \"\\u2284\", \"\\\\nsubset\", true);\ndefineSymbol(math, rel, \"\\u2285\", \"\\\\nsupset\", true);\ndefineSymbol(math, rel, \"\\u228a\", \"\\\\subsetneq\", true);\ndefineSymbol(math, rel, \"\\u228a\\ufe00\", \"\\\\varsubsetneq\");\ndefineSymbol(math, rel, \"\\u2acb\", \"\\\\subsetneqq\", true);\ndefineSymbol(math, rel, \"\\u2acb\\ufe00\", \"\\\\varsubsetneqq\");\ndefineSymbol(math, rel, \"\\u226f\", \"\\\\ngtr\", true);\ndefineSymbol(math, rel, \"\\u2a88\", \"\\\\gneq\", true);\ndefineSymbol(math, rel, \"\\u2269\", \"\\\\gneqq\", true);\ndefineSymbol(math, rel, \"\\u2269\\ufe00\", \"\\\\gvertneqq\");\ndefineSymbol(math, rel, \"\\u22e7\", \"\\\\gnsim\", true);\ndefineSymbol(math, rel, \"\\u2a8a\", \"\\\\gnapprox\", true);\ndefineSymbol(math, rel, \"\\u2281\", \"\\\\nsucc\", true);\n// unicode-math maps \\u22e1 to \\nsucccurlyeq. We'll use the AMS synonym.\ndefineSymbol(math, rel, \"\\u22e1\", \"\\\\nsucceq\", true);\ndefineSymbol(math, rel, \"\\u22e9\", \"\\\\succnsim\", true);\ndefineSymbol(math, rel, \"\\u2aba\", \"\\\\succnapprox\", true);\n// unicode-math maps \\u2246 to \\simneqq. We'll use the AMS synonym.\ndefineSymbol(math, rel, \"\\u2246\", \"\\\\ncong\", true);\ndefineSymbol(math, rel, \"\\u2226\", \"\\\\nparallel\", true);\ndefineSymbol(math, rel, \"\\u2226\", \"\\\\nshortparallel\");\ndefineSymbol(math, rel, \"\\u22af\", \"\\\\nVDash\", true);\ndefineSymbol(math, rel, \"\\u22eb\", \"\\\\ntriangleright\");\ndefineSymbol(math, rel, \"\\u22ed\", \"\\\\ntrianglerighteq\", true);\ndefineSymbol(math, rel, \"\\u228b\", \"\\\\supsetneq\", true);\ndefineSymbol(math, rel, \"\\u228b\", \"\\\\varsupsetneq\");\ndefineSymbol(math, rel, \"\\u2acc\", \"\\\\supsetneqq\", true);\ndefineSymbol(math, rel, \"\\u2acc\\ufe00\", \"\\\\varsupsetneqq\");\ndefineSymbol(math, rel, \"\\u22ae\", \"\\\\nVdash\", true);\ndefineSymbol(math, rel, \"\\u2ab5\", \"\\\\precneqq\", true);\ndefineSymbol(math, rel, \"\\u2ab6\", \"\\\\succneqq\", true);\ndefineSymbol(math, bin, \"\\u22b4\", \"\\\\unlhd\");\ndefineSymbol(math, bin, \"\\u22b5\", \"\\\\unrhd\");\n\n// AMS Negated Arrows\ndefineSymbol(math, rel, \"\\u219a\", \"\\\\nleftarrow\", true);\ndefineSymbol(math, rel, \"\\u219b\", \"\\\\nrightarrow\", true);\ndefineSymbol(math, rel, \"\\u21cd\", \"\\\\nLeftarrow\", true);\ndefineSymbol(math, rel, \"\\u21cf\", \"\\\\nRightarrow\", true);\ndefineSymbol(math, rel, \"\\u21ae\", \"\\\\nleftrightarrow\", true);\ndefineSymbol(math, rel, \"\\u21ce\", \"\\\\nLeftrightarrow\", true);\n\n// AMS Misc\ndefineSymbol(math, rel, \"\\u25b3\", \"\\\\vartriangle\");\ndefineSymbol(math, textord, \"\\u210f\", \"\\\\hslash\");\ndefineSymbol(math, textord, \"\\u25bd\", \"\\\\triangledown\");\ndefineSymbol(math, textord, \"\\u25ca\", \"\\\\lozenge\");\ndefineSymbol(math, textord, \"\\u24c8\", \"\\\\circledS\");\ndefineSymbol(math, textord, \"\\u00ae\", \"\\\\circledR\", true);\ndefineSymbol(text, textord, \"\\u00ae\", \"\\\\circledR\");\ndefineSymbol(text, textord, \"\\u00ae\", \"\\\\textregistered\");\ndefineSymbol(math, textord, \"\\u2221\", \"\\\\measuredangle\", true);\ndefineSymbol(math, textord, \"\\u2204\", \"\\\\nexists\");\ndefineSymbol(math, textord, \"\\u2127\", \"\\\\mho\");\ndefineSymbol(math, textord, \"\\u2132\", \"\\\\Finv\", true);\ndefineSymbol(math, textord, \"\\u2141\", \"\\\\Game\", true);\ndefineSymbol(math, textord, \"\\u2035\", \"\\\\backprime\");\ndefineSymbol(math, textord, \"\\u2036\", \"\\\\backdprime\");\ndefineSymbol(math, textord, \"\\u2037\", \"\\\\backtrprime\");\ndefineSymbol(math, textord, \"\\u25b2\", \"\\\\blacktriangle\");\ndefineSymbol(math, textord, \"\\u25bc\", \"\\\\blacktriangledown\");\ndefineSymbol(math, textord, \"\\u25a0\", \"\\\\blacksquare\");\ndefineSymbol(math, textord, \"\\u29eb\", \"\\\\blacklozenge\");\ndefineSymbol(math, textord, \"\\u2605\", \"\\\\bigstar\");\ndefineSymbol(math, textord, \"\\u2222\", \"\\\\sphericalangle\", true);\ndefineSymbol(math, textord, \"\\u2201\", \"\\\\complement\", true);\ndefineSymbol(math, textord, \"\\u2571\", \"\\\\diagup\");\ndefineSymbol(math, textord, \"\\u2572\", \"\\\\diagdown\");\ndefineSymbol(math, textord, \"\\u25a1\", \"\\\\square\");\ndefineSymbol(math, textord, \"\\u25a1\", \"\\\\Box\");\ndefineSymbol(math, textord, \"\\u25ca\", \"\\\\Diamond\");\n// unicode-math maps U+A5 to \\mathyen. We map to AMS function \\yen\ndefineSymbol(math, textord, \"\\u00a5\", \"\\\\yen\", true);\ndefineSymbol(text, textord, \"\\u00a5\", \"\\\\yen\", true);\ndefineSymbol(math, textord, \"\\u2713\", \"\\\\checkmark\", true);\ndefineSymbol(text, textord, \"\\u2713\", \"\\\\checkmark\");\ndefineSymbol(math, textord, \"\\u2717\", \"\\\\ballotx\", true);\ndefineSymbol(text, textord, \"\\u2717\", \"\\\\ballotx\");\ndefineSymbol(text, textord, \"\\u2022\", \"\\\\textbullet\");\n\n// AMS Hebrew\ndefineSymbol(math, textord, \"\\u2136\", \"\\\\beth\", true);\ndefineSymbol(math, textord, \"\\u2138\", \"\\\\daleth\", true);\ndefineSymbol(math, textord, \"\\u2137\", \"\\\\gimel\", true);\n\n// AMS Greek\ndefineSymbol(math, textord, \"\\u03dd\", \"\\\\digamma\", true);\ndefineSymbol(math, textord, \"\\u03f0\", \"\\\\varkappa\");\n\n// AMS Delimiters\ndefineSymbol(math, open, \"\\u231C\", \"\\\\ulcorner\", true);\ndefineSymbol(math, close, \"\\u231D\", \"\\\\urcorner\", true);\ndefineSymbol(math, open, \"\\u231E\", \"\\\\llcorner\", true);\ndefineSymbol(math, close, \"\\u231F\", \"\\\\lrcorner\", true);\n\n// AMS Binary Relations\ndefineSymbol(math, rel, \"\\u2266\", \"\\\\leqq\", true);\ndefineSymbol(math, rel, \"\\u2a7d\", \"\\\\leqslant\", true);\ndefineSymbol(math, rel, \"\\u2a95\", \"\\\\eqslantless\", true);\ndefineSymbol(math, rel, \"\\u2272\", \"\\\\lesssim\", true);\ndefineSymbol(math, rel, \"\\u2a85\", \"\\\\lessapprox\", true);\ndefineSymbol(math, rel, \"\\u224a\", \"\\\\approxeq\", true);\ndefineSymbol(math, bin, \"\\u22d6\", \"\\\\lessdot\");\ndefineSymbol(math, rel, \"\\u22d8\", \"\\\\lll\", true);\ndefineSymbol(math, rel, \"\\u2276\", \"\\\\lessgtr\", true);\ndefineSymbol(math, rel, \"\\u22da\", \"\\\\lesseqgtr\", true);\ndefineSymbol(math, rel, \"\\u2a8b\", \"\\\\lesseqqgtr\", true);\ndefineSymbol(math, rel, \"\\u2251\", \"\\\\doteqdot\");\ndefineSymbol(math, rel, \"\\u2253\", \"\\\\risingdotseq\", true);\ndefineSymbol(math, rel, \"\\u2252\", \"\\\\fallingdotseq\", true);\ndefineSymbol(math, rel, \"\\u223d\", \"\\\\backsim\", true);\ndefineSymbol(math, rel, \"\\u22cd\", \"\\\\backsimeq\", true);\ndefineSymbol(math, rel, \"\\u2ac5\", \"\\\\subseteqq\", true);\ndefineSymbol(math, rel, \"\\u22d0\", \"\\\\Subset\", true);\ndefineSymbol(math, rel, \"\\u228f\", \"\\\\sqsubset\", true);\ndefineSymbol(math, rel, \"\\u227c\", \"\\\\preccurlyeq\", true);\ndefineSymbol(math, rel, \"\\u22de\", \"\\\\curlyeqprec\", true);\ndefineSymbol(math, rel, \"\\u227e\", \"\\\\precsim\", true);\ndefineSymbol(math, rel, \"\\u2ab7\", \"\\\\precapprox\", true);\ndefineSymbol(math, rel, \"\\u22b2\", \"\\\\vartriangleleft\");\ndefineSymbol(math, rel, \"\\u22b4\", \"\\\\trianglelefteq\");\ndefineSymbol(math, rel, \"\\u22a8\", \"\\\\vDash\", true);\ndefineSymbol(math, rel, \"\\u22ab\", \"\\\\VDash\", true);\ndefineSymbol(math, rel, \"\\u22aa\", \"\\\\Vvdash\", true);\ndefineSymbol(math, rel, \"\\u2323\", \"\\\\smallsmile\");\ndefineSymbol(math, rel, \"\\u2322\", \"\\\\smallfrown\");\ndefineSymbol(math, rel, \"\\u224f\", \"\\\\bumpeq\", true);\ndefineSymbol(math, rel, \"\\u224e\", \"\\\\Bumpeq\", true);\ndefineSymbol(math, rel, \"\\u2267\", \"\\\\geqq\", true);\ndefineSymbol(math, rel, \"\\u2a7e\", \"\\\\geqslant\", true);\ndefineSymbol(math, rel, \"\\u2a96\", \"\\\\eqslantgtr\", true);\ndefineSymbol(math, rel, \"\\u2273\", \"\\\\gtrsim\", true);\ndefineSymbol(math, rel, \"\\u2a86\", \"\\\\gtrapprox\", true);\ndefineSymbol(math, bin, \"\\u22d7\", \"\\\\gtrdot\");\ndefineSymbol(math, rel, \"\\u22d9\", \"\\\\ggg\", true);\ndefineSymbol(math, rel, \"\\u2277\", \"\\\\gtrless\", true);\ndefineSymbol(math, rel, \"\\u22db\", \"\\\\gtreqless\", true);\ndefineSymbol(math, rel, \"\\u2a8c\", \"\\\\gtreqqless\", true);\ndefineSymbol(math, rel, \"\\u2256\", \"\\\\eqcirc\", true);\ndefineSymbol(math, rel, \"\\u2257\", \"\\\\circeq\", true);\ndefineSymbol(math, rel, \"\\u225c\", \"\\\\triangleq\", true);\ndefineSymbol(math, rel, \"\\u223c\", \"\\\\thicksim\");\ndefineSymbol(math, rel, \"\\u2248\", \"\\\\thickapprox\");\ndefineSymbol(math, rel, \"\\u2ac6\", \"\\\\supseteqq\", true);\ndefineSymbol(math, rel, \"\\u22d1\", \"\\\\Supset\", true);\ndefineSymbol(math, rel, \"\\u2290\", \"\\\\sqsupset\", true);\ndefineSymbol(math, rel, \"\\u227d\", \"\\\\succcurlyeq\", true);\ndefineSymbol(math, rel, \"\\u22df\", \"\\\\curlyeqsucc\", true);\ndefineSymbol(math, rel, \"\\u227f\", \"\\\\succsim\", true);\ndefineSymbol(math, rel, \"\\u2ab8\", \"\\\\succapprox\", true);\ndefineSymbol(math, rel, \"\\u22b3\", \"\\\\vartriangleright\");\ndefineSymbol(math, rel, \"\\u22b5\", \"\\\\trianglerighteq\");\ndefineSymbol(math, rel, \"\\u22a9\", \"\\\\Vdash\", true);\ndefineSymbol(math, rel, \"\\u2223\", \"\\\\shortmid\");\ndefineSymbol(math, rel, \"\\u2225\", \"\\\\shortparallel\");\ndefineSymbol(math, rel, \"\\u226c\", \"\\\\between\", true);\ndefineSymbol(math, rel, \"\\u22d4\", \"\\\\pitchfork\", true);\ndefineSymbol(math, rel, \"\\u221d\", \"\\\\varpropto\");\ndefineSymbol(math, rel, \"\\u25c0\", \"\\\\blacktriangleleft\");\n// unicode-math says that \\therefore is a mathord atom.\n// We kept the amssymb atom type, which is rel.\ndefineSymbol(math, rel, \"\\u2234\", \"\\\\therefore\", true);\ndefineSymbol(math, rel, \"\\u220d\", \"\\\\backepsilon\");\ndefineSymbol(math, rel, \"\\u25b6\", \"\\\\blacktriangleright\");\n// unicode-math says that \\because is a mathord atom.\n// We kept the amssymb atom type, which is rel.\ndefineSymbol(math, rel, \"\\u2235\", \"\\\\because\", true);\ndefineSymbol(math, rel, \"\\u22d8\", \"\\\\llless\");\ndefineSymbol(math, rel, \"\\u22d9\", \"\\\\gggtr\");\ndefineSymbol(math, bin, \"\\u22b2\", \"\\\\lhd\");\ndefineSymbol(math, bin, \"\\u22b3\", \"\\\\rhd\");\ndefineSymbol(math, rel, \"\\u2242\", \"\\\\eqsim\", true);\ndefineSymbol(math, rel, \"\\u2251\", \"\\\\Doteq\", true);\ndefineSymbol(math, rel, \"\\u297d\", \"\\\\strictif\", true);\ndefineSymbol(math, rel, \"\\u297c\", \"\\\\strictfi\", true);\n\n// AMS Binary Operators\ndefineSymbol(math, bin, \"\\u2214\", \"\\\\dotplus\", true);\ndefineSymbol(math, bin, \"\\u2216\", \"\\\\smallsetminus\");\ndefineSymbol(math, bin, \"\\u22d2\", \"\\\\Cap\", true);\ndefineSymbol(math, bin, \"\\u22d3\", \"\\\\Cup\", true);\ndefineSymbol(math, bin, \"\\u2a5e\", \"\\\\doublebarwedge\", true);\ndefineSymbol(math, bin, \"\\u229f\", \"\\\\boxminus\", true);\ndefineSymbol(math, bin, \"\\u229e\", \"\\\\boxplus\", true);\ndefineSymbol(math, bin, \"\\u29C4\", \"\\\\boxslash\", true);\ndefineSymbol(math, bin, \"\\u22c7\", \"\\\\divideontimes\", true);\ndefineSymbol(math, bin, \"\\u22c9\", \"\\\\ltimes\", true);\ndefineSymbol(math, bin, \"\\u22ca\", \"\\\\rtimes\", true);\ndefineSymbol(math, bin, \"\\u22cb\", \"\\\\leftthreetimes\", true);\ndefineSymbol(math, bin, \"\\u22cc\", \"\\\\rightthreetimes\", true);\ndefineSymbol(math, bin, \"\\u22cf\", \"\\\\curlywedge\", true);\ndefineSymbol(math, bin, \"\\u22ce\", \"\\\\curlyvee\", true);\ndefineSymbol(math, bin, \"\\u229d\", \"\\\\circleddash\", true);\ndefineSymbol(math, bin, \"\\u229b\", \"\\\\circledast\", true);\ndefineSymbol(math, bin, \"\\u22ba\", \"\\\\intercal\", true);\ndefineSymbol(math, bin, \"\\u22d2\", \"\\\\doublecap\");\ndefineSymbol(math, bin, \"\\u22d3\", \"\\\\doublecup\");\ndefineSymbol(math, bin, \"\\u22a0\", \"\\\\boxtimes\", true);\ndefineSymbol(math, bin, \"\\u22c8\", \"\\\\bowtie\", true);\ndefineSymbol(math, bin, \"\\u22c8\", \"\\\\Join\");\ndefineSymbol(math, bin, \"\\u27d5\", \"\\\\leftouterjoin\", true);\ndefineSymbol(math, bin, \"\\u27d6\", \"\\\\rightouterjoin\", true);\ndefineSymbol(math, bin, \"\\u27d7\", \"\\\\fullouterjoin\", true);\n\n// stix Binary Operators\ndefineSymbol(math, bin, \"\\u2238\", \"\\\\dotminus\", true);\ndefineSymbol(math, bin, \"\\u27D1\", \"\\\\wedgedot\", true);\ndefineSymbol(math, bin, \"\\u27C7\", \"\\\\veedot\", true);\ndefineSymbol(math, bin, \"\\u2A62\", \"\\\\doublebarvee\", true);\ndefineSymbol(math, bin, \"\\u2A63\", \"\\\\veedoublebar\", true);\ndefineSymbol(math, bin, \"\\u2A5F\", \"\\\\wedgebar\", true);\ndefineSymbol(math, bin, \"\\u2A60\", \"\\\\wedgedoublebar\", true);\ndefineSymbol(math, bin, \"\\u2A54\", \"\\\\Vee\", true);\ndefineSymbol(math, bin, \"\\u2A53\", \"\\\\Wedge\", true);\ndefineSymbol(math, bin, \"\\u2A43\", \"\\\\barcap\", true);\ndefineSymbol(math, bin, \"\\u2A42\", \"\\\\barcup\", true);\ndefineSymbol(math, bin, \"\\u2A48\", \"\\\\capbarcup\", true);\ndefineSymbol(math, bin, \"\\u2A40\", \"\\\\capdot\", true);\ndefineSymbol(math, bin, \"\\u2A47\", \"\\\\capovercup\", true);\ndefineSymbol(math, bin, \"\\u2A46\", \"\\\\cupovercap\", true);\ndefineSymbol(math, bin, \"\\u2A4D\", \"\\\\closedvarcap\", true);\ndefineSymbol(math, bin, \"\\u2A4C\", \"\\\\closedvarcup\", true);\ndefineSymbol(math, bin, \"\\u2A2A\", \"\\\\minusdot\", true);\ndefineSymbol(math, bin, \"\\u2A2B\", \"\\\\minusfdots\", true);\ndefineSymbol(math, bin, \"\\u2A2C\", \"\\\\minusrdots\", true);\ndefineSymbol(math, bin, \"\\u22BB\", \"\\\\Xor\", true);\ndefineSymbol(math, bin, \"\\u22BC\", \"\\\\Nand\", true);\ndefineSymbol(math, bin, \"\\u22BD\", \"\\\\Nor\", true);\ndefineSymbol(math, bin, \"\\u22BD\", \"\\\\barvee\");\ndefineSymbol(math, bin, \"\\u2AF4\", \"\\\\interleave\", true);\ndefineSymbol(math, bin, \"\\u29E2\", \"\\\\shuffle\", true);\ndefineSymbol(math, bin, \"\\u2AF6\", \"\\\\threedotcolon\", true);\ndefineSymbol(math, bin, \"\\u2982\", \"\\\\typecolon\", true);\ndefineSymbol(math, bin, \"\\u223E\", \"\\\\invlazys\", true);\ndefineSymbol(math, bin, \"\\u2A4B\", \"\\\\twocaps\", true);\ndefineSymbol(math, bin, \"\\u2A4A\", \"\\\\twocups\", true);\ndefineSymbol(math, bin, \"\\u2A4E\", \"\\\\Sqcap\", true);\ndefineSymbol(math, bin, \"\\u2A4F\", \"\\\\Sqcup\", true);\ndefineSymbol(math, bin, \"\\u2A56\", \"\\\\veeonvee\", true);\ndefineSymbol(math, bin, \"\\u2A55\", \"\\\\wedgeonwedge\", true);\ndefineSymbol(math, bin, \"\\u29D7\", \"\\\\blackhourglass\", true);\ndefineSymbol(math, bin, \"\\u29C6\", \"\\\\boxast\", true);\ndefineSymbol(math, bin, \"\\u29C8\", \"\\\\boxbox\", true);\ndefineSymbol(math, bin, \"\\u29C7\", \"\\\\boxcircle\", true);\ndefineSymbol(math, bin, \"\\u229C\", \"\\\\circledequal\", true);\ndefineSymbol(math, bin, \"\\u29B7\", \"\\\\circledparallel\", true);\ndefineSymbol(math, bin, \"\\u29B6\", \"\\\\circledvert\", true);\ndefineSymbol(math, bin, \"\\u29B5\", \"\\\\circlehbar\", true);\ndefineSymbol(math, bin, \"\\u27E1\", \"\\\\concavediamond\", true);\ndefineSymbol(math, bin, \"\\u27E2\", \"\\\\concavediamondtickleft\", true);\ndefineSymbol(math, bin, \"\\u27E3\", \"\\\\concavediamondtickright\", true);\ndefineSymbol(math, bin, \"\\u22C4\", \"\\\\diamond\", true);\ndefineSymbol(math, bin, \"\\u29D6\", \"\\\\hourglass\", true);\ndefineSymbol(math, bin, \"\\u27E0\", \"\\\\lozengeminus\", true);\ndefineSymbol(math, bin, \"\\u233D\", \"\\\\obar\", true);\ndefineSymbol(math, bin, \"\\u29B8\", \"\\\\obslash\", true);\ndefineSymbol(math, bin, \"\\u2A38\", \"\\\\odiv\", true);\ndefineSymbol(math, bin, \"\\u29C1\", \"\\\\ogreaterthan\", true);\ndefineSymbol(math, bin, \"\\u29C0\", \"\\\\olessthan\", true);\ndefineSymbol(math, bin, \"\\u29B9\", \"\\\\operp\", true);\ndefineSymbol(math, bin, \"\\u2A37\", \"\\\\Otimes\", true);\ndefineSymbol(math, bin, \"\\u2A36\", \"\\\\otimeshat\", true);\ndefineSymbol(math, bin, \"\\u22C6\", \"\\\\star\", true);\ndefineSymbol(math, bin, \"\\u25B3\", \"\\\\triangle\", true);\ndefineSymbol(math, bin, \"\\u2A3A\", \"\\\\triangleminus\", true);\ndefineSymbol(math, bin, \"\\u2A39\", \"\\\\triangleplus\", true);\ndefineSymbol(math, bin, \"\\u2A3B\", \"\\\\triangletimes\", true);\ndefineSymbol(math, bin, \"\\u27E4\", \"\\\\whitesquaretickleft\", true);\ndefineSymbol(math, bin, \"\\u27E5\", \"\\\\whitesquaretickright\", true);\ndefineSymbol(math, bin, \"\\u2A33\", \"\\\\smashtimes\", true);\n\n// AMS Arrows\n// Note: unicode-math maps \\u21e2 to their own function \\rightdasharrow.\n// We'll map it to AMS function \\dashrightarrow. It produces the same atom.\ndefineSymbol(math, rel, \"\\u21e2\", \"\\\\dashrightarrow\", true);\n// unicode-math maps \\u21e0 to \\leftdasharrow. We'll use the AMS synonym.\ndefineSymbol(math, rel, \"\\u21e0\", \"\\\\dashleftarrow\", true);\ndefineSymbol(math, rel, \"\\u21c7\", \"\\\\leftleftarrows\", true);\ndefineSymbol(math, rel, \"\\u21c6\", \"\\\\leftrightarrows\", true);\ndefineSymbol(math, rel, \"\\u21da\", \"\\\\Lleftarrow\", true);\ndefineSymbol(math, rel, \"\\u219e\", \"\\\\twoheadleftarrow\", true);\ndefineSymbol(math, rel, \"\\u21a2\", \"\\\\leftarrowtail\", true);\ndefineSymbol(math, rel, \"\\u21ab\", \"\\\\looparrowleft\", true);\ndefineSymbol(math, rel, \"\\u21cb\", \"\\\\leftrightharpoons\", true);\ndefineSymbol(math, rel, \"\\u21b6\", \"\\\\curvearrowleft\", true);\n// unicode-math maps \\u21ba to \\acwopencirclearrow. We'll use the AMS synonym.\ndefineSymbol(math, rel, \"\\u21ba\", \"\\\\circlearrowleft\", true);\ndefineSymbol(math, rel, \"\\u21b0\", \"\\\\Lsh\", true);\ndefineSymbol(math, rel, \"\\u21c8\", \"\\\\upuparrows\", true);\ndefineSymbol(math, rel, \"\\u21bf\", \"\\\\upharpoonleft\", true);\ndefineSymbol(math, rel, \"\\u21c3\", \"\\\\downharpoonleft\", true);\ndefineSymbol(math, rel, \"\\u22b6\", \"\\\\origof\", true);\ndefineSymbol(math, rel, \"\\u22b7\", \"\\\\imageof\", true);\ndefineSymbol(math, rel, \"\\u22b8\", \"\\\\multimap\", true);\ndefineSymbol(math, rel, \"\\u21ad\", \"\\\\leftrightsquigarrow\", true);\ndefineSymbol(math, rel, \"\\u21c9\", \"\\\\rightrightarrows\", true);\ndefineSymbol(math, rel, \"\\u21c4\", \"\\\\rightleftarrows\", true);\ndefineSymbol(math, rel, \"\\u21a0\", \"\\\\twoheadrightarrow\", true);\ndefineSymbol(math, rel, \"\\u21a3\", \"\\\\rightarrowtail\", true);\ndefineSymbol(math, rel, \"\\u21ac\", \"\\\\looparrowright\", true);\ndefineSymbol(math, rel, \"\\u21b7\", \"\\\\curvearrowright\", true);\n// unicode-math maps \\u21bb to \\cwopencirclearrow. We'll use the AMS synonym.\ndefineSymbol(math, rel, \"\\u21bb\", \"\\\\circlearrowright\", true);\ndefineSymbol(math, rel, \"\\u21b1\", \"\\\\Rsh\", true);\ndefineSymbol(math, rel, \"\\u21ca\", \"\\\\downdownarrows\", true);\ndefineSymbol(math, rel, \"\\u21be\", \"\\\\upharpoonright\", true);\ndefineSymbol(math, rel, \"\\u21c2\", \"\\\\downharpoonright\", true);\ndefineSymbol(math, rel, \"\\u21dd\", \"\\\\rightsquigarrow\", true);\ndefineSymbol(math, rel, \"\\u21dd\", \"\\\\leadsto\");\ndefineSymbol(math, rel, \"\\u21db\", \"\\\\Rrightarrow\", true);\ndefineSymbol(math, rel, \"\\u21be\", \"\\\\restriction\");\n\ndefineSymbol(math, textord, \"\\u2018\", \"`\");\ndefineSymbol(math, textord, \"$\", \"\\\\$\");\ndefineSymbol(text, textord, \"$\", \"\\\\$\");\ndefineSymbol(text, textord, \"$\", \"\\\\textdollar\");\ndefineSymbol(math, textord, \"¢\", \"\\\\cent\");\ndefineSymbol(text, textord, \"¢\", \"\\\\cent\");\ndefineSymbol(math, textord, \"%\", \"\\\\%\");\ndefineSymbol(text, textord, \"%\", \"\\\\%\");\ndefineSymbol(math, textord, \"_\", \"\\\\_\");\ndefineSymbol(text, textord, \"_\", \"\\\\_\");\ndefineSymbol(text, textord, \"_\", \"\\\\textunderscore\");\ndefineSymbol(text, textord, \"\\u2423\", \"\\\\textvisiblespace\", true);\ndefineSymbol(math, textord, \"\\u2220\", \"\\\\angle\", true);\ndefineSymbol(math, textord, \"\\u221e\", \"\\\\infty\", true);\ndefineSymbol(math, textord, \"\\u2032\", \"\\\\prime\");\ndefineSymbol(math, textord, \"\\u2033\", \"\\\\dprime\");\ndefineSymbol(math, textord, \"\\u2034\", \"\\\\trprime\");\ndefineSymbol(math, textord, \"\\u2057\", \"\\\\qprime\");\ndefineSymbol(math, textord, \"\\u25b3\", \"\\\\triangle\");\ndefineSymbol(text, textord, \"\\u0391\", \"\\\\Alpha\", true);\ndefineSymbol(text, textord, \"\\u0392\", \"\\\\Beta\", true);\ndefineSymbol(text, textord, \"\\u0393\", \"\\\\Gamma\", true);\ndefineSymbol(text, textord, \"\\u0394\", \"\\\\Delta\", true);\ndefineSymbol(text, textord, \"\\u0395\", \"\\\\Epsilon\", true);\ndefineSymbol(text, textord, \"\\u0396\", \"\\\\Zeta\", true);\ndefineSymbol(text, textord, \"\\u0397\", \"\\\\Eta\", true);\ndefineSymbol(text, textord, \"\\u0398\", \"\\\\Theta\", true);\ndefineSymbol(text, textord, \"\\u0399\", \"\\\\Iota\", true);\ndefineSymbol(text, textord, \"\\u039a\", \"\\\\Kappa\", true);\ndefineSymbol(text, textord, \"\\u039b\", \"\\\\Lambda\", true);\ndefineSymbol(text, textord, \"\\u039c\", \"\\\\Mu\", true);\ndefineSymbol(text, textord, \"\\u039d\", \"\\\\Nu\", true);\ndefineSymbol(text, textord, \"\\u039e\", \"\\\\Xi\", true);\ndefineSymbol(text, textord, \"\\u039f\", \"\\\\Omicron\", true);\ndefineSymbol(text, textord, \"\\u03a0\", \"\\\\Pi\", true);\ndefineSymbol(text, textord, \"\\u03a1\", \"\\\\Rho\", true);\ndefineSymbol(text, textord, \"\\u03a3\", \"\\\\Sigma\", true);\ndefineSymbol(text, textord, \"\\u03a4\", \"\\\\Tau\", true);\ndefineSymbol(text, textord, \"\\u03a5\", \"\\\\Upsilon\", true);\ndefineSymbol(text, textord, \"\\u03a6\", \"\\\\Phi\", true);\ndefineSymbol(text, textord, \"\\u03a7\", \"\\\\Chi\", true);\ndefineSymbol(text, textord, \"\\u03a8\", \"\\\\Psi\", true);\ndefineSymbol(text, textord, \"\\u03a9\", \"\\\\Omega\", true);\ndefineSymbol(math, mathord, \"\\u0391\", \"\\\\Alpha\", true);\ndefineSymbol(math, mathord, \"\\u0392\", \"\\\\Beta\", true);\ndefineSymbol(math, mathord, \"\\u0393\", \"\\\\Gamma\", true);\ndefineSymbol(math, mathord, \"\\u0394\", \"\\\\Delta\", true);\ndefineSymbol(math, mathord, \"\\u0395\", \"\\\\Epsilon\", true);\ndefineSymbol(math, mathord, \"\\u0396\", \"\\\\Zeta\", true);\ndefineSymbol(math, mathord, \"\\u0397\", \"\\\\Eta\", true);\ndefineSymbol(math, mathord, \"\\u0398\", \"\\\\Theta\", true);\ndefineSymbol(math, mathord, \"\\u0399\", \"\\\\Iota\", true);\ndefineSymbol(math, mathord, \"\\u039a\", \"\\\\Kappa\", true);\ndefineSymbol(math, mathord, \"\\u039b\", \"\\\\Lambda\", true);\ndefineSymbol(math, mathord, \"\\u039c\", \"\\\\Mu\", true);\ndefineSymbol(math, mathord, \"\\u039d\", \"\\\\Nu\", true);\ndefineSymbol(math, mathord, \"\\u039e\", \"\\\\Xi\", true);\ndefineSymbol(math, mathord, \"\\u039f\", \"\\\\Omicron\", true);\ndefineSymbol(math, mathord, \"\\u03a0\", \"\\\\Pi\", true);\ndefineSymbol(math, mathord, \"\\u03a1\", \"\\\\Rho\", true);\ndefineSymbol(math, mathord, \"\\u03a3\", \"\\\\Sigma\", true);\ndefineSymbol(math, mathord, \"\\u03a4\", \"\\\\Tau\", true);\ndefineSymbol(math, mathord, \"\\u03a5\", \"\\\\Upsilon\", true);\ndefineSymbol(math, mathord, \"\\u03a6\", \"\\\\Phi\", true);\ndefineSymbol(math, mathord, \"\\u03a7\", \"\\\\Chi\", true);\ndefineSymbol(math, mathord, \"\\u03a8\", \"\\\\Psi\", true);\ndefineSymbol(math, mathord, \"\\u03a9\", \"\\\\Omega\", true);\ndefineSymbol(math, open, \"\\u00ac\", \"\\\\neg\", true);\ndefineSymbol(math, open, \"\\u00ac\", \"\\\\lnot\");\ndefineSymbol(math, textord, \"\\u22a4\", \"\\\\top\");\ndefineSymbol(math, textord, \"\\u22a5\", \"\\\\bot\");\ndefineSymbol(math, textord, \"\\u2205\", \"\\\\emptyset\");\ndefineSymbol(math, textord, \"\\u2300\", \"\\\\varnothing\");\ndefineSymbol(math, mathord, \"\\u03b1\", \"\\\\alpha\", true);\ndefineSymbol(math, mathord, \"\\u03b2\", \"\\\\beta\", true);\ndefineSymbol(math, mathord, \"\\u03b3\", \"\\\\gamma\", true);\ndefineSymbol(math, mathord, \"\\u03b4\", \"\\\\delta\", true);\ndefineSymbol(math, mathord, \"\\u03f5\", \"\\\\epsilon\", true);\ndefineSymbol(math, mathord, \"\\u03b6\", \"\\\\zeta\", true);\ndefineSymbol(math, mathord, \"\\u03b7\", \"\\\\eta\", true);\ndefineSymbol(math, mathord, \"\\u03b8\", \"\\\\theta\", true);\ndefineSymbol(math, mathord, \"\\u03b9\", \"\\\\iota\", true);\ndefineSymbol(math, mathord, \"\\u03ba\", \"\\\\kappa\", true);\ndefineSymbol(math, mathord, \"\\u03bb\", \"\\\\lambda\", true);\ndefineSymbol(math, mathord, \"\\u03bc\", \"\\\\mu\", true);\ndefineSymbol(math, mathord, \"\\u03bd\", \"\\\\nu\", true);\ndefineSymbol(math, mathord, \"\\u03be\", \"\\\\xi\", true);\ndefineSymbol(math, mathord, \"\\u03bf\", \"\\\\omicron\", true);\ndefineSymbol(math, mathord, \"\\u03c0\", \"\\\\pi\", true);\ndefineSymbol(math, mathord, \"\\u03c1\", \"\\\\rho\", true);\ndefineSymbol(math, mathord, \"\\u03c3\", \"\\\\sigma\", true);\ndefineSymbol(math, mathord, \"\\u03c4\", \"\\\\tau\", true);\ndefineSymbol(math, mathord, \"\\u03c5\", \"\\\\upsilon\", true);\ndefineSymbol(math, mathord, \"\\u03d5\", \"\\\\phi\", true);\ndefineSymbol(math, mathord, \"\\u03c7\", \"\\\\chi\", true);\ndefineSymbol(math, mathord, \"\\u03c8\", \"\\\\psi\", true);\ndefineSymbol(math, mathord, \"\\u03c9\", \"\\\\omega\", true);\ndefineSymbol(math, mathord, \"\\u03b5\", \"\\\\varepsilon\", true);\ndefineSymbol(math, mathord, \"\\u03d1\", \"\\\\vartheta\", true);\ndefineSymbol(math, mathord, \"\\u03d6\", \"\\\\varpi\", true);\ndefineSymbol(math, mathord, \"\\u03f1\", \"\\\\varrho\", true);\ndefineSymbol(math, mathord, \"\\u03c2\", \"\\\\varsigma\", true);\ndefineSymbol(math, mathord, \"\\u03c6\", \"\\\\varphi\", true);\ndefineSymbol(math, mathord, \"\\u03d8\", \"\\\\Coppa\", true);\ndefineSymbol(math, mathord, \"\\u03d9\", \"\\\\coppa\", true);\ndefineSymbol(math, mathord, \"\\u03d9\", \"\\\\varcoppa\", true);\ndefineSymbol(math, mathord, \"\\u03de\", \"\\\\Koppa\", true);\ndefineSymbol(math, mathord, \"\\u03df\", \"\\\\koppa\", true);\ndefineSymbol(math, mathord, \"\\u03e0\", \"\\\\Sampi\", true);\ndefineSymbol(math, mathord, \"\\u03e1\", \"\\\\sampi\", true);\ndefineSymbol(math, mathord, \"\\u03da\", \"\\\\Stigma\", true);\ndefineSymbol(math, mathord, \"\\u03db\", \"\\\\stigma\", true);\ndefineSymbol(math, mathord, \"\\u2aeb\", \"\\\\Bot\");\n\n// unicode-math maps U+F0 to \\matheth. We map to AMS function \\eth\ndefineSymbol(math, textord, \"\\u00f0\", \"\\\\eth\", true); // ð\ndefineSymbol(text, textord, \"\\u00f0\", \"\\u00f0\");\n// Extended ASCII and non-ASCII Letters\ndefineSymbol(math, textord, \"\\u00C5\", \"\\\\AA\"); // Å\ndefineSymbol(text, textord, \"\\u00C5\", \"\\\\AA\", true);\ndefineSymbol(math, textord, \"\\u00C6\", \"\\\\AE\", true); // Æ\ndefineSymbol(text, textord, \"\\u00C6\", \"\\\\AE\", true);\ndefineSymbol(math, textord, \"\\u00D0\", \"\\\\DH\", true); // Ð\ndefineSymbol(text, textord, \"\\u00D0\", \"\\\\DH\", true);\ndefineSymbol(math, textord, \"\\u00DE\", \"\\\\TH\", true); // Þ\ndefineSymbol(text, textord, \"\\u00DE\", \"\\\\TH\", true);\ndefineSymbol(math, textord, \"\\u00DF\", \"\\\\ss\", true); // ß\ndefineSymbol(text, textord, \"\\u00DF\", \"\\\\ss\", true);\ndefineSymbol(math, textord, \"\\u00E5\", \"\\\\aa\"); // å\ndefineSymbol(text, textord, \"\\u00E5\", \"\\\\aa\", true);\ndefineSymbol(math, textord, \"\\u00E6\", \"\\\\ae\", true); // æ\ndefineSymbol(text, textord, \"\\u00E6\", \"\\\\ae\", true);\ndefineSymbol(math, textord, \"\\u00F0\", \"\\\\dh\"); // ð\ndefineSymbol(text, textord, \"\\u00F0\", \"\\\\dh\", true);\ndefineSymbol(math, textord, \"\\u00FE\", \"\\\\th\", true); // þ\ndefineSymbol(text, textord, \"\\u00FE\", \"\\\\th\", true);\ndefineSymbol(math, textord, \"\\u0110\", \"\\\\DJ\", true); // Đ\ndefineSymbol(text, textord, \"\\u0110\", \"\\\\DJ\", true);\ndefineSymbol(math, textord, \"\\u0111\", \"\\\\dj\", true); // đ\ndefineSymbol(text, textord, \"\\u0111\", \"\\\\dj\", true);\ndefineSymbol(math, textord, \"\\u0141\", \"\\\\L\", true); // Ł\ndefineSymbol(text, textord, \"\\u0141\", \"\\\\L\", true);\ndefineSymbol(math, textord, \"\\u0141\", \"\\\\l\", true); // ł\ndefineSymbol(text, textord, \"\\u0141\", \"\\\\l\", true);\ndefineSymbol(math, textord, \"\\u014A\", \"\\\\NG\", true); // Ŋ\ndefineSymbol(text, textord, \"\\u014A\", \"\\\\NG\", true);\ndefineSymbol(math, textord, \"\\u014B\", \"\\\\ng\", true); // ŋ\ndefineSymbol(text, textord, \"\\u014B\", \"\\\\ng\", true);\ndefineSymbol(math, textord, \"\\u0152\", \"\\\\OE\", true); // Œ\ndefineSymbol(text, textord, \"\\u0152\", \"\\\\OE\", true);\ndefineSymbol(math, textord, \"\\u0153\", \"\\\\oe\", true); // œ\ndefineSymbol(text, textord, \"\\u0153\", \"\\\\oe\", true);\n\ndefineSymbol(math, bin, \"\\u2217\", \"\\u2217\", true);\ndefineSymbol(math, bin, \"+\", \"+\");\ndefineSymbol(math, bin, \"\\u2217\", \"*\");\ndefineSymbol(math, bin, \"\\u2044\", \"/\", true);\ndefineSymbol(math, bin, \"\\u2044\", \"\\u2044\");\ndefineSymbol(math, bin, \"\\u2212\", \"-\", true);\ndefineSymbol(math, bin, \"\\u22c5\", \"\\\\cdot\", true);\ndefineSymbol(math, bin, \"\\u2218\", \"\\\\circ\", true);\ndefineSymbol(math, bin, \"\\u00f7\", \"\\\\div\", true);\ndefineSymbol(math, bin, \"\\u00b1\", \"\\\\pm\", true);\ndefineSymbol(math, bin, \"\\u00d7\", \"\\\\times\", true);\ndefineSymbol(math, bin, \"\\u2229\", \"\\\\cap\", true);\ndefineSymbol(math, bin, \"\\u222a\", \"\\\\cup\", true);\ndefineSymbol(math, bin, \"\\u2216\", \"\\\\setminus\", true);\ndefineSymbol(math, bin, \"\\u2227\", \"\\\\land\");\ndefineSymbol(math, bin, \"\\u2228\", \"\\\\lor\");\ndefineSymbol(math, bin, \"\\u2227\", \"\\\\wedge\", true);\ndefineSymbol(math, bin, \"\\u2228\", \"\\\\vee\", true);\ndefineSymbol(math, open, \"\\u27e6\", \"\\\\llbracket\", true); // stmaryrd/semantic packages\ndefineSymbol(math, close, \"\\u27e7\", \"\\\\rrbracket\", true);\ndefineSymbol(math, open, \"\\u27e8\", \"\\\\langle\", true);\ndefineSymbol(math, open, \"\\u27ea\", \"\\\\lAngle\", true);\ndefineSymbol(math, open, \"\\u2989\", \"\\\\llangle\", true);\ndefineSymbol(math, open, \"|\", \"\\\\lvert\");\ndefineSymbol(math, open, \"\\u2016\", \"\\\\lVert\", true);\ndefineSymbol(math, textord, \"!\", \"\\\\oc\"); // cmll package\ndefineSymbol(math, textord, \"?\", \"\\\\wn\");\ndefineSymbol(math, textord, \"\\u2193\", \"\\\\shpos\");\ndefineSymbol(math, textord, \"\\u2195\", \"\\\\shift\");\ndefineSymbol(math, textord, \"\\u2191\", \"\\\\shneg\");\ndefineSymbol(math, close, \"?\", \"?\");\ndefineSymbol(math, close, \"!\", \"!\");\ndefineSymbol(math, close, \"‼\", \"‼\");\ndefineSymbol(math, close, \"\\u27e9\", \"\\\\rangle\", true);\ndefineSymbol(math, close, \"\\u27eb\", \"\\\\rAngle\", true);\ndefineSymbol(math, close, \"\\u298a\", \"\\\\rrangle\", true);\ndefineSymbol(math, close, \"|\", \"\\\\rvert\");\ndefineSymbol(math, close, \"\\u2016\", \"\\\\rVert\");\ndefineSymbol(math, open, \"\\u2983\", \"\\\\lBrace\", true); // stmaryrd/semantic packages\ndefineSymbol(math, close, \"\\u2984\", \"\\\\rBrace\", true);\ndefineSymbol(math, rel, \"=\", \"\\\\equal\", true);\ndefineSymbol(math, rel, \":\", \":\");\ndefineSymbol(math, rel, \"\\u2248\", \"\\\\approx\", true);\ndefineSymbol(math, rel, \"\\u2245\", \"\\\\cong\", true);\ndefineSymbol(math, rel, \"\\u2265\", \"\\\\ge\");\ndefineSymbol(math, rel, \"\\u2265\", \"\\\\geq\", true);\ndefineSymbol(math, rel, \"\\u2190\", \"\\\\gets\");\ndefineSymbol(math, rel, \">\", \"\\\\gt\", true);\ndefineSymbol(math, rel, \"\\u2208\", \"\\\\in\", true);\ndefineSymbol(math, rel, \"\\u2209\", \"\\\\notin\", true);\ndefineSymbol(math, rel, \"\\ue020\", \"\\\\@not\");\ndefineSymbol(math, rel, \"\\u2282\", \"\\\\subset\", true);\ndefineSymbol(math, rel, \"\\u2283\", \"\\\\supset\", true);\ndefineSymbol(math, rel, \"\\u2286\", \"\\\\subseteq\", true);\ndefineSymbol(math, rel, \"\\u2287\", \"\\\\supseteq\", true);\ndefineSymbol(math, rel, \"\\u2288\", \"\\\\nsubseteq\", true);\ndefineSymbol(math, rel, \"\\u2288\", \"\\\\nsubseteqq\");\ndefineSymbol(math, rel, \"\\u2289\", \"\\\\nsupseteq\", true);\ndefineSymbol(math, rel, \"\\u2289\", \"\\\\nsupseteqq\");\ndefineSymbol(math, rel, \"\\u22a8\", \"\\\\models\");\ndefineSymbol(math, rel, \"\\u2190\", \"\\\\leftarrow\", true);\ndefineSymbol(math, rel, \"\\u2264\", \"\\\\le\");\ndefineSymbol(math, rel, \"\\u2264\", \"\\\\leq\", true);\ndefineSymbol(math, rel, \"<\", \"\\\\lt\", true);\ndefineSymbol(math, rel, \"\\u2192\", \"\\\\rightarrow\", true);\ndefineSymbol(math, rel, \"\\u2192\", \"\\\\to\");\ndefineSymbol(math, rel, \"\\u2271\", \"\\\\ngeq\", true);\ndefineSymbol(math, rel, \"\\u2271\", \"\\\\ngeqq\");\ndefineSymbol(math, rel, \"\\u2271\", \"\\\\ngeqslant\");\ndefineSymbol(math, rel, \"\\u2270\", \"\\\\nleq\", true);\ndefineSymbol(math, rel, \"\\u2270\", \"\\\\nleqq\");\ndefineSymbol(math, rel, \"\\u2270\", \"\\\\nleqslant\");\ndefineSymbol(math, rel, \"\\u2aeb\", \"\\\\Perp\", true); //cmll package\ndefineSymbol(math, spacing, \"\\u00a0\", \"\\\\ \");\ndefineSymbol(math, spacing, \"\\u00a0\", \"\\\\space\");\n// Ref: LaTeX Source 2e: \\DeclareRobustCommand{\\nobreakspace}{%\ndefineSymbol(math, spacing, \"\\u00a0\", \"\\\\nobreakspace\");\ndefineSymbol(text, spacing, \"\\u00a0\", \"\\\\ \");\ndefineSymbol(text, spacing, \"\\u00a0\", \" \");\ndefineSymbol(text, spacing, \"\\u00a0\", \"\\\\space\");\ndefineSymbol(text, spacing, \"\\u00a0\", \"\\\\nobreakspace\");\ndefineSymbol(math, spacing, null, \"\\\\nobreak\");\ndefineSymbol(math, spacing, null, \"\\\\allowbreak\");\ndefineSymbol(math, punct, \",\", \",\");\ndefineSymbol(text, punct, \":\", \":\");\ndefineSymbol(math, punct, \";\", \";\");\ndefineSymbol(math, bin, \"\\u22bc\", \"\\\\barwedge\");\ndefineSymbol(math, bin, \"\\u22bb\", \"\\\\veebar\");\ndefineSymbol(math, bin, \"\\u2299\", \"\\\\odot\", true);\n// Firefox turns ⊕ into an emoji. So append \\uFE0E. Define Unicode character in macros, not here.\ndefineSymbol(math, bin, \"\\u2295\\uFE0E\", \"\\\\oplus\");\ndefineSymbol(math, bin, \"\\u2297\", \"\\\\otimes\", true);\ndefineSymbol(math, textord, \"\\u2202\", \"\\\\partial\", true);\ndefineSymbol(math, bin, \"\\u2298\", \"\\\\oslash\", true);\ndefineSymbol(math, bin, \"\\u229a\", \"\\\\circledcirc\", true);\ndefineSymbol(math, bin, \"\\u22a1\", \"\\\\boxdot\", true);\ndefineSymbol(math, bin, \"\\u25b3\", \"\\\\bigtriangleup\");\ndefineSymbol(math, bin, \"\\u25bd\", \"\\\\bigtriangledown\");\ndefineSymbol(math, bin, \"\\u2020\", \"\\\\dagger\");\ndefineSymbol(math, bin, \"\\u22c4\", \"\\\\diamond\");\ndefineSymbol(math, bin, \"\\u25c3\", \"\\\\triangleleft\");\ndefineSymbol(math, bin, \"\\u25b9\", \"\\\\triangleright\");\ndefineSymbol(math, open, \"{\", \"\\\\{\");\ndefineSymbol(text, textord, \"{\", \"\\\\{\");\ndefineSymbol(text, textord, \"{\", \"\\\\textbraceleft\");\ndefineSymbol(math, close, \"}\", \"\\\\}\");\ndefineSymbol(text, textord, \"}\", \"\\\\}\");\ndefineSymbol(text, textord, \"}\", \"\\\\textbraceright\");\ndefineSymbol(math, open, \"{\", \"\\\\lbrace\");\ndefineSymbol(math, close, \"}\", \"\\\\rbrace\");\ndefineSymbol(math, open, \"[\", \"\\\\lbrack\", true);\ndefineSymbol(text, textord, \"[\", \"\\\\lbrack\", true);\ndefineSymbol(math, close, \"]\", \"\\\\rbrack\", true);\ndefineSymbol(text, textord, \"]\", \"\\\\rbrack\", true);\ndefineSymbol(math, open, \"(\", \"\\\\lparen\", true);\ndefineSymbol(math, close, \")\", \"\\\\rparen\", true);\ndefineSymbol(math, open, \"⦇\", \"\\\\llparenthesis\", true);\ndefineSymbol(math, close, \"⦈\", \"\\\\rrparenthesis\", true);\ndefineSymbol(text, textord, \"<\", \"\\\\textless\", true); // in T1 fontenc\ndefineSymbol(text, textord, \">\", \"\\\\textgreater\", true); // in T1 fontenc\ndefineSymbol(math, open, \"\\u230a\", \"\\\\lfloor\", true);\ndefineSymbol(math, close, \"\\u230b\", \"\\\\rfloor\", true);\ndefineSymbol(math, open, \"\\u2308\", \"\\\\lceil\", true);\ndefineSymbol(math, close, \"\\u2309\", \"\\\\rceil\", true);\ndefineSymbol(math, textord, \"\\\\\", \"\\\\backslash\");\ndefineSymbol(math, textord, \"|\", \"|\");\ndefineSymbol(math, textord, \"|\", \"\\\\vert\");\ndefineSymbol(text, textord, \"|\", \"\\\\textbar\", true); // in T1 fontenc\ndefineSymbol(math, textord, \"\\u2016\", \"\\\\|\");\ndefineSymbol(math, textord, \"\\u2016\", \"\\\\Vert\");\ndefineSymbol(text, textord, \"\\u2016\", \"\\\\textbardbl\");\ndefineSymbol(text, textord, \"~\", \"\\\\textasciitilde\");\ndefineSymbol(text, textord, \"\\\\\", \"\\\\textbackslash\");\ndefineSymbol(text, textord, \"^\", \"\\\\textasciicircum\");\ndefineSymbol(math, rel, \"\\u2191\", \"\\\\uparrow\", true);\ndefineSymbol(math, rel, \"\\u21d1\", \"\\\\Uparrow\", true);\ndefineSymbol(math, rel, \"\\u2193\", \"\\\\downarrow\", true);\ndefineSymbol(math, rel, \"\\u21d3\", \"\\\\Downarrow\", true);\ndefineSymbol(math, rel, \"\\u2195\", \"\\\\updownarrow\", true);\ndefineSymbol(math, rel, \"\\u21d5\", \"\\\\Updownarrow\", true);\ndefineSymbol(math, op, \"\\u2210\", \"\\\\coprod\");\ndefineSymbol(math, op, \"\\u22c1\", \"\\\\bigvee\");\ndefineSymbol(math, op, \"\\u22c0\", \"\\\\bigwedge\");\ndefineSymbol(math, op, \"\\u2a04\", \"\\\\biguplus\");\ndefineSymbol(math, op, \"\\u2a04\", \"\\\\bigcupplus\");\ndefineSymbol(math, op, \"\\u2a03\", \"\\\\bigcupdot\");\ndefineSymbol(math, op, \"\\u2a07\", \"\\\\bigdoublevee\");\ndefineSymbol(math, op, \"\\u2a08\", \"\\\\bigdoublewedge\");\ndefineSymbol(math, op, \"\\u22c2\", \"\\\\bigcap\");\ndefineSymbol(math, op, \"\\u22c3\", \"\\\\bigcup\");\ndefineSymbol(math, op, \"\\u222b\", \"\\\\int\");\ndefineSymbol(math, op, \"\\u222b\", \"\\\\intop\");\ndefineSymbol(math, op, \"\\u222c\", \"\\\\iint\");\ndefineSymbol(math, op, \"\\u222d\", \"\\\\iiint\");\ndefineSymbol(math, op, \"\\u220f\", \"\\\\prod\");\ndefineSymbol(math, op, \"\\u2211\", \"\\\\sum\");\ndefineSymbol(math, op, \"\\u2a02\", \"\\\\bigotimes\");\ndefineSymbol(math, op, \"\\u2a01\", \"\\\\bigoplus\");\ndefineSymbol(math, op, \"\\u2a00\", \"\\\\bigodot\");\ndefineSymbol(math, op, \"\\u2a09\", \"\\\\bigtimes\");\ndefineSymbol(math, op, \"\\u222e\", \"\\\\oint\");\ndefineSymbol(math, op, \"\\u222f\", \"\\\\oiint\");\ndefineSymbol(math, op, \"\\u2230\", \"\\\\oiiint\");\ndefineSymbol(math, op, \"\\u2231\", \"\\\\intclockwise\");\ndefineSymbol(math, op, \"\\u2232\", \"\\\\varointclockwise\");\ndefineSymbol(math, op, \"\\u2a0c\", \"\\\\iiiint\");\ndefineSymbol(math, op, \"\\u2a0d\", \"\\\\intbar\");\ndefineSymbol(math, op, \"\\u2a0e\", \"\\\\intBar\");\ndefineSymbol(math, op, \"\\u2a0f\", \"\\\\fint\");\ndefineSymbol(math, op, \"\\u2a12\", \"\\\\rppolint\");\ndefineSymbol(math, op, \"\\u2a13\", \"\\\\scpolint\");\ndefineSymbol(math, op, \"\\u2a15\", \"\\\\pointint\");\ndefineSymbol(math, op, \"\\u2a16\", \"\\\\sqint\");\ndefineSymbol(math, op, \"\\u2a17\", \"\\\\intlarhk\");\ndefineSymbol(math, op, \"\\u2a18\", \"\\\\intx\");\ndefineSymbol(math, op, \"\\u2a19\", \"\\\\intcap\");\ndefineSymbol(math, op, \"\\u2a1a\", \"\\\\intcup\");\ndefineSymbol(math, op, \"\\u2a05\", \"\\\\bigsqcap\");\ndefineSymbol(math, op, \"\\u2a06\", \"\\\\bigsqcup\");\ndefineSymbol(math, op, \"\\u222b\", \"\\\\smallint\");\ndefineSymbol(text, inner, \"\\u2026\", \"\\\\textellipsis\");\ndefineSymbol(math, inner, \"\\u2026\", \"\\\\mathellipsis\");\ndefineSymbol(text, inner, \"\\u2026\", \"\\\\ldots\", true);\ndefineSymbol(math, inner, \"\\u2026\", \"\\\\ldots\", true);\ndefineSymbol(math, inner, \"\\u22f0\", \"\\\\iddots\", true);\ndefineSymbol(math, inner, \"\\u22ef\", \"\\\\@cdots\", true);\ndefineSymbol(math, inner, \"\\u22f1\", \"\\\\ddots\", true);\ndefineSymbol(math, textord, \"\\u22ee\", \"\\\\varvdots\"); // \\vdots is a macro\ndefineSymbol(text, textord, \"\\u22ee\", \"\\\\varvdots\");\ndefineSymbol(math, accent, \"\\u00b4\", \"\\\\acute\");\ndefineSymbol(math, accent, \"\\u0060\", \"\\\\grave\");\ndefineSymbol(math, accent, \"\\u00a8\", \"\\\\ddot\");\ndefineSymbol(math, accent, \"\\u2026\", \"\\\\dddot\");\ndefineSymbol(math, accent, \"\\u2026\\u002e\", \"\\\\ddddot\");\ndefineSymbol(math, accent, \"\\u007e\", \"\\\\tilde\");\ndefineSymbol(math, accent, \"\\u203e\", \"\\\\bar\");\ndefineSymbol(math, accent, \"\\u02d8\", \"\\\\breve\");\ndefineSymbol(math, accent, \"\\u02c7\", \"\\\\check\");\ndefineSymbol(math, accent, \"\\u005e\", \"\\\\hat\");\ndefineSymbol(math, accent, \"\\u2192\", \"\\\\vec\");\ndefineSymbol(math, accent, \"\\u02d9\", \"\\\\dot\");\ndefineSymbol(math, accent, \"\\u02da\", \"\\\\mathring\");\ndefineSymbol(math, mathord, \"\\u0131\", \"\\\\imath\", true);\ndefineSymbol(math, mathord, \"\\u0237\", \"\\\\jmath\", true);\ndefineSymbol(math, textord, \"\\u0131\", \"\\u0131\");\ndefineSymbol(math, textord, \"\\u0237\", \"\\u0237\");\ndefineSymbol(text, textord, \"\\u0131\", \"\\\\i\", true);\ndefineSymbol(text, textord, \"\\u0237\", \"\\\\j\", true);\ndefineSymbol(text, textord, \"\\u00f8\", \"\\\\o\", true);\ndefineSymbol(math, mathord, \"\\u00f8\", \"\\\\o\", true);\ndefineSymbol(text, textord, \"\\u00d8\", \"\\\\O\", true);\ndefineSymbol(math, mathord, \"\\u00d8\", \"\\\\O\", true);\ndefineSymbol(text, accent, \"\\u02ca\", \"\\\\'\"); // acute\ndefineSymbol(text, accent, \"\\u02cb\", \"\\\\`\"); // grave\ndefineSymbol(text, accent, \"\\u02c6\", \"\\\\^\"); // circumflex\ndefineSymbol(text, accent, \"\\u007e\", \"\\\\~\"); // tilde\ndefineSymbol(text, accent, \"\\u02c9\", \"\\\\=\"); // macron\ndefineSymbol(text, accent, \"\\u02d8\", \"\\\\u\"); // breve\ndefineSymbol(text, accent, \"\\u02d9\", \"\\\\.\"); // dot above\ndefineSymbol(text, accent, \"\\u00b8\", \"\\\\c\"); // cedilla\ndefineSymbol(text, accent, \"\\u02da\", \"\\\\r\"); // ring above\ndefineSymbol(text, accent, \"\\u02c7\", \"\\\\v\"); // caron\ndefineSymbol(text, accent, \"\\u00a8\", '\\\\\"'); // diaeresis\ndefineSymbol(text, accent, \"\\u02dd\", \"\\\\H\"); // double acute\ndefineSymbol(math, accent, \"\\u02ca\", \"\\\\'\"); // acute\ndefineSymbol(math, accent, \"\\u02cb\", \"\\\\`\"); // grave\ndefineSymbol(math, accent, \"\\u02c6\", \"\\\\^\"); // circumflex\ndefineSymbol(math, accent, \"\\u007e\", \"\\\\~\"); // tilde\ndefineSymbol(math, accent, \"\\u02c9\", \"\\\\=\"); // macron\ndefineSymbol(math, accent, \"\\u02d8\", \"\\\\u\"); // breve\ndefineSymbol(math, accent, \"\\u02d9\", \"\\\\.\"); // dot above\ndefineSymbol(math, accent, \"\\u00b8\", \"\\\\c\"); // cedilla\ndefineSymbol(math, accent, \"\\u02da\", \"\\\\r\"); // ring above\ndefineSymbol(math, accent, \"\\u02c7\", \"\\\\v\"); // caron\ndefineSymbol(math, accent, \"\\u00a8\", '\\\\\"'); // diaeresis\ndefineSymbol(math, accent, \"\\u02dd\", \"\\\\H\"); // double acute\n\n// These ligatures are detected and created in Parser.js's `formLigatures`.\nconst ligatures = {\n \"--\": true,\n \"---\": true,\n \"``\": true,\n \"''\": true\n};\n\ndefineSymbol(text, textord, \"\\u2013\", \"--\", true);\ndefineSymbol(text, textord, \"\\u2013\", \"\\\\textendash\");\ndefineSymbol(text, textord, \"\\u2014\", \"---\", true);\ndefineSymbol(text, textord, \"\\u2014\", \"\\\\textemdash\");\ndefineSymbol(text, textord, \"\\u2018\", \"`\", true);\ndefineSymbol(text, textord, \"\\u2018\", \"\\\\textquoteleft\");\ndefineSymbol(text, textord, \"\\u2019\", \"'\", true);\ndefineSymbol(text, textord, \"\\u2019\", \"\\\\textquoteright\");\ndefineSymbol(text, textord, \"\\u201c\", \"``\", true);\ndefineSymbol(text, textord, \"\\u201c\", \"\\\\textquotedblleft\");\ndefineSymbol(text, textord, \"\\u201d\", \"''\", true);\ndefineSymbol(text, textord, \"\\u201d\", \"\\\\textquotedblright\");\n// \\degree from gensymb package\ndefineSymbol(math, textord, \"\\u00b0\", \"\\\\degree\", true);\ndefineSymbol(text, textord, \"\\u00b0\", \"\\\\degree\");\n// \\textdegree from inputenc package\ndefineSymbol(text, textord, \"\\u00b0\", \"\\\\textdegree\", true);\n// TODO: In LaTeX, \\pounds can generate a different character in text and math\n// mode, but among our fonts, only Main-Regular defines this character \"163\".\ndefineSymbol(math, textord, \"\\u00a3\", \"\\\\pounds\");\ndefineSymbol(math, textord, \"\\u00a3\", \"\\\\mathsterling\", true);\ndefineSymbol(text, textord, \"\\u00a3\", \"\\\\pounds\");\ndefineSymbol(text, textord, \"\\u00a3\", \"\\\\textsterling\", true);\ndefineSymbol(math, textord, \"\\u2720\", \"\\\\maltese\");\ndefineSymbol(text, textord, \"\\u2720\", \"\\\\maltese\");\ndefineSymbol(math, textord, \"\\u20ac\", \"\\\\euro\", true);\ndefineSymbol(text, textord, \"\\u20ac\", \"\\\\euro\", true);\ndefineSymbol(text, textord, \"\\u20ac\", \"\\\\texteuro\");\ndefineSymbol(math, textord, \"\\u00a9\", \"\\\\copyright\", true);\ndefineSymbol(text, textord, \"\\u00a9\", \"\\\\textcopyright\");\ndefineSymbol(math, textord, \"\\u2300\", \"\\\\diameter\", true);\ndefineSymbol(text, textord, \"\\u2300\", \"\\\\diameter\");\n\n// Italic Greek\ndefineSymbol(math, textord, \"𝛤\", \"\\\\varGamma\");\ndefineSymbol(math, textord, \"𝛥\", \"\\\\varDelta\");\ndefineSymbol(math, textord, \"𝛩\", \"\\\\varTheta\");\ndefineSymbol(math, textord, \"𝛬\", \"\\\\varLambda\");\ndefineSymbol(math, textord, \"𝛯\", \"\\\\varXi\");\ndefineSymbol(math, textord, \"𝛱\", \"\\\\varPi\");\ndefineSymbol(math, textord, \"𝛴\", \"\\\\varSigma\");\ndefineSymbol(math, textord, \"𝛶\", \"\\\\varUpsilon\");\ndefineSymbol(math, textord, \"𝛷\", \"\\\\varPhi\");\ndefineSymbol(math, textord, \"𝛹\", \"\\\\varPsi\");\ndefineSymbol(math, textord, \"𝛺\", \"\\\\varOmega\");\ndefineSymbol(text, textord, \"𝛤\", \"\\\\varGamma\");\ndefineSymbol(text, textord, \"𝛥\", \"\\\\varDelta\");\ndefineSymbol(text, textord, \"𝛩\", \"\\\\varTheta\");\ndefineSymbol(text, textord, \"𝛬\", \"\\\\varLambda\");\ndefineSymbol(text, textord, \"𝛯\", \"\\\\varXi\");\ndefineSymbol(text, textord, \"𝛱\", \"\\\\varPi\");\ndefineSymbol(text, textord, \"𝛴\", \"\\\\varSigma\");\ndefineSymbol(text, textord, \"𝛶\", \"\\\\varUpsilon\");\ndefineSymbol(text, textord, \"𝛷\", \"\\\\varPhi\");\ndefineSymbol(text, textord, \"𝛹\", \"\\\\varPsi\");\ndefineSymbol(text, textord, \"𝛺\", \"\\\\varOmega\");\n\n\n// There are lots of symbols which are the same, so we add them in afterwards.\n// All of these are textords in math mode\nconst mathTextSymbols = '0123456789/@.\"';\nfor (let i = 0; i < mathTextSymbols.length; i++) {\n const ch = mathTextSymbols.charAt(i);\n defineSymbol(math, textord, ch, ch);\n}\n\n// All of these are textords in text mode\nconst textSymbols = '0123456789!@*()-=+\";:?/.,';\nfor (let i = 0; i < textSymbols.length; i++) {\n const ch = textSymbols.charAt(i);\n defineSymbol(text, textord, ch, ch);\n}\n\n// All of these are textords in text mode, and mathords in math mode\nconst letters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\nfor (let i = 0; i < letters.length; i++) {\n const ch = letters.charAt(i);\n defineSymbol(math, mathord, ch, ch);\n defineSymbol(text, textord, ch, ch);\n}\n\n// Some more letters in Unicode Basic Multilingual Plane.\nconst narrow = \"ÇÐÞçþℂℍℕℙℚℝℤℎℏℊℋℌℐℑℒℓ℘ℛℜℬℰℱℳℭℨ\";\nfor (let i = 0; i < narrow.length; i++) {\n const ch = narrow.charAt(i);\n defineSymbol(math, mathord, ch, ch);\n defineSymbol(text, textord, ch, ch);\n}\n\n// The next loop loads wide (surrogate pair) characters.\n// We support some letters in the Unicode range U+1D400 to U+1D7FF,\n// Mathematical Alphanumeric Symbols.\nlet wideChar = \"\";\nfor (let i = 0; i < letters.length; i++) {\n // The hex numbers in the next line are a surrogate pair.\n // 0xD835 is the high surrogate for all letters in the range we support.\n // 0xDC00 is the low surrogate for bold A.\n wideChar = String.fromCharCode(0xd835, 0xdc00 + i); // A-Z a-z bold\n defineSymbol(math, mathord, wideChar, wideChar);\n defineSymbol(text, textord, wideChar, wideChar);\n\n wideChar = String.fromCharCode(0xd835, 0xdc34 + i); // A-Z a-z italic\n defineSymbol(math, mathord, wideChar, wideChar);\n defineSymbol(text, textord, wideChar, wideChar);\n\n wideChar = String.fromCharCode(0xd835, 0xdc68 + i); // A-Z a-z bold italic\n defineSymbol(math, mathord, wideChar, wideChar);\n defineSymbol(text, textord, wideChar, wideChar);\n\n wideChar = String.fromCharCode(0xd835, 0xdd04 + i); // A-Z a-z Fractur\n defineSymbol(math, mathord, wideChar, wideChar);\n defineSymbol(text, textord, wideChar, wideChar);\n\n wideChar = String.fromCharCode(0xd835, 0xdda0 + i); // A-Z a-z sans-serif\n defineSymbol(math, mathord, wideChar, wideChar);\n defineSymbol(text, textord, wideChar, wideChar);\n\n wideChar = String.fromCharCode(0xd835, 0xddd4 + i); // A-Z a-z sans bold\n defineSymbol(math, mathord, wideChar, wideChar);\n defineSymbol(text, textord, wideChar, wideChar);\n\n wideChar = String.fromCharCode(0xd835, 0xde08 + i); // A-Z a-z sans italic\n defineSymbol(math, mathord, wideChar, wideChar);\n defineSymbol(text, textord, wideChar, wideChar);\n\n wideChar = String.fromCharCode(0xd835, 0xde70 + i); // A-Z a-z monospace\n defineSymbol(math, mathord, wideChar, wideChar);\n defineSymbol(text, textord, wideChar, wideChar);\n\n wideChar = String.fromCharCode(0xd835, 0xdd38 + i); // A-Z a-z double struck\n defineSymbol(math, mathord, wideChar, wideChar);\n defineSymbol(text, textord, wideChar, wideChar);\n\n const ch = letters.charAt(i);\n wideChar = String.fromCharCode(0xd835, 0xdc9c + i); // A-Z a-z calligraphic\n defineSymbol(math, mathord, ch, wideChar);\n defineSymbol(text, textord, ch, wideChar);\n}\n\n// Next, some wide character numerals\nfor (let i = 0; i < 10; i++) {\n wideChar = String.fromCharCode(0xd835, 0xdfce + i); // 0-9 bold\n defineSymbol(math, mathord, wideChar, wideChar);\n defineSymbol(text, textord, wideChar, wideChar);\n\n wideChar = String.fromCharCode(0xd835, 0xdfe2 + i); // 0-9 sans serif\n defineSymbol(math, mathord, wideChar, wideChar);\n defineSymbol(text, textord, wideChar, wideChar);\n\n wideChar = String.fromCharCode(0xd835, 0xdfec + i); // 0-9 bold sans\n defineSymbol(math, mathord, wideChar, wideChar);\n defineSymbol(text, textord, wideChar, wideChar);\n\n wideChar = String.fromCharCode(0xd835, 0xdff6 + i); // 0-9 monospace\n defineSymbol(math, mathord, wideChar, wideChar);\n defineSymbol(text, textord, wideChar, wideChar);\n}\n\n/*\n * Neither Firefox nor Chrome support hard line breaks or soft line breaks.\n * (Despite https://www.w3.org/Math/draft-spec/mathml.html#chapter3_presm.lbattrs)\n * So Temml has work-arounds for both hard and soft breaks.\n * The work-arounds sadly do not work simultaneously. Any top-level hard\n * break makes soft line breaks impossible.\n *\n * Hard breaks are simulated by creating a <mtable> and putting each line in its own <mtr>.\n *\n * To create soft line breaks, Temml avoids using the <semantics> and <annotation> tags.\n * Then the top level of a <math> element can be occupied by <mrow> elements, and the browser\n * will break after a <mrow> if the expression extends beyond the container limit.\n *\n * The default is for soft line breaks after each top-level binary or\n * relational operator, per TeXbook p. 173. So we gather the expression into <mrow>s so that\n * each <mrow> ends in a binary or relational operator.\n *\n * An option is for soft line breaks before an \"=\" sign. That changes the <mrow>s.\n *\n * Soft line breaks will not work in Chromium and Safari, only Firefox.\n *\n * Hopefully browsers will someday do their own linebreaking and we will be able to delete\n * much of this module.\n */\n\nconst openDelims = \"([{⌊⌈⟨⟮⎰⟦⦃\";\nconst closeDelims = \")]}⌋⌉⟩⟯⎱⟦⦄\";\n\nfunction setLineBreaks(expression, wrapMode, isDisplayMode) {\n const mtrs = [];\n let mrows = [];\n let block = [];\n let numTopLevelEquals = 0;\n let i = 0;\n let level = 0;\n while (i < expression.length) {\n while (expression[i] instanceof DocumentFragment) {\n expression.splice(i, 1, ...expression[i].children); // Expand the fragment.\n }\n const node = expression[i];\n if (node.attributes && node.attributes.linebreak &&\n node.attributes.linebreak === \"newline\") {\n // A hard line break. Create a <mtr> for the current block.\n if (block.length > 0) {\n mrows.push(new mathMLTree.MathNode(\"mrow\", block));\n }\n mrows.push(node);\n block = [];\n const mtd = new mathMLTree.MathNode(\"mtd\", mrows);\n mtd.style.textAlign = \"left\";\n mtrs.push(new mathMLTree.MathNode(\"mtr\", [mtd]));\n mrows = [];\n i += 1;\n continue\n }\n block.push(node);\n if (node.type && node.type === \"mo\" && node.children.length === 1 &&\n !Object.prototype.hasOwnProperty.call(node.attributes, \"movablelimits\")) {\n const ch = node.children[0].text;\n if (openDelims.indexOf(ch) > -1) {\n level += 1;\n } else if (closeDelims.indexOf(ch) > -1) {\n level -= 1;\n } else if (level === 0 && wrapMode === \"=\" && ch === \"=\") {\n numTopLevelEquals += 1;\n if (numTopLevelEquals > 1) {\n block.pop();\n // Start a new block. (Insert a soft linebreak.)\n const element = new mathMLTree.MathNode(\"mrow\", block);\n mrows.push(element);\n block = [node];\n }\n } else if (level === 0 && wrapMode === \"tex\" && ch !== \"∇\") {\n // Check if the following node is a \\nobreak text node, e.g. \"~\"\"\n const next = i < expression.length - 1 ? expression[i + 1] : null;\n let glueIsFreeOfNobreak = true;\n if (\n !(\n next &&\n next.type === \"mtext\" &&\n next.attributes.linebreak &&\n next.attributes.linebreak === \"nobreak\"\n )\n ) {\n // We may need to start a new block.\n // First, put any post-operator glue on same line as operator.\n for (let j = i + 1; j < expression.length; j++) {\n const nd = expression[j];\n if (\n nd.type &&\n nd.type === \"mspace\" &&\n !(nd.attributes.linebreak && nd.attributes.linebreak === \"newline\")\n ) {\n block.push(nd);\n i += 1;\n if (\n nd.attributes &&\n nd.attributes.linebreak &&\n nd.attributes.linebreak === \"nobreak\"\n ) {\n glueIsFreeOfNobreak = false;\n }\n } else {\n break;\n }\n }\n }\n if (glueIsFreeOfNobreak) {\n // Start a new block. (Insert a soft linebreak.)\n const element = new mathMLTree.MathNode(\"mrow\", block);\n mrows.push(element);\n block = [];\n }\n }\n }\n i += 1;\n }\n if (block.length > 0) {\n const element = new mathMLTree.MathNode(\"mrow\", block);\n mrows.push(element);\n }\n if (mtrs.length > 0) {\n const mtd = new mathMLTree.MathNode(\"mtd\", mrows);\n mtd.style.textAlign = \"left\";\n const mtr = new mathMLTree.MathNode(\"mtr\", [mtd]);\n mtrs.push(mtr);\n const mtable = new mathMLTree.MathNode(\"mtable\", mtrs);\n if (!isDisplayMode) {\n mtable.setAttribute(\"columnalign\", \"left\");\n mtable.setAttribute(\"rowspacing\", \"0em\");\n }\n return mtable\n }\n return mathMLTree.newDocumentFragment(mrows);\n}\n\n/**\n * This file converts a parse tree into a corresponding MathML tree. The main\n * entry point is the `buildMathML` function, which takes a parse tree from the\n * parser.\n */\n\n\n/**\n * Takes a symbol and converts it into a MathML text node after performing\n * optional replacement from symbols.js.\n */\nconst makeText = function(text, mode, style) {\n if (\n symbols[mode][text] &&\n symbols[mode][text].replace &&\n text.charCodeAt(0) !== 0xd835 &&\n !(\n Object.prototype.hasOwnProperty.call(ligatures, text) &&\n style &&\n ((style.fontFamily && style.fontFamily.slice(4, 6) === \"tt\") ||\n (style.font && style.font.slice(4, 6) === \"tt\"))\n )\n ) {\n text = symbols[mode][text].replace;\n }\n\n return new mathMLTree.TextNode(text);\n};\n\nconst copyChar = (newRow, child) => {\n if (newRow.children.length === 0 ||\n newRow.children[newRow.children.length - 1].type !== \"mtext\") {\n const mtext = new mathMLTree.MathNode(\n \"mtext\",\n [new mathMLTree.TextNode(child.children[0].text)]\n );\n newRow.children.push(mtext);\n } else {\n newRow.children[newRow.children.length - 1].children[0].text += child.children[0].text;\n }\n};\n\nconst consolidateText = mrow => {\n // If possible, consolidate adjacent <mtext> elements into a single element.\n if (mrow.type !== \"mrow\" && mrow.type !== \"mstyle\") { return mrow }\n if (mrow.children.length === 0) { return mrow } // empty group, e.g., \\text{}\n const newRow = new mathMLTree.MathNode(\"mrow\");\n for (let i = 0; i < mrow.children.length; i++) {\n const child = mrow.children[i];\n if (child.type === \"mtext\" && Object.keys(child.attributes).length === 0) {\n copyChar(newRow, child);\n } else if (child.type === \"mrow\") {\n // We'll also check the children of an mrow. One level only. No recursion.\n let canConsolidate = true;\n for (let j = 0; j < child.children.length; j++) {\n const grandChild = child.children[j];\n if (grandChild.type !== \"mtext\" || Object.keys(child.attributes).length !== 0) {\n canConsolidate = false;\n break\n }\n }\n if (canConsolidate) {\n for (let j = 0; j < child.children.length; j++) {\n const grandChild = child.children[j];\n copyChar(newRow, grandChild);\n }\n } else {\n newRow.children.push(child);\n }\n } else {\n newRow.children.push(child);\n }\n }\n for (let i = 0; i < newRow.children.length; i++) {\n if (newRow.children[i].type === \"mtext\") {\n const mtext = newRow.children[i];\n // Firefox does not render a space at either end of an <mtext> string.\n // To get proper rendering, we replace leading or trailing spaces with no-break spaces.\n if (mtext.children[0].text.charAt(0) === \" \") {\n mtext.children[0].text = \"\\u00a0\" + mtext.children[0].text.slice(1);\n }\n const L = mtext.children[0].text.length;\n if (L > 0 && mtext.children[0].text.charAt(L - 1) === \" \") {\n mtext.children[0].text = mtext.children[0].text.slice(0, -1) + \"\\u00a0\";\n }\n for (const [key, value] of Object.entries(mrow.attributes)) {\n mtext.attributes[key] = value;\n }\n }\n }\n if (newRow.children.length === 1 && newRow.children[0].type === \"mtext\") {\n return newRow.children[0]; // A consolidated <mtext>\n } else {\n return newRow\n }\n};\n\n/**\n * Wrap the given array of nodes in an <mrow> node if needed, i.e.,\n * unless the array has length 1. Always returns a single node.\n */\nconst makeRow = function(body, semisimple = false) {\n if (body.length === 1 && !(body[0] instanceof DocumentFragment)) {\n return body[0];\n } else if (!semisimple) {\n // Suppress spacing on <mo> nodes at both ends of the row.\n if (body[0] instanceof MathNode && body[0].type === \"mo\" && !body[0].attributes.fence) {\n body[0].attributes.lspace = \"0em\";\n body[0].attributes.rspace = \"0em\";\n }\n const end = body.length - 1;\n if (body[end] instanceof MathNode && body[end].type === \"mo\" && !body[end].attributes.fence) {\n body[end].attributes.lspace = \"0em\";\n body[end].attributes.rspace = \"0em\";\n }\n }\n return new mathMLTree.MathNode(\"mrow\", body);\n};\n\n/**\n * Check for <mi>.</mi> which is how a dot renders in MathML,\n * or <mo separator=\"true\" lspace=\"0em\" rspace=\"0em\">,</mo>\n * which is how a braced comma {,} renders in MathML\n */\nfunction isNumberPunctuation(group) {\n if (!group) {\n return false\n }\n if (group.type === 'mi' && group.children.length === 1) {\n const child = group.children[0];\n return child instanceof TextNode && child.text === '.'\n } else if (group.type === \"mtext\" && group.children.length === 1) {\n const child = group.children[0];\n return child instanceof TextNode && child.text === '\\u2008' // punctuation space\n } else if (group.type === 'mo' && group.children.length === 1 &&\n group.getAttribute('separator') === 'true' &&\n group.getAttribute('lspace') === '0em' &&\n group.getAttribute('rspace') === '0em') {\n const child = group.children[0];\n return child instanceof TextNode && child.text === ','\n } else {\n return false\n }\n}\nconst isComma = (expression, i) => {\n const node = expression[i];\n const followingNode = expression[i + 1];\n return (node.type === \"atom\" && node.text === \",\") &&\n // Don't consolidate if there is a space after the comma.\n node.loc && followingNode.loc && node.loc.end === followingNode.loc.start\n};\n\nconst isRel = item => {\n return (item.type === \"atom\" && item.family === \"rel\") ||\n (item.type === \"mclass\" && item.mclass === \"mrel\")\n};\n\n/**\n * Takes a list of nodes, builds them, and returns a list of the generated\n * MathML nodes. Also do a couple chores along the way:\n * (1) Suppress spacing when an author wraps an operator w/braces, as in {=}.\n * (2) Suppress spacing between two adjacent relations.\n */\nconst buildExpression = function(expression, style, semisimple = false) {\n if (!semisimple && expression.length === 1) {\n const group = buildGroup$1(expression[0], style);\n if (group instanceof MathNode && group.type === \"mo\") {\n // When TeX writers want to suppress spacing on an operator,\n // they often put the operator by itself inside braces.\n group.setAttribute(\"lspace\", \"0em\");\n group.setAttribute(\"rspace\", \"0em\");\n }\n return [group];\n }\n\n const groups = [];\n const groupArray = [];\n let lastGroup;\n for (let i = 0; i < expression.length; i++) {\n groupArray.push(buildGroup$1(expression[i], style));\n }\n\n for (let i = 0; i < groupArray.length; i++) {\n const group = groupArray[i];\n\n // Suppress spacing between adjacent relations\n if (i < expression.length - 1 && isRel(expression[i]) && isRel(expression[i + 1])) {\n group.setAttribute(\"rspace\", \"0em\");\n }\n if (i > 0 && isRel(expression[i]) && isRel(expression[i - 1])) {\n group.setAttribute(\"lspace\", \"0em\");\n }\n\n // Concatenate numbers\n if (group.type === 'mn' && lastGroup && lastGroup.type === 'mn') {\n // Concatenate <mn>...</mn> followed by <mi>.</mi>\n lastGroup.children.push(...group.children);\n continue\n } else if (isNumberPunctuation(group) && lastGroup && lastGroup.type === 'mn') {\n // Concatenate <mn>...</mn> followed by <mi>.</mi>\n lastGroup.children.push(...group.children);\n continue\n } else if (lastGroup && lastGroup.type === \"mn\" && i < groupArray.length - 1 &&\n groupArray[i + 1].type === \"mn\" && isComma(expression, i)) {\n lastGroup.children.push(...group.children);\n continue\n } else if (group.type === 'mn' && isNumberPunctuation(lastGroup)) {\n // Concatenate <mi>.</mi> followed by <mn>...</mn>\n group.children = [...lastGroup.children, ...group.children];\n groups.pop();\n } else if ((group.type === 'msup' || group.type === 'msub') &&\n group.children.length >= 1 && lastGroup &&\n (lastGroup.type === 'mn' || isNumberPunctuation(lastGroup))) {\n // Put preceding <mn>...</mn> or <mi>.</mi> inside base of\n // <msup><mn>...base...</mn>...exponent...</msup> (or <msub>)\n const base = group.children[0];\n if (base instanceof MathNode && base.type === 'mn' && lastGroup) {\n base.children = [...lastGroup.children, ...base.children];\n groups.pop();\n }\n }\n groups.push(group);\n lastGroup = group;\n }\n return groups\n};\n\n/**\n * Equivalent to buildExpression, but wraps the elements in an <mrow>\n * if there's more than one. Returns a single node instead of an array.\n */\nconst buildExpressionRow = function(expression, style, semisimple = false) {\n return makeRow(buildExpression(expression, style, semisimple), semisimple);\n};\n\n/**\n * Takes a group from the parser and calls the appropriate groupBuilders function\n * on it to produce a MathML node.\n */\nconst buildGroup$1 = function(group, style) {\n if (!group) {\n return new mathMLTree.MathNode(\"mrow\");\n }\n\n if (_mathmlGroupBuilders[group.type]) {\n // Call the groupBuilders function\n const result = _mathmlGroupBuilders[group.type](group, style);\n return result;\n } else {\n throw new ParseError(\"Got group of unknown type: '\" + group.type + \"'\");\n }\n};\n\nconst glue$1 = _ => {\n return new mathMLTree.MathNode(\"mtd\", [], [], { padding: \"0\", width: \"50%\" })\n};\n\nconst labelContainers = [\"mrow\", \"mtd\", \"mtable\", \"mtr\"];\nconst getLabel = parent => {\n for (const node of parent.children) {\n if (node.type && labelContainers.includes(node.type)) {\n if (node.classes && node.classes[0] === \"tml-label\") {\n const label = node.label;\n return label\n } else {\n const label = getLabel(node);\n if (label) { return label }\n }\n } else if (!node.type) {\n const label = getLabel(node);\n if (label) { return label }\n }\n }\n};\n\nconst taggedExpression = (expression, tag, style, leqno) => {\n tag = buildExpressionRow(tag[0].body, style);\n tag = consolidateText(tag); // tag is now an <mtext> element\n tag.classes.push(\"tml-tag\"); // to be available for \\ref\n\n const label = getLabel(expression); // from a \\label{} function.\n expression = new mathMLTree.MathNode(\"mtd\", [expression]);\n const rowArray = [glue$1(), expression, glue$1()];\n rowArray[leqno ? 0 : 2].children.push(tag);\n const mtr = new mathMLTree.MathNode(\"mtr\", rowArray, [\"tml-tageqn\"]);\n if (label) { mtr.setAttribute(\"id\", label); }\n const table = new mathMLTree.MathNode(\"mtable\", [mtr]);\n table.style.width = \"100%\";\n table.setAttribute(\"displaystyle\", \"true\");\n return table\n};\n\n/**\n * Takes a full parse tree and settings and builds a MathML representation of\n * it.\n */\nfunction buildMathML(tree, texExpression, style, settings) {\n // Strip off outer tag wrapper for processing below.\n let tag = null;\n if (tree.length === 1 && tree[0].type === \"tag\") {\n tag = tree[0].tag;\n tree = tree[0].body;\n }\n\n const expression = buildExpression(tree, style);\n\n if (expression.length === 1 && expression[0] instanceof AnchorNode) {\n return expression[0]\n }\n\n const wrap = (settings.displayMode || settings.annotate) ? \"none\" : settings.wrap;\n\n const n1 = expression.length === 0 ? null : expression[0];\n let wrapper = expression.length === 1 && tag === null && (n1 instanceof MathNode)\n ? expression[0]\n : setLineBreaks(expression, wrap, settings.displayMode);\n\n if (tag) {\n wrapper = taggedExpression(wrapper, tag, style, settings.leqno);\n }\n\n if (settings.annotate) {\n // Build a TeX annotation of the source\n const annotation = new mathMLTree.MathNode(\n \"annotation\", [new mathMLTree.TextNode(texExpression)]);\n annotation.setAttribute(\"encoding\", \"application/x-tex\");\n wrapper = new mathMLTree.MathNode(\"semantics\", [wrapper, annotation]);\n }\n\n const math = new mathMLTree.MathNode(\"math\", [wrapper]);\n\n if (settings.xml) {\n math.setAttribute(\"xmlns\", \"http://www.w3.org/1998/Math/MathML\");\n }\n if (settings.displayMode) {\n math.setAttribute(\"display\", \"block\");\n math.style.display = \"block math\"; // necessary in Chromium.\n // Firefox and Safari do not recognize display: \"block math\".\n // Set a class so that the CSS file can set display: block.\n math.classes = [\"tml-display\"];\n }\n return math;\n}\n\n// Identify letters to which we'll attach a combining accent character\nconst smalls = \"acegıȷmnopqrsuvwxyzαγεηικμνοπρςστυχωϕ𝐚𝐜𝐞𝐠𝐦𝐧𝐨𝐩𝐪𝐫𝐬𝐮𝐯𝐰𝐱𝐲𝐳\";\n\n// From the KaTeX font metrics, identify letters whose accents need a italic correction.\nconst smallNudge = \"DHKLUcegorsuvxyzΠΥΨαδηιμνοτυχϵ\";\nconst mediumNudge = \"BCEGIMNOPQRSTXZlpqtwΓΘΞΣΦΩβεζθξρςφψϑϕϱ\";\nconst largeNudge = \"AFJdfΔΛ\";\n\nconst mathmlBuilder$a = (group, style) => {\n const accentNode = group.isStretchy\n ? stretchy.accentNode(group)\n : new mathMLTree.MathNode(\"mo\", [makeText(group.label, group.mode)]);\n if (!group.isStretchy) {\n accentNode.setAttribute(\"stretchy\", \"false\"); // Keep Firefox from stretching \\check\n }\n if (group.label !== \"\\\\vec\") {\n accentNode.style.mathDepth = \"0\"; // not scriptstyle\n // Don't use attribute accent=\"true\" because MathML Core eliminates a needed space.\n }\n const tag = group.label === \"\\\\c\" ? \"munder\" : \"mover\";\n const needsWbkVertShift = needsWebkitVerticalShift.has(group.label);\n if (tag === \"mover\" && group.mode === \"math\" && (!group.isStretchy) && group.base.text\n && group.base.text.length === 1) {\n const text = group.base.text;\n const isVec = group.label === \"\\\\vec\";\n const vecPostfix = isVec === \"\\\\vec\" ? \"-vec\" : \"\";\n if (isVec) {\n accentNode.classes.push(\"tml-vec\"); // Firefox sizing of \\vec arrow\n }\n const wbkPostfix = isVec ? \"-vec\" : needsWbkVertShift ? \"-acc\" : \"\";\n if (smallNudge.indexOf(text) > -1) {\n accentNode.classes.push(`chr-sml${vecPostfix}`);\n accentNode.classes.push(`wbk-sml${wbkPostfix}`);\n } else if (mediumNudge.indexOf(text) > -1) {\n accentNode.classes.push(`chr-med${vecPostfix}`);\n accentNode.classes.push(`wbk-med${wbkPostfix}`);\n } else if (largeNudge.indexOf(text) > -1) {\n accentNode.classes.push(`chr-lrg${vecPostfix}`);\n accentNode.classes.push(`wbk-lrg${wbkPostfix}`);\n } else if (isVec) {\n accentNode.classes.push(`wbk-vec`);\n } else if (needsWbkVertShift) {\n accentNode.classes.push(`wbk-acc`);\n }\n } else if (needsWbkVertShift) {\n // text-mode accents\n accentNode.classes.push(\"wbk-acc\");\n }\n const node = new mathMLTree.MathNode(tag, [buildGroup$1(group.base, style), accentNode]);\n return node;\n};\n\nconst nonStretchyAccents = new Set([\n \"\\\\acute\",\n \"\\\\check\",\n \"\\\\grave\",\n \"\\\\ddot\",\n \"\\\\dddot\",\n \"\\\\ddddot\",\n \"\\\\tilde\",\n \"\\\\bar\",\n \"\\\\breve\",\n \"\\\\check\",\n \"\\\\hat\",\n \"\\\\vec\",\n \"\\\\dot\",\n \"\\\\mathring\"\n]);\n\nconst needsWebkitVerticalShift = new Set([\n \"\\\\acute\",\n \"\\\\bar\",\n \"\\\\breve\",\n \"\\\\check\",\n \"\\\\dot\",\n \"\\\\ddot\",\n \"\\\\grave\",\n \"\\\\hat\",\n \"\\\\mathring\",\n \"\\\\`\", \"\\\\'\", \"\\\\^\", \"\\\\=\", \"\\\\u\", \"\\\\.\", '\\\\\"', \"\\\\r\", \"\\\\H\", \"\\\\v\"\n]);\n\nconst combiningChar = {\n \"\\\\`\": \"\\u0300\",\n \"\\\\'\": \"\\u0301\",\n \"\\\\^\": \"\\u0302\",\n \"\\\\~\": \"\\u0303\",\n \"\\\\=\": \"\\u0304\",\n \"\\\\u\": \"\\u0306\",\n \"\\\\.\": \"\\u0307\",\n '\\\\\"': \"\\u0308\",\n \"\\\\r\": \"\\u030A\",\n \"\\\\H\": \"\\u030B\",\n \"\\\\v\": \"\\u030C\",\n \"\\\\c\": \"\\u0327\"\n};\n\n// Accents\ndefineFunction({\n type: \"accent\",\n names: [\n \"\\\\acute\",\n \"\\\\grave\",\n \"\\\\ddot\",\n \"\\\\dddot\",\n \"\\\\ddddot\",\n \"\\\\tilde\",\n \"\\\\bar\",\n \"\\\\breve\",\n \"\\\\check\",\n \"\\\\hat\",\n \"\\\\vec\",\n \"\\\\dot\",\n \"\\\\mathring\",\n \"\\\\overparen\",\n \"\\\\widecheck\",\n \"\\\\widehat\",\n \"\\\\wideparen\",\n \"\\\\widetilde\",\n \"\\\\overrightarrow\",\n \"\\\\overleftarrow\",\n \"\\\\Overrightarrow\",\n \"\\\\overleftrightarrow\",\n \"\\\\overgroup\",\n \"\\\\overleftharpoon\",\n \"\\\\overrightharpoon\"\n ],\n props: {\n numArgs: 1\n },\n handler: (context, args) => {\n const base = normalizeArgument(args[0]);\n\n const isStretchy = !nonStretchyAccents.has(context.funcName);\n\n return {\n type: \"accent\",\n mode: context.parser.mode,\n label: context.funcName,\n isStretchy,\n base\n };\n },\n mathmlBuilder: mathmlBuilder$a\n});\n\n// Text-mode accents\ndefineFunction({\n type: \"accent\",\n names: [\"\\\\'\", \"\\\\`\", \"\\\\^\", \"\\\\~\", \"\\\\=\", \"\\\\c\", \"\\\\u\", \"\\\\.\", '\\\\\"', \"\\\\r\", \"\\\\H\", \"\\\\v\"],\n props: {\n numArgs: 1,\n allowedInText: true,\n allowedInMath: true,\n argTypes: [\"primitive\"]\n },\n handler: (context, args) => {\n const base = normalizeArgument(args[0]);\n const mode = context.parser.mode;\n\n if (mode === \"math\" && context.parser.settings.strict) {\n // LaTeX only writes a warning. It doesn't stop. We'll issue the same warning.\n // eslint-disable-next-line no-console\n console.log(`Temml parse error: Command ${context.funcName} is invalid in math mode.`);\n }\n\n if (mode === \"text\" && base.text && base.text.length === 1\n && context.funcName in combiningChar && smalls.indexOf(base.text) > -1) {\n // Return a combining accent character\n return {\n type: \"textord\",\n mode: \"text\",\n text: base.text + combiningChar[context.funcName]\n }\n } else if (context.funcName === \"\\\\c\" && mode === \"text\" && base.text\n && base.text.length === 1) {\n // combining cedilla\n return { type: \"textord\", mode: \"text\", text: base.text + \"\\u0327\" }\n } else {\n // Build up the accent\n return {\n type: \"accent\",\n mode,\n label: context.funcName,\n isStretchy: false,\n base\n }\n }\n },\n mathmlBuilder: mathmlBuilder$a\n});\n\ndefineFunction({\n type: \"accentUnder\",\n names: [\n \"\\\\underleftarrow\",\n \"\\\\underrightarrow\",\n \"\\\\underleftrightarrow\",\n \"\\\\undergroup\",\n \"\\\\underparen\",\n \"\\\\utilde\"\n ],\n props: {\n numArgs: 1\n },\n handler: ({ parser, funcName }, args) => {\n const base = args[0];\n return {\n type: \"accentUnder\",\n mode: parser.mode,\n label: funcName,\n base: base\n };\n },\n mathmlBuilder: (group, style) => {\n const accentNode = stretchy.accentNode(group);\n accentNode.style[\"math-depth\"] = 0;\n const node = new mathMLTree.MathNode(\"munder\", [\n buildGroup$1(group.base, style),\n accentNode\n ]);\n return node;\n }\n});\n\n/**\n * This file does conversion between units. In particular, it provides\n * calculateSize to convert other units into CSS units.\n */\n\n\nconst ptPerUnit = {\n // Convert to CSS (Postscipt) points, not TeX points\n // https://en.wikibooks.org/wiki/LaTeX/Lengths and\n // https://tex.stackexchange.com/a/8263\n pt: 800 / 803, // convert TeX point to CSS (Postscript) point\n pc: (12 * 800) / 803, // pica\n dd: ((1238 / 1157) * 800) / 803, // didot\n cc: ((14856 / 1157) * 800) / 803, // cicero (12 didot)\n nd: ((685 / 642) * 800) / 803, // new didot\n nc: ((1370 / 107) * 800) / 803, // new cicero (12 new didot)\n sp: ((1 / 65536) * 800) / 803, // scaled point (TeX's internal smallest unit)\n mm: (25.4 / 72),\n cm: (2.54 / 72),\n in: (1 / 72),\n px: (96 / 72)\n};\n\n/**\n * Determine whether the specified unit (either a string defining the unit\n * or a \"size\" parse node containing a unit field) is valid.\n */\nconst validUnits = [\n \"em\",\n \"ex\",\n \"mu\",\n \"pt\",\n \"mm\",\n \"cm\",\n \"in\",\n \"px\",\n \"bp\",\n \"pc\",\n \"dd\",\n \"cc\",\n \"nd\",\n \"nc\",\n \"sp\"\n];\n\nconst validUnit = function(unit) {\n if (typeof unit !== \"string\") {\n unit = unit.unit;\n }\n return validUnits.indexOf(unit) > -1\n};\n\nconst emScale = styleLevel => {\n const scriptLevel = Math.max(styleLevel - 1, 0);\n return [1, 0.7, 0.5][scriptLevel]\n};\n\n/*\n * Convert a \"size\" parse node (with numeric \"number\" and string \"unit\" fields,\n * as parsed by functions.js argType \"size\") into a CSS value.\n */\nconst calculateSize = function(sizeValue, style) {\n let number = sizeValue.number;\n if (style.maxSize[0] < 0 && number > 0) {\n return { number: 0, unit: \"em\" }\n }\n const unit = sizeValue.unit;\n switch (unit) {\n case \"mm\":\n case \"cm\":\n case \"in\":\n case \"px\": {\n const numInCssPts = number * ptPerUnit[unit];\n if (numInCssPts > style.maxSize[1]) {\n return { number: style.maxSize[1], unit: \"pt\" }\n }\n return { number, unit }; // absolute CSS units.\n }\n case \"em\":\n case \"ex\": {\n // In TeX, em and ex do not change size in \\scriptstyle.\n if (unit === \"ex\") { number *= 0.431; }\n number = Math.min(number / emScale(style.level), style.maxSize[0]);\n return { number: utils.round(number), unit: \"em\" };\n }\n case \"bp\": {\n if (number > style.maxSize[1]) { number = style.maxSize[1]; }\n return { number, unit: \"pt\" }; // TeX bp is a CSS pt. (1/72 inch).\n }\n case \"pt\":\n case \"pc\":\n case \"dd\":\n case \"cc\":\n case \"nd\":\n case \"nc\":\n case \"sp\": {\n number = Math.min(number * ptPerUnit[unit], style.maxSize[1]);\n return { number: utils.round(number), unit: \"pt\" }\n }\n case \"mu\": {\n number = Math.min(number / 18, style.maxSize[0]);\n return { number: utils.round(number), unit: \"em\" }\n }\n default:\n throw new ParseError(\"Invalid unit: '\" + unit + \"'\")\n }\n};\n\n// Helper functions\n\nconst padding$1 = width => {\n const node = new mathMLTree.MathNode(\"mspace\");\n node.setAttribute(\"width\", width + \"em\");\n return node\n};\n\nconst paddedNode = (group, lspace = 0.3, rspace = 0, mustSmash = false) => {\n if (group == null && rspace === 0) { return padding$1(lspace) }\n const row = group ? [group] : [];\n if (lspace !== 0) { row.unshift(padding$1(lspace)); }\n if (rspace > 0) { row.push(padding$1(rspace)); }\n if (mustSmash) {\n // Used for the bottom arrow in a {CD} environment\n const mpadded = new mathMLTree.MathNode(\"mpadded\", row);\n mpadded.setAttribute(\"height\", \"0.1px\"); // Don't use 0. WebKit would hide it.\n return mpadded\n } else {\n return new mathMLTree.MathNode(\"mrow\", row)\n }\n};\n\nconst labelSize = (size, scriptLevel) => Number(size) / emScale(scriptLevel);\n\nconst munderoverNode = (fName, body, below, style) => {\n const arrowNode = stretchy.mathMLnode(fName);\n // Is this the short part of a mhchem equilibrium arrow?\n const isEq = fName.slice(1, 3) === \"eq\";\n const minWidth = fName.charAt(1) === \"x\"\n ? \"1.75\" // mathtools extensible arrows are ≥ 1.75em long\n : fName.slice(2, 4) === \"cd\"\n ? \"3.0\" // cd package arrows\n : isEq\n ? \"1.0\" // The shorter harpoon of a mhchem equilibrium arrow\n : \"2.0\"; // other mhchem arrows\n // TODO: When Firefox supports minsize, use the next line.\n //arrowNode.setAttribute(\"minsize\", String(minWidth) + \"em\")\n arrowNode.setAttribute(\"lspace\", \"0\");\n arrowNode.setAttribute(\"rspace\", (isEq ? \"0.5em\" : \"0\"));\n\n // <munderover> upper and lower labels are set to scriptlevel by MathML\n // So we have to adjust our label dimensions accordingly.\n const labelStyle = style.withLevel(style.level < 2 ? 2 : 3);\n const minArrowWidth = labelSize(minWidth, labelStyle.level);\n // The dummyNode will be inside a <mover> inside a <mover>\n // So it will be at scriptlevel 3\n const dummyWidth = labelSize(minWidth, 3);\n const emptyLabel = paddedNode(null, minArrowWidth.toFixed(4), 0);\n const dummyNode = paddedNode(null, dummyWidth.toFixed(4), 0);\n // The arrow is a little longer than the label. Set a spacer length.\n const space = labelSize((isEq ? 0 : 0.3), labelStyle.level).toFixed(4);\n let upperNode;\n let lowerNode;\n\n const gotUpper = (body && body.body &&\n // \\hphantom visible content\n (body.body.body || body.body.length > 0));\n if (gotUpper) {\n let label = buildGroup$1(body, labelStyle);\n const mustSmash = (fName === \"\\\\\\\\cdrightarrow\" || fName === \"\\\\\\\\cdleftarrow\");\n label = paddedNode(label, space, space, mustSmash);\n // Since Firefox does not support minsize, stack a invisible node\n // on top of the label. Its width will serve as a min-width.\n // TODO: Refactor this after Firefox supports minsize.\n upperNode = new mathMLTree.MathNode(\"mover\", [label, dummyNode]);\n }\n const gotLower = (below && below.body &&\n (below.body.body || below.body.length > 0));\n if (gotLower) {\n let label = buildGroup$1(below, labelStyle);\n label = paddedNode(label, space, space);\n lowerNode = new mathMLTree.MathNode(\"munder\", [label, dummyNode]);\n }\n\n let node;\n if (!gotUpper && !gotLower) {\n node = new mathMLTree.MathNode(\"mover\", [arrowNode, emptyLabel]);\n } else if (gotUpper && gotLower) {\n node = new mathMLTree.MathNode(\"munderover\", [arrowNode, lowerNode, upperNode]);\n } else if (gotUpper) {\n node = new mathMLTree.MathNode(\"mover\", [arrowNode, upperNode]);\n } else {\n node = new mathMLTree.MathNode(\"munder\", [arrowNode, lowerNode]);\n }\n if (minWidth === \"3.0\") { node.style.height = \"1em\"; } // CD environment\n node.setAttribute(\"accent\", \"false\"); // Necessary for MS Word\n return node\n};\n\n// Stretchy arrows with an optional argument\ndefineFunction({\n type: \"xArrow\",\n names: [\n \"\\\\xleftarrow\",\n \"\\\\xrightarrow\",\n \"\\\\xLeftarrow\",\n \"\\\\xRightarrow\",\n \"\\\\xleftrightarrow\",\n \"\\\\xLeftrightarrow\",\n \"\\\\xhookleftarrow\",\n \"\\\\xhookrightarrow\",\n \"\\\\xmapsto\",\n \"\\\\xrightharpoondown\",\n \"\\\\xrightharpoonup\",\n \"\\\\xleftharpoondown\",\n \"\\\\xleftharpoonup\",\n \"\\\\xlongequal\",\n \"\\\\xtwoheadrightarrow\",\n \"\\\\xtwoheadleftarrow\",\n \"\\\\xtofrom\", // expfeil\n \"\\\\xleftrightharpoons\", // mathtools\n \"\\\\xrightleftharpoons\", // mathtools\n // The next 7 functions are here only to support mhchem\n \"\\\\yields\",\n \"\\\\yieldsLeft\",\n \"\\\\mesomerism\",\n \"\\\\longrightharpoonup\",\n \"\\\\longleftharpoondown\",\n \"\\\\yieldsLeftRight\",\n \"\\\\chemequilibrium\",\n // The next 3 functions are here only to support the {CD} environment.\n \"\\\\\\\\cdrightarrow\",\n \"\\\\\\\\cdleftarrow\",\n \"\\\\\\\\cdlongequal\"\n ],\n props: {\n numArgs: 1,\n numOptionalArgs: 1\n },\n handler({ parser, funcName }, args, optArgs) {\n return {\n type: \"xArrow\",\n mode: parser.mode,\n name: funcName,\n body: args[0],\n below: optArgs[0]\n };\n },\n mathmlBuilder(group, style) {\n // Build the arrow and its labels.\n const node = munderoverNode(group.name, group.body, group.below, style);\n // Create operator spacing for a relation.\n const row = [node];\n row.unshift(padding$1(0.2778));\n row.push(padding$1(0.2778));\n return new mathMLTree.MathNode(\"mrow\", row)\n }\n});\n\nconst arrowComponent = {\n \"\\\\equilibriumRight\": [\"\\\\longrightharpoonup\", \"\\\\eqleftharpoondown\"],\n \"\\\\equilibriumLeft\": [\"\\\\eqrightharpoonup\", \"\\\\longleftharpoondown\"]\n};\n\n// Math fonts do not have a single glyph for these two mhchem functions.\n// So we stack a pair of single harpoons.\ndefineFunction({\n type: \"stackedArrow\",\n names: [\n \"\\\\equilibriumRight\",\n \"\\\\equilibriumLeft\"\n ],\n props: {\n numArgs: 1,\n numOptionalArgs: 1\n },\n handler({ parser, funcName }, args, optArgs) {\n const lowerArrowBody = args[0]\n ? {\n type: \"hphantom\",\n mode: parser.mode,\n body: args[0]\n }\n : null;\n const upperArrowBelow = optArgs[0]\n ? {\n type: \"hphantom\",\n mode: parser.mode,\n body: optArgs[0]\n }\n : null;\n return {\n type: \"stackedArrow\",\n mode: parser.mode,\n name: funcName,\n body: args[0],\n upperArrowBelow,\n lowerArrowBody,\n below: optArgs[0]\n };\n },\n mathmlBuilder(group, style) {\n const topLabel = arrowComponent[group.name][0];\n const botLabel = arrowComponent[group.name][1];\n const topArrow = munderoverNode(topLabel, group.body, group.upperArrowBelow, style);\n const botArrow = munderoverNode(botLabel, group.lowerArrowBody, group.below, style);\n let wrapper;\n\n const raiseNode = new mathMLTree.MathNode(\"mpadded\", [topArrow]);\n raiseNode.setAttribute(\"voffset\", \"0.3em\");\n raiseNode.setAttribute(\"height\", \"+0.3em\");\n raiseNode.setAttribute(\"depth\", \"-0.3em\");\n // One of the arrows is given ~zero width. so the other has the same horzontal alignment.\n if (group.name === \"\\\\equilibriumLeft\") {\n const botNode = new mathMLTree.MathNode(\"mpadded\", [botArrow]);\n botNode.setAttribute(\"width\", \"0.5em\");\n wrapper = new mathMLTree.MathNode(\n \"mpadded\",\n [padding$1(0.2778), botNode, raiseNode, padding$1(0.2778)]\n );\n } else {\n raiseNode.setAttribute(\"width\", (group.name === \"\\\\equilibriumRight\" ? \"0.5em\" : \"0\"));\n wrapper = new mathMLTree.MathNode(\n \"mpadded\",\n [padding$1(0.2778), raiseNode, botArrow, padding$1(0.2778)]\n );\n }\n\n wrapper.setAttribute(\"voffset\", \"-0.18em\");\n wrapper.setAttribute(\"height\", \"-0.18em\");\n wrapper.setAttribute(\"depth\", \"+0.18em\");\n return wrapper\n }\n});\n\n/**\n * All registered environments.\n * `environments.js` exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary via `environments.js`.\n */\nconst _environments = {};\n\nfunction defineEnvironment({ type, names, props, handler, mathmlBuilder }) {\n // Set default values of environments.\n const data = {\n type,\n numArgs: props.numArgs || 0,\n allowedInText: false,\n numOptionalArgs: 0,\n handler\n };\n for (let i = 0; i < names.length; ++i) {\n _environments[names[i]] = data;\n }\n if (mathmlBuilder) {\n _mathmlGroupBuilders[type] = mathmlBuilder;\n }\n}\n\n/**\n * Asserts that the node is of the given type and returns it with stricter\n * typing. Throws if the node's type does not match.\n */\nfunction assertNodeType(node, type) {\n if (!node || node.type !== type) {\n throw new Error(\n `Expected node of type ${type}, but got ` +\n (node ? `node of type ${node.type}` : String(node))\n );\n }\n return node;\n}\n\n/**\n * Returns the node more strictly typed iff it is of the given type. Otherwise,\n * returns null.\n */\nfunction assertSymbolNodeType(node) {\n const typedNode = checkSymbolNodeType(node);\n if (!typedNode) {\n throw new Error(\n `Expected node of symbol group type, but got ` +\n (node ? `node of type ${node.type}` : String(node))\n );\n }\n return typedNode;\n}\n\n/**\n * Returns the node more strictly typed iff it is of the given type. Otherwise,\n * returns null.\n */\nfunction checkSymbolNodeType(node) {\n if (node && (node.type === \"atom\" ||\n Object.prototype.hasOwnProperty.call(NON_ATOMS, node.type))) {\n return node;\n }\n return null;\n}\n\nconst cdArrowFunctionName = {\n \">\": \"\\\\\\\\cdrightarrow\",\n \"<\": \"\\\\\\\\cdleftarrow\",\n \"=\": \"\\\\\\\\cdlongequal\",\n A: \"\\\\uparrow\",\n V: \"\\\\downarrow\",\n \"|\": \"\\\\Vert\",\n \".\": \"no arrow\"\n};\n\nconst newCell = () => {\n // Create an empty cell, to be filled below with parse nodes.\n return { type: \"styling\", body: [], mode: \"math\", scriptLevel: \"display\" };\n};\n\nconst isStartOfArrow = (node) => {\n return node.type === \"textord\" && node.text === \"@\";\n};\n\nconst isLabelEnd = (node, endChar) => {\n return (node.type === \"mathord\" || node.type === \"atom\") && node.text === endChar;\n};\n\nfunction cdArrow(arrowChar, labels, parser) {\n // Return a parse tree of an arrow and its labels.\n // This acts in a way similar to a macro expansion.\n const funcName = cdArrowFunctionName[arrowChar];\n switch (funcName) {\n case \"\\\\\\\\cdrightarrow\":\n case \"\\\\\\\\cdleftarrow\":\n return parser.callFunction(funcName, [labels[0]], [labels[1]]);\n case \"\\\\uparrow\":\n case \"\\\\downarrow\": {\n const leftLabel = parser.callFunction(\"\\\\\\\\cdleft\", [labels[0]], []);\n const bareArrow = {\n type: \"atom\",\n text: funcName,\n mode: \"math\",\n family: \"rel\"\n };\n const sizedArrow = parser.callFunction(\"\\\\Big\", [bareArrow], []);\n const rightLabel = parser.callFunction(\"\\\\\\\\cdright\", [labels[1]], []);\n const arrowGroup = {\n type: \"ordgroup\",\n mode: \"math\",\n body: [leftLabel, sizedArrow, rightLabel],\n semisimple: true\n };\n return parser.callFunction(\"\\\\\\\\cdparent\", [arrowGroup], []);\n }\n case \"\\\\\\\\cdlongequal\":\n return parser.callFunction(\"\\\\\\\\cdlongequal\", [], []);\n case \"\\\\Vert\": {\n const arrow = { type: \"textord\", text: \"\\\\Vert\", mode: \"math\" };\n return parser.callFunction(\"\\\\Big\", [arrow], []);\n }\n default:\n return { type: \"textord\", text: \" \", mode: \"math\" };\n }\n}\n\nfunction parseCD(parser) {\n // Get the array's parse nodes with \\\\ temporarily mapped to \\cr.\n const parsedRows = [];\n parser.gullet.beginGroup();\n parser.gullet.macros.set(\"\\\\cr\", \"\\\\\\\\\\\\relax\");\n parser.gullet.beginGroup();\n while (true) {\n // Get the parse nodes for the next row.\n parsedRows.push(parser.parseExpression(false, \"\\\\\\\\\"));\n parser.gullet.endGroup();\n parser.gullet.beginGroup();\n const next = parser.fetch().text;\n if (next === \"&\" || next === \"\\\\\\\\\") {\n parser.consume();\n } else if (next === \"\\\\end\") {\n if (parsedRows[parsedRows.length - 1].length === 0) {\n parsedRows.pop(); // final row ended in \\\\\n }\n break;\n } else {\n throw new ParseError(\"Expected \\\\\\\\ or \\\\cr or \\\\end\", parser.nextToken);\n }\n }\n\n let row = [];\n const body = [row];\n\n // Loop thru the parse nodes. Collect them into cells and arrows.\n for (let i = 0; i < parsedRows.length; i++) {\n // Start a new row.\n const rowNodes = parsedRows[i];\n // Create the first cell.\n let cell = newCell();\n\n for (let j = 0; j < rowNodes.length; j++) {\n if (!isStartOfArrow(rowNodes[j])) {\n // If a parseNode is not an arrow, it goes into a cell.\n cell.body.push(rowNodes[j]);\n } else {\n // Parse node j is an \"@\", the start of an arrow.\n // Before starting on the arrow, push the cell into `row`.\n row.push(cell);\n\n // Now collect parseNodes into an arrow.\n // The character after \"@\" defines the arrow type.\n j += 1;\n const arrowChar = assertSymbolNodeType(rowNodes[j]).text;\n\n // Create two empty label nodes. We may or may not use them.\n const labels = new Array(2);\n labels[0] = { type: \"ordgroup\", mode: \"math\", body: [] };\n labels[1] = { type: \"ordgroup\", mode: \"math\", body: [] };\n\n // Process the arrow.\n if (\"=|.\".indexOf(arrowChar) > -1) ; else if (\"<>AV\".indexOf(arrowChar) > -1) {\n // Four arrows, `@>>>`, `@<<<`, `@AAA`, and `@VVV`, each take\n // two optional labels. E.g. the right-point arrow syntax is\n // really: @>{optional label}>{optional label}>\n // Collect parseNodes into labels.\n for (let labelNum = 0; labelNum < 2; labelNum++) {\n let inLabel = true;\n for (let k = j + 1; k < rowNodes.length; k++) {\n if (isLabelEnd(rowNodes[k], arrowChar)) {\n inLabel = false;\n j = k;\n break;\n }\n if (isStartOfArrow(rowNodes[k])) {\n throw new ParseError(\n \"Missing a \" + arrowChar + \" character to complete a CD arrow.\",\n rowNodes[k]\n );\n }\n\n labels[labelNum].body.push(rowNodes[k]);\n }\n if (inLabel) {\n // isLabelEnd never returned a true.\n throw new ParseError(\n \"Missing a \" + arrowChar + \" character to complete a CD arrow.\",\n rowNodes[j]\n );\n }\n }\n } else {\n throw new ParseError(`Expected one of \"<>AV=|.\" after @.`);\n }\n\n // Now join the arrow to its labels.\n const arrow = cdArrow(arrowChar, labels, parser);\n\n // Wrap the arrow in a styling node\n row.push(arrow);\n // In CD's syntax, cells are implicit. That is, everything that\n // is not an arrow gets collected into a cell. So create an empty\n // cell now. It will collect upcoming parseNodes.\n cell = newCell();\n }\n }\n if (i % 2 === 0) {\n // Even-numbered rows consist of: cell, arrow, cell, arrow, ... cell\n // The last cell is not yet pushed into `row`, so:\n row.push(cell);\n } else {\n // Odd-numbered rows consist of: vert arrow, empty cell, ... vert arrow\n // Remove the empty cell that was placed at the beginning of `row`.\n row.shift();\n }\n row = [];\n body.push(row);\n }\n body.pop();\n\n // End row group\n parser.gullet.endGroup();\n // End array group defining \\\\\n parser.gullet.endGroup();\n\n return {\n type: \"array\",\n mode: \"math\",\n body,\n tags: null,\n labels: new Array(body.length + 1).fill(\"\"),\n envClasses: [\"jot\", \"cd\"],\n cols: [],\n hLinesBeforeRow: new Array(body.length + 1).fill([])\n };\n}\n\n// The functions below are not available for general use.\n// They are here only for internal use by the {CD} environment in placing labels\n// next to vertical arrows.\n\n// We don't need any such functions for horizontal arrows because we can reuse\n// the functionality that already exists for extensible arrows.\n\ndefineFunction({\n type: \"cdlabel\",\n names: [\"\\\\\\\\cdleft\", \"\\\\\\\\cdright\"],\n props: {\n numArgs: 1\n },\n handler({ parser, funcName }, args) {\n return {\n type: \"cdlabel\",\n mode: parser.mode,\n side: funcName.slice(4),\n label: args[0]\n };\n },\n mathmlBuilder(group, style) {\n if (group.label.body.length === 0) {\n return new mathMLTree.MathNode(\"mrow\", style) // empty label\n }\n // Abuse an <mtable> to create vertically centered content.\n const mrow = buildGroup$1(group.label, style);\n if (group.side === \"left\") {\n mrow.classes.push(\"tml-shift-left\");\n }\n const mtd = new mathMLTree.MathNode(\"mtd\", [mrow]);\n mtd.style.padding = \"0\";\n const mtr = new mathMLTree.MathNode(\"mtr\", [mtd]);\n const mtable = new mathMLTree.MathNode(\"mtable\", [mtr]);\n const label = new mathMLTree.MathNode(\"mpadded\", [mtable]);\n // Set the label width to zero so that the arrow will be centered under the corner cell.\n label.setAttribute(\"width\", \"0.1px\"); // Don't use 0. WebKit would hide it.\n label.setAttribute(\"displaystyle\", \"false\");\n label.setAttribute(\"scriptlevel\", \"1\");\n return label;\n }\n});\n\ndefineFunction({\n type: \"cdlabelparent\",\n names: [\"\\\\\\\\cdparent\"],\n props: {\n numArgs: 1\n },\n handler({ parser }, args) {\n return {\n type: \"cdlabelparent\",\n mode: parser.mode,\n fragment: args[0]\n };\n },\n mathmlBuilder(group, style) {\n return new mathMLTree.MathNode(\"mrow\", [buildGroup$1(group.fragment, style)]);\n }\n});\n\nconst ordGroup = (body) => {\n return {\n \"type\": \"ordgroup\",\n \"mode\": \"math\",\n \"body\": body,\n \"semisimple\": true\n }\n};\n\nconst phantom = (body, type) => {\n return {\n \"type\": type,\n \"mode\": \"math\",\n \"body\": ordGroup(body)\n }\n};\n\n/*\n * A helper for \\bordermatrix.\n * parseArray() has parsed the tokens as if the environment\n * was \\begin{matrix}. That parse tree is this functions input.\n * Here, we rearrange the parse tree to get one that will\n * result in TeX \\bordermatrix.\n * The final result includes a {pmatrix}, which is the bottom\n * half of a <mover> element. The top of the <mover> contains\n * the \\bordermatrix headings. The top section also contains the\n * contents of the bottom {pmatrix}. Those elements are hidden via\n * \\hphantom, but they ensure that column widths are the same top and\n * bottom.\n *\n * We also create a left {matrix} with a single column that contains\n * elements shifted out of the matrix. The left {matrix} also\n * contains \\vphantom copies of the other {pmatrix} elements.\n * As before, this ensures consistent row heights of left and main.\n */\n\nconst bordermatrixParseTree = (matrix, delimiters) => {\n const body = matrix.body;\n body[0].shift(); // dispose of top left cell\n\n // Create an array for the left column\n const leftColumnBody = new Array(body.length - 1).fill().map(() => []);\n for (let i = 1; i < body.length; i++) {\n // The visible part of the cell\n leftColumnBody[i - 1].push(body[i].shift());\n // A vphantom with contents from the pmatrix, to set minimum cell height\n const phantomBody = [];\n for (let j = 0; j < body[i].length; j++) {\n phantomBody.push(body[i][j]);\n }\n leftColumnBody[i - 1].push(phantom(phantomBody, \"vphantom\"));\n }\n\n // Create an array for the top row\n const topRowBody = new Array(body.length).fill().map(() => []);\n for (let j = 0; j < body[0].length; j++) {\n topRowBody[0].push(body[0][j]);\n }\n // Copy the rest of the pmatrix, but squashed via \\hphantom\n for (let i = 1; i < body.length; i++) {\n for (let j = 0; j < body[0].length; j++) {\n topRowBody[i].push(phantom(body[i][j].body, \"hphantom\"));\n }\n }\n\n // Squash the top row of the main {pmatrix}\n for (let j = 0; j < body[0].length; j++) {\n body[0][j] = phantom(body[0][j].body, \"hphantom\");\n }\n\n // Now wrap the arrays in the proper parse nodes.\n\n const leftColumn = {\n type: \"array\",\n mode: \"math\",\n body: leftColumnBody,\n cols: [{ type: \"align\", align: \"c\" }],\n rowGaps: new Array(leftColumnBody.length - 1).fill(null),\n hLinesBeforeRow: new Array(leftColumnBody.length + 1).fill().map(() => []),\n envClasses: [],\n scriptLevel: \"text\",\n arraystretch: 1,\n labels: new Array(leftColumnBody.length).fill(\"\"),\n arraycolsep: { \"number\": 0.04, unit: \"em\" }\n };\n\n const topRow = {\n type: \"array\",\n mode: \"math\",\n body: topRowBody,\n cols: new Array(topRowBody.length).fill({ type: \"align\", align: \"c\" }),\n rowGaps: new Array(topRowBody.length - 1).fill(null),\n hLinesBeforeRow: new Array(topRowBody.length + 1).fill().map(() => []),\n envClasses: [],\n scriptLevel: \"text\",\n arraystretch: 1,\n labels: new Array(topRowBody.length).fill(\"\"),\n arraycolsep: null\n };\n\n const topWrapper = {\n type: \"styling\",\n mode: \"math\",\n scriptLevel: \"text\", // Must set this explicitly.\n body: [topRow] // Default level is \"script\".\n };\n\n const container = {\n type: \"leftright\",\n mode: \"math\",\n body: [matrix],\n left: delimiters ? delimiters[0] : \"(\",\n right: delimiters ? delimiters[1] : \")\",\n rightColor: undefined\n };\n\n const base = {\n type: \"op\", // The base of a TeX \\overset\n mode: \"math\",\n limits: true,\n alwaysHandleSupSub: true,\n parentIsSupSub: true,\n symbol: false,\n suppressBaseShift: true,\n body: [container]\n };\n\n const mover = {\n type: \"supsub\", // We're using the MathML equivalent\n mode: \"math\", // of TeX \\overset.\n stack: true,\n base: base, // That keeps the {pmatrix} aligned with\n sup: topWrapper, // the math centerline.\n sub: null\n };\n\n return ordGroup([leftColumn, mover])\n};\n\n/**\n * Lexing or parsing positional information for error reporting.\n * This object is immutable.\n */\nclass SourceLocation {\n constructor(lexer, start, end) {\n this.lexer = lexer; // Lexer holding the input string.\n this.start = start; // Start offset, zero-based inclusive.\n this.end = end; // End offset, zero-based exclusive.\n }\n\n /**\n * Merges two `SourceLocation`s from location providers, given they are\n * provided in order of appearance.\n * - Returns the first one's location if only the first is provided.\n * - Returns a merged range of the first and the last if both are provided\n * and their lexers match.\n * - Otherwise, returns null.\n */\n static range(first, second) {\n if (!second) {\n return first && first.loc;\n } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) {\n return null;\n } else {\n return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end);\n }\n }\n}\n\n/**\n * Interface required to break circular dependency between Token, Lexer, and\n * ParseError.\n */\n\n/**\n * The resulting token returned from `lex`.\n *\n * It consists of the token text plus some position information.\n * The position information is essentially a range in an input string,\n * but instead of referencing the bare input string, we refer to the lexer.\n * That way it is possible to attach extra metadata to the input string,\n * like for example a file name or similar.\n *\n * The position information is optional, so it is OK to construct synthetic\n * tokens if appropriate. Not providing available position information may\n * lead to degraded error reporting, though.\n */\nclass Token {\n constructor(\n text, // the text of this token\n loc\n ) {\n this.text = text;\n this.loc = loc;\n }\n\n /**\n * Given a pair of tokens (this and endToken), compute a `Token` encompassing\n * the whole input range enclosed by these two.\n */\n range(\n endToken, // last token of the range, inclusive\n text // the text of the newly constructed token\n ) {\n return new Token(text, SourceLocation.range(this, endToken));\n }\n}\n\n// In TeX, there are actually three sets of dimensions, one for each of\n// textstyle, scriptstyle, and scriptscriptstyle. These are\n// provided in the the arrays below, in that order.\n//\n\n// Math style is not quite the same thing as script level.\nconst StyleLevel = {\n DISPLAY: 0,\n TEXT: 1,\n SCRIPT: 2,\n SCRIPTSCRIPT: 3\n};\n\n/**\n * All registered global/built-in macros.\n * `macros.js` exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary via `macros.js`.\n */\nconst _macros = {};\n\n// This function might one day accept an additional argument and do more things.\nfunction defineMacro(name, body) {\n _macros[name] = body;\n}\n\n/**\n * Predefined macros for Temml.\n * This can be used to define some commands in terms of others.\n */\n\nconst macros = _macros;\n\n//////////////////////////////////////////////////////////////////////\n// macro tools\n\ndefineMacro(\"\\\\noexpand\", function(context) {\n // The expansion is the token itself; but that token is interpreted\n // as if its meaning were \\relax if it is a control sequence that\n // would ordinarily be expanded by TeXs expansion rules.\n const t = context.popToken();\n if (context.isExpandable(t.text)) {\n t.noexpand = true;\n t.treatAsRelax = true;\n }\n return { tokens: [t], numArgs: 0 };\n});\n\ndefineMacro(\"\\\\expandafter\", function(context) {\n // TeX first reads the token that comes immediately after \\expandafter,\n // without expanding it; lets call this token t. Then TeX reads the\n // token that comes after t (and possibly more tokens, if that token\n // has an argument), replacing it by its expansion. Finally TeX puts\n // t back in front of that expansion.\n const t = context.popToken();\n context.expandOnce(true); // expand only an expandable token\n return { tokens: [t], numArgs: 0 };\n});\n\n// LaTeX's \\@firstoftwo{#1}{#2} expands to #1, skipping #2\n// TeX source: \\long\\def\\@firstoftwo#1#2{#1}\ndefineMacro(\"\\\\@firstoftwo\", function(context) {\n const args = context.consumeArgs(2);\n return { tokens: args[0], numArgs: 0 };\n});\n\n// LaTeX's \\@secondoftwo{#1}{#2} expands to #2, skipping #1\n// TeX source: \\long\\def\\@secondoftwo#1#2{#2}\ndefineMacro(\"\\\\@secondoftwo\", function(context) {\n const args = context.consumeArgs(2);\n return { tokens: args[1], numArgs: 0 };\n});\n\n// LaTeX's \\@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded)\n// symbol that isn't a space, consuming any spaces but not consuming the\n// first nonspace character. If that nonspace character matches #1, then\n// the macro expands to #2; otherwise, it expands to #3.\ndefineMacro(\"\\\\@ifnextchar\", function(context) {\n const args = context.consumeArgs(3); // symbol, if, else\n context.consumeSpaces();\n const nextToken = context.future();\n if (args[0].length === 1 && args[0][0].text === nextToken.text) {\n return { tokens: args[1], numArgs: 0 };\n } else {\n return { tokens: args[2], numArgs: 0 };\n }\n});\n\n// LaTeX's \\@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol.\n// If it is `*`, then it consumes the symbol, and the macro expands to #1;\n// otherwise, the macro expands to #2 (without consuming the symbol).\n// TeX source: \\def\\@ifstar#1{\\@ifnextchar *{\\@firstoftwo{#1}}}\ndefineMacro(\"\\\\@ifstar\", \"\\\\@ifnextchar *{\\\\@firstoftwo{#1}}\");\n\n// LaTeX's \\TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode\ndefineMacro(\"\\\\TextOrMath\", function(context) {\n const args = context.consumeArgs(2);\n if (context.mode === \"text\") {\n return { tokens: args[0], numArgs: 0 };\n } else {\n return { tokens: args[1], numArgs: 0 };\n }\n});\n\nconst stringFromArg = arg => {\n // Reverse the order of the arg and return a string.\n let str = \"\";\n for (let i = arg.length - 1; i > -1; i--) {\n str += arg[i].text;\n }\n return str\n};\n\n// Lookup table for parsing numbers in base 8 through 16\nconst digitToNumber = {\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3,\n 4: 4,\n 5: 5,\n 6: 6,\n 7: 7,\n 8: 8,\n 9: 9,\n a: 10,\n A: 10,\n b: 11,\n B: 11,\n c: 12,\n C: 12,\n d: 13,\n D: 13,\n e: 14,\n E: 14,\n f: 15,\n F: 15\n};\n\nconst nextCharNumber = context => {\n const numStr = context.future().text;\n if (numStr === \"EOF\") { return [null, \"\"] }\n return [digitToNumber[numStr.charAt(0)], numStr]\n};\n\nconst appendCharNumbers = (number, numStr, base) => {\n for (let i = 1; i < numStr.length; i++) {\n const digit = digitToNumber[numStr.charAt(i)];\n number *= base;\n number += digit;\n }\n return number\n};\n\n// TeX \\char makes a literal character (catcode 12) using the following forms:\n// (see The TeXBook, p. 43)\n// \\char123 -- decimal\n// \\char'123 -- octal\n// \\char\"123 -- hex\n// \\char`x -- character that can be written (i.e. isn't active)\n// \\char`\\x -- character that cannot be written (e.g. %)\n// These all refer to characters from the font, so we turn them into special\n// calls to a function \\@char dealt with in the Parser.\ndefineMacro(\"\\\\char\", function(context) {\n let token = context.popToken();\n let base;\n let number = \"\";\n if (token.text === \"'\") {\n base = 8;\n token = context.popToken();\n } else if (token.text === '\"') {\n base = 16;\n token = context.popToken();\n } else if (token.text === \"`\") {\n token = context.popToken();\n if (token.text[0] === \"\\\\\") {\n number = token.text.charCodeAt(1);\n } else if (token.text === \"EOF\") {\n throw new ParseError(\"\\\\char` missing argument\");\n } else {\n number = token.text.charCodeAt(0);\n }\n } else {\n base = 10;\n }\n if (base) {\n // Parse a number in the given base, starting with first `token`.\n let numStr = token.text;\n number = digitToNumber[numStr.charAt(0)];\n if (number == null || number >= base) {\n throw new ParseError(`Invalid base-${base} digit ${token.text}`);\n }\n number = appendCharNumbers(number, numStr, base);\n let digit;\n [digit, numStr] = nextCharNumber(context);\n while (digit != null && digit < base) {\n number *= base;\n number += digit;\n number = appendCharNumbers(number, numStr, base);\n context.popToken();\n [digit, numStr] = nextCharNumber(context);\n }\n }\n return `\\\\@char{${number}}`;\n});\n\nfunction recreateArgStr(context) {\n // Recreate the macro's original argument string from the array of parse tokens.\n const tokens = context.consumeArgs(1)[0];\n let str = \"\";\n let expectedLoc = tokens[tokens.length - 1].loc.start;\n for (let i = tokens.length - 1; i >= 0; i--) {\n const actualLoc = tokens[i].loc.start;\n if (actualLoc > expectedLoc) {\n // context.consumeArgs has eaten a space.\n str += \" \";\n expectedLoc = actualLoc;\n }\n str += tokens[i].text;\n expectedLoc += tokens[i].text.length;\n }\n return str\n}\n\n// The Latin Modern font renders <mi>√</mi> at the wrong vertical alignment.\n// This macro provides a better rendering.\ndefineMacro(\"\\\\surd\", '\\\\sqrt{\\\\vphantom{|}}');\n\n// See comment for \\oplus in symbols.js.\ndefineMacro(\"\\u2295\", \"\\\\oplus\");\n\n// Since Temml has no \\par, ignore \\long.\ndefineMacro(\"\\\\long\", \"\");\n\n//////////////////////////////////////////////////////////////////////\n// Grouping\n// \\let\\bgroup={ \\let\\egroup=}\ndefineMacro(\"\\\\bgroup\", \"{\");\ndefineMacro(\"\\\\egroup\", \"}\");\n\n// Symbols from latex.ltx:\n// \\def~{\\nobreakspace{}}\n// \\def\\lq{`}\n// \\def\\rq{'}\n// \\def \\aa {\\r a}\ndefineMacro(\"~\", \"\\\\nobreakspace\");\ndefineMacro(\"\\\\lq\", \"`\");\ndefineMacro(\"\\\\rq\", \"'\");\ndefineMacro(\"\\\\aa\", \"\\\\r a\");\n\ndefineMacro(\"\\\\Bbbk\", \"\\\\Bbb{k}\");\n\n// \\mathstrut from the TeXbook, p 360\ndefineMacro(\"\\\\mathstrut\", \"\\\\vphantom{(}\");\n\n// \\underbar from TeXbook p 353\ndefineMacro(\"\\\\underbar\", \"\\\\underline{\\\\text{#1}}\");\n\n//////////////////////////////////////////////////////////////////////\n// LaTeX_2ε\n\n// \\vdots{\\vbox{\\baselineskip4\\p@ \\lineskiplimit\\z@\n// \\kern6\\p@\\hbox{.}\\hbox{.}\\hbox{.}}}\n// We'll call \\varvdots, which gets a glyph from symbols.js.\n// The zero-width rule gets us an equivalent to the vertical 6pt kern.\ndefineMacro(\"\\\\vdots\", \"{\\\\varvdots\\\\rule{0pt}{15pt}}\");\ndefineMacro(\"\\u22ee\", \"\\\\vdots\");\n\n// {array} environment gaps\ndefineMacro(\"\\\\arraystretch\", \"1\"); // line spacing factor times 12pt\ndefineMacro(\"\\\\arraycolsep\", \"6pt\"); // half the width separating columns\n\n//////////////////////////////////////////////////////////////////////\n// amsmath.sty\n// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf\n\n//\\newcommand{\\substack}[1]{\\subarray{c}#1\\endsubarray}\ndefineMacro(\"\\\\substack\", \"\\\\begin{subarray}{c}#1\\\\end{subarray}\");\n\n// \\def\\iff{\\DOTSB\\;\\Longleftrightarrow\\;}\n// \\def\\implies{\\DOTSB\\;\\Longrightarrow\\;}\n// \\def\\impliedby{\\DOTSB\\;\\Longleftarrow\\;}\ndefineMacro(\"\\\\iff\", \"\\\\DOTSB\\\\;\\\\Longleftrightarrow\\\\;\");\ndefineMacro(\"\\\\implies\", \"\\\\DOTSB\\\\;\\\\Longrightarrow\\\\;\");\ndefineMacro(\"\\\\impliedby\", \"\\\\DOTSB\\\\;\\\\Longleftarrow\\\\;\");\n\n// AMSMath's automatic \\dots, based on \\mdots@@ macro.\nconst dotsByToken = {\n \",\": \"\\\\dotsc\",\n \"\\\\not\": \"\\\\dotsb\",\n // \\keybin@ checks for the following:\n \"+\": \"\\\\dotsb\",\n \"=\": \"\\\\dotsb\",\n \"<\": \"\\\\dotsb\",\n \">\": \"\\\\dotsb\",\n \"-\": \"\\\\dotsb\",\n \"*\": \"\\\\dotsb\",\n \":\": \"\\\\dotsb\",\n // Symbols whose definition starts with \\DOTSB:\n \"\\\\DOTSB\": \"\\\\dotsb\",\n \"\\\\coprod\": \"\\\\dotsb\",\n \"\\\\bigvee\": \"\\\\dotsb\",\n \"\\\\bigwedge\": \"\\\\dotsb\",\n \"\\\\biguplus\": \"\\\\dotsb\",\n \"\\\\bigcap\": \"\\\\dotsb\",\n \"\\\\bigcup\": \"\\\\dotsb\",\n \"\\\\prod\": \"\\\\dotsb\",\n \"\\\\sum\": \"\\\\dotsb\",\n \"\\\\bigotimes\": \"\\\\dotsb\",\n \"\\\\bigoplus\": \"\\\\dotsb\",\n \"\\\\bigodot\": \"\\\\dotsb\",\n \"\\\\bigsqcap\": \"\\\\dotsb\",\n \"\\\\bigsqcup\": \"\\\\dotsb\",\n \"\\\\bigtimes\": \"\\\\dotsb\",\n \"\\\\And\": \"\\\\dotsb\",\n \"\\\\longrightarrow\": \"\\\\dotsb\",\n \"\\\\Longrightarrow\": \"\\\\dotsb\",\n \"\\\\longleftarrow\": \"\\\\dotsb\",\n \"\\\\Longleftarrow\": \"\\\\dotsb\",\n \"\\\\longleftrightarrow\": \"\\\\dotsb\",\n \"\\\\Longleftrightarrow\": \"\\\\dotsb\",\n \"\\\\mapsto\": \"\\\\dotsb\",\n \"\\\\longmapsto\": \"\\\\dotsb\",\n \"\\\\hookrightarrow\": \"\\\\dotsb\",\n \"\\\\doteq\": \"\\\\dotsb\",\n // Symbols whose definition starts with \\mathbin:\n \"\\\\mathbin\": \"\\\\dotsb\",\n // Symbols whose definition starts with \\mathrel:\n \"\\\\mathrel\": \"\\\\dotsb\",\n \"\\\\relbar\": \"\\\\dotsb\",\n \"\\\\Relbar\": \"\\\\dotsb\",\n \"\\\\xrightarrow\": \"\\\\dotsb\",\n \"\\\\xleftarrow\": \"\\\\dotsb\",\n // Symbols whose definition starts with \\DOTSI:\n \"\\\\DOTSI\": \"\\\\dotsi\",\n \"\\\\int\": \"\\\\dotsi\",\n \"\\\\oint\": \"\\\\dotsi\",\n \"\\\\iint\": \"\\\\dotsi\",\n \"\\\\iiint\": \"\\\\dotsi\",\n \"\\\\iiiint\": \"\\\\dotsi\",\n \"\\\\idotsint\": \"\\\\dotsi\",\n // Symbols whose definition starts with \\DOTSX:\n \"\\\\DOTSX\": \"\\\\dotsx\"\n};\n\ndefineMacro(\"\\\\dots\", function(context) {\n // TODO: If used in text mode, should expand to \\textellipsis.\n // However, in Temml, \\textellipsis and \\ldots behave the same\n // (in text mode), and it's unlikely we'd see any of the math commands\n // that affect the behavior of \\dots when in text mode. So fine for now\n // (until we support \\ifmmode ... \\else ... \\fi).\n let thedots = \"\\\\dotso\";\n const next = context.expandAfterFuture().text;\n if (next in dotsByToken) {\n thedots = dotsByToken[next];\n } else if (next.slice(0, 4) === \"\\\\not\") {\n thedots = \"\\\\dotsb\";\n } else if (next in symbols.math) {\n if ([\"bin\", \"rel\"].includes(symbols.math[next].group)) {\n thedots = \"\\\\dotsb\";\n }\n }\n return thedots;\n});\n\nconst spaceAfterDots = {\n // \\rightdelim@ checks for the following:\n \")\": true,\n \"]\": true,\n \"\\\\rbrack\": true,\n \"\\\\}\": true,\n \"\\\\rbrace\": true,\n \"\\\\rangle\": true,\n \"\\\\rceil\": true,\n \"\\\\rfloor\": true,\n \"\\\\rgroup\": true,\n \"\\\\rmoustache\": true,\n \"\\\\right\": true,\n \"\\\\bigr\": true,\n \"\\\\biggr\": true,\n \"\\\\Bigr\": true,\n \"\\\\Biggr\": true,\n // \\extra@ also tests for the following:\n $: true,\n // \\extrap@ checks for the following:\n \";\": true,\n \".\": true,\n \",\": true\n};\n\ndefineMacro(\"\\\\dotso\", function(context) {\n const next = context.future().text;\n if (next in spaceAfterDots) {\n return \"\\\\ldots\\\\,\";\n } else {\n return \"\\\\ldots\";\n }\n});\n\ndefineMacro(\"\\\\dotsc\", function(context) {\n const next = context.future().text;\n // \\dotsc uses \\extra@ but not \\extrap@, instead specially checking for\n // ';' and '.', but doesn't check for ','.\n if (next in spaceAfterDots && next !== \",\") {\n return \"\\\\ldots\\\\,\";\n } else {\n return \"\\\\ldots\";\n }\n});\n\ndefineMacro(\"\\\\cdots\", function(context) {\n const next = context.future().text;\n if (next in spaceAfterDots) {\n return \"\\\\@cdots\\\\,\";\n } else {\n return \"\\\\@cdots\";\n }\n});\n\ndefineMacro(\"\\\\dotsb\", \"\\\\cdots\");\ndefineMacro(\"\\\\dotsm\", \"\\\\cdots\");\ndefineMacro(\"\\\\dotsi\", \"\\\\!\\\\cdots\");\ndefineMacro(\"\\\\idotsint\", \"\\\\dotsi\");\n// amsmath doesn't actually define \\dotsx, but \\dots followed by a macro\n// starting with \\DOTSX implies \\dotso, and then \\extra@ detects this case\n// and forces the added `\\,`.\ndefineMacro(\"\\\\dotsx\", \"\\\\ldots\\\\,\");\n\n// \\let\\DOTSI\\relax\n// \\let\\DOTSB\\relax\n// \\let\\DOTSX\\relax\ndefineMacro(\"\\\\DOTSI\", \"\\\\relax\");\ndefineMacro(\"\\\\DOTSB\", \"\\\\relax\");\ndefineMacro(\"\\\\DOTSX\", \"\\\\relax\");\n\n// Spacing, based on amsmath.sty's override of LaTeX defaults\n// \\DeclareRobustCommand{\\tmspace}[3]{%\n// \\ifmmode\\mskip#1#2\\else\\kern#1#3\\fi\\relax}\ndefineMacro(\"\\\\tmspace\", \"\\\\TextOrMath{\\\\kern#1#3}{\\\\mskip#1#2}\\\\relax\");\n// \\renewcommand{\\,}{\\tmspace+\\thinmuskip{.1667em}}\n// TODO: math mode should use \\thinmuskip\ndefineMacro(\"\\\\,\", \"{\\\\tmspace+{3mu}{.1667em}}\");\n// \\let\\thinspace\\,\ndefineMacro(\"\\\\thinspace\", \"\\\\,\");\n// \\def\\>{\\mskip\\medmuskip}\n// \\renewcommand{\\:}{\\tmspace+\\medmuskip{.2222em}}\n// TODO: \\> and math mode of \\: should use \\medmuskip = 4mu plus 2mu minus 4mu\ndefineMacro(\"\\\\>\", \"\\\\mskip{4mu}\");\ndefineMacro(\"\\\\:\", \"{\\\\tmspace+{4mu}{.2222em}}\");\n// \\let\\medspace\\:\ndefineMacro(\"\\\\medspace\", \"\\\\:\");\n// \\renewcommand{\\;}{\\tmspace+\\thickmuskip{.2777em}}\n// TODO: math mode should use \\thickmuskip = 5mu plus 5mu\ndefineMacro(\"\\\\;\", \"{\\\\tmspace+{5mu}{.2777em}}\");\n// \\let\\thickspace\\;\ndefineMacro(\"\\\\thickspace\", \"\\\\;\");\n// \\renewcommand{\\!}{\\tmspace-\\thinmuskip{.1667em}}\n// TODO: math mode should use \\thinmuskip\ndefineMacro(\"\\\\!\", \"{\\\\tmspace-{3mu}{.1667em}}\");\n// \\let\\negthinspace\\!\ndefineMacro(\"\\\\negthinspace\", \"\\\\!\");\n// \\newcommand{\\negmedspace}{\\tmspace-\\medmuskip{.2222em}}\n// TODO: math mode should use \\medmuskip\ndefineMacro(\"\\\\negmedspace\", \"{\\\\tmspace-{4mu}{.2222em}}\");\n// \\newcommand{\\negthickspace}{\\tmspace-\\thickmuskip{.2777em}}\n// TODO: math mode should use \\thickmuskip\ndefineMacro(\"\\\\negthickspace\", \"{\\\\tmspace-{5mu}{.277em}}\");\n// \\def\\enspace{\\kern.5em }\ndefineMacro(\"\\\\enspace\", \"\\\\kern.5em \");\n// \\def\\enskip{\\hskip.5em\\relax}\ndefineMacro(\"\\\\enskip\", \"\\\\hskip.5em\\\\relax\");\n// \\def\\quad{\\hskip1em\\relax}\ndefineMacro(\"\\\\quad\", \"\\\\hskip1em\\\\relax\");\n// \\def\\qquad{\\hskip2em\\relax}\ndefineMacro(\"\\\\qquad\", \"\\\\hskip2em\\\\relax\");\n\ndefineMacro(\"\\\\AA\", \"\\\\TextOrMath{\\\\Angstrom}{\\\\mathring{A}}\\\\relax\");\n\n// \\tag@in@display form of \\tag\ndefineMacro(\"\\\\tag\", \"\\\\@ifstar\\\\tag@literal\\\\tag@paren\");\ndefineMacro(\"\\\\tag@paren\", \"\\\\tag@literal{({#1})}\");\ndefineMacro(\"\\\\tag@literal\", (context) => {\n if (context.macros.get(\"\\\\df@tag\")) {\n throw new ParseError(\"Multiple \\\\tag\");\n }\n return \"\\\\gdef\\\\df@tag{\\\\text{#1}}\";\n});\ndefineMacro(\"\\\\notag\", \"\\\\nonumber\");\ndefineMacro(\"\\\\nonumber\", \"\\\\gdef\\\\@eqnsw{0}\");\n\n// \\renewcommand{\\bmod}{\\nonscript\\mskip-\\medmuskip\\mkern5mu\\mathbin\n// {\\operator@font mod}\\penalty900\n// \\mkern5mu\\nonscript\\mskip-\\medmuskip}\n// \\newcommand{\\pod}[1]{\\allowbreak\n// \\if@display\\mkern18mu\\else\\mkern8mu\\fi(#1)}\n// \\renewcommand{\\pmod}[1]{\\pod{{\\operator@font mod}\\mkern6mu#1}}\n// \\newcommand{\\mod}[1]{\\allowbreak\\if@display\\mkern18mu\n// \\else\\mkern12mu\\fi{\\operator@font mod}\\,\\,#1}\n// TODO: math mode should use \\medmuskip = 4mu plus 2mu minus 4mu\ndefineMacro(\"\\\\bmod\", \"\\\\mathbin{\\\\text{mod}}\");\ndefineMacro(\n \"\\\\pod\",\n \"\\\\allowbreak\" + \"\\\\mathchoice{\\\\mkern18mu}{\\\\mkern8mu}{\\\\mkern8mu}{\\\\mkern8mu}(#1)\"\n);\ndefineMacro(\"\\\\pmod\", \"\\\\pod{{\\\\rm mod}\\\\mkern6mu#1}\");\ndefineMacro(\n \"\\\\mod\",\n \"\\\\allowbreak\" +\n \"\\\\mathchoice{\\\\mkern18mu}{\\\\mkern12mu}{\\\\mkern12mu}{\\\\mkern12mu}\" +\n \"{\\\\rm mod}\\\\,\\\\,#1\"\n);\n\n//////////////////////////////////////////////////////////////////////\n// LaTeX source2e\n\n// \\expandafter\\let\\expandafter\\@normalcr\n// \\csname\\expandafter\\@gobble\\string\\\\ \\endcsname\n// \\DeclareRobustCommand\\newline{\\@normalcr\\relax}\ndefineMacro(\"\\\\newline\", \"\\\\\\\\\\\\relax\");\n\n// \\def\\TeX{T\\kern-.1667em\\lower.5ex\\hbox{E}\\kern-.125emX\\@}\n// TODO: Doesn't normally work in math mode because \\@ fails.\ndefineMacro(\"\\\\TeX\", \"\\\\textrm{T}\\\\kern-.1667em\\\\raisebox{-.5ex}{E}\\\\kern-.125em\\\\textrm{X}\");\n\ndefineMacro(\n \"\\\\LaTeX\",\n \"\\\\textrm{L}\\\\kern-.35em\\\\raisebox{0.2em}{\\\\scriptstyle A}\\\\kern-.15em\\\\TeX\"\n);\n\ndefineMacro(\n \"\\\\Temml\",\n // eslint-disable-next-line max-len\n \"\\\\textrm{T}\\\\kern-0.2em\\\\lower{0.2em}{\\\\textrm{E}}\\\\kern-0.08em{\\\\textrm{M}\\\\kern-0.08em\\\\raise{0.2em}\\\\textrm{M}\\\\kern-0.08em\\\\textrm{L}}\"\n);\n\n// \\DeclareRobustCommand\\hspace{\\@ifstar\\@hspacer\\@hspace}\n// \\def\\@hspace#1{\\hskip #1\\relax}\n// \\def\\@hspacer#1{\\vrule \\@width\\z@\\nobreak\n// \\hskip #1\\hskip \\z@skip}\ndefineMacro(\"\\\\hspace\", \"\\\\@ifstar\\\\@hspacer\\\\@hspace\");\ndefineMacro(\"\\\\@hspace\", \"\\\\hskip #1\\\\relax\");\ndefineMacro(\"\\\\@hspacer\", \"\\\\rule{0pt}{0pt}\\\\hskip #1\\\\relax\");\n\ndefineMacro(\"\\\\colon\", `\\\\mathpunct{\\\\char\"3a}`);\n\n//////////////////////////////////////////////////////////////////////\n// mathtools.sty\n\ndefineMacro(\"\\\\prescript\", \"\\\\pres@cript{_{#1}^{#2}}{}{#3}\");\n\n//\\providecommand\\ordinarycolon{:}\ndefineMacro(\"\\\\ordinarycolon\", `\\\\char\"3a`);\n// Raise to center on the math axis, as closely as possible.\ndefineMacro(\"\\\\vcentcolon\", \"\\\\mathrel{\\\\raisebox{0.035em}{\\\\ordinarycolon}}\");\n// \\providecommand*\\coloneq{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}\ndefineMacro(\"\\\\coloneq\", '\\\\mathrel{\\\\raisebox{0.035em}{\\\\ordinarycolon}\\\\char\"2212}');\n// \\providecommand*\\Coloneq{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}\ndefineMacro(\"\\\\Coloneq\", '\\\\mathrel{\\\\char\"2237\\\\char\"2212}');\n// \\providecommand*\\Eqqcolon{=\\mathrel{\\mkern-1.2mu}\\dblcolon}\ndefineMacro(\"\\\\Eqqcolon\", '\\\\mathrel{\\\\char\"3d\\\\char\"2237}');\n// \\providecommand*\\Eqcolon{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}\ndefineMacro(\"\\\\Eqcolon\", '\\\\mathrel{\\\\char\"2212\\\\char\"2237}');\n// \\providecommand*\\colonapprox{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}\ndefineMacro(\"\\\\colonapprox\", '\\\\mathrel{\\\\raisebox{0.035em}{\\\\ordinarycolon}\\\\char\"2248}');\n// \\providecommand*\\Colonapprox{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}\ndefineMacro(\"\\\\Colonapprox\", '\\\\mathrel{\\\\char\"2237\\\\char\"2248}');\n// \\providecommand*\\colonsim{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}\ndefineMacro(\"\\\\colonsim\", '\\\\mathrel{\\\\raisebox{0.035em}{\\\\ordinarycolon}\\\\char\"223c}');\n// \\providecommand*\\Colonsim{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}\ndefineMacro(\"\\\\Colonsim\", '\\\\mathrel{\\\\raisebox{0.035em}{\\\\ordinarycolon}\\\\char\"223c}');\n\n//////////////////////////////////////////////////////////////////////\n// colonequals.sty\n\n// Alternate names for mathtools's macros:\ndefineMacro(\"\\\\ratio\", \"\\\\vcentcolon\");\ndefineMacro(\"\\\\coloncolon\", \"\\\\dblcolon\");\ndefineMacro(\"\\\\colonequals\", \"\\\\coloneqq\");\ndefineMacro(\"\\\\coloncolonequals\", \"\\\\Coloneqq\");\ndefineMacro(\"\\\\equalscolon\", \"\\\\eqqcolon\");\ndefineMacro(\"\\\\equalscoloncolon\", \"\\\\Eqqcolon\");\ndefineMacro(\"\\\\colonminus\", \"\\\\coloneq\");\ndefineMacro(\"\\\\coloncolonminus\", \"\\\\Coloneq\");\ndefineMacro(\"\\\\minuscolon\", \"\\\\eqcolon\");\ndefineMacro(\"\\\\minuscoloncolon\", \"\\\\Eqcolon\");\n// \\colonapprox name is same in mathtools and colonequals.\ndefineMacro(\"\\\\coloncolonapprox\", \"\\\\Colonapprox\");\n// \\colonsim name is same in mathtools and colonequals.\ndefineMacro(\"\\\\coloncolonsim\", \"\\\\Colonsim\");\n\n// Present in newtxmath, pxfonts and txfonts\ndefineMacro(\"\\\\notni\", \"\\\\mathrel{\\\\char`\\u220C}\");\ndefineMacro(\"\\\\limsup\", \"\\\\DOTSB\\\\operatorname*{lim\\\\,sup}\");\ndefineMacro(\"\\\\liminf\", \"\\\\DOTSB\\\\operatorname*{lim\\\\,inf}\");\n\n//////////////////////////////////////////////////////////////////////\n// From amsopn.sty\ndefineMacro(\"\\\\injlim\", \"\\\\DOTSB\\\\operatorname*{inj\\\\,lim}\");\ndefineMacro(\"\\\\projlim\", \"\\\\DOTSB\\\\operatorname*{proj\\\\,lim}\");\ndefineMacro(\"\\\\varlimsup\", \"\\\\DOTSB\\\\operatorname*{\\\\overline{\\\\text{lim}}}\");\ndefineMacro(\"\\\\varliminf\", \"\\\\DOTSB\\\\operatorname*{\\\\underline{\\\\text{lim}}}\");\ndefineMacro(\"\\\\varinjlim\", \"\\\\DOTSB\\\\operatorname*{\\\\underrightarrow{\\\\text{lim}}}\");\ndefineMacro(\"\\\\varprojlim\", \"\\\\DOTSB\\\\operatorname*{\\\\underleftarrow{\\\\text{lim}}}\");\n\ndefineMacro(\"\\\\centerdot\", \"{\\\\medspace\\\\rule{0.167em}{0.189em}\\\\medspace}\");\n\n//////////////////////////////////////////////////////////////////////\n// statmath.sty\n// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf\n\ndefineMacro(\"\\\\argmin\", \"\\\\DOTSB\\\\operatorname*{arg\\\\,min}\");\ndefineMacro(\"\\\\argmax\", \"\\\\DOTSB\\\\operatorname*{arg\\\\,max}\");\ndefineMacro(\"\\\\plim\", \"\\\\DOTSB\\\\operatorname*{plim}\");\n\n//////////////////////////////////////////////////////////////////////\n// MnSymbol.sty\n\ndefineMacro(\"\\\\leftmodels\", \"\\\\mathop{\\\\reflectbox{$\\\\models$}}\");\n\n//////////////////////////////////////////////////////////////////////\n// braket.sty\n// http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/braket/braket.pdf\n\ndefineMacro(\"\\\\bra\", \"\\\\mathinner{\\\\langle{#1}|}\");\ndefineMacro(\"\\\\ket\", \"\\\\mathinner{|{#1}\\\\rangle}\");\ndefineMacro(\"\\\\braket\", \"\\\\mathinner{\\\\langle{#1}\\\\rangle}\");\ndefineMacro(\"\\\\Bra\", \"\\\\left\\\\langle#1\\\\right|\");\ndefineMacro(\"\\\\Ket\", \"\\\\left|#1\\\\right\\\\rangle\");\n// A helper for \\Braket and \\Set\nconst replaceVert = (argStr, match) => {\n const ch = match[0] === \"|\" ? \"\\\\vert\" : \"\\\\Vert\";\n const replaceStr = `}\\\\,\\\\middle${ch}\\\\,{`;\n return argStr.slice(0, match.index) + replaceStr + argStr.slice(match.index + match[0].length)\n};\ndefineMacro(\"\\\\Braket\", function(context) {\n let argStr = recreateArgStr(context);\n const regEx = /\\|\\||\\||\\\\\\|/g;\n let match;\n while ((match = regEx.exec(argStr)) !== null) {\n argStr = replaceVert(argStr, match);\n }\n return \"\\\\left\\\\langle{\" + argStr + \"}\\\\right\\\\rangle\"\n});\ndefineMacro(\"\\\\Set\", function(context) {\n let argStr = recreateArgStr(context);\n const match = /\\|\\||\\||\\\\\\|/.exec(argStr);\n if (match) {\n argStr = replaceVert(argStr, match);\n }\n return \"\\\\left\\\\{\\\\:{\" + argStr + \"}\\\\:\\\\right\\\\}\"\n});\ndefineMacro(\"\\\\set\", function(context) {\n const argStr = recreateArgStr(context);\n return \"\\\\{{\" + argStr.replace(/\\|/, \"}\\\\mid{\") + \"}\\\\}\"\n});\n\n//////////////////////////////////////////////////////////////////////\n// actuarialangle.dtx\ndefineMacro(\"\\\\angln\", \"{\\\\angl n}\");\n\n//////////////////////////////////////////////////////////////////////\n// derivative.sty\ndefineMacro(\"\\\\odv\", \"\\\\@ifstar\\\\odv@next\\\\odv@numerator\");\ndefineMacro(\"\\\\odv@numerator\", \"\\\\frac{\\\\mathrm{d}#1}{\\\\mathrm{d}#2}\");\ndefineMacro(\"\\\\odv@next\", \"\\\\frac{\\\\mathrm{d}}{\\\\mathrm{d}#2}#1\");\ndefineMacro(\"\\\\pdv\", \"\\\\@ifstar\\\\pdv@next\\\\pdv@numerator\");\n\nconst pdvHelper = args => {\n const numerator = args[0][0].text;\n const denoms = stringFromArg(args[1]).split(\",\");\n const power = String(denoms.length);\n const numOp = power === \"1\" ? \"\\\\partial\" : `\\\\partial^${power}`;\n let denominator = \"\";\n denoms.map(e => { denominator += \"\\\\partial \" + e.trim() + \"\\\\,\";});\n return [numerator, numOp, denominator.replace(/\\\\,$/, \"\")]\n};\ndefineMacro(\"\\\\pdv@numerator\", function(context) {\n const [numerator, numOp, denominator] = pdvHelper(context.consumeArgs(2));\n return `\\\\frac{${numOp} ${numerator}}{${denominator}}`\n});\ndefineMacro(\"\\\\pdv@next\", function(context) {\n const [numerator, numOp, denominator] = pdvHelper(context.consumeArgs(2));\n return `\\\\frac{${numOp}}{${denominator}} ${numerator}`\n});\n\n//////////////////////////////////////////////////////////////////////\n// upgreek.dtx\ndefineMacro(\"\\\\upalpha\", \"\\\\up@greek{\\\\alpha}\");\ndefineMacro(\"\\\\upbeta\", \"\\\\up@greek{\\\\beta}\");\ndefineMacro(\"\\\\upgamma\", \"\\\\up@greek{\\\\gamma}\");\ndefineMacro(\"\\\\updelta\", \"\\\\up@greek{\\\\delta}\");\ndefineMacro(\"\\\\upepsilon\", \"\\\\up@greek{\\\\epsilon}\");\ndefineMacro(\"\\\\upzeta\", \"\\\\up@greek{\\\\zeta}\");\ndefineMacro(\"\\\\upeta\", \"\\\\up@greek{\\\\eta}\");\ndefineMacro(\"\\\\uptheta\", \"\\\\up@greek{\\\\theta}\");\ndefineMacro(\"\\\\upiota\", \"\\\\up@greek{\\\\iota}\");\ndefineMacro(\"\\\\upkappa\", \"\\\\up@greek{\\\\kappa}\");\ndefineMacro(\"\\\\uplambda\", \"\\\\up@greek{\\\\lambda}\");\ndefineMacro(\"\\\\upmu\", \"\\\\up@greek{\\\\mu}\");\ndefineMacro(\"\\\\upnu\", \"\\\\up@greek{\\\\nu}\");\ndefineMacro(\"\\\\upxi\", \"\\\\up@greek{\\\\xi}\");\ndefineMacro(\"\\\\upomicron\", \"\\\\up@greek{\\\\omicron}\");\ndefineMacro(\"\\\\uppi\", \"\\\\up@greek{\\\\pi}\");\ndefineMacro(\"\\\\upalpha\", \"\\\\up@greek{\\\\alpha}\");\ndefineMacro(\"\\\\uprho\", \"\\\\up@greek{\\\\rho}\");\ndefineMacro(\"\\\\upsigma\", \"\\\\up@greek{\\\\sigma}\");\ndefineMacro(\"\\\\uptau\", \"\\\\up@greek{\\\\tau}\");\ndefineMacro(\"\\\\upupsilon\", \"\\\\up@greek{\\\\upsilon}\");\ndefineMacro(\"\\\\upphi\", \"\\\\up@greek{\\\\phi}\");\ndefineMacro(\"\\\\upchi\", \"\\\\up@greek{\\\\chi}\");\ndefineMacro(\"\\\\uppsi\", \"\\\\up@greek{\\\\psi}\");\ndefineMacro(\"\\\\upomega\", \"\\\\up@greek{\\\\omega}\");\n\n//////////////////////////////////////////////////////////////////////\n// cmll package\ndefineMacro(\"\\\\invamp\", '\\\\mathbin{\\\\char\"214b}');\ndefineMacro(\"\\\\parr\", '\\\\mathbin{\\\\char\"214b}');\ndefineMacro(\"\\\\with\", '\\\\mathbin{\\\\char\"26}');\ndefineMacro(\"\\\\multimapinv\", '\\\\mathrel{\\\\char\"27dc}');\ndefineMacro(\"\\\\multimapboth\", '\\\\mathrel{\\\\char\"29df}');\ndefineMacro(\"\\\\scoh\", '{\\\\mkern5mu\\\\char\"2322\\\\mkern5mu}');\ndefineMacro(\"\\\\sincoh\", '{\\\\mkern5mu\\\\char\"2323\\\\mkern5mu}');\ndefineMacro(\"\\\\coh\", `{\\\\mkern5mu\\\\rule{}{0.7em}\\\\mathrlap{\\\\smash{\\\\raise2mu{\\\\char\"2322}}}\n{\\\\smash{\\\\lower4mu{\\\\char\"2323}}}\\\\mkern5mu}`);\ndefineMacro(\"\\\\incoh\", `{\\\\mkern5mu\\\\rule{}{0.7em}\\\\mathrlap{\\\\smash{\\\\raise2mu{\\\\char\"2323}}}\n{\\\\smash{\\\\lower4mu{\\\\char\"2322}}}\\\\mkern5mu}`);\n\n\n//////////////////////////////////////////////////////////////////////\n// chemstyle package\ndefineMacro(\"\\\\standardstate\", \"\\\\text{\\\\tiny\\\\char`⦵}\");\n\n/* eslint-disable */\n/* -*- Mode: JavaScript; indent-tabs-mode:nil; js-indent-level: 2 -*- */\n/* vim: set ts=2 et sw=2 tw=80: */\n\n/*************************************************************\n *\n * Temml mhchem.js\n *\n * This file implements a Temml version of mhchem version 3.3.0.\n * It is adapted from MathJax/extensions/TeX/mhchem.js\n * It differs from the MathJax version as follows:\n * 1. The interface is changed so that it can be called from Temml, not MathJax.\n * 2. \\rlap and \\llap are replaced with \\mathrlap and \\mathllap.\n * 3. The reaction arrow code is simplified. All reaction arrows are rendered\n * using Temml extensible arrows instead of building non-extensible arrows.\n * 4. The ~bond forms are composed entirely of \\rule elements.\n * 5. Two dashes in _getBond are wrapped in braces to suppress spacing. i.e., {-}\n * 6. The electron dot uses \\textbullet instead of \\bullet.\n * 7. \\smash[T] has been removed. (WebKit hides anything inside \\smash{…})\n *\n * This code, as other Temml code, is released under the MIT license.\n * \n * /*************************************************************\n *\n * MathJax/extensions/TeX/mhchem.js\n *\n * Implements the \\ce command for handling chemical formulas\n * from the mhchem LaTeX package.\n *\n * ---------------------------------------------------------------------\n *\n * Copyright (c) 2011-2015 The MathJax Consortium\n * Copyright (c) 2015-2018 Martin Hensel\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n//\n// Coding Style\n// - use '' for identifiers that can by minified/uglified\n// - use \"\" for strings that need to stay untouched\n\n// version: \"3.3.0\" for MathJax and Temml\n\n\n// Add \\ce, \\pu, and \\tripleDash to the Temml macros.\n\ndefineMacro(\"\\\\ce\", function(context) {\n return chemParse(context.consumeArgs(1)[0], \"ce\")\n});\n\ndefineMacro(\"\\\\pu\", function(context) {\n return chemParse(context.consumeArgs(1)[0], \"pu\");\n});\n\n// Math fonts do not include glyphs for the ~ form of bonds. So we'll send path geometry\n// So we'll compose characters built from \\rule elements.\ndefineMacro(\"\\\\uniDash\", `{\\\\rule{0.672em}{0.06em}}`)\ndefineMacro(\"\\\\triDash\", `{\\\\rule{0.15em}{0.06em}\\\\kern2mu\\\\rule{0.15em}{0.06em}\\\\kern2mu\\\\rule{0.15em}{0.06em}}`)\ndefineMacro(\"\\\\tripleDash\", `\\\\kern0.075em\\\\raise0.25em{\\\\triDash}\\\\kern0.075em`)\ndefineMacro(\"\\\\tripleDashOverLine\", `\\\\kern0.075em\\\\mathrlap{\\\\raise0.125em{\\\\uniDash}}\\\\raise0.34em{\\\\triDash}\\\\kern0.075em`)\ndefineMacro(\"\\\\tripleDashOverDoubleLine\", `\\\\kern0.075em\\\\mathrlap{\\\\mathrlap{\\\\raise0.48em{\\\\triDash}}\\\\raise0.27em{\\\\uniDash}}{\\\\raise0.05em{\\\\uniDash}}\\\\kern0.075em`)\ndefineMacro(\"\\\\tripleDashBetweenDoubleLine\", `\\\\kern0.075em\\\\mathrlap{\\\\mathrlap{\\\\raise0.48em{\\\\uniDash}}\\\\raise0.27em{\\\\triDash}}{\\\\raise0.05em{\\\\uniDash}}\\\\kern0.075em`)\n\n //\n // This is the main function for handing the \\ce and \\pu commands.\n // It takes the argument to \\ce or \\pu and returns the corresponding TeX string.\n //\n\n var chemParse = function (tokens, stateMachine) {\n // Recreate the argument string from Temml's array of tokens.\n var str = \"\";\n var expectedLoc = tokens.length && tokens[tokens.length - 1].loc.start\n for (var i = tokens.length - 1; i >= 0; i--) {\n if(tokens[i].loc.start > expectedLoc) {\n // context.consumeArgs has eaten a space.\n str += \" \";\n expectedLoc = tokens[i].loc.start;\n }\n str += tokens[i].text;\n expectedLoc += tokens[i].text.length;\n }\n // Call the mhchem core parser.\n var tex = texify.go(mhchemParser.go(str, stateMachine));\n return tex;\n };\n\n //\n // Core parser for mhchem syntax (recursive)\n //\n /** @type {MhchemParser} */\n var mhchemParser = {\n //\n // Parses mchem \\ce syntax\n //\n // Call like\n // go(\"H2O\");\n //\n go: function (input, stateMachine) {\n if (!input) { return []; }\n if (stateMachine === undefined) { stateMachine = 'ce'; }\n var state = '0';\n\n //\n // String buffers for parsing:\n //\n // buffer.a == amount\n // buffer.o == element\n // buffer.b == left-side superscript\n // buffer.p == left-side subscript\n // buffer.q == right-side subscript\n // buffer.d == right-side superscript\n //\n // buffer.r == arrow\n // buffer.rdt == arrow, script above, type\n // buffer.rd == arrow, script above, content\n // buffer.rqt == arrow, script below, type\n // buffer.rq == arrow, script below, content\n //\n // buffer.text_\n // buffer.rm\n // etc.\n //\n // buffer.parenthesisLevel == int, starting at 0\n // buffer.sb == bool, space before\n // buffer.beginsWithBond == bool\n //\n // These letters are also used as state names.\n //\n // Other states:\n // 0 == begin of main part (arrow/operator unlikely)\n // 1 == next entity\n // 2 == next entity (arrow/operator unlikely)\n // 3 == next atom\n // c == macro\n //\n /** @type {Buffer} */\n var buffer = {};\n buffer['parenthesisLevel'] = 0;\n\n input = input.replace(/\\n/g, \" \");\n input = input.replace(/[\\u2212\\u2013\\u2014\\u2010]/g, \"-\");\n input = input.replace(/[\\u2026]/g, \"...\");\n\n //\n // Looks through mhchemParser.transitions, to execute a matching action\n // (recursive)\n //\n var lastInput;\n var watchdog = 10;\n /** @type {ParserOutput[]} */\n var output = [];\n while (true) {\n if (lastInput !== input) {\n watchdog = 10;\n lastInput = input;\n } else {\n watchdog--;\n }\n //\n // Find actions in transition table\n //\n var machine = mhchemParser.stateMachines[stateMachine];\n var t = machine.transitions[state] || machine.transitions['*'];\n iterateTransitions:\n for (var i=0; i<t.length; i++) {\n var matches = mhchemParser.patterns.match_(t[i].pattern, input);\n if (matches) {\n //\n // Execute actions\n //\n var task = t[i].task;\n for (var iA=0; iA<task.action_.length; iA++) {\n var o;\n //\n // Find and execute action\n //\n if (machine.actions[task.action_[iA].type_]) {\n o = machine.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option);\n } else if (mhchemParser.actions[task.action_[iA].type_]) {\n o = mhchemParser.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option);\n } else {\n throw [\"MhchemBugA\", \"mhchem bug A. Please report. (\" + task.action_[iA].type_ + \")\"]; // Trying to use non-existing action\n }\n //\n // Add output\n //\n mhchemParser.concatArray(output, o);\n }\n //\n // Set next state,\n // Shorten input,\n // Continue with next character\n // (= apply only one transition per position)\n //\n state = task.nextState || state;\n if (input.length > 0) {\n if (!task.revisit) {\n input = matches.remainder;\n }\n if (!task.toContinue) {\n break iterateTransitions;\n }\n } else {\n return output;\n }\n }\n }\n //\n // Prevent infinite loop\n //\n if (watchdog <= 0) {\n throw [\"MhchemBugU\", \"mhchem bug U. Please report.\"]; // Unexpected character\n }\n }\n },\n concatArray: function (a, b) {\n if (b) {\n if (Array.isArray(b)) {\n for (var iB=0; iB<b.length; iB++) {\n a.push(b[iB]);\n }\n } else {\n a.push(b);\n }\n }\n },\n\n patterns: {\n //\n // Matching patterns\n // either regexps or function that return null or {match_:\"a\", remainder:\"bc\"}\n //\n patterns: {\n // property names must not look like integers (\"2\") for correct property traversal order, later on\n 'empty': /^$/,\n 'else': /^./,\n 'else2': /^./,\n 'space': /^\\s/,\n 'space A': /^\\s(?=[A-Z\\\\$])/,\n 'space$': /^\\s$/,\n 'a-z': /^[a-z]/,\n 'x': /^x/,\n 'x$': /^x$/,\n 'i$': /^i$/,\n 'letters': /^(?:[a-zA-Z\\u03B1-\\u03C9\\u0391-\\u03A9?@]|(?:\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\\s+|\\{\\}|(?![a-zA-Z]))))+/,\n '\\\\greek': /^\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\\s+|\\{\\}|(?![a-zA-Z]))/,\n 'one lowercase latin letter $': /^(?:([a-z])(?:$|[^a-zA-Z]))$/,\n '$one lowercase latin letter$ $': /^\\$(?:([a-z])(?:$|[^a-zA-Z]))\\$$/,\n 'one lowercase greek letter $': /^(?:\\$?[\\u03B1-\\u03C9]\\$?|\\$?\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\\s*\\$?)(?:\\s+|\\{\\}|(?![a-zA-Z]))$/,\n 'digits': /^[0-9]+/,\n '-9.,9': /^[+\\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))/,\n '-9.,9 no missing 0': /^[+\\-]?[0-9]+(?:[.,][0-9]+)?/,\n '(-)(9.,9)(e)(99)': function (input) {\n var m = input.match(/^(\\+\\-|\\+\\/\\-|\\+|\\-|\\\\pm\\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))?(\\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))\\))?(?:([eE]|\\s*(\\*|x|\\\\times|\\u00D7)\\s*10\\^)([+\\-]?[0-9]+|\\{[+\\-]?[0-9]+\\}))?/);\n if (m && m[0]) {\n return { match_: m.splice(1), remainder: input.substr(m[0].length) };\n }\n return null;\n },\n '(-)(9)^(-9)': function (input) {\n var m = input.match(/^(\\+\\-|\\+\\/\\-|\\+|\\-|\\\\pm\\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+)?)\\^([+\\-]?[0-9]+|\\{[+\\-]?[0-9]+\\})/);\n if (m && m[0]) {\n return { match_: m.splice(1), remainder: input.substr(m[0].length) };\n }\n return null;\n },\n 'state of aggregation $': function (input) { // ... or crystal system\n var a = mhchemParser.patterns.findObserveGroups(input, \"\", /^\\([a-z]{1,3}(?=[\\),])/, \")\", \"\"); // (aq), (aq,$\\infty$), (aq, sat)\n if (a && a.remainder.match(/^($|[\\s,;\\)\\]\\}])/)) { return a; } // AND end of 'phrase'\n var m = input.match(/^(?:\\((?:\\\\ca\\s?)?\\$[amothc]\\$\\))/); // OR crystal system ($o$) (\\ca$c$)\n if (m) {\n return { match_: m[0], remainder: input.substr(m[0].length) };\n }\n return null;\n },\n '_{(state of aggregation)}$': /^_\\{(\\([a-z]{1,3}\\))\\}/,\n '{[(': /^(?:\\\\\\{|\\[|\\()/,\n ')]}': /^(?:\\)|\\]|\\\\\\})/,\n ', ': /^[,;]\\s*/,\n ',': /^[,;]/,\n '.': /^[.]/,\n '. ': /^([.\\u22C5\\u00B7\\u2022])\\s*/,\n '...': /^\\.\\.\\.(?=$|[^.])/,\n '* ': /^([*])\\s*/,\n '^{(...)}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"^{\", \"\", \"\", \"}\"); },\n '^($...$)': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"^\", \"$\", \"$\", \"\"); },\n '^a': /^\\^([0-9]+|[^\\\\_])/,\n '^\\\\x{}{}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"^\", /^\\\\[a-zA-Z]+\\{/, \"}\", \"\", \"\", \"{\", \"}\", \"\", true); },\n '^\\\\x{}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"^\", /^\\\\[a-zA-Z]+\\{/, \"}\", \"\"); },\n '^\\\\x': /^\\^(\\\\[a-zA-Z]+)\\s*/,\n '^(-1)': /^\\^(-?\\d+)/,\n '\\'': /^'/,\n '_{(...)}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"_{\", \"\", \"\", \"}\"); },\n '_($...$)': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"_\", \"$\", \"$\", \"\"); },\n '_9': /^_([+\\-]?[0-9]+|[^\\\\])/,\n '_\\\\x{}{}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"_\", /^\\\\[a-zA-Z]+\\{/, \"}\", \"\", \"\", \"{\", \"}\", \"\", true); },\n '_\\\\x{}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"_\", /^\\\\[a-zA-Z]+\\{/, \"}\", \"\"); },\n '_\\\\x': /^_(\\\\[a-zA-Z]+)\\s*/,\n '^_': /^(?:\\^(?=_)|\\_(?=\\^)|[\\^_]$)/,\n '{}': /^\\{\\}/,\n '{...}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"\", \"{\", \"}\", \"\"); },\n '{(...)}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"{\", \"\", \"\", \"}\"); },\n '$...$': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"\", \"$\", \"$\", \"\"); },\n '${(...)}$': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"${\", \"\", \"\", \"}$\"); },\n '$(...)$': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"$\", \"\", \"\", \"$\"); },\n '=<>': /^[=<>]/,\n '#': /^[#\\u2261]/,\n '+': /^\\+/,\n '-$': /^-(?=[\\s_},;\\]/]|$|\\([a-z]+\\))/, // -space -, -; -] -/ -$ -state-of-aggregation\n '-9': /^-(?=[0-9])/,\n '- orbital overlap': /^-(?=(?:[spd]|sp)(?:$|[\\s,;\\)\\]\\}]))/,\n '-': /^-/,\n 'pm-operator': /^(?:\\\\pm|\\$\\\\pm\\$|\\+-|\\+\\/-)/,\n 'operator': /^(?:\\+|(?:[\\-=<>]|<<|>>|\\\\approx|\\$\\\\approx\\$)(?=\\s|$|-?[0-9]))/,\n 'arrowUpDown': /^(?:v|\\(v\\)|\\^|\\(\\^\\))(?=$|[\\s,;\\)\\]\\}])/,\n '\\\\bond{(...)}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"\\\\bond{\", \"\", \"\", \"}\"); },\n '->': /^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\\u2192\\u27F6\\u21CC])/,\n 'CMT': /^[CMT](?=\\[)/,\n '[(...)]': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"[\", \"\", \"\", \"]\"); },\n '1st-level escape': /^(&|\\\\\\\\|\\\\hline)\\s*/,\n '\\\\,': /^(?:\\\\[,\\ ;:])/, // \\\\x - but output no space before\n '\\\\x{}{}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"\", /^\\\\[a-zA-Z]+\\{/, \"}\", \"\", \"\", \"{\", \"}\", \"\", true); },\n '\\\\x{}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"\", /^\\\\[a-zA-Z]+\\{/, \"}\", \"\"); },\n '\\\\ca': /^\\\\ca(?:\\s+|(?![a-zA-Z]))/,\n '\\\\x': /^(?:\\\\[a-zA-Z]+\\s*|\\\\[_&{}%])/,\n 'orbital': /^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/, // only those with numbers in front, because the others will be formatted correctly anyway\n 'others': /^[\\/~|]/,\n '\\\\frac{(...)}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"\\\\frac{\", \"\", \"\", \"}\", \"{\", \"\", \"\", \"}\"); },\n '\\\\overset{(...)}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"\\\\overset{\", \"\", \"\", \"}\", \"{\", \"\", \"\", \"}\"); },\n '\\\\underset{(...)}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"\\\\underset{\", \"\", \"\", \"}\", \"{\", \"\", \"\", \"}\"); },\n '\\\\underbrace{(...)}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"\\\\underbrace{\", \"\", \"\", \"}_\", \"{\", \"\", \"\", \"}\"); },\n '\\\\color{(...)}0': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"\\\\color{\", \"\", \"\", \"}\"); },\n '\\\\color{(...)}{(...)}1': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"\\\\color{\", \"\", \"\", \"}\", \"{\", \"\", \"\", \"}\"); },\n '\\\\color(...){(...)}2': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"\\\\color\", \"\\\\\", \"\", /^(?=\\{)/, \"{\", \"\", \"\", \"}\"); },\n '\\\\ce{(...)}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \"\\\\ce{\", \"\", \"\", \"}\"); },\n 'oxidation$': /^(?:[+-][IVX]+|\\\\pm\\s*0|\\$\\\\pm\\$\\s*0)$/,\n 'd-oxidation$': /^(?:[+-]?\\s?[IVX]+|\\\\pm\\s*0|\\$\\\\pm\\$\\s*0)$/, // 0 could be oxidation or charge\n 'roman numeral': /^[IVX]+/,\n '1/2$': /^[+\\-]?(?:[0-9]+|\\$[a-z]\\$|[a-z])\\/[0-9]+(?:\\$[a-z]\\$|[a-z])?$/,\n 'amount': function (input) {\n var match;\n // e.g. 2, 0.5, 1/2, -2, n/2, +; $a$ could be added later in parsing\n match = input.match(/^(?:(?:(?:\\([+\\-]?[0-9]+\\/[0-9]+\\)|[+\\-]?(?:[0-9]+|\\$[a-z]\\$|[a-z])\\/[0-9]+|[+\\-]?[0-9]+[.,][0-9]+|[+\\-]?\\.[0-9]+|[+\\-]?[0-9]+)(?:[a-z](?=\\s*[A-Z]))?)|[+\\-]?[a-z](?=\\s*[A-Z])|\\+(?!\\s))/);\n if (match) {\n return { match_: match[0], remainder: input.substr(match[0].length) };\n }\n var a = mhchemParser.patterns.findObserveGroups(input, \"\", \"$\", \"$\", \"\");\n if (a) { // e.g. $2n-1$, $-$\n match = a.match_.match(/^\\$(?:\\(?[+\\-]?(?:[0-9]*[a-z]?[+\\-])?[0-9]*[a-z](?:[+\\-][0-9]*[a-z]?)?\\)?|\\+|-)\\$$/);\n if (match) {\n return { match_: match[0], remainder: input.substr(match[0].length) };\n }\n }\n return null;\n },\n 'amount2': function (input) { return this['amount'](input); },\n '(KV letters),': /^(?:[A-Z][a-z]{0,2}|i)(?=,)/,\n 'formula$': function (input) {\n if (input.match(/^\\([a-z]+\\)$/)) { return null; } // state of aggregation = no formula\n var match = input.match(/^(?:[a-z]|(?:[0-9\\ \\+\\-\\,\\.\\(\\)]+[a-z])+[0-9\\ \\+\\-\\,\\.\\(\\)]*|(?:[a-z][0-9\\ \\+\\-\\,\\.\\(\\)]+)+[a-z]?)$/);\n if (match) {\n return { match_: match[0], remainder: input.substr(match[0].length) };\n }\n return null;\n },\n 'uprightEntities': /^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,\n '/': /^\\s*(\\/)\\s*/,\n '//': /^\\s*(\\/\\/)\\s*/,\n '*': /^\\s*[*.]\\s*/\n },\n findObserveGroups: function (input, begExcl, begIncl, endIncl, endExcl, beg2Excl, beg2Incl, end2Incl, end2Excl, combine) {\n /** @type {{(input: string, pattern: string | RegExp): string | string[] | null;}} */\n var _match = function (input, pattern) {\n if (typeof pattern === \"string\") {\n if (input.indexOf(pattern) !== 0) { return null; }\n return pattern;\n } else {\n var match = input.match(pattern);\n if (!match) { return null; }\n return match[0];\n }\n };\n /** @type {{(input: string, i: number, endChars: string | RegExp): {endMatchBegin: number, endMatchEnd: number} | null;}} */\n var _findObserveGroups = function (input, i, endChars) {\n var braces = 0;\n while (i < input.length) {\n var a = input.charAt(i);\n var match = _match(input.substr(i), endChars);\n if (match !== null && braces === 0) {\n return { endMatchBegin: i, endMatchEnd: i + match.length };\n } else if (a === \"{\") {\n braces++;\n } else if (a === \"}\") {\n if (braces === 0) {\n throw [\"ExtraCloseMissingOpen\", \"Extra close brace or missing open brace\"];\n } else {\n braces--;\n }\n }\n i++;\n }\n if (braces > 0) {\n return null;\n }\n return null;\n };\n var match = _match(input, begExcl);\n if (match === null) { return null; }\n input = input.substr(match.length);\n match = _match(input, begIncl);\n if (match === null) { return null; }\n var e = _findObserveGroups(input, match.length, endIncl || endExcl);\n if (e === null) { return null; }\n var match1 = input.substring(0, (endIncl ? e.endMatchEnd : e.endMatchBegin));\n if (!(beg2Excl || beg2Incl)) {\n return {\n match_: match1,\n remainder: input.substr(e.endMatchEnd)\n };\n } else {\n var group2 = this.findObserveGroups(input.substr(e.endMatchEnd), beg2Excl, beg2Incl, end2Incl, end2Excl);\n if (group2 === null) { return null; }\n /** @type {string[]} */\n var matchRet = [match1, group2.match_];\n return {\n match_: (combine ? matchRet.join(\"\") : matchRet),\n remainder: group2.remainder\n };\n }\n },\n\n //\n // Matching function\n // e.g. match(\"a\", input) will look for the regexp called \"a\" and see if it matches\n // returns null or {match_:\"a\", remainder:\"bc\"}\n //\n match_: function (m, input) {\n var pattern = mhchemParser.patterns.patterns[m];\n if (pattern === undefined) {\n throw [\"MhchemBugP\", \"mhchem bug P. Please report. (\" + m + \")\"]; // Trying to use non-existing pattern\n } else if (typeof pattern === \"function\") {\n return mhchemParser.patterns.patterns[m](input); // cannot use cached var pattern here, because some pattern functions need this===mhchemParser\n } else { // RegExp\n var match = input.match(pattern);\n if (match) {\n var mm;\n if (match[2]) {\n mm = [ match[1], match[2] ];\n } else if (match[1]) {\n mm = match[1];\n } else {\n mm = match[0];\n }\n return { match_: mm, remainder: input.substr(match[0].length) };\n }\n return null;\n }\n }\n },\n\n //\n // Generic state machine actions\n //\n actions: {\n 'a=': function (buffer, m) { buffer.a = (buffer.a || \"\") + m; },\n 'b=': function (buffer, m) { buffer.b = (buffer.b || \"\") + m; },\n 'p=': function (buffer, m) { buffer.p = (buffer.p || \"\") + m; },\n 'o=': function (buffer, m) { buffer.o = (buffer.o || \"\") + m; },\n 'q=': function (buffer, m) { buffer.q = (buffer.q || \"\") + m; },\n 'd=': function (buffer, m) { buffer.d = (buffer.d || \"\") + m; },\n 'rm=': function (buffer, m) { buffer.rm = (buffer.rm || \"\") + m; },\n 'text=': function (buffer, m) { buffer.text_ = (buffer.text_ || \"\") + m; },\n 'insert': function (buffer, m, a) { return { type_: a }; },\n 'insert+p1': function (buffer, m, a) { return { type_: a, p1: m }; },\n 'insert+p1+p2': function (buffer, m, a) { return { type_: a, p1: m[0], p2: m[1] }; },\n 'copy': function (buffer, m) { return m; },\n 'rm': function (buffer, m) { return { type_: 'rm', p1: m || \"\"}; },\n 'text': function (buffer, m) { return mhchemParser.go(m, 'text'); },\n '{text}': function (buffer, m) {\n var ret = [ \"{\" ];\n mhchemParser.concatArray(ret, mhchemParser.go(m, 'text'));\n ret.push(\"}\");\n return ret;\n },\n 'tex-math': function (buffer, m) { return mhchemParser.go(m, 'tex-math'); },\n 'tex-math tight': function (buffer, m) { return mhchemParser.go(m, 'tex-math tight'); },\n 'bond': function (buffer, m, k) { return { type_: 'bond', kind_: k || m }; },\n 'color0-output': function (buffer, m) { return { type_: 'color0', color: m[0] }; },\n 'ce': function (buffer, m) { return mhchemParser.go(m); },\n '1/2': function (buffer, m) {\n /** @type {ParserOutput[]} */\n var ret = [];\n if (m.match(/^[+\\-]/)) {\n ret.push(m.substr(0, 1));\n m = m.substr(1);\n }\n var n = m.match(/^([0-9]+|\\$[a-z]\\$|[a-z])\\/([0-9]+)(\\$[a-z]\\$|[a-z])?$/);\n n[1] = n[1].replace(/\\$/g, \"\");\n ret.push({ type_: 'frac', p1: n[1], p2: n[2] });\n if (n[3]) {\n n[3] = n[3].replace(/\\$/g, \"\");\n ret.push({ type_: 'tex-math', p1: n[3] });\n }\n return ret;\n },\n '9,9': function (buffer, m) { return mhchemParser.go(m, '9,9'); }\n },\n //\n // createTransitions\n // convert { 'letter': { 'state': { action_: 'output' } } } to { 'state' => [ { pattern: 'letter', task: { action_: [{type_: 'output'}] } } ] }\n // with expansion of 'a|b' to 'a' and 'b' (at 2 places)\n //\n createTransitions: function (o) {\n var pattern, state;\n /** @type {string[]} */\n var stateArray;\n var i;\n //\n // 1. Collect all states\n //\n /** @type {Transitions} */\n var transitions = {};\n for (pattern in o) {\n for (state in o[pattern]) {\n stateArray = state.split(\"|\");\n o[pattern][state].stateArray = stateArray;\n for (i=0; i<stateArray.length; i++) {\n transitions[stateArray[i]] = [];\n }\n }\n }\n //\n // 2. Fill states\n //\n for (pattern in o) {\n for (state in o[pattern]) {\n stateArray = o[pattern][state].stateArray || [];\n for (i=0; i<stateArray.length; i++) {\n //\n // 2a. Normalize actions into array: 'text=' ==> [{type_:'text='}]\n // (Note to myself: Resolving the function here would be problematic. It would need .bind (for *this*) and currying (for *option*).)\n //\n /** @type {any} */\n var p = o[pattern][state];\n if (p.action_) {\n p.action_ = [].concat(p.action_);\n for (var k=0; k<p.action_.length; k++) {\n if (typeof p.action_[k] === \"string\") {\n p.action_[k] = { type_: p.action_[k] };\n }\n }\n } else {\n p.action_ = [];\n }\n //\n // 2.b Multi-insert\n //\n var patternArray = pattern.split(\"|\");\n for (var j=0; j<patternArray.length; j++) {\n if (stateArray[i] === '*') { // insert into all\n for (var t in transitions) {\n transitions[t].push({ pattern: patternArray[j], task: p });\n }\n } else {\n transitions[stateArray[i]].push({ pattern: patternArray[j], task: p });\n }\n }\n }\n }\n }\n return transitions;\n },\n stateMachines: {}\n };\n\n //\n // Definition of state machines\n //\n mhchemParser.stateMachines = {\n //\n // \\ce state machines\n //\n //#region ce\n 'ce': { // main parser\n transitions: mhchemParser.createTransitions({\n 'empty': {\n '*': { action_: 'output' } },\n 'else': {\n '0|1|2': { action_: 'beginsWithBond=false', revisit: true, toContinue: true } },\n 'oxidation$': {\n '0': { action_: 'oxidation-output' } },\n 'CMT': {\n 'r': { action_: 'rdt=', nextState: 'rt' },\n 'rd': { action_: 'rqt=', nextState: 'rdt' } },\n 'arrowUpDown': {\n '0|1|2|as': { action_: [ 'sb=false', 'output', 'operator' ], nextState: '1' } },\n 'uprightEntities': {\n '0|1|2': { action_: [ 'o=', 'output' ], nextState: '1' } },\n 'orbital': {\n '0|1|2|3': { action_: 'o=', nextState: 'o' } },\n '->': {\n '0|1|2|3': { action_: 'r=', nextState: 'r' },\n 'a|as': { action_: [ 'output', 'r=' ], nextState: 'r' },\n '*': { action_: [ 'output', 'r=' ], nextState: 'r' } },\n '+': {\n 'o': { action_: 'd= kv', nextState: 'd' },\n 'd|D': { action_: 'd=', nextState: 'd' },\n 'q': { action_: 'd=', nextState: 'qd' },\n 'qd|qD': { action_: 'd=', nextState: 'qd' },\n 'dq': { action_: [ 'output', 'd=' ], nextState: 'd' },\n '3': { action_: [ 'sb=false', 'output', 'operator' ], nextState: '0' } },\n 'amount': {\n '0|2': { action_: 'a=', nextState: 'a' } },\n 'pm-operator': {\n '0|1|2|a|as': { action_: [ 'sb=false', 'output', { type_: 'operator', option: '\\\\pm' } ], nextState: '0' } },\n 'operator': {\n '0|1|2|a|as': { action_: [ 'sb=false', 'output', 'operator' ], nextState: '0' } },\n '-$': {\n 'o|q': { action_: [ 'charge or bond', 'output' ], nextState: 'qd' },\n 'd': { action_: 'd=', nextState: 'd' },\n 'D': { action_: [ 'output', { type_: 'bond', option: \"-\" } ], nextState: '3' },\n 'q': { action_: 'd=', nextState: 'qd' },\n 'qd': { action_: 'd=', nextState: 'qd' },\n 'qD|dq': { action_: [ 'output', { type_: 'bond', option: \"-\" } ], nextState: '3' } },\n '-9': {\n '3|o': { action_: [ 'output', { type_: 'insert', option: 'hyphen' } ], nextState: '3' } },\n '- orbital overlap': {\n 'o': { action_: [ 'output', { type_: 'insert', option: 'hyphen' } ], nextState: '2' },\n 'd': { action_: [ 'output', { type_: 'insert', option: 'hyphen' } ], nextState: '2' } },\n '-': {\n '0|1|2': { action_: [ { type_: 'output', option: 1 }, 'beginsWithBond=true', { type_: 'bond', option: \"-\" } ], nextState: '3' },\n '3': { action_: { type_: 'bond', option: \"-\" } },\n 'a': { action_: [ 'output', { type_: 'insert', option: 'hyphen' } ], nextState: '2' },\n 'as': { action_: [ { type_: 'output', option: 2 }, { type_: 'bond', option: \"-\" } ], nextState: '3' },\n 'b': { action_: 'b=' },\n 'o': { action_: { type_: '- after o/d', option: false }, nextState: '2' },\n 'q': { action_: { type_: '- after o/d', option: false }, nextState: '2' },\n 'd|qd|dq': { action_: { type_: '- after o/d', option: true }, nextState: '2' },\n 'D|qD|p': { action_: [ 'output', { type_: 'bond', option: \"-\" } ], nextState: '3' } },\n 'amount2': {\n '1|3': { action_: 'a=', nextState: 'a' } },\n 'letters': {\n '0|1|2|3|a|as|b|p|bp|o': { action_: 'o=', nextState: 'o' },\n 'q|dq': { action_: ['output', 'o='], nextState: 'o' },\n 'd|D|qd|qD': { action_: 'o after d', nextState: 'o' } },\n 'digits': {\n 'o': { action_: 'q=', nextState: 'q' },\n 'd|D': { action_: 'q=', nextState: 'dq' },\n 'q': { action_: [ 'output', 'o=' ], nextState: 'o' },\n 'a': { action_: 'o=', nextState: 'o' } },\n 'space A': {\n 'b|p|bp': {} },\n 'space': {\n 'a': { nextState: 'as' },\n '0': { action_: 'sb=false' },\n '1|2': { action_: 'sb=true' },\n 'r|rt|rd|rdt|rdq': { action_: 'output', nextState: '0' },\n '*': { action_: [ 'output', 'sb=true' ], nextState: '1'} },\n '1st-level escape': {\n '1|2': { action_: [ 'output', { type_: 'insert+p1', option: '1st-level escape' } ] },\n '*': { action_: [ 'output', { type_: 'insert+p1', option: '1st-level escape' } ], nextState: '0' } },\n '[(...)]': {\n 'r|rt': { action_: 'rd=', nextState: 'rd' },\n 'rd|rdt': { action_: 'rq=', nextState: 'rdq' } },\n '...': {\n 'o|d|D|dq|qd|qD': { action_: [ 'output', { type_: 'bond', option: \"...\" } ], nextState: '3' },\n '*': { action_: [ { type_: 'output', option: 1 }, { type_: 'insert', option: 'ellipsis' } ], nextState: '1' } },\n '. |* ': {\n '*': { action_: [ 'output', { type_: 'insert', option: 'addition compound' } ], nextState: '1' } },\n 'state of aggregation $': {\n '*': { action_: [ 'output', 'state of aggregation' ], nextState: '1' } },\n '{[(': {\n 'a|as|o': { action_: [ 'o=', 'output', 'parenthesisLevel++' ], nextState: '2' },\n '0|1|2|3': { action_: [ 'o=', 'output', 'parenthesisLevel++' ], nextState: '2' },\n '*': { action_: [ 'output', 'o=', 'output', 'parenthesisLevel++' ], nextState: '2' } },\n ')]}': {\n '0|1|2|3|b|p|bp|o': { action_: [ 'o=', 'parenthesisLevel--' ], nextState: 'o' },\n 'a|as|d|D|q|qd|qD|dq': { action_: [ 'output', 'o=', 'parenthesisLevel--' ], nextState: 'o' } },\n ', ': {\n '*': { action_: [ 'output', 'comma' ], nextState: '0' } },\n '^_': { // ^ and _ without a sensible argument\n '*': { } },\n '^{(...)}|^($...$)': {\n '0|1|2|as': { action_: 'b=', nextState: 'b' },\n 'p': { action_: 'b=', nextState: 'bp' },\n '3|o': { action_: 'd= kv', nextState: 'D' },\n 'q': { action_: 'd=', nextState: 'qD' },\n 'd|D|qd|qD|dq': { action_: [ 'output', 'd=' ], nextState: 'D' } },\n '^a|^\\\\x{}{}|^\\\\x{}|^\\\\x|\\'': {\n '0|1|2|as': { action_: 'b=', nextState: 'b' },\n 'p': { action_: 'b=', nextState: 'bp' },\n '3|o': { action_: 'd= kv', nextState: 'd' },\n 'q': { action_: 'd=', nextState: 'qd' },\n 'd|qd|D|qD': { action_: 'd=' },\n 'dq': { action_: [ 'output', 'd=' ], nextState: 'd' } },\n '_{(state of aggregation)}$': {\n 'd|D|q|qd|qD|dq': { action_: [ 'output', 'q=' ], nextState: 'q' } },\n '_{(...)}|_($...$)|_9|_\\\\x{}{}|_\\\\x{}|_\\\\x': {\n '0|1|2|as': { action_: 'p=', nextState: 'p' },\n 'b': { action_: 'p=', nextState: 'bp' },\n '3|o': { action_: 'q=', nextState: 'q' },\n 'd|D': { action_: 'q=', nextState: 'dq' },\n 'q|qd|qD|dq': { action_: [ 'output', 'q=' ], nextState: 'q' } },\n '=<>': {\n '0|1|2|3|a|as|o|q|d|D|qd|qD|dq': { action_: [ { type_: 'output', option: 2 }, 'bond' ], nextState: '3' } },\n '#': {\n '0|1|2|3|a|as|o': { action_: [ { type_: 'output', option: 2 }, { type_: 'bond', option: \"#\" } ], nextState: '3' } },\n '{}': {\n '*': { action_: { type_: 'output', option: 1 }, nextState: '1' } },\n '{...}': {\n '0|1|2|3|a|as|b|p|bp': { action_: 'o=', nextState: 'o' },\n 'o|d|D|q|qd|qD|dq': { action_: [ 'output', 'o=' ], nextState: 'o' } },\n '$...$': {\n 'a': { action_: 'a=' }, // 2$n$\n '0|1|2|3|as|b|p|bp|o': { action_: 'o=', nextState: 'o' }, // not 'amount'\n 'as|o': { action_: 'o=' },\n 'q|d|D|qd|qD|dq': { action_: [ 'output', 'o=' ], nextState: 'o' } },\n '\\\\bond{(...)}': {\n '*': { action_: [ { type_: 'output', option: 2 }, 'bond' ], nextState: \"3\" } },\n '\\\\frac{(...)}': {\n '*': { action_: [ { type_: 'output', option: 1 }, 'frac-output' ], nextState: '3' } },\n '\\\\overset{(...)}': {\n '*': { action_: [ { type_: 'output', option: 2 }, 'overset-output' ], nextState: '3' } },\n '\\\\underset{(...)}': {\n '*': { action_: [ { type_: 'output', option: 2 }, 'underset-output' ], nextState: '3' } },\n '\\\\underbrace{(...)}': {\n '*': { action_: [ { type_: 'output', option: 2 }, 'underbrace-output' ], nextState: '3' } },\n '\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2': {\n '*': { action_: [ { type_: 'output', option: 2 }, 'color-output' ], nextState: '3' } },\n '\\\\color{(...)}0': {\n '*': { action_: [ { type_: 'output', option: 2 }, 'color0-output' ] } },\n '\\\\ce{(...)}': {\n '*': { action_: [ { type_: 'output', option: 2 }, 'ce' ], nextState: '3' } },\n '\\\\,': {\n '*': { action_: [ { type_: 'output', option: 1 }, 'copy' ], nextState: '1' } },\n '\\\\x{}{}|\\\\x{}|\\\\x': {\n '0|1|2|3|a|as|b|p|bp|o|c0': { action_: [ 'o=', 'output' ], nextState: '3' },\n '*': { action_: ['output', 'o=', 'output' ], nextState: '3' } },\n 'others': {\n '*': { action_: [ { type_: 'output', option: 1 }, 'copy' ], nextState: '3' } },\n 'else2': {\n 'a': { action_: 'a to o', nextState: 'o', revisit: true },\n 'as': { action_: [ 'output', 'sb=true' ], nextState: '1', revisit: true },\n 'r|rt|rd|rdt|rdq': { action_: [ 'output' ], nextState: '0', revisit: true },\n '*': { action_: [ 'output', 'copy' ], nextState: '3' } }\n }),\n actions: {\n 'o after d': function (buffer, m) {\n var ret;\n if ((buffer.d || \"\").match(/^[0-9]+$/)) {\n var tmp = buffer.d;\n buffer.d = undefined;\n ret = this['output'](buffer);\n buffer.b = tmp;\n } else {\n ret = this['output'](buffer);\n }\n mhchemParser.actions['o='](buffer, m);\n return ret;\n },\n 'd= kv': function (buffer, m) {\n buffer.d = m;\n buffer.dType = 'kv';\n },\n 'charge or bond': function (buffer, m) {\n if (buffer['beginsWithBond']) {\n /** @type {ParserOutput[]} */\n var ret = [];\n mhchemParser.concatArray(ret, this['output'](buffer));\n mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, \"-\"));\n return ret;\n } else {\n buffer.d = m;\n }\n },\n '- after o/d': function (buffer, m, isAfterD) {\n var c1 = mhchemParser.patterns.match_('orbital', buffer.o || \"\");\n var c2 = mhchemParser.patterns.match_('one lowercase greek letter $', buffer.o || \"\");\n var c3 = mhchemParser.patterns.match_('one lowercase latin letter $', buffer.o || \"\");\n var c4 = mhchemParser.patterns.match_('$one lowercase latin letter$ $', buffer.o || \"\");\n var hyphenFollows = m===\"-\" && ( c1 && c1.remainder===\"\" || c2 || c3 || c4 );\n if (hyphenFollows && !buffer.a && !buffer.b && !buffer.p && !buffer.d && !buffer.q && !c1 && c3) {\n buffer.o = '$' + buffer.o + '$';\n }\n /** @type {ParserOutput[]} */\n var ret = [];\n if (hyphenFollows) {\n mhchemParser.concatArray(ret, this['output'](buffer));\n ret.push({ type_: 'hyphen' });\n } else {\n c1 = mhchemParser.patterns.match_('digits', buffer.d || \"\");\n if (isAfterD && c1 && c1.remainder==='') {\n mhchemParser.concatArray(ret, mhchemParser.actions['d='](buffer, m));\n mhchemParser.concatArray(ret, this['output'](buffer));\n } else {\n mhchemParser.concatArray(ret, this['output'](buffer));\n mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, \"-\"));\n }\n }\n return ret;\n },\n 'a to o': function (buffer) {\n buffer.o = buffer.a;\n buffer.a = undefined;\n },\n 'sb=true': function (buffer) { buffer.sb = true; },\n 'sb=false': function (buffer) { buffer.sb = false; },\n 'beginsWithBond=true': function (buffer) { buffer['beginsWithBond'] = true; },\n 'beginsWithBond=false': function (buffer) { buffer['beginsWithBond'] = false; },\n 'parenthesisLevel++': function (buffer) { buffer['parenthesisLevel']++; },\n 'parenthesisLevel--': function (buffer) { buffer['parenthesisLevel']--; },\n 'state of aggregation': function (buffer, m) {\n return { type_: 'state of aggregation', p1: mhchemParser.go(m, 'o') };\n },\n 'comma': function (buffer, m) {\n var a = m.replace(/\\s*$/, '');\n var withSpace = (a !== m);\n if (withSpace && buffer['parenthesisLevel'] === 0) {\n return { type_: 'comma enumeration L', p1: a };\n } else {\n return { type_: 'comma enumeration M', p1: a };\n }\n },\n 'output': function (buffer, m, entityFollows) {\n // entityFollows:\n // undefined = if we have nothing else to output, also ignore the just read space (buffer.sb)\n // 1 = an entity follows, never omit the space if there was one just read before (can only apply to state 1)\n // 2 = 1 + the entity can have an amount, so output a\\, instead of converting it to o (can only apply to states a|as)\n /** @type {ParserOutput | ParserOutput[]} */\n var ret;\n if (!buffer.r) {\n ret = [];\n if (!buffer.a && !buffer.b && !buffer.p && !buffer.o && !buffer.q && !buffer.d && !entityFollows) {\n //ret = [];\n } else {\n if (buffer.sb) {\n ret.push({ type_: 'entitySkip' });\n }\n if (!buffer.o && !buffer.q && !buffer.d && !buffer.b && !buffer.p && entityFollows!==2) {\n buffer.o = buffer.a;\n buffer.a = undefined;\n } else if (!buffer.o && !buffer.q && !buffer.d && (buffer.b || buffer.p)) {\n buffer.o = buffer.a;\n buffer.d = buffer.b;\n buffer.q = buffer.p;\n buffer.a = buffer.b = buffer.p = undefined;\n } else {\n if (buffer.o && buffer.dType==='kv' && mhchemParser.patterns.match_('d-oxidation$', buffer.d || \"\")) {\n buffer.dType = 'oxidation';\n } else if (buffer.o && buffer.dType==='kv' && !buffer.q) {\n buffer.dType = undefined;\n }\n }\n ret.push({\n type_: 'chemfive',\n a: mhchemParser.go(buffer.a, 'a'),\n b: mhchemParser.go(buffer.b, 'bd'),\n p: mhchemParser.go(buffer.p, 'pq'),\n o: mhchemParser.go(buffer.o, 'o'),\n q: mhchemParser.go(buffer.q, 'pq'),\n d: mhchemParser.go(buffer.d, (buffer.dType === 'oxidation' ? 'oxidation' : 'bd')),\n dType: buffer.dType\n });\n }\n } else { // r\n /** @type {ParserOutput[]} */\n var rd;\n if (buffer.rdt === 'M') {\n rd = mhchemParser.go(buffer.rd, 'tex-math');\n } else if (buffer.rdt === 'T') {\n rd = [ { type_: 'text', p1: buffer.rd || \"\" } ];\n } else {\n rd = mhchemParser.go(buffer.rd);\n }\n /** @type {ParserOutput[]} */\n var rq;\n if (buffer.rqt === 'M') {\n rq = mhchemParser.go(buffer.rq, 'tex-math');\n } else if (buffer.rqt === 'T') {\n rq = [ { type_: 'text', p1: buffer.rq || \"\"} ];\n } else {\n rq = mhchemParser.go(buffer.rq);\n }\n ret = {\n type_: 'arrow',\n r: buffer.r,\n rd: rd,\n rq: rq\n };\n }\n for (var p in buffer) {\n if (p !== 'parenthesisLevel' && p !== 'beginsWithBond') {\n delete buffer[p];\n }\n }\n return ret;\n },\n 'oxidation-output': function (buffer, m) {\n var ret = [ \"{\" ];\n mhchemParser.concatArray(ret, mhchemParser.go(m, 'oxidation'));\n ret.push(\"}\");\n return ret;\n },\n 'frac-output': function (buffer, m) {\n return { type_: 'frac-ce', p1: mhchemParser.go(m[0]), p2: mhchemParser.go(m[1]) };\n },\n 'overset-output': function (buffer, m) {\n return { type_: 'overset', p1: mhchemParser.go(m[0]), p2: mhchemParser.go(m[1]) };\n },\n 'underset-output': function (buffer, m) {\n return { type_: 'underset', p1: mhchemParser.go(m[0]), p2: mhchemParser.go(m[1]) };\n },\n 'underbrace-output': function (buffer, m) {\n return { type_: 'underbrace', p1: mhchemParser.go(m[0]), p2: mhchemParser.go(m[1]) };\n },\n 'color-output': function (buffer, m) {\n return { type_: 'color', color1: m[0], color2: mhchemParser.go(m[1]) };\n },\n 'r=': function (buffer, m) { buffer.r = m; },\n 'rdt=': function (buffer, m) { buffer.rdt = m; },\n 'rd=': function (buffer, m) { buffer.rd = m; },\n 'rqt=': function (buffer, m) { buffer.rqt = m; },\n 'rq=': function (buffer, m) { buffer.rq = m; },\n 'operator': function (buffer, m, p1) { return { type_: 'operator', kind_: (p1 || m) }; }\n }\n },\n 'a': {\n transitions: mhchemParser.createTransitions({\n 'empty': {\n '*': {} },\n '1/2$': {\n '0': { action_: '1/2' } },\n 'else': {\n '0': { nextState: '1', revisit: true } },\n '$(...)$': {\n '*': { action_: 'tex-math tight', nextState: '1' } },\n ',': {\n '*': { action_: { type_: 'insert', option: 'commaDecimal' } } },\n 'else2': {\n '*': { action_: 'copy' } }\n }),\n actions: {}\n },\n 'o': {\n transitions: mhchemParser.createTransitions({\n 'empty': {\n '*': {} },\n '1/2$': {\n '0': { action_: '1/2' } },\n 'else': {\n '0': { nextState: '1', revisit: true } },\n 'letters': {\n '*': { action_: 'rm' } },\n '\\\\ca': {\n '*': { action_: { type_: 'insert', option: 'circa' } } },\n '\\\\x{}{}|\\\\x{}|\\\\x': {\n '*': { action_: 'copy' } },\n '${(...)}$|$(...)$': {\n '*': { action_: 'tex-math' } },\n '{(...)}': {\n '*': { action_: '{text}' } },\n 'else2': {\n '*': { action_: 'copy' } }\n }),\n actions: {}\n },\n 'text': {\n transitions: mhchemParser.createTransitions({\n 'empty': {\n '*': { action_: 'output' } },\n '{...}': {\n '*': { action_: 'text=' } },\n '${(...)}$|$(...)$': {\n '*': { action_: 'tex-math' } },\n '\\\\greek': {\n '*': { action_: [ 'output', 'rm' ] } },\n '\\\\,|\\\\x{}{}|\\\\x{}|\\\\x': {\n '*': { action_: [ 'output', 'copy' ] } },\n 'else': {\n '*': { action_: 'text=' } }\n }),\n actions: {\n 'output': function (buffer) {\n if (buffer.text_) {\n /** @type {ParserOutput} */\n var ret = { type_: 'text', p1: buffer.text_ };\n for (var p in buffer) { delete buffer[p]; }\n return ret;\n }\n }\n }\n },\n 'pq': {\n transitions: mhchemParser.createTransitions({\n 'empty': {\n '*': {} },\n 'state of aggregation $': {\n '*': { action_: 'state of aggregation' } },\n 'i$': {\n '0': { nextState: '!f', revisit: true } },\n '(KV letters),': {\n '0': { action_: 'rm', nextState: '0' } },\n 'formula$': {\n '0': { nextState: 'f', revisit: true } },\n '1/2$': {\n '0': { action_: '1/2' } },\n 'else': {\n '0': { nextState: '!f', revisit: true } },\n '${(...)}$|$(...)$': {\n '*': { action_: 'tex-math' } },\n '{(...)}': {\n '*': { action_: 'text' } },\n 'a-z': {\n 'f': { action_: 'tex-math' } },\n 'letters': {\n '*': { action_: 'rm' } },\n '-9.,9': {\n '*': { action_: '9,9' } },\n ',': {\n '*': { action_: { type_: 'insert+p1', option: 'comma enumeration S' } } },\n '\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2': {\n '*': { action_: 'color-output' } },\n '\\\\color{(...)}0': {\n '*': { action_: 'color0-output' } },\n '\\\\ce{(...)}': {\n '*': { action_: 'ce' } },\n '\\\\,|\\\\x{}{}|\\\\x{}|\\\\x': {\n '*': { action_: 'copy' } },\n 'else2': {\n '*': { action_: 'copy' } }\n }),\n actions: {\n 'state of aggregation': function (buffer, m) {\n return { type_: 'state of aggregation subscript', p1: mhchemParser.go(m, 'o') };\n },\n 'color-output': function (buffer, m) {\n return { type_: 'color', color1: m[0], color2: mhchemParser.go(m[1], 'pq') };\n }\n }\n },\n 'bd': {\n transitions: mhchemParser.createTransitions({\n 'empty': {\n '*': {} },\n 'x$': {\n '0': { nextState: '!f', revisit: true } },\n 'formula$': {\n '0': { nextState: 'f', revisit: true } },\n 'else': {\n '0': { nextState: '!f', revisit: true } },\n '-9.,9 no missing 0': {\n '*': { action_: '9,9' } },\n '.': {\n '*': { action_: { type_: 'insert', option: 'electron dot' } } },\n 'a-z': {\n 'f': { action_: 'tex-math' } },\n 'x': {\n '*': { action_: { type_: 'insert', option: 'KV x' } } },\n 'letters': {\n '*': { action_: 'rm' } },\n '\\'': {\n '*': { action_: { type_: 'insert', option: 'prime' } } },\n '${(...)}$|$(...)$': {\n '*': { action_: 'tex-math' } },\n '{(...)}': {\n '*': { action_: 'text' } },\n '\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2': {\n '*': { action_: 'color-output' } },\n '\\\\color{(...)}0': {\n '*': { action_: 'color0-output' } },\n '\\\\ce{(...)}': {\n '*': { action_: 'ce' } },\n '\\\\,|\\\\x{}{}|\\\\x{}|\\\\x': {\n '*': { action_: 'copy' } },\n 'else2': {\n '*': { action_: 'copy' } }\n }),\n actions: {\n 'color-output': function (buffer, m) {\n return { type_: 'color', color1: m[0], color2: mhchemParser.go(m[1], 'bd') };\n }\n }\n },\n 'oxidation': {\n transitions: mhchemParser.createTransitions({\n 'empty': {\n '*': {} },\n 'roman numeral': {\n '*': { action_: 'roman-numeral' } },\n '${(...)}$|$(...)$': {\n '*': { action_: 'tex-math' } },\n 'else': {\n '*': { action_: 'copy' } }\n }),\n actions: {\n 'roman-numeral': function (buffer, m) { return { type_: 'roman numeral', p1: m || \"\" }; }\n }\n },\n 'tex-math': {\n transitions: mhchemParser.createTransitions({\n 'empty': {\n '*': { action_: 'output' } },\n '\\\\ce{(...)}': {\n '*': { action_: [ 'output', 'ce' ] } },\n '{...}|\\\\,|\\\\x{}{}|\\\\x{}|\\\\x': {\n '*': { action_: 'o=' } },\n 'else': {\n '*': { action_: 'o=' } }\n }),\n actions: {\n 'output': function (buffer) {\n if (buffer.o) {\n /** @type {ParserOutput} */\n var ret = { type_: 'tex-math', p1: buffer.o };\n for (var p in buffer) { delete buffer[p]; }\n return ret;\n }\n }\n }\n },\n 'tex-math tight': {\n transitions: mhchemParser.createTransitions({\n 'empty': {\n '*': { action_: 'output' } },\n '\\\\ce{(...)}': {\n '*': { action_: [ 'output', 'ce' ] } },\n '{...}|\\\\,|\\\\x{}{}|\\\\x{}|\\\\x': {\n '*': { action_: 'o=' } },\n '-|+': {\n '*': { action_: 'tight operator' } },\n 'else': {\n '*': { action_: 'o=' } }\n }),\n actions: {\n 'tight operator': function (buffer, m) { buffer.o = (buffer.o || \"\") + \"{\"+m+\"}\"; },\n 'output': function (buffer) {\n if (buffer.o) {\n /** @type {ParserOutput} */\n var ret = { type_: 'tex-math', p1: buffer.o };\n for (var p in buffer) { delete buffer[p]; }\n return ret;\n }\n }\n }\n },\n '9,9': {\n transitions: mhchemParser.createTransitions({\n 'empty': {\n '*': {} },\n ',': {\n '*': { action_: 'comma' } },\n 'else': {\n '*': { action_: 'copy' } }\n }),\n actions: {\n 'comma': function () { return { type_: 'commaDecimal' }; }\n }\n },\n //#endregion\n //\n // \\pu state machines\n //\n //#region pu\n 'pu': {\n transitions: mhchemParser.createTransitions({\n 'empty': {\n '*': { action_: 'output' } },\n 'space$': {\n '*': { action_: [ 'output', 'space' ] } },\n '{[(|)]}': {\n '0|a': { action_: 'copy' } },\n '(-)(9)^(-9)': {\n '0': { action_: 'number^', nextState: 'a' } },\n '(-)(9.,9)(e)(99)': {\n '0': { action_: 'enumber', nextState: 'a' } },\n 'space': {\n '0|a': {} },\n 'pm-operator': {\n '0|a': { action_: { type_: 'operator', option: '\\\\pm' }, nextState: '0' } },\n 'operator': {\n '0|a': { action_: 'copy', nextState: '0' } },\n '//': {\n 'd': { action_: 'o=', nextState: '/' } },\n '/': {\n 'd': { action_: 'o=', nextState: '/' } },\n '{...}|else': {\n '0|d': { action_: 'd=', nextState: 'd' },\n 'a': { action_: [ 'space', 'd=' ], nextState: 'd' },\n '/|q': { action_: 'q=', nextState: 'q' } }\n }),\n actions: {\n 'enumber': function (buffer, m) {\n /** @type {ParserOutput[]} */\n var ret = [];\n if (m[0] === \"+-\" || m[0] === \"+/-\") {\n ret.push(\"\\\\pm \");\n } else if (m[0]) {\n ret.push(m[0]);\n }\n if (m[1]) {\n mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9'));\n if (m[2]) {\n if (m[2].match(/[,.]/)) {\n mhchemParser.concatArray(ret, mhchemParser.go(m[2], 'pu-9,9'));\n } else {\n ret.push(m[2]);\n }\n }\n m[3] = m[4] || m[3];\n if (m[3]) {\n m[3] = m[3].trim();\n if (m[3] === \"e\" || m[3].substr(0, 1) === \"*\") {\n ret.push({ type_: 'cdot' });\n } else {\n ret.push({ type_: 'times' });\n }\n }\n }\n if (m[3]) {\n ret.push(\"10^{\"+m[5]+\"}\");\n }\n return ret;\n },\n 'number^': function (buffer, m) {\n /** @type {ParserOutput[]} */\n var ret = [];\n if (m[0] === \"+-\" || m[0] === \"+/-\") {\n ret.push(\"\\\\pm \");\n } else if (m[0]) {\n ret.push(m[0]);\n }\n mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9'));\n ret.push(\"^{\"+m[2]+\"}\");\n return ret;\n },\n 'operator': function (buffer, m, p1) { return { type_: 'operator', kind_: (p1 || m) }; },\n 'space': function () { return { type_: 'pu-space-1' }; },\n 'output': function (buffer) {\n /** @type {ParserOutput | ParserOutput[]} */\n var ret;\n var md = mhchemParser.patterns.match_('{(...)}', buffer.d || \"\");\n if (md && md.remainder === '') { buffer.d = md.match_; }\n var mq = mhchemParser.patterns.match_('{(...)}', buffer.q || \"\");\n if (mq && mq.remainder === '') { buffer.q = mq.match_; }\n if (buffer.d) {\n buffer.d = buffer.d.replace(/\\u00B0C|\\^oC|\\^{o}C/g, \"{}^{\\\\circ}C\");\n buffer.d = buffer.d.replace(/\\u00B0F|\\^oF|\\^{o}F/g, \"{}^{\\\\circ}F\");\n }\n if (buffer.q) { // fraction\n buffer.q = buffer.q.replace(/\\u00B0C|\\^oC|\\^{o}C/g, \"{}^{\\\\circ}C\");\n buffer.q = buffer.q.replace(/\\u00B0F|\\^oF|\\^{o}F/g, \"{}^{\\\\circ}F\");\n var b5 = {\n d: mhchemParser.go(buffer.d, 'pu'),\n q: mhchemParser.go(buffer.q, 'pu')\n };\n if (buffer.o === '//') {\n ret = { type_: 'pu-frac', p1: b5.d, p2: b5.q };\n } else {\n ret = b5.d;\n if (b5.d.length > 1 || b5.q.length > 1) {\n ret.push({ type_: ' / ' });\n } else {\n ret.push({ type_: '/' });\n }\n mhchemParser.concatArray(ret, b5.q);\n }\n } else { // no fraction\n ret = mhchemParser.go(buffer.d, 'pu-2');\n }\n for (var p in buffer) { delete buffer[p]; }\n return ret;\n }\n }\n },\n 'pu-2': {\n transitions: mhchemParser.createTransitions({\n 'empty': {\n '*': { action_: 'output' } },\n '*': {\n '*': { action_: [ 'output', 'cdot' ], nextState: '0' } },\n '\\\\x': {\n '*': { action_: 'rm=' } },\n 'space': {\n '*': { action_: [ 'output', 'space' ], nextState: '0' } },\n '^{(...)}|^(-1)': {\n '1': { action_: '^(-1)' } },\n '-9.,9': {\n '0': { action_: 'rm=', nextState: '0' },\n '1': { action_: '^(-1)', nextState: '0' } },\n '{...}|else': {\n '*': { action_: 'rm=', nextState: '1' } }\n }),\n actions: {\n 'cdot': function () { return { type_: 'tight cdot' }; },\n '^(-1)': function (buffer, m) { buffer.rm += \"^{\"+m+\"}\"; },\n 'space': function () { return { type_: 'pu-space-2' }; },\n 'output': function (buffer) {\n /** @type {ParserOutput | ParserOutput[]} */\n var ret = [];\n if (buffer.rm) {\n var mrm = mhchemParser.patterns.match_('{(...)}', buffer.rm || \"\");\n if (mrm && mrm.remainder === '') {\n ret = mhchemParser.go(mrm.match_, 'pu');\n } else {\n ret = { type_: 'rm', p1: buffer.rm };\n }\n }\n for (var p in buffer) { delete buffer[p]; }\n return ret;\n }\n }\n },\n 'pu-9,9': {\n transitions: mhchemParser.createTransitions({\n 'empty': {\n '0': { action_: 'output-0' },\n 'o': { action_: 'output-o' } },\n ',': {\n '0': { action_: [ 'output-0', 'comma' ], nextState: 'o' } },\n '.': {\n '0': { action_: [ 'output-0', 'copy' ], nextState: 'o' } },\n 'else': {\n '*': { action_: 'text=' } }\n }),\n actions: {\n 'comma': function () { return { type_: 'commaDecimal' }; },\n 'output-0': function (buffer) {\n /** @type {ParserOutput[]} */\n var ret = [];\n buffer.text_ = buffer.text_ || \"\";\n if (buffer.text_.length > 4) {\n var a = buffer.text_.length % 3;\n if (a === 0) { a = 3; }\n for (var i=buffer.text_.length-3; i>0; i-=3) {\n ret.push(buffer.text_.substr(i, 3));\n ret.push({ type_: '1000 separator' });\n }\n ret.push(buffer.text_.substr(0, a));\n ret.reverse();\n } else {\n ret.push(buffer.text_);\n }\n for (var p in buffer) { delete buffer[p]; }\n return ret;\n },\n 'output-o': function (buffer) {\n /** @type {ParserOutput[]} */\n var ret = [];\n buffer.text_ = buffer.text_ || \"\";\n if (buffer.text_.length > 4) {\n var a = buffer.text_.length - 3;\n for (var i=0; i<a; i+=3) {\n ret.push(buffer.text_.substr(i, 3));\n ret.push({ type_: '1000 separator' });\n }\n ret.push(buffer.text_.substr(i));\n } else {\n ret.push(buffer.text_);\n }\n for (var p in buffer) { delete buffer[p]; }\n return ret;\n }\n }\n }\n //#endregion\n };\n\n //\n // texify: Take MhchemParser output and convert it to TeX\n //\n /** @type {Texify} */\n var texify = {\n go: function (input, isInner) { // (recursive, max 4 levels)\n if (!input) { return \"\"; }\n var res = \"\";\n var cee = false;\n for (var i=0; i < input.length; i++) {\n var inputi = input[i];\n if (typeof inputi === \"string\") {\n res += inputi;\n } else {\n res += texify._go2(inputi);\n if (inputi.type_ === '1st-level escape') { cee = true; }\n }\n }\n if (!isInner && !cee && res) {\n res = \"{\" + res + \"}\";\n }\n return res;\n },\n _goInner: function (input) {\n if (!input) { return input; }\n return texify.go(input, true);\n },\n _go2: function (buf) {\n /** @type {undefined | string} */\n var res;\n switch (buf.type_) {\n case 'chemfive':\n res = \"\";\n var b5 = {\n a: texify._goInner(buf.a),\n b: texify._goInner(buf.b),\n p: texify._goInner(buf.p),\n o: texify._goInner(buf.o),\n q: texify._goInner(buf.q),\n d: texify._goInner(buf.d)\n };\n //\n // a\n //\n if (b5.a) {\n if (b5.a.match(/^[+\\-]/)) { b5.a = \"{\"+b5.a+\"}\"; }\n res += b5.a + \"\\\\,\";\n }\n //\n // b and p\n //\n if (b5.b || b5.p) {\n res += \"{\\\\vphantom{X}}\";\n res += \"^{\\\\hphantom{\"+(b5.b||\"\")+\"}}_{\\\\hphantom{\"+(b5.p||\"\")+\"}}\";\n res += \"{\\\\vphantom{X}}\";\n // In the next two lines, I've removed \\smash[t] (ron)\n // TODO: Revert \\smash[t] when WebKit properly renders <mpadded> w/height=\"0\"\n //res += \"^{\\\\smash[t]{\\\\vphantom{2}}\\\\mathllap{\"+(b5.b||\"\")+\"}}\";\n res += \"^{\\\\vphantom{2}\\\\mathllap{\"+(b5.b||\"\")+\"}}\";\n //res += \"_{\\\\vphantom{2}\\\\mathllap{\\\\smash[t]{\"+(b5.p||\"\")+\"}}}\";\n res += \"_{\\\\vphantom{2}\\\\mathllap{\"+(b5.p||\"\")+\"}}\";\n }\n //\n // o\n //\n if (b5.o) {\n if (b5.o.match(/^[+\\-]/)) { b5.o = \"{\"+b5.o+\"}\"; }\n res += b5.o;\n }\n //\n // q and d\n //\n if (buf.dType === 'kv') {\n if (b5.d || b5.q) {\n res += \"{\\\\vphantom{X}}\";\n }\n if (b5.d) {\n res += \"^{\"+b5.d+\"}\";\n }\n if (b5.q) {\n // In the next line, I've removed \\smash[t] (ron)\n // TODO: Revert \\smash[t] when WebKit properly renders <mpadded> w/height=\"0\"\n //res += \"_{\\\\smash[t]{\"+b5.q+\"}}\";\n res += \"_{\"+b5.q+\"}\";\n }\n } else if (buf.dType === 'oxidation') {\n if (b5.d) {\n res += \"{\\\\vphantom{X}}\";\n res += \"^{\"+b5.d+\"}\";\n }\n if (b5.q) {\n // A Firefox bug adds a bogus depth to <mphantom>, so we change \\vphantom{X} to {}\n // TODO: Reinstate \\vphantom{X} when the Firefox bug is fixed.\n// res += \"{\\\\vphantom{X}}\";\n res += \"{{}}\";\n // In the next line, I've removed \\smash[t] (ron)\n // TODO: Revert \\smash[t] when WebKit properly renders <mpadded> w/height=\"0\"\n //res += \"_{\\\\smash[t]{\"+b5.q+\"}}\";\n res += \"_{\"+b5.q+\"}\";\n }\n } else {\n if (b5.q) {\n // TODO: Reinstate \\vphantom{X} when the Firefox bug is fixed.\n// res += \"{\\\\vphantom{X}}\";\n res += \"{{}}\";\n // In the next line, I've removed \\smash[t] (ron)\n // TODO: Revert \\smash[t] when WebKit properly renders <mpadded> w/height=\"0\"\n //res += \"_{\\\\smash[t]{\"+b5.q+\"}}\";\n res += \"_{\"+b5.q+\"}\";\n }\n if (b5.d) {\n // TODO: Reinstate \\vphantom{X} when the Firefox bug is fixed.\n// res += \"{\\\\vphantom{X}}\";\n res += \"{{}}\";\n res += \"^{\"+b5.d+\"}\";\n }\n }\n break;\n case 'rm':\n res = \"\\\\mathrm{\"+buf.p1+\"}\";\n break;\n case 'text':\n if (buf.p1.match(/[\\^_]/)) {\n buf.p1 = buf.p1.replace(\" \", \"~\").replace(\"-\", \"\\\\text{-}\");\n res = \"\\\\mathrm{\"+buf.p1+\"}\";\n } else {\n res = \"\\\\text{\"+buf.p1+\"}\";\n }\n break;\n case 'roman numeral':\n res = \"\\\\mathrm{\"+buf.p1+\"}\";\n break;\n case 'state of aggregation':\n res = \"\\\\mskip2mu \"+texify._goInner(buf.p1);\n break;\n case 'state of aggregation subscript':\n res = \"\\\\mskip1mu \"+texify._goInner(buf.p1);\n break;\n case 'bond':\n res = texify._getBond(buf.kind_);\n if (!res) {\n throw [\"MhchemErrorBond\", \"mhchem Error. Unknown bond type (\" + buf.kind_ + \")\"];\n }\n break;\n case 'frac':\n var c = \"\\\\frac{\" + buf.p1 + \"}{\" + buf.p2 + \"}\";\n res = \"\\\\mathchoice{\\\\textstyle\"+c+\"}{\"+c+\"}{\"+c+\"}{\"+c+\"}\";\n break;\n case 'pu-frac':\n var d = \"\\\\frac{\" + texify._goInner(buf.p1) + \"}{\" + texify._goInner(buf.p2) + \"}\";\n res = \"\\\\mathchoice{\\\\textstyle\"+d+\"}{\"+d+\"}{\"+d+\"}{\"+d+\"}\";\n break;\n case 'tex-math':\n res = buf.p1 + \" \";\n break;\n case 'frac-ce':\n res = \"\\\\frac{\" + texify._goInner(buf.p1) + \"}{\" + texify._goInner(buf.p2) + \"}\";\n break;\n case 'overset':\n res = \"\\\\overset{\" + texify._goInner(buf.p1) + \"}{\" + texify._goInner(buf.p2) + \"}\";\n break;\n case 'underset':\n res = \"\\\\underset{\" + texify._goInner(buf.p1) + \"}{\" + texify._goInner(buf.p2) + \"}\";\n break;\n case 'underbrace':\n res = \"\\\\underbrace{\" + texify._goInner(buf.p1) + \"}_{\" + texify._goInner(buf.p2) + \"}\";\n break;\n case 'color':\n res = \"{\\\\color{\" + buf.color1 + \"}{\" + texify._goInner(buf.color2) + \"}}\";\n break;\n case 'color0':\n res = \"\\\\color{\" + buf.color + \"}\";\n break;\n case 'arrow':\n var b6 = {\n rd: texify._goInner(buf.rd),\n rq: texify._goInner(buf.rq)\n };\n var arrow = texify._getArrow(buf.r);\n if (b6.rq) { arrow += \"[{\\\\rm \" + b6.rq + \"}]\"; }\n if (b6.rd) {\n arrow += \"{\\\\rm \" + b6.rd + \"}\";\n } else {\n arrow += \"{}\";\n }\n res = arrow;\n break;\n case 'operator':\n res = texify._getOperator(buf.kind_);\n break;\n case '1st-level escape':\n res = buf.p1+\" \"; // &, \\\\\\\\, \\\\hlin\n break;\n case 'space':\n res = \" \";\n break;\n case 'entitySkip':\n res = \"~\";\n break;\n case 'pu-space-1':\n res = \"~\";\n break;\n case 'pu-space-2':\n res = \"\\\\mkern3mu \";\n break;\n case '1000 separator':\n res = \"\\\\mkern2mu \";\n break;\n case 'commaDecimal':\n res = \"{,}\";\n break;\n case 'comma enumeration L':\n res = \"{\"+buf.p1+\"}\\\\mkern6mu \";\n break;\n case 'comma enumeration M':\n res = \"{\"+buf.p1+\"}\\\\mkern3mu \";\n break;\n case 'comma enumeration S':\n res = \"{\"+buf.p1+\"}\\\\mkern1mu \";\n break;\n case 'hyphen':\n res = \"\\\\text{-}\";\n break;\n case 'addition compound':\n res = \"\\\\,{\\\\cdot}\\\\,\";\n break;\n case 'electron dot':\n res = \"\\\\mkern1mu \\\\text{\\\\textbullet}\\\\mkern1mu \";\n break;\n case 'KV x':\n res = \"{\\\\times}\";\n break;\n case 'prime':\n res = \"\\\\prime \";\n break;\n case 'cdot':\n res = \"\\\\cdot \";\n break;\n case 'tight cdot':\n res = \"\\\\mkern1mu{\\\\cdot}\\\\mkern1mu \";\n break;\n case 'times':\n res = \"\\\\times \";\n break;\n case 'circa':\n res = \"{\\\\sim}\";\n break;\n case '^':\n res = \"uparrow\";\n break;\n case 'v':\n res = \"downarrow\";\n break;\n case 'ellipsis':\n res = \"\\\\ldots \";\n break;\n case '/':\n res = \"/\";\n break;\n case ' / ':\n res = \"\\\\,/\\\\,\";\n break;\n default:\n assertNever(buf);\n throw [\"MhchemBugT\", \"mhchem bug T. Please report.\"]; // Missing texify rule or unknown MhchemParser output\n }\n assertString(res);\n return res;\n },\n _getArrow: function (a) {\n switch (a) {\n case \"->\": return \"\\\\yields\";\n case \"\\u2192\": return \"\\\\yields\";\n case \"\\u27F6\": return \"\\\\yields\";\n case \"<-\": return \"\\\\yieldsLeft\";\n case \"<->\": return \"\\\\mesomerism\";\n case \"<-->\": return \"\\\\yieldsLeftRight\";\n case \"<=>\": return \"\\\\chemequilibrium\";\n case \"\\u21CC\": return \"\\\\chemequilibrium\";\n case \"<=>>\": return \"\\\\equilibriumRight\";\n case \"<<=>\": return \"\\\\equilibriumLeft\";\n default:\n assertNever(a);\n throw [\"MhchemBugT\", \"mhchem bug T. Please report.\"];\n }\n },\n _getBond: function (a) {\n switch (a) {\n case \"-\": return \"{-}\";\n case \"1\": return \"{-}\";\n case \"=\": return \"{=}\";\n case \"2\": return \"{=}\";\n case \"#\": return \"{\\\\equiv}\";\n case \"3\": return \"{\\\\equiv}\";\n case \"~\": return \"{\\\\tripleDash}\";\n case \"~-\": return \"{\\\\tripleDashOverLine}\";\n case \"~=\": return \"{\\\\tripleDashOverDoubleLine}\";\n case \"~--\": return \"{\\\\tripleDashOverDoubleLine}\";\n case \"-~-\": return \"{\\\\tripleDashBetweenDoubleLine}\";\n case \"...\": return \"{{\\\\cdot}{\\\\cdot}{\\\\cdot}}\";\n case \"....\": return \"{{\\\\cdot}{\\\\cdot}{\\\\cdot}{\\\\cdot}}\";\n case \"->\": return \"{\\\\rightarrow}\";\n case \"<-\": return \"{\\\\leftarrow}\";\n case \"<\": return \"{<}\";\n case \">\": return \"{>}\";\n default:\n assertNever(a);\n throw [\"MhchemBugT\", \"mhchem bug T. Please report.\"];\n }\n },\n _getOperator: function (a) {\n switch (a) {\n case \"+\": return \" {}+{} \";\n case \"-\": return \" {}-{} \";\n case \"=\": return \" {}={} \";\n case \"<\": return \" {}<{} \";\n case \">\": return \" {}>{} \";\n case \"<<\": return \" {}\\\\ll{} \";\n case \">>\": return \" {}\\\\gg{} \";\n case \"\\\\pm\": return \" {}\\\\pm{} \";\n case \"\\\\approx\": return \" {}\\\\approx{} \";\n case \"$\\\\approx$\": return \" {}\\\\approx{} \";\n case \"v\": return \" \\\\downarrow{} \";\n case \"(v)\": return \" \\\\downarrow{} \";\n case \"^\": return \" \\\\uparrow{} \";\n case \"(^)\": return \" \\\\uparrow{} \";\n default:\n assertNever(a);\n throw [\"MhchemBugT\", \"mhchem bug T. Please report.\"];\n }\n }\n };\n\n //\n // Helpers for code analysis\n // Will show type error at calling position\n //\n /** @param {number} a */\n function assertNever(a) {}\n /** @param {string} a */\n function assertString(a) {}\n\n/* eslint-disable no-undef */\n\n//////////////////////////////////////////////////////////////////////\n// texvc.sty\n\n// The texvc package contains macros available in mediawiki pages.\n// We omit the functions deprecated at\n// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax\n\n// We also omit texvc's \\O, which conflicts with \\text{\\O}\n\ndefineMacro(\"\\\\darr\", \"\\\\downarrow\");\ndefineMacro(\"\\\\dArr\", \"\\\\Downarrow\");\ndefineMacro(\"\\\\Darr\", \"\\\\Downarrow\");\ndefineMacro(\"\\\\lang\", \"\\\\langle\");\ndefineMacro(\"\\\\rang\", \"\\\\rangle\");\ndefineMacro(\"\\\\uarr\", \"\\\\uparrow\");\ndefineMacro(\"\\\\uArr\", \"\\\\Uparrow\");\ndefineMacro(\"\\\\Uarr\", \"\\\\Uparrow\");\ndefineMacro(\"\\\\N\", \"\\\\mathbb{N}\");\ndefineMacro(\"\\\\R\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Z\", \"\\\\mathbb{Z}\");\ndefineMacro(\"\\\\alef\", \"\\\\aleph\");\ndefineMacro(\"\\\\alefsym\", \"\\\\aleph\");\ndefineMacro(\"\\\\bull\", \"\\\\bullet\");\ndefineMacro(\"\\\\clubs\", \"\\\\clubsuit\");\ndefineMacro(\"\\\\cnums\", \"\\\\mathbb{C}\");\ndefineMacro(\"\\\\Complex\", \"\\\\mathbb{C}\");\ndefineMacro(\"\\\\Dagger\", \"\\\\ddagger\");\ndefineMacro(\"\\\\diamonds\", \"\\\\diamondsuit\");\ndefineMacro(\"\\\\empty\", \"\\\\emptyset\");\ndefineMacro(\"\\\\exist\", \"\\\\exists\");\ndefineMacro(\"\\\\harr\", \"\\\\leftrightarrow\");\ndefineMacro(\"\\\\hArr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Harr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\hearts\", \"\\\\heartsuit\");\ndefineMacro(\"\\\\image\", \"\\\\Im\");\ndefineMacro(\"\\\\infin\", \"\\\\infty\");\ndefineMacro(\"\\\\isin\", \"\\\\in\");\ndefineMacro(\"\\\\larr\", \"\\\\leftarrow\");\ndefineMacro(\"\\\\lArr\", \"\\\\Leftarrow\");\ndefineMacro(\"\\\\Larr\", \"\\\\Leftarrow\");\ndefineMacro(\"\\\\lrarr\", \"\\\\leftrightarrow\");\ndefineMacro(\"\\\\lrArr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Lrarr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\natnums\", \"\\\\mathbb{N}\");\ndefineMacro(\"\\\\plusmn\", \"\\\\pm\");\ndefineMacro(\"\\\\rarr\", \"\\\\rightarrow\");\ndefineMacro(\"\\\\rArr\", \"\\\\Rightarrow\");\ndefineMacro(\"\\\\Rarr\", \"\\\\Rightarrow\");\ndefineMacro(\"\\\\real\", \"\\\\Re\");\ndefineMacro(\"\\\\reals\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Reals\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\sdot\", \"\\\\cdot\");\ndefineMacro(\"\\\\sect\", \"\\\\S\");\ndefineMacro(\"\\\\spades\", \"\\\\spadesuit\");\ndefineMacro(\"\\\\sub\", \"\\\\subset\");\ndefineMacro(\"\\\\sube\", \"\\\\subseteq\");\ndefineMacro(\"\\\\supe\", \"\\\\supseteq\");\ndefineMacro(\"\\\\thetasym\", \"\\\\vartheta\");\ndefineMacro(\"\\\\weierp\", \"\\\\wp\");\n\n/* eslint-disable no-undef */\n\n/****************************************************\n *\n * physics.js\n *\n * Implements the Physics Package for LaTeX input.\n *\n * ---------------------------------------------------------------------\n *\n * The original version of this file is licensed as follows:\n * Copyright (c) 2015-2016 Kolen Cheung <https://github.com/ickc/MathJax-third-party-extensions>.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * ---------------------------------------------------------------------\n *\n * This file has been revised from the original in the following ways:\n * 1. The interface is changed so that it can be called from Temml, not MathJax.\n * 2. \\Re and \\Im are not used, to avoid conflict with existing LaTeX letters.\n *\n * This revision of the file is released under the MIT license.\n * https://mit-license.org/\n */\ndefineMacro(\"\\\\quantity\", \"{\\\\left\\\\{ #1 \\\\right\\\\}}\");\ndefineMacro(\"\\\\qty\", \"{\\\\left\\\\{ #1 \\\\right\\\\}}\");\ndefineMacro(\"\\\\pqty\", \"{\\\\left( #1 \\\\right)}\");\ndefineMacro(\"\\\\bqty\", \"{\\\\left[ #1 \\\\right]}\");\ndefineMacro(\"\\\\vqty\", \"{\\\\left\\\\vert #1 \\\\right\\\\vert}\");\ndefineMacro(\"\\\\Bqty\", \"{\\\\left\\\\{ #1 \\\\right\\\\}}\");\ndefineMacro(\"\\\\absolutevalue\", \"{\\\\left\\\\vert #1 \\\\right\\\\vert}\");\ndefineMacro(\"\\\\abs\", \"{\\\\left\\\\vert #1 \\\\right\\\\vert}\");\ndefineMacro(\"\\\\norm\", \"{\\\\left\\\\Vert #1 \\\\right\\\\Vert}\");\ndefineMacro(\"\\\\evaluated\", \"{\\\\left.#1 \\\\right\\\\vert}\");\ndefineMacro(\"\\\\eval\", \"{\\\\left.#1 \\\\right\\\\vert}\");\ndefineMacro(\"\\\\order\", \"{\\\\mathcal{O} \\\\left( #1 \\\\right)}\");\ndefineMacro(\"\\\\commutator\", \"{\\\\left[ #1 , #2 \\\\right]}\");\ndefineMacro(\"\\\\comm\", \"{\\\\left[ #1 , #2 \\\\right]}\");\ndefineMacro(\"\\\\anticommutator\", \"{\\\\left\\\\{ #1 , #2 \\\\right\\\\}}\");\ndefineMacro(\"\\\\acomm\", \"{\\\\left\\\\{ #1 , #2 \\\\right\\\\}}\");\ndefineMacro(\"\\\\poissonbracket\", \"{\\\\left\\\\{ #1 , #2 \\\\right\\\\}}\");\ndefineMacro(\"\\\\pb\", \"{\\\\left\\\\{ #1 , #2 \\\\right\\\\}}\");\ndefineMacro(\"\\\\vectorbold\", \"{\\\\boldsymbol{ #1 }}\");\ndefineMacro(\"\\\\vb\", \"{\\\\boldsymbol{ #1 }}\");\ndefineMacro(\"\\\\vectorarrow\", \"{\\\\vec{\\\\boldsymbol{ #1 }}}\");\ndefineMacro(\"\\\\va\", \"{\\\\vec{\\\\boldsymbol{ #1 }}}\");\ndefineMacro(\"\\\\vectorunit\", \"{{\\\\boldsymbol{\\\\hat{ #1 }}}}\");\ndefineMacro(\"\\\\vu\", \"{{\\\\boldsymbol{\\\\hat{ #1 }}}}\");\ndefineMacro(\"\\\\dotproduct\", \"\\\\mathbin{\\\\boldsymbol\\\\cdot}\");\ndefineMacro(\"\\\\vdot\", \"{\\\\boldsymbol\\\\cdot}\");\ndefineMacro(\"\\\\crossproduct\", \"\\\\mathbin{\\\\boldsymbol\\\\times}\");\ndefineMacro(\"\\\\cross\", \"\\\\mathbin{\\\\boldsymbol\\\\times}\");\ndefineMacro(\"\\\\cp\", \"\\\\mathbin{\\\\boldsymbol\\\\times}\");\ndefineMacro(\"\\\\gradient\", \"{\\\\boldsymbol\\\\nabla}\");\ndefineMacro(\"\\\\grad\", \"{\\\\boldsymbol\\\\nabla}\");\ndefineMacro(\"\\\\divergence\", \"{\\\\grad\\\\vdot}\");\n//defineMacro(\"\\\\div\", \"{\\\\grad\\\\vdot}\"); Not included in Temml. Conflicts w/LaTeX \\div\ndefineMacro(\"\\\\curl\", \"{\\\\grad\\\\cross}\");\ndefineMacro(\"\\\\laplacian\", \"\\\\nabla^2\");\ndefineMacro(\"\\\\tr\", \"{\\\\operatorname{tr}}\");\ndefineMacro(\"\\\\Tr\", \"{\\\\operatorname{Tr}}\");\ndefineMacro(\"\\\\rank\", \"{\\\\operatorname{rank}}\");\ndefineMacro(\"\\\\erf\", \"{\\\\operatorname{erf}}\");\ndefineMacro(\"\\\\Res\", \"{\\\\operatorname{Res}}\");\ndefineMacro(\"\\\\principalvalue\", \"{\\\\mathcal{P}}\");\ndefineMacro(\"\\\\pv\", \"{\\\\mathcal{P}}\");\ndefineMacro(\"\\\\PV\", \"{\\\\operatorname{P.V.}}\");\n// Temml does not use the next two lines. They conflict with LaTeX letters.\n//defineMacro(\"\\\\Re\", \"{\\\\operatorname{Re} \\\\left\\\\{ #1 \\\\right\\\\}}\");\n//defineMacro(\"\\\\Im\", \"{\\\\operatorname{Im} \\\\left\\\\{ #1 \\\\right\\\\}}\");\ndefineMacro(\"\\\\qqtext\", \"{\\\\quad\\\\text{ #1 }\\\\quad}\");\ndefineMacro(\"\\\\qq\", \"{\\\\quad\\\\text{ #1 }\\\\quad}\");\ndefineMacro(\"\\\\qcomma\", \"{\\\\text{,}\\\\quad}\");\ndefineMacro(\"\\\\qc\", \"{\\\\text{,}\\\\quad}\");\ndefineMacro(\"\\\\qcc\", \"{\\\\quad\\\\text{c.c.}\\\\quad}\");\ndefineMacro(\"\\\\qif\", \"{\\\\quad\\\\text{if}\\\\quad}\");\ndefineMacro(\"\\\\qthen\", \"{\\\\quad\\\\text{then}\\\\quad}\");\ndefineMacro(\"\\\\qelse\", \"{\\\\quad\\\\text{else}\\\\quad}\");\ndefineMacro(\"\\\\qotherwise\", \"{\\\\quad\\\\text{otherwise}\\\\quad}\");\ndefineMacro(\"\\\\qunless\", \"{\\\\quad\\\\text{unless}\\\\quad}\");\ndefineMacro(\"\\\\qgiven\", \"{\\\\quad\\\\text{given}\\\\quad}\");\ndefineMacro(\"\\\\qusing\", \"{\\\\quad\\\\text{using}\\\\quad}\");\ndefineMacro(\"\\\\qassume\", \"{\\\\quad\\\\text{assume}\\\\quad}\");\ndefineMacro(\"\\\\qsince\", \"{\\\\quad\\\\text{since}\\\\quad}\");\ndefineMacro(\"\\\\qlet\", \"{\\\\quad\\\\text{let}\\\\quad}\");\ndefineMacro(\"\\\\qfor\", \"{\\\\quad\\\\text{for}\\\\quad}\");\ndefineMacro(\"\\\\qall\", \"{\\\\quad\\\\text{all}\\\\quad}\");\ndefineMacro(\"\\\\qeven\", \"{\\\\quad\\\\text{even}\\\\quad}\");\ndefineMacro(\"\\\\qodd\", \"{\\\\quad\\\\text{odd}\\\\quad}\");\ndefineMacro(\"\\\\qinteger\", \"{\\\\quad\\\\text{integer}\\\\quad}\");\ndefineMacro(\"\\\\qand\", \"{\\\\quad\\\\text{and}\\\\quad}\");\ndefineMacro(\"\\\\qor\", \"{\\\\quad\\\\text{or}\\\\quad}\");\ndefineMacro(\"\\\\qas\", \"{\\\\quad\\\\text{as}\\\\quad}\");\ndefineMacro(\"\\\\qin\", \"{\\\\quad\\\\text{in}\\\\quad}\");\ndefineMacro(\"\\\\differential\", \"{\\\\text{d}}\");\ndefineMacro(\"\\\\dd\", \"{\\\\text{d}}\");\ndefineMacro(\"\\\\derivative\", \"{\\\\frac{\\\\text{d}{ #1 }}{\\\\text{d}{ #2 }}}\");\ndefineMacro(\"\\\\dv\", \"{\\\\frac{\\\\text{d}{ #1 }}{\\\\text{d}{ #2 }}}\");\ndefineMacro(\"\\\\partialderivative\", \"{\\\\frac{\\\\partial{ #1 }}{\\\\partial{ #2 }}}\");\ndefineMacro(\"\\\\variation\", \"{\\\\delta}\");\ndefineMacro(\"\\\\var\", \"{\\\\delta}\");\ndefineMacro(\"\\\\functionalderivative\", \"{\\\\frac{\\\\delta{ #1 }}{\\\\delta{ #2 }}}\");\ndefineMacro(\"\\\\fdv\", \"{\\\\frac{\\\\delta{ #1 }}{\\\\delta{ #2 }}}\");\ndefineMacro(\"\\\\innerproduct\", \"{\\\\left\\\\langle {#1} \\\\mid { #2} \\\\right\\\\rangle}\");\ndefineMacro(\"\\\\outerproduct\",\n \"{\\\\left\\\\vert { #1 } \\\\right\\\\rangle\\\\left\\\\langle { #2} \\\\right\\\\vert}\");\ndefineMacro(\"\\\\dyad\",\n \"{\\\\left\\\\vert { #1 } \\\\right\\\\rangle\\\\left\\\\langle { #2} \\\\right\\\\vert}\");\ndefineMacro(\"\\\\ketbra\",\n \"{\\\\left\\\\vert { #1 } \\\\right\\\\rangle\\\\left\\\\langle { #2} \\\\right\\\\vert}\");\ndefineMacro(\"\\\\op\",\n \"{\\\\left\\\\vert { #1 } \\\\right\\\\rangle\\\\left\\\\langle { #2} \\\\right\\\\vert}\");\ndefineMacro(\"\\\\expectationvalue\", \"{\\\\left\\\\langle {#1 } \\\\right\\\\rangle}\");\ndefineMacro(\"\\\\expval\", \"{\\\\left\\\\langle {#1 } \\\\right\\\\rangle}\");\ndefineMacro(\"\\\\ev\", \"{\\\\left\\\\langle {#1 } \\\\right\\\\rangle}\");\ndefineMacro(\"\\\\matrixelement\",\n \"{\\\\left\\\\langle{ #1 }\\\\right\\\\vert{ #2 }\\\\left\\\\vert{#3}\\\\right\\\\rangle}\");\ndefineMacro(\"\\\\matrixel\",\n \"{\\\\left\\\\langle{ #1 }\\\\right\\\\vert{ #2 }\\\\left\\\\vert{#3}\\\\right\\\\rangle}\");\ndefineMacro(\"\\\\mel\",\n \"{\\\\left\\\\langle{ #1 }\\\\right\\\\vert{ #2 }\\\\left\\\\vert{#3}\\\\right\\\\rangle}\");\n\n// Helper functions\nfunction getHLines(parser) {\n // Return an array. The array length = number of hlines.\n // Each element in the array tells if the line is dashed.\n const hlineInfo = [];\n parser.consumeSpaces();\n let nxt = parser.fetch().text;\n if (nxt === \"\\\\relax\") {\n parser.consume();\n parser.consumeSpaces();\n nxt = parser.fetch().text;\n }\n while (nxt === \"\\\\hline\" || nxt === \"\\\\hdashline\") {\n parser.consume();\n hlineInfo.push(nxt === \"\\\\hdashline\");\n parser.consumeSpaces();\n nxt = parser.fetch().text;\n }\n return hlineInfo;\n}\n\nconst validateAmsEnvironmentContext = context => {\n const settings = context.parser.settings;\n if (!settings.displayMode) {\n throw new ParseError(`{${context.envName}} can be used only in display mode.`);\n }\n};\n\nconst sizeRegEx$1 = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/;\nconst arrayGaps = macros => {\n let arraystretch = macros.get(\"\\\\arraystretch\");\n if (typeof arraystretch !== \"string\") {\n arraystretch = stringFromArg(arraystretch.tokens);\n }\n arraystretch = isNaN(arraystretch) ? null : Number(arraystretch);\n let arraycolsepStr = macros.get(\"\\\\arraycolsep\");\n if (typeof arraycolsepStr !== \"string\") {\n arraycolsepStr = stringFromArg(arraycolsepStr.tokens);\n }\n const match = sizeRegEx$1.exec(arraycolsepStr);\n const arraycolsep = match\n ? { number: +(match[1] + match[2]), unit: match[3] }\n : null;\n return [arraystretch, arraycolsep]\n};\n\nconst checkCellForLabels = cell => {\n // Check if the author wrote a \\tag{} inside this cell.\n let rowLabel = \"\";\n for (let i = 0; i < cell.length; i++) {\n if (cell[i].type === \"label\") {\n if (rowLabel) { throw new ParseError((\"Multiple \\\\labels in one row\")) }\n rowLabel = cell[i].string;\n }\n }\n return rowLabel\n};\n\n// autoTag (an argument to parseArray) can be one of three values:\n// * undefined: Regular (not-top-level) array; no tags on each row\n// * true: Automatic equation numbering, overridable by \\tag\n// * false: Tags allowed on each row, but no automatic numbering\n// This function *doesn't* work with the \"split\" environment name.\nfunction getAutoTag(name) {\n if (name.indexOf(\"ed\") === -1) {\n return name.indexOf(\"*\") === -1;\n }\n // return undefined;\n}\n\n/**\n * Parse the body of the environment, with rows delimited by \\\\ and\n * columns delimited by &, and create a nested list in row-major order\n * with one group per cell. If given an optional argument scriptLevel\n * (\"text\", \"display\", etc.), then each cell is cast into that scriptLevel.\n */\nfunction parseArray(\n parser,\n {\n cols, // [{ type: string , align: l|c|r|null }]\n envClasses, // align(ed|at|edat) | array | cases | cd | small | multline\n autoTag, // boolean\n singleRow, // boolean\n emptySingleRow, // boolean\n maxNumCols, // number\n leqno, // boolean\n arraystretch, // number | null\n arraycolsep // size value | null\n},\n scriptLevel\n) {\n const endToken = envClasses && envClasses.includes(\"bordermatrix\") ? \"}\" : \"\\\\end\";\n parser.gullet.beginGroup();\n if (!singleRow) {\n // \\cr is equivalent to \\\\ without the optional size argument (see below)\n // TODO: provide helpful error when \\cr is used outside array environment\n parser.gullet.macros.set(\"\\\\cr\", \"\\\\\\\\\\\\relax\");\n }\n\n // Start group for first cell\n parser.gullet.beginGroup();\n\n let row = [];\n const body = [row];\n const rowGaps = [];\n const labels = [];\n\n const hLinesBeforeRow = [];\n\n const tags = (autoTag != null ? [] : undefined);\n\n // amsmath uses \\global\\@eqnswtrue and \\global\\@eqnswfalse to represent\n // whether this row should have an equation number. Simulate this with\n // a \\@eqnsw macro set to 1 or 0.\n function beginRow() {\n if (autoTag) {\n parser.gullet.macros.set(\"\\\\@eqnsw\", \"1\", true);\n }\n }\n function endRow() {\n if (tags) {\n if (parser.gullet.macros.get(\"\\\\df@tag\")) {\n tags.push(parser.subparse([new Token(\"\\\\df@tag\")]));\n parser.gullet.macros.set(\"\\\\df@tag\", undefined, true);\n } else {\n tags.push(Boolean(autoTag) &&\n parser.gullet.macros.get(\"\\\\@eqnsw\") === \"1\");\n }\n }\n }\n beginRow();\n\n // Test for \\hline at the top of the array.\n hLinesBeforeRow.push(getHLines(parser));\n\n while (true) {\n // Parse each cell in its own group (namespace)\n let cell = parser.parseExpression(false, singleRow ? \"\\\\end\" : \"\\\\\\\\\");\n parser.gullet.endGroup();\n parser.gullet.beginGroup();\n\n cell = {\n type: \"ordgroup\",\n mode: parser.mode,\n body: cell,\n semisimple: true\n };\n row.push(cell);\n const next = parser.fetch().text;\n if (next === \"&\") {\n if (maxNumCols && row.length === maxNumCols) {\n if (envClasses.includes(\"array\")) {\n if (parser.settings.strict) {\n throw new ParseError(\"Too few columns \" + \"specified in the {array} column argument.\",\n parser.nextToken)\n }\n } else if (maxNumCols === 2) {\n throw new ParseError(\"The split environment accepts no more than two columns\",\n parser.nextToken);\n } else {\n throw new ParseError(\"The equation environment accepts only one column\",\n parser.nextToken)\n }\n }\n parser.consume();\n } else if (next === endToken) {\n endRow();\n // Arrays terminate newlines with `\\crcr` which consumes a `\\cr` if\n // the last line is empty. However, AMS environments keep the\n // empty row if it's the only one.\n // NOTE: Currently, `cell` is the last item added into `row`.\n if (row.length === 1 && cell.body.length === 0 && (body.length > 1 || !emptySingleRow)) {\n body.pop();\n }\n labels.push(checkCellForLabels(cell.body));\n if (hLinesBeforeRow.length < body.length + 1) {\n hLinesBeforeRow.push([]);\n }\n break;\n } else if (next === \"\\\\\\\\\") {\n parser.consume();\n let size;\n // \\def\\Let@{\\let\\\\\\math@cr}\n // \\def\\math@cr{...\\math@cr@}\n // \\def\\math@cr@{\\new@ifnextchar[\\math@cr@@{\\math@cr@@[\\z@]}}\n // \\def\\math@cr@@[#1]{...\\math@cr@@@...}\n // \\def\\math@cr@@@{\\cr}\n if (parser.gullet.future().text !== \" \") {\n size = parser.parseSizeGroup(true);\n }\n rowGaps.push(size ? size.value : null);\n endRow();\n\n labels.push(checkCellForLabels(cell.body));\n\n // check for \\hline(s) following the row separator\n hLinesBeforeRow.push(getHLines(parser));\n\n row = [];\n body.push(row);\n beginRow();\n } else {\n throw new ParseError(\"Expected & or \\\\\\\\ or \\\\cr or \" + endToken, parser.nextToken);\n }\n }\n\n // End cell group\n parser.gullet.endGroup();\n // End array group defining \\cr\n parser.gullet.endGroup();\n\n return {\n type: \"array\",\n mode: parser.mode,\n body,\n cols,\n rowGaps,\n hLinesBeforeRow,\n envClasses,\n autoTag,\n scriptLevel,\n tags,\n labels,\n leqno,\n arraystretch,\n arraycolsep\n };\n}\n\n// Decides on a scriptLevel for cells in an array according to whether the given\n// environment name starts with the letter 'd'.\nfunction dCellStyle(envName) {\n return envName.slice(0, 1) === \"d\" ? \"display\" : \"text\"\n}\n\nconst alignMap = {\n c: \"center \",\n l: \"left \",\n r: \"right \"\n};\n\nconst glue = group => {\n const glueNode = new mathMLTree.MathNode(\"mtd\", []);\n glueNode.style = { padding: \"0\", width: \"50%\" };\n if (group.envClasses.includes(\"multline\")) {\n glueNode.style.width = \"7.5%\";\n }\n return glueNode\n};\n\nconst mathmlBuilder$9 = function(group, style) {\n const tbl = [];\n const numRows = group.body.length;\n const hlines = group.hLinesBeforeRow;\n\n for (let i = 0; i < numRows; i++) {\n const rw = group.body[i];\n const row = [];\n const cellLevel = group.scriptLevel === \"text\"\n ? StyleLevel.TEXT\n : group.scriptLevel === \"script\"\n ? StyleLevel.SCRIPT\n : StyleLevel.DISPLAY;\n\n for (let j = 0; j < rw.length; j++) {\n const mtd = new mathMLTree.MathNode(\n \"mtd\",\n [buildGroup$1(rw[j], style.withLevel(cellLevel))]\n );\n\n if (group.envClasses.includes(\"multline\")) {\n const align = i === 0 ? \"left\" : i === numRows - 1 ? \"right\" : \"center\";\n if (align !== \"center\") {\n mtd.classes.push(\"tml-\" + align);\n }\n }\n row.push(mtd);\n }\n const numColumns = group.body[0].length;\n // Fill out a short row with empty <mtd> elements.\n for (let k = 0; k < numColumns - rw.length; k++) {\n row.push(new mathMLTree.MathNode(\"mtd\", [], [], style));\n }\n if (group.autoTag) {\n const tag = group.tags[i];\n let tagElement;\n if (tag === true) { // automatic numbering\n tagElement = new mathMLTree.MathNode(\"mtext\", [new Span([\"tml-eqn\"])]);\n } else if (tag === false) {\n // \\nonumber/\\notag or starred environment\n tagElement = new mathMLTree.MathNode(\"mtext\", [], []);\n } else { // manual \\tag\n tagElement = buildExpressionRow(tag[0].body, style.withLevel(cellLevel), true);\n tagElement = consolidateText(tagElement);\n tagElement.classes = [\"tml-tag\"];\n }\n if (tagElement) {\n row.unshift(glue(group));\n row.push(glue(group));\n if (group.leqno) {\n row[0].children.push(tagElement);\n } else {\n row[row.length - 1].children.push(tagElement);\n }\n }\n }\n const mtr = new mathMLTree.MathNode(\"mtr\", row, []);\n const label = group.labels.shift();\n if (label && group.tags && group.tags[i]) {\n mtr.setAttribute(\"id\", label);\n if (Array.isArray(group.tags[i])) { mtr.classes.push(\"tml-tageqn\"); }\n }\n\n // Write horizontal rules\n if (i === 0 && hlines[0].length > 0) {\n if (hlines[0].length === 2) {\n mtr.children.forEach(cell => { cell.style.borderTop = \"0.15em double\"; });\n } else {\n mtr.children.forEach(cell => {\n cell.style.borderTop = hlines[0][0] ? \"0.06em dashed\" : \"0.06em solid\";\n });\n }\n }\n if (hlines[i + 1].length > 0) {\n if (hlines[i + 1].length === 2) {\n mtr.children.forEach(cell => { cell.style.borderBottom = \"0.15em double\"; });\n } else {\n mtr.children.forEach(cell => {\n cell.style.borderBottom = hlines[i + 1][0] ? \"0.06em dashed\" : \"0.06em solid\";\n });\n }\n }\n\n // Check for \\hphantom \\from \\bordermatrix\n let mustSquashRow = true;\n for (let j = 0; j < mtr.children.length; j++) {\n const child = mtr.children[j].children[0];\n if (!(child && child.type === \"mpadded\" && child.attributes.height === \"0px\")) {\n mustSquashRow = false;\n break\n }\n }\n if (mustSquashRow) {\n // All the cell contents are \\hphantom. Squash the cell.\n for (let j = 0; j < mtr.children.length; j++) {\n mtr.children[j].style.display = \"block\"; // necessary in Firefox only\n mtr.children[j].style.height = \"0\"; // necessary in Firefox only\n mtr.children[j].style.paddingTop = \"0\";\n mtr.children[j].style.paddingBottom = \"0\";\n }\n }\n\n tbl.push(mtr);\n }\n\n if (group.arraystretch && group.arraystretch !== 1) {\n // In LaTeX, \\arraystretch is a factor applied to a 12pt strut height.\n // It defines a baseline to baseline distance.\n // Here, we do an approximation of that approach.\n const pad = String(1.4 * group.arraystretch - 0.8) + \"ex\";\n for (let i = 0; i < tbl.length; i++) {\n for (let j = 0; j < tbl[i].children.length; j++) {\n tbl[i].children[j].style.paddingTop = pad;\n tbl[i].children[j].style.paddingBottom = pad;\n }\n }\n }\n\n let sidePadding;\n let sidePadUnit;\n if (group.envClasses.length > 0) {\n sidePadding = group.envClasses.includes(\"abut\")\n ? \"0\"\n : group.envClasses.includes(\"cases\")\n ? \"0\"\n : group.envClasses.includes(\"small\")\n ? \"0.1389\"\n : group.envClasses.includes(\"cd\")\n ? \"0.25\"\n : \"0.4\"; // default side padding\n sidePadUnit = \"em\";\n }\n if (group.arraycolsep) {\n const arraySidePad = calculateSize(group.arraycolsep, style);\n sidePadding = arraySidePad.number.toFixed(4);\n sidePadUnit = arraySidePad.unit;\n }\n if (sidePadding) {\n const numCols = tbl.length === 0 ? 0 : tbl[0].children.length;\n\n const sidePad = (j, hand) => {\n if (j === 0 && hand === 0) { return \"0\" }\n if (j === numCols - 1 && hand === 1) { return \"0\" }\n if (group.envClasses[0] !== \"align\") { return sidePadding }\n if (hand === 1) { return \"0\" }\n if (group.autoTag) {\n return (j % 2) ? \"1\" : \"0\"\n } else {\n return (j % 2) ? \"0\" : \"1\"\n }\n };\n\n // Side padding\n for (let i = 0; i < tbl.length; i++) {\n for (let j = 0; j < tbl[i].children.length; j++) {\n tbl[i].children[j].style.paddingLeft = `${sidePad(j, 0)}${sidePadUnit}`;\n tbl[i].children[j].style.paddingRight = `${sidePad(j, 1)}${sidePadUnit}`;\n }\n }\n }\n if (group.envClasses.length === 0) {\n // Set zero padding on side of the matrix\n for (let i = 0; i < tbl.length; i++) {\n tbl[i].children[0].style.paddingLeft = \"0em\";\n if (tbl[i].children.length === tbl[0].children.length) {\n tbl[i].children[tbl[i].children.length - 1].style.paddingRight = \"0em\";\n }\n }\n }\n\n if (group.envClasses.length > 0) {\n // Justification\n const align = group.envClasses.includes(\"align\") || group.envClasses.includes(\"alignat\");\n for (let i = 0; i < tbl.length; i++) {\n const row = tbl[i];\n if (align) {\n for (let j = 0; j < row.children.length; j++) {\n // Chromium does not recognize text-align: left. Use -webkit-\n // TODO: Remove -webkit- when Chromium no longer needs it.\n row.children[j].classes = [\"tml-\" + (j % 2 ? \"left\" : \"right\")];\n }\n if (group.autoTag) {\n const k = group.leqno ? 0 : row.children.length - 1;\n row.children[k].classes = []; // Default is center.\n }\n }\n if (row.children.length > 1 && group.envClasses.includes(\"cases\")) {\n row.children[1].style.paddingLeft = \"1em\";\n }\n\n if (group.envClasses.includes(\"cases\") || group.envClasses.includes(\"subarray\")) {\n for (const cell of row.children) {\n cell.classes.push(\"tml-left\");\n }\n }\n }\n }\n\n let table = new mathMLTree.MathNode(\"mtable\", tbl);\n if (group.envClasses.length > 0) {\n // Top & bottom padding\n if (group.envClasses.includes(\"jot\")) {\n table.classes.push(\"tml-jot\");\n } else if (group.envClasses.includes(\"small\")) {\n table.classes.push(\"tml-small\");\n }\n }\n if (group.scriptLevel === \"display\") { table.setAttribute(\"displaystyle\", \"true\"); }\n\n if (group.autoTag || group.envClasses.includes(\"multline\")) {\n table.style.width = \"100%\";\n }\n\n // Column separator lines and column alignment\n\n if (group.cols && group.cols.length > 0) {\n const cols = group.cols;\n let prevTypeWasAlign = false;\n let iStart = 0;\n let iEnd = cols.length;\n\n while (cols[iStart].type === \"separator\") {\n iStart += 1;\n }\n while (cols[iEnd - 1].type === \"separator\") {\n iEnd -= 1;\n }\n\n if (cols[0].type === \"separator\") {\n const sep = cols[1].type === \"separator\"\n ? \"0.15em double\"\n : cols[0].separator === \"|\"\n ? \"0.06em solid \"\n : \"0.06em dashed \";\n for (const row of table.children) {\n row.children[0].style.borderLeft = sep;\n }\n }\n let iCol = group.autoTag ? 0 : -1;\n for (let i = iStart; i < iEnd; i++) {\n if (cols[i].type === \"align\") {\n const colAlign = alignMap[cols[i].align];\n iCol += 1;\n for (const row of table.children) {\n if (colAlign.trim() !== \"center\" && iCol < row.children.length) {\n row.children[iCol].classes = [\"tml-\" + colAlign.trim()];\n }\n }\n prevTypeWasAlign = true;\n } else if (cols[i].type === \"separator\") {\n // MathML accepts only single lines between cells.\n // So we read only the first of consecutive separators.\n if (prevTypeWasAlign) {\n const sep = cols[i + 1].type === \"separator\"\n ? \"0.15em double\"\n : cols[i].separator === \"|\"\n ? \"0.06em solid\"\n : \"0.06em dashed\";\n for (const row of table.children) {\n if (iCol < row.children.length) {\n row.children[iCol].style.borderRight = sep;\n }\n }\n }\n prevTypeWasAlign = false;\n }\n }\n if (cols[cols.length - 1].type === \"separator\") {\n const sep = cols[cols.length - 2].type === \"separator\"\n ? \"0.15em double\"\n : cols[cols.length - 1].separator === \"|\"\n ? \"0.06em solid\"\n : \"0.06em dashed\";\n for (const row of table.children) {\n row.children[row.children.length - 1].style.borderRight = sep;\n row.children[row.children.length - 1].style.paddingRight = \"0.4em\";\n }\n }\n }\n\n if (group.envClasses.includes(\"small\")) {\n // A small array. Wrap in scriptstyle.\n table = new mathMLTree.MathNode(\"mstyle\", [table]);\n table.setAttribute(\"scriptlevel\", \"1\");\n }\n\n return table\n};\n\n// Convenience function for align, align*, aligned, alignat, alignat*, alignedat, split.\nconst alignedHandler = function(context, args) {\n if (context.envName.indexOf(\"ed\") === -1) {\n validateAmsEnvironmentContext(context);\n }\n const isSplit = context.envName === \"split\";\n const cols = [];\n const res = parseArray(\n context.parser,\n {\n cols,\n emptySingleRow: true,\n autoTag: isSplit ? undefined : getAutoTag(context.envName),\n envClasses: [\"abut\", \"jot\"], // set row spacing & provisional column spacing\n maxNumCols: context.envName === \"split\" ? 2 : undefined,\n leqno: context.parser.settings.leqno\n },\n \"display\"\n );\n\n // Determining number of columns.\n // 1. If the first argument is given, we use it as a number of columns,\n // and makes sure that each row doesn't exceed that number.\n // 2. Otherwise, just count number of columns = maximum number\n // of cells in each row (\"aligned\" mode -- isAligned will be true).\n //\n // At the same time, prepend empty group {} at beginning of every second\n // cell in each row (starting with second cell) so that operators become\n // binary. This behavior is implemented in amsmath's \\start@aligned.\n let numMaths;\n let numCols = 0;\n const isAlignedAt = context.envName.indexOf(\"at\") > -1;\n if (args[0] && isAlignedAt) {\n // alignat environment takes an argument w/ number of columns\n let arg0 = \"\";\n for (let i = 0; i < args[0].body.length; i++) {\n const textord = assertNodeType(args[0].body[i], \"textord\");\n arg0 += textord.text;\n }\n if (isNaN(arg0)) {\n throw new ParseError(\"The alignat enviroment requires a numeric first argument.\")\n }\n numMaths = Number(arg0);\n numCols = numMaths * 2;\n }\n res.body.forEach(function(row) {\n if (isAlignedAt) {\n // Case 1\n const curMaths = row.length / 2;\n if (numMaths < curMaths) {\n throw new ParseError(\n \"Too many math in a row: \" + `expected ${numMaths}, but got ${curMaths}`,\n row[0]\n );\n }\n } else if (numCols < row.length) {\n // Case 2\n numCols = row.length;\n }\n });\n\n // Adjusting alignment.\n // In aligned mode, we add one \\qquad between columns;\n // otherwise we add nothing.\n for (let i = 0; i < numCols; ++i) {\n let align = \"r\";\n if (i % 2 === 1) {\n align = \"l\";\n }\n cols[i] = {\n type: \"align\",\n align: align\n };\n }\n if (context.envName === \"split\") ; else if (isAlignedAt) {\n res.envClasses.push(\"alignat\"); // Sets justification\n } else {\n res.envClasses[0] = \"align\"; // Sets column spacing & justification\n }\n return res;\n};\n\n// Arrays are part of LaTeX, defined in lttab.dtx so its documentation\n// is part of the source2e.pdf file of LaTeX2e source documentation.\n// {darray} is an {array} environment where cells are set in \\displaystyle,\n// as defined in nccmath.sty.\ndefineEnvironment({\n type: \"array\",\n names: [\"array\", \"darray\"],\n props: {\n numArgs: 1\n },\n handler(context, args) {\n // Since no types are specified above, the two possibilities are\n // - The argument is wrapped in {} or [], in which case Parser's\n // parseGroup() returns an \"ordgroup\" wrapping some symbol node.\n // - The argument is a bare symbol node.\n const symNode = checkSymbolNodeType(args[0]);\n const colalign = symNode ? [args[0]] : assertNodeType(args[0], \"ordgroup\").body;\n const cols = colalign.map(function(nde) {\n const node = assertSymbolNodeType(nde);\n const ca = node.text;\n if (\"lcr\".indexOf(ca) !== -1) {\n return {\n type: \"align\",\n align: ca\n };\n } else if (ca === \"|\") {\n return {\n type: \"separator\",\n separator: \"|\"\n };\n } else if (ca === \":\") {\n return {\n type: \"separator\",\n separator: \":\"\n };\n }\n throw new ParseError(\"Unknown column alignment: \" + ca, nde);\n });\n const [arraystretch, arraycolsep] = arrayGaps(context.parser.gullet.macros);\n const res = {\n cols,\n envClasses: [\"array\"],\n maxNumCols: cols.length,\n arraystretch,\n arraycolsep\n };\n return parseArray(context.parser, res, dCellStyle(context.envName));\n },\n mathmlBuilder: mathmlBuilder$9\n});\n\n// The matrix environments of amsmath build on the array environment\n// of LaTeX, which is discussed above.\n// The mathtools package adds starred versions of the same environments.\n// These have an optional argument to choose left|center|right justification.\ndefineEnvironment({\n type: \"array\",\n names: [\n \"matrix\",\n \"pmatrix\",\n \"bmatrix\",\n \"Bmatrix\",\n \"vmatrix\",\n \"Vmatrix\",\n \"matrix*\",\n \"pmatrix*\",\n \"bmatrix*\",\n \"Bmatrix*\",\n \"vmatrix*\",\n \"Vmatrix*\"\n ],\n props: {\n numArgs: 0\n },\n handler(context) {\n const delimiters = {\n matrix: null,\n pmatrix: [\"(\", \")\"],\n bmatrix: [\"[\", \"]\"],\n Bmatrix: [\"\\\\{\", \"\\\\}\"],\n vmatrix: [\"|\", \"|\"],\n Vmatrix: [\"\\\\Vert\", \"\\\\Vert\"]\n }[context.envName.replace(\"*\", \"\")];\n // \\hskip -\\arraycolsep in amsmath\n let colAlign = \"c\";\n const payload = {\n envClasses: [],\n cols: []\n };\n if (context.envName.charAt(context.envName.length - 1) === \"*\") {\n // It's one of the mathtools starred functions.\n // Parse the optional alignment argument.\n const parser = context.parser;\n parser.consumeSpaces();\n if (parser.fetch().text === \"[\") {\n parser.consume();\n parser.consumeSpaces();\n colAlign = parser.fetch().text;\n if (\"lcr\".indexOf(colAlign) === -1) {\n throw new ParseError(\"Expected l or c or r\", parser.nextToken);\n }\n parser.consume();\n parser.consumeSpaces();\n parser.expect(\"]\");\n parser.consume();\n payload.cols = [];\n }\n }\n const res = parseArray(context.parser, payload, \"text\");\n res.cols = res.body.length > 0\n ? new Array(res.body[0].length).fill({ type: \"align\", align: colAlign })\n : [];\n const [arraystretch, arraycolsep] = arrayGaps(context.parser.gullet.macros);\n res.arraystretch = arraystretch;\n if (arraycolsep && !(arraycolsep === 6 && arraycolsep === \"pt\")) {\n res.arraycolsep = arraycolsep;\n }\n return delimiters\n ? {\n type: \"leftright\",\n mode: context.mode,\n body: [res],\n left: delimiters[0],\n right: delimiters[1],\n rightColor: undefined // \\right uninfluenced by \\color in array\n }\n : res;\n },\n mathmlBuilder: mathmlBuilder$9\n});\n\ndefineEnvironment({\n type: \"array\",\n names: [\"bordermatrix\"],\n props: {\n numArgs: 0\n },\n handler(context) {\n const payload = { cols: [], envClasses: [\"bordermatrix\"] };\n const res = parseArray(context.parser, payload, \"text\");\n res.cols = res.body.length > 0\n ? new Array(res.body[0].length).fill({ type: \"align\", align: \"c\" })\n : [];\n res.envClasses = [];\n res.arraystretch = 1;\n if (context.envName === \"matrix\") { return res}\n return bordermatrixParseTree(res, context.delimiters)\n },\n mathmlBuilder: mathmlBuilder$9\n});\n\ndefineEnvironment({\n type: \"array\",\n names: [\"smallmatrix\"],\n props: {\n numArgs: 0\n },\n handler(context) {\n const payload = { type: \"small\" };\n const res = parseArray(context.parser, payload, \"script\");\n res.envClasses = [\"small\"];\n return res;\n },\n mathmlBuilder: mathmlBuilder$9\n});\n\ndefineEnvironment({\n type: \"array\",\n names: [\"subarray\"],\n props: {\n numArgs: 1\n },\n handler(context, args) {\n // Parsing of {subarray} is similar to {array}\n const symNode = checkSymbolNodeType(args[0]);\n const colalign = symNode ? [args[0]] : assertNodeType(args[0], \"ordgroup\").body;\n const cols = colalign.map(function(nde) {\n const node = assertSymbolNodeType(nde);\n const ca = node.text;\n // {subarray} only recognizes \"l\" & \"c\"\n if (\"lc\".indexOf(ca) !== -1) {\n return {\n type: \"align\",\n align: ca\n };\n }\n throw new ParseError(\"Unknown column alignment: \" + ca, nde);\n });\n if (cols.length > 1) {\n throw new ParseError(\"{subarray} can contain only one column\");\n }\n let res = {\n cols,\n envClasses: [\"small\"]\n };\n res = parseArray(context.parser, res, \"script\");\n if (res.body.length > 0 && res.body[0].length > 1) {\n throw new ParseError(\"{subarray} can contain only one column\");\n }\n return res;\n },\n mathmlBuilder: mathmlBuilder$9\n});\n\n// A cases environment (in amsmath.sty) is almost equivalent to\n// \\def\n// \\left\\{\\begin{array}{@{}l@{\\quad}l@{}} … \\end{array}\\right.\n// {dcases} is a {cases} environment where cells are set in \\displaystyle,\n// as defined in mathtools.sty.\n// {rcases} is another mathtools environment. It's brace is on the right side.\ndefineEnvironment({\n type: \"array\",\n names: [\"cases\", \"dcases\", \"rcases\", \"drcases\"],\n props: {\n numArgs: 0\n },\n handler(context) {\n const payload = {\n cols: [],\n envClasses: [\"cases\"]\n };\n const res = parseArray(context.parser, payload, dCellStyle(context.envName));\n return {\n type: \"leftright\",\n mode: context.mode,\n body: [res],\n left: context.envName.indexOf(\"r\") > -1 ? \".\" : \"\\\\{\",\n right: context.envName.indexOf(\"r\") > -1 ? \"\\\\}\" : \".\",\n rightColor: undefined\n };\n },\n mathmlBuilder: mathmlBuilder$9\n});\n\n// In the align environment, one uses ampersands, &, to specify number of\n// columns in each row, and to locate spacing between each column.\n// align gets automatic numbering. align* and aligned do not.\n// The alignedat environment can be used in math mode.\ndefineEnvironment({\n type: \"array\",\n names: [\"align\", \"align*\", \"aligned\", \"split\"],\n props: {\n numArgs: 0\n },\n handler: alignedHandler,\n mathmlBuilder: mathmlBuilder$9\n});\n\n// alignat environment is like an align environment, but one must explicitly\n// specify maximum number of columns in each row, and can adjust where spacing occurs.\ndefineEnvironment({\n type: \"array\",\n names: [\"alignat\", \"alignat*\", \"alignedat\"],\n props: {\n numArgs: 1\n },\n handler: alignedHandler,\n mathmlBuilder: mathmlBuilder$9\n});\n\n// A gathered environment is like an array environment with one centered\n// column, but where rows are considered lines so get \\jot line spacing\n// and contents are set in \\displaystyle.\ndefineEnvironment({\n type: \"array\",\n names: [\"gathered\", \"gather\", \"gather*\"],\n props: {\n numArgs: 0\n },\n handler(context) {\n if (context.envName !== \"gathered\") {\n validateAmsEnvironmentContext(context);\n }\n const res = {\n cols: [],\n envClasses: [\"abut\", \"jot\"],\n autoTag: getAutoTag(context.envName),\n emptySingleRow: true,\n leqno: context.parser.settings.leqno\n };\n return parseArray(context.parser, res, \"display\");\n },\n mathmlBuilder: mathmlBuilder$9\n});\n\ndefineEnvironment({\n type: \"array\",\n names: [\"equation\", \"equation*\"],\n props: {\n numArgs: 0\n },\n handler(context) {\n validateAmsEnvironmentContext(context);\n const res = {\n autoTag: getAutoTag(context.envName),\n emptySingleRow: true,\n singleRow: true,\n maxNumCols: 1,\n envClasses: [\"align\"],\n leqno: context.parser.settings.leqno\n };\n return parseArray(context.parser, res, \"display\");\n },\n mathmlBuilder: mathmlBuilder$9\n});\n\ndefineEnvironment({\n type: \"array\",\n names: [\"multline\", \"multline*\"],\n props: {\n numArgs: 0\n },\n handler(context) {\n validateAmsEnvironmentContext(context);\n const res = {\n autoTag: context.envName === \"multline\",\n maxNumCols: 1,\n envClasses: [\"jot\", \"multline\"],\n leqno: context.parser.settings.leqno\n };\n return parseArray(context.parser, res, \"display\");\n },\n mathmlBuilder: mathmlBuilder$9\n});\n\ndefineEnvironment({\n type: \"array\",\n names: [\"CD\"],\n props: {\n numArgs: 0\n },\n handler(context) {\n validateAmsEnvironmentContext(context);\n return parseCD(context.parser);\n },\n mathmlBuilder: mathmlBuilder$9\n});\n\n// Catch \\hline outside array environment\ndefineFunction({\n type: \"text\", // Doesn't matter what this is.\n names: [\"\\\\hline\", \"\\\\hdashline\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInMath: true\n },\n handler(context, args) {\n throw new ParseError(`${context.funcName} valid only within array environment`);\n }\n});\n\nconst environments = _environments;\n\n// \\bordermatrix from TeXbook pp 177 & 361\n// Optional argument from Herbert Voß, Math mode, p 20\n// Ref: https://tug.ctan.org/obsolete/info/math/voss/mathmode/Mathmode.pdf\n\ndefineFunction({\n type: \"bordermatrix\",\n names: [\"\\\\bordermatrix\", \"\\\\matrix\"],\n props: {\n numArgs: 0,\n numOptionalArgs: 1\n },\n handler: ({ parser, funcName }, args, optArgs) => {\n // Find out if the author has defined custom delimiters\n let delimiters = [\"(\", \")\"];\n if (funcName === \"\\\\bordermatrix\" && optArgs[0] && optArgs[0].body) {\n const body = optArgs[0].body;\n if (body.length === 2 && body[0].type === \"atom\" && body[1].type === \"atom\") {\n if (body[0].family === \"open\" && body[1].family === \"close\") {\n delimiters = [body[0].text, body[1].text];\n }\n }\n }\n // consume the opening brace\n parser.consumeSpaces();\n parser.consume();\n\n // Pass control to the environment handler in array.js.\n const env = environments[\"bordermatrix\"];\n const context = {\n mode: parser.mode,\n envName: funcName.slice(1),\n delimiters,\n parser\n };\n const result = env.handler(context);\n parser.expect(\"}\", true);\n return result\n }\n});\n\n// \\@char is an internal function that takes a grouped decimal argument like\n// {123} and converts into symbol with code 123. It is used by the *macro*\n// \\char defined in macros.js.\ndefineFunction({\n type: \"textord\",\n names: [\"\\\\@char\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler({ parser, token }, args) {\n const arg = assertNodeType(args[0], \"ordgroup\");\n const group = arg.body;\n let number = \"\";\n for (let i = 0; i < group.length; i++) {\n const node = assertNodeType(group[i], \"textord\");\n number += node.text;\n }\n const code = parseInt(number);\n if (isNaN(code)) {\n throw new ParseError(`\\\\@char has non-numeric argument ${number}`, token)\n }\n return {\n type: \"textord\",\n mode: parser.mode,\n text: String.fromCodePoint(code)\n }\n }\n});\n\n// Helpers\nconst htmlRegEx = /^(#[a-f0-9]{3}|#?[a-f0-9]{6})$/i;\nconst htmlOrNameRegEx = /^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i;\nconst RGBregEx = /^ *\\d{1,3} *(?:, *\\d{1,3} *){2}$/;\nconst rgbRegEx = /^ *[10](?:\\.\\d*)? *(?:, *[10](?:\\.\\d*)? *){2}$/;\nconst xcolorHtmlRegEx = /^[a-f0-9]{6}$/i;\nconst toHex = num => {\n let str = num.toString(16);\n if (str.length === 1) { str = \"0\" + str; }\n return str\n};\n\n// Colors from Tables 4.1 and 4.2 of the xcolor package.\n// Table 4.1 (lower case) RGB values are taken from chroma and xcolor.dtx.\n// Table 4.2 (Capitalizzed) values were sampled, because Chroma contains a unreliable\n// conversion from cmyk to RGB. See https://tex.stackexchange.com/a/537274.\nconst xcolors = JSON.parse(`{\n \"Apricot\": \"#ffb484\",\n \"Aquamarine\": \"#08b4bc\",\n \"Bittersweet\": \"#c84c14\",\n \"blue\": \"#0000FF\",\n \"Blue\": \"#303494\",\n \"BlueGreen\": \"#08b4bc\",\n \"BlueViolet\": \"#503c94\",\n \"BrickRed\": \"#b8341c\",\n \"brown\": \"#BF8040\",\n \"Brown\": \"#802404\",\n \"BurntOrange\": \"#f8941c\",\n \"CadetBlue\": \"#78749c\",\n \"CarnationPink\": \"#f884b4\",\n \"Cerulean\": \"#08a4e4\",\n \"CornflowerBlue\": \"#40ace4\",\n \"cyan\": \"#00FFFF\",\n \"Cyan\": \"#08acec\",\n \"Dandelion\": \"#ffbc44\",\n \"darkgray\": \"#404040\",\n \"DarkOrchid\": \"#a8548c\",\n \"Emerald\": \"#08ac9c\",\n \"ForestGreen\": \"#089c54\",\n \"Fuchsia\": \"#90348c\",\n \"Goldenrod\": \"#ffdc44\",\n \"gray\": \"#808080\",\n \"Gray\": \"#98949c\",\n \"green\": \"#00FF00\",\n \"Green\": \"#08a44c\",\n \"GreenYellow\": \"#e0e474\",\n \"JungleGreen\": \"#08ac9c\",\n \"Lavender\": \"#f89cc4\",\n \"lightgray\": \"#c0c0c0\",\n \"lime\": \"#BFFF00\",\n \"LimeGreen\": \"#90c43c\",\n \"magenta\": \"#FF00FF\",\n \"Magenta\": \"#f0048c\",\n \"Mahogany\": \"#b0341c\",\n \"Maroon\": \"#b03434\",\n \"Melon\": \"#f89c7c\",\n \"MidnightBlue\": \"#086494\",\n \"Mulberry\": \"#b03c94\",\n \"NavyBlue\": \"#086cbc\",\n \"olive\": \"#7F7F00\",\n \"OliveGreen\": \"#407c34\",\n \"orange\": \"#FF8000\",\n \"Orange\": \"#f8843c\",\n \"OrangeRed\": \"#f0145c\",\n \"Orchid\": \"#b074ac\",\n \"Peach\": \"#f8945c\",\n \"Periwinkle\": \"#8074bc\",\n \"PineGreen\": \"#088c74\",\n \"pink\": \"#ff7f7f\",\n \"Plum\": \"#98248c\",\n \"ProcessBlue\": \"#08b4ec\",\n \"purple\": \"#BF0040\",\n \"Purple\": \"#a0449c\",\n \"RawSienna\": \"#983c04\",\n \"red\": \"#ff0000\",\n \"Red\": \"#f01c24\",\n \"RedOrange\": \"#f86434\",\n \"RedViolet\": \"#a0246c\",\n \"Rhodamine\": \"#f0549c\",\n \"Royallue\": \"#0874bc\",\n \"RoyalPurple\": \"#683c9c\",\n \"RubineRed\": \"#f0047c\",\n \"Salmon\": \"#f8948c\",\n \"SeaGreen\": \"#30bc9c\",\n \"Sepia\": \"#701404\",\n \"SkyBlue\": \"#48c4dc\",\n \"SpringGreen\": \"#c8dc64\",\n \"Tan\": \"#e09c74\",\n \"teal\": \"#007F7F\",\n \"TealBlue\": \"#08acb4\",\n \"Thistle\": \"#d884b4\",\n \"Turquoise\": \"#08b4cc\",\n \"violet\": \"#800080\",\n \"Violet\": \"#60449c\",\n \"VioletRed\": \"#f054a4\",\n \"WildStrawberry\": \"#f0246c\",\n \"yellow\": \"#FFFF00\",\n \"Yellow\": \"#fff404\",\n \"YellowGreen\": \"#98cc6c\",\n \"YellowOrange\": \"#ffa41c\"\n}`);\n\nconst colorFromSpec = (model, spec) => {\n let color = \"\";\n if (model === \"HTML\") {\n if (!htmlRegEx.test(spec)) {\n throw new ParseError(\"Invalid HTML input.\")\n }\n color = spec;\n } else if (model === \"RGB\") {\n if (!RGBregEx.test(spec)) {\n throw new ParseError(\"Invalid RGB input.\")\n }\n spec.split(\",\").map(e => { color += toHex(Number(e.trim())); });\n } else {\n if (!rgbRegEx.test(spec)) {\n throw new ParseError(\"Invalid rbg input.\")\n }\n spec.split(\",\").map(e => {\n const num = Number(e.trim());\n if (num > 1) { throw new ParseError(\"Color rgb input must be < 1.\") }\n color += toHex(Number((num * 255).toFixed(0)));\n });\n }\n if (color.charAt(0) !== \"#\") { color = \"#\" + color; }\n return color\n};\n\nconst validateColor = (color, macros, token) => {\n const macroName = `\\\\\\\\color@${color}`; // from \\defineColor.\n const match = htmlOrNameRegEx.exec(color);\n if (!match) { throw new ParseError(\"Invalid color: '\" + color + \"'\", token) }\n // We allow a 6-digit HTML color spec without a leading \"#\".\n // This follows the xcolor package's HTML color model.\n // Predefined color names are all missed by this RegEx pattern.\n if (xcolorHtmlRegEx.test(color)) {\n return \"#\" + color\n } else if (color.charAt(0) === \"#\") {\n return color\n } else if (macros.has(macroName)) {\n color = macros.get(macroName).tokens[0].text;\n } else if (xcolors[color]) {\n color = xcolors[color];\n }\n return color\n};\n\nconst mathmlBuilder$8 = (group, style) => {\n // In LaTeX, color is not supposed to change the spacing of any node.\n // So instead of wrapping the group in an <mstyle>, we apply\n // the color individually to each node and return a document fragment.\n let expr = buildExpression(group.body, style.withColor(group.color));\n if (expr.length === 0) {\n expr.push(new mathMLTree.MathNode(\"mrow\"));\n }\n expr = expr.map(e => {\n e.style.color = group.color;\n return e\n });\n return mathMLTree.newDocumentFragment(expr)\n};\n\ndefineFunction({\n type: \"color\",\n names: [\"\\\\textcolor\"],\n props: {\n numArgs: 2,\n numOptionalArgs: 1,\n allowedInText: true,\n argTypes: [\"raw\", \"raw\", \"original\"]\n },\n handler({ parser, token }, args, optArgs) {\n const model = optArgs[0] && assertNodeType(optArgs[0], \"raw\").string;\n let color = \"\";\n if (model) {\n const spec = assertNodeType(args[0], \"raw\").string;\n color = colorFromSpec(model, spec);\n } else {\n color = validateColor(assertNodeType(args[0], \"raw\").string, parser.gullet.macros, token);\n }\n const body = args[1];\n return {\n type: \"color\",\n mode: parser.mode,\n color,\n isTextColor: true,\n body: ordargument(body)\n }\n },\n mathmlBuilder: mathmlBuilder$8\n});\n\ndefineFunction({\n type: \"color\",\n names: [\"\\\\color\"],\n props: {\n numArgs: 1,\n numOptionalArgs: 1,\n allowedInText: true,\n argTypes: [\"raw\", \"raw\"]\n },\n handler({ parser, breakOnTokenText, token }, args, optArgs) {\n const model = optArgs[0] && assertNodeType(optArgs[0], \"raw\").string;\n let color = \"\";\n if (model) {\n const spec = assertNodeType(args[0], \"raw\").string;\n color = colorFromSpec(model, spec);\n } else {\n color = validateColor(assertNodeType(args[0], \"raw\").string, parser.gullet.macros, token);\n }\n\n // Parse out the implicit body that should be colored.\n const body = parser.parseExpression(true, breakOnTokenText, true);\n\n return {\n type: \"color\",\n mode: parser.mode,\n color,\n isTextColor: false,\n body\n }\n },\n mathmlBuilder: mathmlBuilder$8\n});\n\ndefineFunction({\n type: \"color\",\n names: [\"\\\\definecolor\"],\n props: {\n numArgs: 3,\n allowedInText: true,\n argTypes: [\"raw\", \"raw\", \"raw\"]\n },\n handler({ parser, funcName, token }, args) {\n const name = assertNodeType(args[0], \"raw\").string;\n if (!/^[A-Za-z]+$/.test(name)) {\n throw new ParseError(\"Color name must be latin letters.\", token)\n }\n const model = assertNodeType(args[1], \"raw\").string;\n if (![\"HTML\", \"RGB\", \"rgb\"].includes(model)) {\n throw new ParseError(\"Color model must be HTML, RGB, or rgb.\", token)\n }\n const spec = assertNodeType(args[2], \"raw\").string;\n const color = colorFromSpec(model, spec);\n parser.gullet.macros.set(`\\\\\\\\color@${name}`, { tokens: [{ text: color }], numArgs: 0 });\n return { type: \"internal\", mode: parser.mode }\n }\n // No mathmlBuilder. The point of \\definecolor is to set a macro.\n});\n\n// Row breaks within tabular environments, and line breaks at top level\n\n\n// \\DeclareRobustCommand\\\\{...\\@xnewline}\ndefineFunction({\n type: \"cr\",\n names: [\"\\\\\\\\\"],\n props: {\n numArgs: 0,\n numOptionalArgs: 0,\n allowedInText: true\n },\n\n handler({ parser }, args, optArgs) {\n const size = parser.gullet.future().text === \"[\" ? parser.parseSizeGroup(true) : null;\n const newLine = !parser.settings.displayMode;\n return {\n type: \"cr\",\n mode: parser.mode,\n newLine,\n size: size && assertNodeType(size, \"size\").value\n }\n },\n\n // The following builder is called only at the top level,\n // not within tabular/array environments.\n\n mathmlBuilder(group, style) {\n // MathML 3.0 calls for newline to occur in an <mo> or an <mspace>.\n // Ref: https://www.w3.org/TR/MathML3/chapter3.html#presm.linebreaking\n const node = new mathMLTree.MathNode(\"mo\");\n if (group.newLine) {\n node.setAttribute(\"linebreak\", \"newline\");\n if (group.size) {\n const size = calculateSize(group.size, style);\n node.setAttribute(\"height\", size.number + size.unit);\n }\n }\n return node\n }\n});\n\nconst globalMap = {\n \"\\\\global\": \"\\\\global\",\n \"\\\\long\": \"\\\\\\\\globallong\",\n \"\\\\\\\\globallong\": \"\\\\\\\\globallong\",\n \"\\\\def\": \"\\\\gdef\",\n \"\\\\gdef\": \"\\\\gdef\",\n \"\\\\edef\": \"\\\\xdef\",\n \"\\\\xdef\": \"\\\\xdef\",\n \"\\\\let\": \"\\\\\\\\globallet\",\n \"\\\\futurelet\": \"\\\\\\\\globalfuture\"\n};\n\nconst checkControlSequence = (tok) => {\n const name = tok.text;\n if (/^(?:[\\\\{}$&#^_]|EOF)$/.test(name)) {\n throw new ParseError(\"Expected a control sequence\", tok);\n }\n return name;\n};\n\nconst getRHS = (parser) => {\n let tok = parser.gullet.popToken();\n if (tok.text === \"=\") {\n // consume optional equals\n tok = parser.gullet.popToken();\n if (tok.text === \" \") {\n // consume one optional space\n tok = parser.gullet.popToken();\n }\n }\n return tok;\n};\n\nconst letCommand = (parser, name, tok, global) => {\n let macro = parser.gullet.macros.get(tok.text);\n if (macro == null) {\n // don't expand it later even if a macro with the same name is defined\n // e.g., \\let\\foo=\\frac \\def\\frac{\\relax} \\frac12\n tok.noexpand = true;\n macro = {\n tokens: [tok],\n numArgs: 0,\n // reproduce the same behavior in expansion\n unexpandable: !parser.gullet.isExpandable(tok.text)\n };\n }\n parser.gullet.macros.set(name, macro, global);\n};\n\n// <assignment> -> <non-macro assignment>|<macro assignment>\n// <non-macro assignment> -> <simple assignment>|\\global<non-macro assignment>\n// <macro assignment> -> <definition>|<prefix><macro assignment>\n// <prefix> -> \\global|\\long|\\outer\ndefineFunction({\n type: \"internal\",\n names: [\n \"\\\\global\",\n \"\\\\long\",\n \"\\\\\\\\globallong\" // cant be entered directly\n ],\n props: {\n numArgs: 0,\n allowedInText: true\n },\n handler({ parser, funcName }) {\n parser.consumeSpaces();\n const token = parser.fetch();\n if (globalMap[token.text]) {\n // Temml doesn't have \\par, so ignore \\long\n if (funcName === \"\\\\global\" || funcName === \"\\\\\\\\globallong\") {\n token.text = globalMap[token.text];\n }\n return assertNodeType(parser.parseFunction(), \"internal\");\n }\n throw new ParseError(`Invalid token after macro prefix`, token);\n }\n});\n\n// Basic support for macro definitions: \\def, \\gdef, \\edef, \\xdef\n// <definition> -> <def><control sequence><definition text>\n// <def> -> \\def|\\gdef|\\edef|\\xdef\n// <definition text> -> <parameter text><left brace><balanced text><right brace>\ndefineFunction({\n type: \"internal\",\n names: [\"\\\\def\", \"\\\\gdef\", \"\\\\edef\", \"\\\\xdef\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n handler({ parser, funcName }) {\n let tok = parser.gullet.popToken();\n const name = tok.text;\n if (/^(?:[\\\\{}$&#^_]|EOF)$/.test(name)) {\n throw new ParseError(\"Expected a control sequence\", tok);\n }\n\n let numArgs = 0;\n let insert;\n const delimiters = [[]];\n // <parameter text> contains no braces\n while (parser.gullet.future().text !== \"{\") {\n tok = parser.gullet.popToken();\n if (tok.text === \"#\") {\n // If the very last character of the <parameter text> is #, so that\n // this # is immediately followed by {, TeX will behave as if the {\n // had been inserted at the right end of both the parameter text\n // and the replacement text.\n if (parser.gullet.future().text === \"{\") {\n insert = parser.gullet.future();\n delimiters[numArgs].push(\"{\");\n break;\n }\n\n // A parameter, the first appearance of # must be followed by 1,\n // the next by 2, and so on; up to nine #s are allowed\n tok = parser.gullet.popToken();\n if (!/^[1-9]$/.test(tok.text)) {\n throw new ParseError(`Invalid argument number \"${tok.text}\"`);\n }\n if (parseInt(tok.text) !== numArgs + 1) {\n throw new ParseError(`Argument number \"${tok.text}\" out of order`);\n }\n numArgs++;\n delimiters.push([]);\n } else if (tok.text === \"EOF\") {\n throw new ParseError(\"Expected a macro definition\");\n } else {\n delimiters[numArgs].push(tok.text);\n }\n }\n // replacement text, enclosed in '{' and '}' and properly nested\n let { tokens } = parser.gullet.consumeArg();\n if (insert) {\n tokens.unshift(insert);\n }\n\n if (funcName === \"\\\\edef\" || funcName === \"\\\\xdef\") {\n tokens = parser.gullet.expandTokens(tokens);\n if (tokens.length > parser.gullet.settings.maxExpand) {\n throw new ParseError(\"Too many expansions in an \" + funcName);\n }\n tokens.reverse(); // to fit in with stack order\n }\n // Final arg is the expansion of the macro\n parser.gullet.macros.set(\n name,\n { tokens, numArgs, delimiters },\n funcName === globalMap[funcName]\n );\n return { type: \"internal\", mode: parser.mode };\n }\n});\n\n// <simple assignment> -> <let assignment>\n// <let assignment> -> \\futurelet<control sequence><token><token>\n// | \\let<control sequence><equals><one optional space><token>\n// <equals> -> <optional spaces>|<optional spaces>=\ndefineFunction({\n type: \"internal\",\n names: [\n \"\\\\let\",\n \"\\\\\\\\globallet\" // cant be entered directly\n ],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n handler({ parser, funcName }) {\n const name = checkControlSequence(parser.gullet.popToken());\n parser.gullet.consumeSpaces();\n const tok = getRHS(parser);\n letCommand(parser, name, tok, funcName === \"\\\\\\\\globallet\");\n return { type: \"internal\", mode: parser.mode };\n }\n});\n\n// ref: https://www.tug.org/TUGboat/tb09-3/tb22bechtolsheim.pdf\ndefineFunction({\n type: \"internal\",\n names: [\n \"\\\\futurelet\",\n \"\\\\\\\\globalfuture\" // cant be entered directly\n ],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n handler({ parser, funcName }) {\n const name = checkControlSequence(parser.gullet.popToken());\n const middle = parser.gullet.popToken();\n const tok = parser.gullet.popToken();\n letCommand(parser, name, tok, funcName === \"\\\\\\\\globalfuture\");\n parser.gullet.pushToken(tok);\n parser.gullet.pushToken(middle);\n return { type: \"internal\", mode: parser.mode };\n }\n});\n\ndefineFunction({\n type: \"internal\",\n names: [\"\\\\newcommand\", \"\\\\renewcommand\", \"\\\\providecommand\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n handler({ parser, funcName }) {\n let name = \"\";\n const tok = parser.gullet.popToken();\n if (tok.text === \"{\") {\n name = checkControlSequence(parser.gullet.popToken());\n parser.gullet.popToken();\n } else {\n name = checkControlSequence(tok);\n }\n\n const exists = parser.gullet.isDefined(name);\n if (exists && funcName === \"\\\\newcommand\") {\n throw new ParseError(\n `\\\\newcommand{${name}} attempting to redefine ${name}; use \\\\renewcommand`\n );\n }\n if (!exists && funcName === \"\\\\renewcommand\") {\n throw new ParseError(\n `\\\\renewcommand{${name}} when command ${name} does not yet exist; use \\\\newcommand`\n );\n }\n\n let numArgs = 0;\n if (parser.gullet.future().text === \"[\") {\n let tok = parser.gullet.popToken();\n tok = parser.gullet.popToken();\n if (!/^[0-9]$/.test(tok.text)) {\n throw new ParseError(`Invalid number of arguments: \"${tok.text}\"`);\n }\n numArgs = parseInt(tok.text);\n tok = parser.gullet.popToken();\n if (tok.text !== \"]\") {\n throw new ParseError(`Invalid argument \"${tok.text}\"`);\n }\n }\n\n // replacement text, enclosed in '{' and '}' and properly nested\n const { tokens } = parser.gullet.consumeArg();\n\n if (!(funcName === \"\\\\providecommand\" && parser.gullet.macros.has(name))) {\n // Ignore \\providecommand\n parser.gullet.macros.set(\n name,\n { tokens, numArgs }\n );\n }\n\n return { type: \"internal\", mode: parser.mode };\n\n }\n});\n\n// Extra data needed for the delimiter handler down below\nconst delimiterSizes = {\n \"\\\\bigl\": { mclass: \"mopen\", size: 1 },\n \"\\\\Bigl\": { mclass: \"mopen\", size: 2 },\n \"\\\\biggl\": { mclass: \"mopen\", size: 3 },\n \"\\\\Biggl\": { mclass: \"mopen\", size: 4 },\n \"\\\\bigr\": { mclass: \"mclose\", size: 1 },\n \"\\\\Bigr\": { mclass: \"mclose\", size: 2 },\n \"\\\\biggr\": { mclass: \"mclose\", size: 3 },\n \"\\\\Biggr\": { mclass: \"mclose\", size: 4 },\n \"\\\\bigm\": { mclass: \"mrel\", size: 1 },\n \"\\\\Bigm\": { mclass: \"mrel\", size: 2 },\n \"\\\\biggm\": { mclass: \"mrel\", size: 3 },\n \"\\\\Biggm\": { mclass: \"mrel\", size: 4 },\n \"\\\\big\": { mclass: \"mord\", size: 1 },\n \"\\\\Big\": { mclass: \"mord\", size: 2 },\n \"\\\\bigg\": { mclass: \"mord\", size: 3 },\n \"\\\\Bigg\": { mclass: \"mord\", size: 4 }\n};\n\nconst delimiters = [\n \"(\",\n \"\\\\lparen\",\n \")\",\n \"\\\\rparen\",\n \"[\",\n \"\\\\lbrack\",\n \"]\",\n \"\\\\rbrack\",\n \"\\\\{\",\n \"\\\\lbrace\",\n \"\\\\}\",\n \"\\\\rbrace\",\n \"⦇\",\n \"\\\\llparenthesis\",\n \"⦈\",\n \"\\\\rrparenthesis\",\n \"\\\\lfloor\",\n \"\\\\rfloor\",\n \"\\u230a\",\n \"\\u230b\",\n \"\\\\lceil\",\n \"\\\\rceil\",\n \"\\u2308\",\n \"\\u2309\",\n \"<\",\n \">\",\n \"\\\\langle\",\n \"\\u27e8\",\n \"\\\\rangle\",\n \"\\u27e9\",\n \"\\\\lAngle\",\n \"\\u27ea\",\n \"\\\\rAngle\",\n \"\\u27eb\",\n \"\\\\llangle\",\n \"⦉\",\n \"\\\\rrangle\",\n \"⦊\",\n \"\\\\lt\",\n \"\\\\gt\",\n \"\\\\lvert\",\n \"\\\\rvert\",\n \"\\\\lVert\",\n \"\\\\rVert\",\n \"\\\\lgroup\",\n \"\\\\rgroup\",\n \"\\u27ee\",\n \"\\u27ef\",\n \"\\\\lmoustache\",\n \"\\\\rmoustache\",\n \"\\u23b0\",\n \"\\u23b1\",\n \"\\\\llbracket\",\n \"\\\\rrbracket\",\n \"\\u27e6\",\n \"\\u27e6\",\n \"\\\\lBrace\",\n \"\\\\rBrace\",\n \"\\u2983\",\n \"\\u2984\",\n \"/\",\n \"\\\\backslash\",\n \"|\",\n \"\\\\vert\",\n \"\\\\|\",\n \"\\\\Vert\",\n \"\\u2016\",\n \"\\\\uparrow\",\n \"\\\\Uparrow\",\n \"\\\\downarrow\",\n \"\\\\Downarrow\",\n \"\\\\updownarrow\",\n \"\\\\Updownarrow\",\n \".\"\n];\n\n// Export isDelimiter for benefit of parser.\nconst dels = [\"}\", \"\\\\left\", \"\\\\middle\", \"\\\\right\"];\nconst isDelimiter = str => str.length > 0 &&\n (delimiters.includes(str) || delimiterSizes[str] || dels.includes(str));\n\n// Metrics of the different sizes. Found by looking at TeX's output of\n// $\\bigl| // \\Bigl| \\biggl| \\Biggl| \\showlists$\n// Used to create stacked delimiters of appropriate sizes in makeSizedDelim.\nconst sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0];\n\n// Delimiter functions\nfunction checkDelimiter(delim, context) {\n const symDelim = checkSymbolNodeType(delim);\n if (symDelim && delimiters.includes(symDelim.text)) {\n // If a character is not in the MathML operator dictionary, it will not stretch.\n // Replace such characters w/characters that will stretch.\n if ([\"<\", \"\\\\lt\"].includes(symDelim.text)) { symDelim.text = \"⟨\"; }\n if ([\">\", \"\\\\gt\"].includes(symDelim.text)) { symDelim.text = \"⟩\"; }\n return symDelim;\n } else if (symDelim) {\n throw new ParseError(`Invalid delimiter '${symDelim.text}' after '${context.funcName}'`, delim);\n } else {\n throw new ParseError(`Invalid delimiter type '${delim.type}'`, delim);\n }\n}\n\n// / \\\nconst needExplicitStretch = [\"\\u002F\", \"\\u005C\", \"\\\\backslash\", \"\\\\vert\", \"|\"];\n\ndefineFunction({\n type: \"delimsizing\",\n names: [\n \"\\\\bigl\",\n \"\\\\Bigl\",\n \"\\\\biggl\",\n \"\\\\Biggl\",\n \"\\\\bigr\",\n \"\\\\Bigr\",\n \"\\\\biggr\",\n \"\\\\Biggr\",\n \"\\\\bigm\",\n \"\\\\Bigm\",\n \"\\\\biggm\",\n \"\\\\Biggm\",\n \"\\\\big\",\n \"\\\\Big\",\n \"\\\\bigg\",\n \"\\\\Bigg\"\n ],\n props: {\n numArgs: 1,\n argTypes: [\"primitive\"]\n },\n handler: (context, args) => {\n const delim = checkDelimiter(args[0], context);\n\n const delimNode = {\n type: \"delimsizing\",\n mode: context.parser.mode,\n size: delimiterSizes[context.funcName].size,\n mclass: delimiterSizes[context.funcName].mclass,\n delim: delim.text\n };\n const nextToken = context.parser.fetch().text;\n if (nextToken !== \"^\" && nextToken !== \"_\") {\n return delimNode\n } else {\n // Chromium mis-renders a sized delim if it is the base of a supsub.\n // So wrap it in a ordgroup.\n return {\n type: \"ordgroup\",\n mode: \"math\",\n body: [delimNode, { type: \"ordgroup\", mode: \"math\", body: [] }]\n }\n }\n },\n mathmlBuilder: (group) => {\n const children = [];\n\n if (group.delim === \".\") { group.delim = \"\"; }\n children.push(makeText(group.delim, group.mode));\n\n const node = new mathMLTree.MathNode(\"mo\", children);\n\n if (group.mclass === \"mopen\" || group.mclass === \"mclose\") {\n // Only some of the delimsizing functions act as fences, and they\n // return \"mopen\" or \"mclose\" mclass.\n node.setAttribute(\"fence\", \"true\");\n } else {\n // Explicitly disable fencing if it's not a fence, to override the\n // defaults.\n node.setAttribute(\"fence\", \"false\");\n }\n if (needExplicitStretch.includes(group.delim) || group.delim.indexOf(\"arrow\") > -1) {\n // We have to explicitly set stretchy to true.\n node.setAttribute(\"stretchy\", \"true\");\n }\n node.setAttribute(\"symmetric\", \"true\"); // Needed for tall arrows in Firefox.\n node.setAttribute(\"minsize\", sizeToMaxHeight[group.size] + \"em\");\n node.setAttribute(\"maxsize\", sizeToMaxHeight[group.size] + \"em\");\n return node;\n }\n});\n\nfunction assertParsed(group) {\n if (!group.body) {\n throw new Error(\"Bug: The leftright ParseNode wasn't fully parsed.\");\n }\n}\n\ndefineFunction({\n type: \"leftright-right\",\n names: [\"\\\\right\"],\n props: {\n numArgs: 1,\n argTypes: [\"primitive\"]\n },\n handler: (context, args) => {\n return {\n type: \"leftright-right\",\n mode: context.parser.mode,\n delim: checkDelimiter(args[0], context).text\n };\n }\n});\n\ndefineFunction({\n type: \"leftright\",\n names: [\"\\\\left\"],\n props: {\n numArgs: 1,\n argTypes: [\"primitive\"]\n },\n handler: (context, args) => {\n const delim = checkDelimiter(args[0], context);\n\n const parser = context.parser;\n // Parse out the implicit body\n ++parser.leftrightDepth;\n // parseExpression stops before '\\\\right' or `\\\\middle`\n let body = parser.parseExpression(false, null, true);\n let nextToken = parser.fetch();\n while (nextToken.text === \"\\\\middle\") {\n // `\\middle`, from the ε-TeX package, ends one group and starts another group.\n // We had to parse this expression with `breakOnMiddle` enabled in order\n // to get TeX-compliant parsing of \\over.\n // But we do not want, at this point, to end on \\middle, so continue\n // to parse until we fetch a `\\right`.\n parser.consume();\n const middle = parser.fetch().text;\n if (!symbols.math[middle]) {\n throw new ParseError(`Invalid delimiter '${middle}' after '\\\\middle'`);\n }\n checkDelimiter({ type: \"atom\", mode: \"math\", text: middle }, { funcName: \"\\\\middle\" });\n body.push({ type: \"middle\", mode: \"math\", delim: middle });\n parser.consume();\n body = body.concat(parser.parseExpression(false, null, true));\n nextToken = parser.fetch();\n }\n --parser.leftrightDepth;\n // Check the next token\n parser.expect(\"\\\\right\", false);\n const right = assertNodeType(parser.parseFunction(), \"leftright-right\");\n return {\n type: \"leftright\",\n mode: parser.mode,\n body,\n left: delim.text,\n right: right.delim\n };\n },\n mathmlBuilder: (group, style) => {\n assertParsed(group);\n const inner = buildExpression(group.body, style);\n\n if (group.left === \".\") { group.left = \"\"; }\n const leftNode = new mathMLTree.MathNode(\"mo\", [makeText(group.left, group.mode)]);\n leftNode.setAttribute(\"fence\", \"true\");\n leftNode.setAttribute(\"form\", \"prefix\");\n if (group.left === \"/\" || group.left === \"\\u005C\" || group.left.indexOf(\"arrow\") > -1) {\n leftNode.setAttribute(\"stretchy\", \"true\");\n }\n inner.unshift(leftNode);\n\n if (group.right === \".\") { group.right = \"\"; }\n const rightNode = new mathMLTree.MathNode(\"mo\", [makeText(group.right, group.mode)]);\n rightNode.setAttribute(\"fence\", \"true\");\n rightNode.setAttribute(\"form\", \"postfix\");\n if (group.right === \"\\u2216\" || group.right.indexOf(\"arrow\") > -1) {\n rightNode.setAttribute(\"stretchy\", \"true\");\n }\n if (group.body.length > 0) {\n const lastElement = group.body[group.body.length - 1];\n if (lastElement.type === \"color\" && !lastElement.isTextColor) {\n // \\color is a switch. If the last element is of type \"color\" then\n // the user set the \\color switch and left it on.\n // A \\right delimiter turns the switch off, but the delimiter itself gets the color.\n rightNode.setAttribute(\"mathcolor\", lastElement.color);\n }\n }\n inner.push(rightNode);\n\n return makeRow(inner);\n }\n});\n\ndefineFunction({\n type: \"middle\",\n names: [\"\\\\middle\"],\n props: {\n numArgs: 1,\n argTypes: [\"primitive\"]\n },\n handler: (context, args) => {\n const delim = checkDelimiter(args[0], context);\n if (!context.parser.leftrightDepth) {\n throw new ParseError(\"\\\\middle without preceding \\\\left\", delim);\n }\n\n return {\n type: \"middle\",\n mode: context.parser.mode,\n delim: delim.text\n };\n },\n mathmlBuilder: (group, style) => {\n const textNode = makeText(group.delim, group.mode);\n const middleNode = new mathMLTree.MathNode(\"mo\", [textNode]);\n middleNode.setAttribute(\"fence\", \"true\");\n if (group.delim.indexOf(\"arrow\") > -1) {\n middleNode.setAttribute(\"stretchy\", \"true\");\n }\n // The next line is not semantically correct, but\n // Chromium fails to stretch if it is not there.\n middleNode.setAttribute(\"form\", \"prefix\");\n // MathML gives 5/18em spacing to each <mo> element.\n // \\middle should get delimiter spacing instead.\n middleNode.setAttribute(\"lspace\", \"0.05em\");\n middleNode.setAttribute(\"rspace\", \"0.05em\");\n return middleNode;\n }\n});\n\nconst padding = _ => {\n const node = new mathMLTree.MathNode(\"mspace\");\n node.setAttribute(\"width\", \"3pt\");\n return node\n};\n\nconst mathmlBuilder$7 = (group, style) => {\n let node;\n if (group.label.indexOf(\"colorbox\") > -1 || group.label === \"\\\\boxed\") {\n // MathML core does not support +width attribute in <mpadded>.\n // Firefox does not reliably add side padding.\n // Insert <mspace>\n node = new mathMLTree.MathNode(\"mrow\", [\n padding(),\n buildGroup$1(group.body, style),\n padding()\n ]);\n } else {\n node = new mathMLTree.MathNode(\"menclose\", [buildGroup$1(group.body, style)]);\n }\n switch (group.label) {\n case \"\\\\overline\":\n node.setAttribute(\"notation\", \"top\"); // for Firefox & WebKit\n node.classes.push(\"tml-overline\"); // for Chromium\n break\n case \"\\\\underline\":\n node.setAttribute(\"notation\", \"bottom\");\n node.classes.push(\"tml-underline\");\n break\n case \"\\\\cancel\":\n node.setAttribute(\"notation\", \"updiagonalstrike\");\n node.children.push(new mathMLTree.MathNode(\"mrow\", [], [\"tml-cancel\", \"upstrike\"]));\n break\n case \"\\\\bcancel\":\n node.setAttribute(\"notation\", \"downdiagonalstrike\");\n node.children.push(new mathMLTree.MathNode(\"mrow\", [], [\"tml-cancel\", \"downstrike\"]));\n break\n case \"\\\\sout\":\n node.setAttribute(\"notation\", \"horizontalstrike\");\n node.children.push(new mathMLTree.MathNode(\"mrow\", [], [\"tml-cancel\", \"sout\"]));\n break\n case \"\\\\xcancel\":\n node.setAttribute(\"notation\", \"updiagonalstrike downdiagonalstrike\");\n node.classes.push(\"tml-xcancel\");\n break\n case \"\\\\longdiv\":\n node.setAttribute(\"notation\", \"longdiv\");\n node.classes.push(\"longdiv-top\");\n node.children.push(new mathMLTree.MathNode(\"mrow\", [], [\"longdiv-arc\"]));\n break\n case \"\\\\phase\":\n node.setAttribute(\"notation\", \"phasorangle\");\n node.classes.push(\"phasor-bottom\");\n node.children.push(new mathMLTree.MathNode(\"mrow\", [], [\"phasor-angle\"]));\n break\n case \"\\\\textcircled\":\n node.setAttribute(\"notation\", \"circle\");\n node.classes.push(\"circle-pad\");\n node.children.push(new mathMLTree.MathNode(\"mrow\", [], [\"textcircle\"]));\n break\n case \"\\\\angl\":\n node.setAttribute(\"notation\", \"actuarial\");\n node.classes.push(\"actuarial\");\n break\n case \"\\\\boxed\":\n // \\newcommand{\\boxed}[1]{\\fbox{\\m@th$\\displaystyle#1$}} from amsmath.sty\n node.setAttribute(\"notation\", \"box\");\n node.style.padding = \"padding: 3pt 0 3pt 0\";\n node.style.border = \"1px solid\";\n node.setAttribute(\"scriptlevel\", \"0\");\n node.setAttribute(\"displaystyle\", \"true\");\n break\n case \"\\\\fbox\":\n node.setAttribute(\"notation\", \"box\");\n node.classes.push(\"tml-fbox\");\n break\n case \"\\\\fcolorbox\":\n case \"\\\\colorbox\": {\n // <menclose> doesn't have a good notation option for \\colorbox.\n // So use <mpadded> instead. Set some attributes that come\n // included with <menclose>.\n //const fboxsep = 3; // 3 pt from LaTeX source2e\n //node.setAttribute(\"height\", `+${2 * fboxsep}pt`)\n //node.setAttribute(\"voffset\", `${fboxsep}pt`)\n const style = { padding: \"3pt 0 3pt 0\" };\n\n if (group.label === \"\\\\fcolorbox\") {\n style.border = \"0.0667em solid \" + String(group.borderColor);\n }\n node.style = style;\n break\n }\n }\n if (group.backgroundColor) {\n node.setAttribute(\"mathbackground\", group.backgroundColor);\n }\n return node;\n};\n\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\colorbox\"],\n props: {\n numArgs: 2,\n numOptionalArgs: 1,\n allowedInText: true,\n argTypes: [\"raw\", \"raw\", \"text\"]\n },\n handler({ parser, funcName }, args, optArgs) {\n const model = optArgs[0] && assertNodeType(optArgs[0], \"raw\").string;\n let color = \"\";\n if (model) {\n const spec = assertNodeType(args[0], \"raw\").string;\n color = colorFromSpec(model, spec);\n } else {\n color = validateColor(assertNodeType(args[0], \"raw\").string, parser.gullet.macros);\n }\n const body = args[1];\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: funcName,\n backgroundColor: color,\n body\n };\n },\n mathmlBuilder: mathmlBuilder$7\n});\n\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\fcolorbox\"],\n props: {\n numArgs: 3,\n numOptionalArgs: 1,\n allowedInText: true,\n argTypes: [\"raw\", \"raw\", \"raw\", \"text\"]\n },\n handler({ parser, funcName }, args, optArgs) {\n const model = optArgs[0] && assertNodeType(optArgs[0], \"raw\").string;\n let borderColor = \"\";\n let backgroundColor;\n if (model) {\n const borderSpec = assertNodeType(args[0], \"raw\").string;\n const backgroundSpec = assertNodeType(args[0], \"raw\").string;\n borderColor = colorFromSpec(model, borderSpec);\n backgroundColor = colorFromSpec(model, backgroundSpec);\n } else {\n borderColor = validateColor(assertNodeType(args[0], \"raw\").string, parser.gullet.macros);\n backgroundColor = validateColor(assertNodeType(args[1], \"raw\").string, parser.gullet.macros);\n }\n const body = args[2];\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: funcName,\n backgroundColor,\n borderColor,\n body\n };\n },\n mathmlBuilder: mathmlBuilder$7\n});\n\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\fbox\"],\n props: {\n numArgs: 1,\n argTypes: [\"hbox\"],\n allowedInText: true\n },\n handler({ parser }, args) {\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: \"\\\\fbox\",\n body: args[0]\n };\n }\n});\n\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\angl\", \"\\\\cancel\", \"\\\\bcancel\", \"\\\\xcancel\", \"\\\\sout\", \"\\\\overline\",\n \"\\\\boxed\", \"\\\\longdiv\", \"\\\\phase\"],\n props: {\n numArgs: 1\n },\n handler({ parser, funcName }, args) {\n const body = args[0];\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: funcName,\n body\n };\n },\n mathmlBuilder: mathmlBuilder$7\n});\n\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\underline\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler({ parser, funcName }, args) {\n const body = args[0];\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: funcName,\n body\n };\n },\n mathmlBuilder: mathmlBuilder$7\n});\n\n\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\textcircled\"],\n props: {\n numArgs: 1,\n argTypes: [\"text\"],\n allowedInArgument: true,\n allowedInText: true\n },\n handler({ parser, funcName }, args) {\n const body = args[0];\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: funcName,\n body\n };\n },\n mathmlBuilder: mathmlBuilder$7\n});\n\n// Environment delimiters. HTML/MathML rendering is defined in the corresponding\n// defineEnvironment definitions.\ndefineFunction({\n type: \"environment\",\n names: [\"\\\\begin\", \"\\\\end\"],\n props: {\n numArgs: 1,\n argTypes: [\"text\"]\n },\n handler({ parser, funcName }, args) {\n const nameGroup = args[0];\n if (nameGroup.type !== \"ordgroup\") {\n throw new ParseError(\"Invalid environment name\", nameGroup);\n }\n let envName = \"\";\n for (let i = 0; i < nameGroup.body.length; ++i) {\n envName += assertNodeType(nameGroup.body[i], \"textord\").text;\n }\n\n if (funcName === \"\\\\begin\") {\n // begin...end is similar to left...right\n if (!Object.prototype.hasOwnProperty.call(environments, envName )) {\n throw new ParseError(\"No such environment: \" + envName, nameGroup);\n }\n // Build the environment object. Arguments and other information will\n // be made available to the begin and end methods using properties.\n const env = environments[envName];\n const { args, optArgs } = parser.parseArguments(\"\\\\begin{\" + envName + \"}\", env);\n const context = {\n mode: parser.mode,\n envName,\n parser\n };\n const result = env.handler(context, args, optArgs);\n parser.expect(\"\\\\end\", false);\n const endNameToken = parser.nextToken;\n const end = assertNodeType(parser.parseFunction(), \"environment\");\n if (end.name !== envName) {\n throw new ParseError(\n `Mismatch: \\\\begin{${envName}} matched by \\\\end{${end.name}}`,\n endNameToken\n );\n }\n return result;\n }\n\n return {\n type: \"environment\",\n mode: parser.mode,\n name: envName,\n nameGroup\n };\n }\n});\n\ndefineFunction({\n type: \"envTag\",\n names: [\"\\\\env@tag\"],\n props: {\n numArgs: 1,\n argTypes: [\"math\"]\n },\n handler({ parser }, args) {\n return {\n type: \"envTag\",\n mode: parser.mode,\n body: args[0]\n };\n },\n mathmlBuilder(group, style) {\n return new mathMLTree.MathNode(\"mrow\");\n }\n});\n\ndefineFunction({\n type: \"noTag\",\n names: [\"\\\\env@notag\"],\n props: {\n numArgs: 0\n },\n handler({ parser }) {\n return {\n type: \"noTag\",\n mode: parser.mode\n };\n },\n mathmlBuilder(group, style) {\n return new mathMLTree.MathNode(\"mrow\");\n }\n});\n\nconst isLongVariableName = (group, font) => {\n if (font !== \"mathrm\" || group.body.type !== \"ordgroup\" || group.body.body.length === 1) {\n return false\n }\n if (group.body.body[0].type !== \"mathord\") { return false }\n for (let i = 1; i < group.body.body.length; i++) {\n const parseNodeType = group.body.body[i].type;\n if (!(parseNodeType === \"mathord\" ||\n (parseNodeType === \"textord\" && !isNaN(group.body.body[i].text)))) {\n return false\n }\n }\n return true\n};\n\nconst mathmlBuilder$6 = (group, style) => {\n const font = group.font;\n const newStyle = style.withFont(font);\n const mathGroup = buildGroup$1(group.body, newStyle);\n\n if (mathGroup.children.length === 0) { return mathGroup } // empty group, e.g., \\mathrm{}\n if (font === \"boldsymbol\" && [\"mo\", \"mpadded\", \"mrow\"].includes(mathGroup.type)) {\n mathGroup.style.fontWeight = \"bold\";\n return mathGroup\n }\n // Check if it is possible to consolidate elements into a single <mi> element.\n if (isLongVariableName(group, font)) {\n // This is a \\mathrm{…} group. It gets special treatment because symbolsOrd.js\n // wraps <mi> elements with <mpadded>s to work around a Firefox bug.\n const mi = mathGroup.children[0].children[0].children\n ? mathGroup.children[0].children[0]\n : mathGroup.children[0];\n delete mi.attributes.mathvariant;\n for (let i = 1; i < mathGroup.children.length; i++) {\n mi.children[0].text += mathGroup.children[i].children[0].children\n ? mathGroup.children[i].children[0].children[0].text\n : mathGroup.children[i].children[0].text;\n }\n // Wrap in a <mpadded> to prevent the same Firefox bug.\n const mpadded = new mathMLTree.MathNode(\"mpadded\", [mi]);\n mpadded.setAttribute(\"lspace\", \"0\");\n return mpadded\n }\n let canConsolidate = mathGroup.children[0].type === \"mo\";\n for (let i = 1; i < mathGroup.children.length; i++) {\n if (mathGroup.children[i].type === \"mo\" && font === \"boldsymbol\") {\n mathGroup.children[i].style.fontWeight = \"bold\";\n }\n if (mathGroup.children[i].type !== \"mi\") { canConsolidate = false; }\n const localVariant = mathGroup.children[i].attributes &&\n mathGroup.children[i].attributes.mathvariant || \"\";\n if (localVariant !== \"normal\") { canConsolidate = false; }\n }\n if (!canConsolidate) { return mathGroup }\n // Consolidate the <mi> elements.\n const mi = mathGroup.children[0];\n for (let i = 1; i < mathGroup.children.length; i++) {\n mi.children.push(mathGroup.children[i].children[0]);\n }\n if (mi.attributes.mathvariant && mi.attributes.mathvariant === \"normal\") {\n // Workaround for a Firefox bug that renders spurious space around\n // a <mi mathvariant=\"normal\">\n // Ref: https://bugs.webkit.org/show_bug.cgi?id=129097\n // We insert a text node that contains a zero-width space and wrap in an mrow.\n // TODO: Get rid of this <mi> workaround when the Firefox bug is fixed.\n const bogus = new mathMLTree.MathNode(\"mtext\", new mathMLTree.TextNode(\"\\u200b\"));\n return new mathMLTree.MathNode(\"mrow\", [bogus, mi])\n }\n return mi\n};\n\nconst fontAliases = {\n \"\\\\Bbb\": \"\\\\mathbb\",\n \"\\\\bold\": \"\\\\mathbf\",\n \"\\\\frak\": \"\\\\mathfrak\",\n \"\\\\bm\": \"\\\\boldsymbol\"\n};\n\ndefineFunction({\n type: \"font\",\n names: [\n // styles\n \"\\\\mathrm\",\n \"\\\\mathit\",\n \"\\\\mathbf\",\n \"\\\\mathnormal\",\n \"\\\\up@greek\",\n \"\\\\boldsymbol\",\n\n // families\n \"\\\\mathbb\",\n \"\\\\mathcal\",\n \"\\\\mathfrak\",\n \"\\\\mathscr\",\n \"\\\\mathsf\",\n \"\\\\mathsfit\",\n \"\\\\mathtt\",\n\n // aliases\n \"\\\\Bbb\",\n \"\\\\bm\",\n \"\\\\bold\",\n \"\\\\frak\"\n ],\n props: {\n numArgs: 1,\n allowedInArgument: true\n },\n handler: ({ parser, funcName }, args) => {\n const body = normalizeArgument(args[0]);\n let func = funcName;\n if (func in fontAliases) {\n func = fontAliases[func];\n }\n return {\n type: \"font\",\n mode: parser.mode,\n font: func.slice(1),\n body\n };\n },\n mathmlBuilder: mathmlBuilder$6\n});\n\n// Old font changing functions\ndefineFunction({\n type: \"font\",\n names: [\"\\\\rm\", \"\\\\sf\", \"\\\\tt\", \"\\\\bf\", \"\\\\it\", \"\\\\cal\"],\n props: {\n numArgs: 0,\n allowedInText: true\n },\n handler: ({ parser, funcName, breakOnTokenText }, args) => {\n const { mode } = parser;\n const body = parser.parseExpression(true, breakOnTokenText, true);\n const fontStyle = `math${funcName.slice(1)}`;\n\n return {\n type: \"font\",\n mode: mode,\n font: fontStyle,\n body: {\n type: \"ordgroup\",\n mode: parser.mode,\n body\n }\n };\n },\n mathmlBuilder: mathmlBuilder$6\n});\n\nconst stylArray = [\"display\", \"text\", \"script\", \"scriptscript\"];\nconst scriptLevel = { auto: -1, display: 0, text: 0, script: 1, scriptscript: 2 };\n\nconst mathmlBuilder$5 = (group, style) => {\n // Track the scriptLevel of the numerator and denominator.\n // We may need that info for \\mathchoice or for adjusting em dimensions.\n const childOptions = group.scriptLevel === \"auto\"\n ? style.incrementLevel()\n : group.scriptLevel === \"display\"\n ? style.withLevel(StyleLevel.TEXT)\n : group.scriptLevel === \"text\"\n ? style.withLevel(StyleLevel.SCRIPT)\n : style.withLevel(StyleLevel.SCRIPTSCRIPT);\n\n // Chromium (wrongly) continues to shrink fractions beyond scriptscriptlevel.\n // So we check for levels that Chromium shrinks too small.\n // If necessary, set an explicit fraction depth.\n const numer = buildGroup$1(group.numer, childOptions);\n const denom = buildGroup$1(group.denom, childOptions);\n if (style.level === 3) {\n numer.style.mathDepth = \"2\";\n numer.setAttribute(\"scriptlevel\", \"2\");\n denom.style.mathDepth = \"2\";\n denom.setAttribute(\"scriptlevel\", \"2\");\n }\n\n let node = new mathMLTree.MathNode(\"mfrac\", [numer, denom]);\n\n if (!group.hasBarLine) {\n node.setAttribute(\"linethickness\", \"0px\");\n } else if (group.barSize) {\n const ruleWidth = calculateSize(group.barSize, style);\n node.setAttribute(\"linethickness\", ruleWidth.number + ruleWidth.unit);\n }\n\n if (group.leftDelim != null || group.rightDelim != null) {\n const withDelims = [];\n\n if (group.leftDelim != null) {\n const leftOp = new mathMLTree.MathNode(\"mo\", [\n new mathMLTree.TextNode(group.leftDelim.replace(\"\\\\\", \"\"))\n ]);\n leftOp.setAttribute(\"fence\", \"true\");\n withDelims.push(leftOp);\n }\n\n withDelims.push(node);\n\n if (group.rightDelim != null) {\n const rightOp = new mathMLTree.MathNode(\"mo\", [\n new mathMLTree.TextNode(group.rightDelim.replace(\"\\\\\", \"\"))\n ]);\n rightOp.setAttribute(\"fence\", \"true\");\n withDelims.push(rightOp);\n }\n\n node = makeRow(withDelims);\n }\n\n if (group.scriptLevel !== \"auto\") {\n node = new mathMLTree.MathNode(\"mstyle\", [node]);\n node.setAttribute(\"displaystyle\", String(group.scriptLevel === \"display\"));\n node.setAttribute(\"scriptlevel\", scriptLevel[group.scriptLevel]);\n }\n\n return node;\n};\n\ndefineFunction({\n type: \"genfrac\",\n names: [\n \"\\\\dfrac\",\n \"\\\\frac\",\n \"\\\\tfrac\",\n \"\\\\dbinom\",\n \"\\\\binom\",\n \"\\\\tbinom\",\n \"\\\\\\\\atopfrac\", // cant be entered directly\n \"\\\\\\\\bracefrac\",\n \"\\\\\\\\brackfrac\" // ditto\n ],\n props: {\n numArgs: 2,\n allowedInArgument: true\n },\n handler: ({ parser, funcName }, args) => {\n const numer = args[0];\n const denom = args[1];\n let hasBarLine = false;\n let leftDelim = null;\n let rightDelim = null;\n let scriptLevel = \"auto\";\n\n switch (funcName) {\n case \"\\\\dfrac\":\n case \"\\\\frac\":\n case \"\\\\tfrac\":\n hasBarLine = true;\n break;\n case \"\\\\\\\\atopfrac\":\n hasBarLine = false;\n break;\n case \"\\\\dbinom\":\n case \"\\\\binom\":\n case \"\\\\tbinom\":\n leftDelim = \"(\";\n rightDelim = \")\";\n break;\n case \"\\\\\\\\bracefrac\":\n leftDelim = \"\\\\{\";\n rightDelim = \"\\\\}\";\n break;\n case \"\\\\\\\\brackfrac\":\n leftDelim = \"[\";\n rightDelim = \"]\";\n break;\n default:\n throw new Error(\"Unrecognized genfrac command\");\n }\n\n switch (funcName) {\n case \"\\\\dfrac\":\n case \"\\\\dbinom\":\n scriptLevel = \"display\";\n break;\n case \"\\\\tfrac\":\n case \"\\\\tbinom\":\n scriptLevel = \"text\";\n break;\n }\n\n return {\n type: \"genfrac\",\n mode: parser.mode,\n continued: false,\n numer,\n denom,\n hasBarLine,\n leftDelim,\n rightDelim,\n scriptLevel,\n barSize: null\n };\n },\n mathmlBuilder: mathmlBuilder$5\n});\n\ndefineFunction({\n type: \"genfrac\",\n names: [\"\\\\cfrac\"],\n props: {\n numArgs: 2\n },\n handler: ({ parser, funcName }, args) => {\n const numer = args[0];\n const denom = args[1];\n\n return {\n type: \"genfrac\",\n mode: parser.mode,\n continued: true,\n numer,\n denom,\n hasBarLine: true,\n leftDelim: null,\n rightDelim: null,\n scriptLevel: \"display\",\n barSize: null\n };\n }\n});\n\n// Infix generalized fractions -- these are not rendered directly, but replaced\n// immediately by one of the variants above.\ndefineFunction({\n type: \"infix\",\n names: [\"\\\\over\", \"\\\\choose\", \"\\\\atop\", \"\\\\brace\", \"\\\\brack\"],\n props: {\n numArgs: 0,\n infix: true\n },\n handler({ parser, funcName, token }) {\n let replaceWith;\n switch (funcName) {\n case \"\\\\over\":\n replaceWith = \"\\\\frac\";\n break;\n case \"\\\\choose\":\n replaceWith = \"\\\\binom\";\n break;\n case \"\\\\atop\":\n replaceWith = \"\\\\\\\\atopfrac\";\n break;\n case \"\\\\brace\":\n replaceWith = \"\\\\\\\\bracefrac\";\n break;\n case \"\\\\brack\":\n replaceWith = \"\\\\\\\\brackfrac\";\n break;\n default:\n throw new Error(\"Unrecognized infix genfrac command\");\n }\n return {\n type: \"infix\",\n mode: parser.mode,\n replaceWith,\n token\n };\n }\n});\n\nconst delimFromValue = function(delimString) {\n let delim = null;\n if (delimString.length > 0) {\n delim = delimString;\n delim = delim === \".\" ? null : delim;\n }\n return delim;\n};\n\ndefineFunction({\n type: \"genfrac\",\n names: [\"\\\\genfrac\"],\n props: {\n numArgs: 6,\n allowedInArgument: true,\n argTypes: [\"math\", \"math\", \"size\", \"text\", \"math\", \"math\"]\n },\n handler({ parser }, args) {\n const numer = args[4];\n const denom = args[5];\n\n // Look into the parse nodes to get the desired delimiters.\n const leftNode = normalizeArgument(args[0]);\n const leftDelim = leftNode.type === \"atom\" && leftNode.family === \"open\"\n ? delimFromValue(leftNode.text)\n : null;\n const rightNode = normalizeArgument(args[1]);\n const rightDelim =\n rightNode.type === \"atom\" && rightNode.family === \"close\"\n ? delimFromValue(rightNode.text)\n : null;\n\n const barNode = assertNodeType(args[2], \"size\");\n let hasBarLine;\n let barSize = null;\n if (barNode.isBlank) {\n // \\genfrac acts differently than \\above.\n // \\genfrac treats an empty size group as a signal to use a\n // standard bar size. \\above would see size = 0 and omit the bar.\n hasBarLine = true;\n } else {\n barSize = barNode.value;\n hasBarLine = barSize.number > 0;\n }\n\n // Find out if we want displaystyle, textstyle, etc.\n let scriptLevel = \"auto\";\n let styl = args[3];\n if (styl.type === \"ordgroup\") {\n if (styl.body.length > 0) {\n const textOrd = assertNodeType(styl.body[0], \"textord\");\n scriptLevel = stylArray[Number(textOrd.text)];\n }\n } else {\n styl = assertNodeType(styl, \"textord\");\n scriptLevel = stylArray[Number(styl.text)];\n }\n\n return {\n type: \"genfrac\",\n mode: parser.mode,\n numer,\n denom,\n continued: false,\n hasBarLine,\n barSize,\n leftDelim,\n rightDelim,\n scriptLevel\n };\n },\n mathmlBuilder: mathmlBuilder$5\n});\n\n// \\above is an infix fraction that also defines a fraction bar size.\ndefineFunction({\n type: \"infix\",\n names: [\"\\\\above\"],\n props: {\n numArgs: 1,\n argTypes: [\"size\"],\n infix: true\n },\n handler({ parser, funcName, token }, args) {\n return {\n type: \"infix\",\n mode: parser.mode,\n replaceWith: \"\\\\\\\\abovefrac\",\n barSize: assertNodeType(args[0], \"size\").value,\n token\n };\n }\n});\n\ndefineFunction({\n type: \"genfrac\",\n names: [\"\\\\\\\\abovefrac\"],\n props: {\n numArgs: 3,\n argTypes: [\"math\", \"size\", \"math\"]\n },\n handler: ({ parser, funcName }, args) => {\n const numer = args[0];\n const barSize = assert(assertNodeType(args[1], \"infix\").barSize);\n const denom = args[2];\n\n const hasBarLine = barSize.number > 0;\n return {\n type: \"genfrac\",\n mode: parser.mode,\n numer,\n denom,\n continued: false,\n hasBarLine,\n barSize,\n leftDelim: null,\n rightDelim: null,\n scriptLevel: \"auto\"\n };\n },\n\n mathmlBuilder: mathmlBuilder$5\n});\n\n// \\hbox is provided for compatibility with LaTeX functions that act on a box.\n// This function by itself doesn't do anything but set scriptlevel to \\textstyle\n// and prevent a soft line break.\n\ndefineFunction({\n type: \"hbox\",\n names: [\"\\\\hbox\"],\n props: {\n numArgs: 1,\n argTypes: [\"hbox\"],\n allowedInArgument: true,\n allowedInText: false\n },\n handler({ parser }, args) {\n return {\n type: \"hbox\",\n mode: parser.mode,\n body: ordargument(args[0])\n };\n },\n mathmlBuilder(group, style) {\n const newStyle = style.withLevel(StyleLevel.TEXT);\n const mrow = buildExpressionRow(group.body, newStyle);\n return consolidateText(mrow)\n }\n});\n\nconst mathmlBuilder$4 = (group, style) => {\n const accentNode = stretchy.mathMLnode(group.label);\n accentNode.style[\"math-depth\"] = 0;\n return new mathMLTree.MathNode(group.isOver ? \"mover\" : \"munder\", [\n buildGroup$1(group.base, style),\n accentNode\n ]);\n};\n\n// Horizontal stretchy braces\ndefineFunction({\n type: \"horizBrace\",\n names: [\"\\\\overbrace\", \"\\\\underbrace\"],\n props: {\n numArgs: 1\n },\n handler({ parser, funcName }, args) {\n return {\n type: \"horizBrace\",\n mode: parser.mode,\n label: funcName,\n isOver: /^\\\\over/.test(funcName),\n base: args[0]\n };\n },\n mathmlBuilder: mathmlBuilder$4\n});\n\ndefineFunction({\n type: \"html\",\n names: [\"\\\\class\", \"\\\\id\", \"\\\\style\", \"\\\\data\"],\n props: {\n numArgs: 2,\n argTypes: [\"raw\", \"original\"],\n allowedInText: true\n },\n handler: ({ parser, funcName, token }, args) => {\n const value = assertNodeType(args[0], \"raw\").string;\n const body = args[1];\n\n if (parser.settings.strict) {\n throw new ParseError(`Function \"${funcName}\" is disabled in strict mode`, token)\n }\n\n let trustContext;\n const attributes = {};\n\n switch (funcName) {\n case \"\\\\class\":\n attributes.class = value;\n trustContext = {\n command: \"\\\\class\",\n class: value\n };\n break;\n case \"\\\\id\":\n attributes.id = value;\n trustContext = {\n command: \"\\\\id\",\n id: value\n };\n break;\n case \"\\\\style\":\n attributes.style = value;\n trustContext = {\n command: \"\\\\style\",\n style: value\n };\n break;\n case \"\\\\data\": {\n const data = value.split(\",\");\n for (let i = 0; i < data.length; i++) {\n const keyVal = data[i].split(\"=\");\n if (keyVal.length !== 2) {\n throw new ParseError(\"Error parsing key-value for \\\\data\");\n }\n attributes[\"data-\" + keyVal[0].trim()] = keyVal[1].trim();\n }\n\n trustContext = {\n command: \"\\\\data\",\n attributes\n };\n break;\n }\n default:\n throw new Error(\"Unrecognized html command\");\n }\n\n if (!parser.settings.isTrusted(trustContext)) {\n throw new ParseError(`Function \"${funcName}\" is not trusted`, token)\n }\n return {\n type: \"html\",\n mode: parser.mode,\n attributes,\n body: ordargument(body)\n };\n },\n mathmlBuilder: (group, style) => {\n const element = buildExpressionRow(group.body, style);\n\n const classes = [];\n if (group.attributes.class) {\n classes.push(...group.attributes.class.trim().split(/\\s+/));\n }\n element.classes = classes;\n\n for (const attr in group.attributes) {\n if (attr !== \"class\" && Object.prototype.hasOwnProperty.call(group.attributes, attr)) {\n element.setAttribute(attr, group.attributes[attr]);\n }\n }\n\n return element;\n }\n});\n\nconst sizeData = function(str) {\n if (/^[-+]? *(\\d+(\\.\\d*)?|\\.\\d+)$/.test(str)) {\n // str is a number with no unit specified.\n // default unit is bp, per graphix package.\n return { number: +str, unit: \"bp\" }\n } else {\n const match = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/.exec(str);\n if (!match) {\n throw new ParseError(\"Invalid size: '\" + str + \"' in \\\\includegraphics\");\n }\n const data = {\n number: +(match[1] + match[2]), // sign + magnitude, cast to number\n unit: match[3]\n };\n if (!validUnit(data)) {\n throw new ParseError(\"Invalid unit: '\" + data.unit + \"' in \\\\includegraphics.\");\n }\n return data\n }\n};\n\ndefineFunction({\n type: \"includegraphics\",\n names: [\"\\\\includegraphics\"],\n props: {\n numArgs: 1,\n numOptionalArgs: 1,\n argTypes: [\"raw\", \"url\"],\n allowedInText: false\n },\n handler: ({ parser, token }, args, optArgs) => {\n let width = { number: 0, unit: \"em\" };\n let height = { number: 0.9, unit: \"em\" }; // sorta character sized.\n let totalheight = { number: 0, unit: \"em\" };\n let alt = \"\";\n\n if (optArgs[0]) {\n const attributeStr = assertNodeType(optArgs[0], \"raw\").string;\n\n // Parser.js does not parse key/value pairs. We get a string.\n const attributes = attributeStr.split(\",\");\n for (let i = 0; i < attributes.length; i++) {\n const keyVal = attributes[i].split(\"=\");\n if (keyVal.length === 2) {\n const str = keyVal[1].trim();\n switch (keyVal[0].trim()) {\n case \"alt\":\n alt = str;\n break\n case \"width\":\n width = sizeData(str);\n break\n case \"height\":\n height = sizeData(str);\n break\n case \"totalheight\":\n totalheight = sizeData(str);\n break\n default:\n throw new ParseError(\"Invalid key: '\" + keyVal[0] + \"' in \\\\includegraphics.\")\n }\n }\n }\n }\n\n const src = assertNodeType(args[0], \"url\").url;\n\n if (alt === \"\") {\n // No alt given. Use the file name. Strip away the path.\n alt = src;\n alt = alt.replace(/^.*[\\\\/]/, \"\");\n alt = alt.substring(0, alt.lastIndexOf(\".\"));\n }\n\n if (\n !parser.settings.isTrusted({\n command: \"\\\\includegraphics\",\n url: src\n })\n ) {\n throw new ParseError(`Function \"\\\\includegraphics\" is not trusted`, token)\n }\n\n return {\n type: \"includegraphics\",\n mode: parser.mode,\n alt: alt,\n width: width,\n height: height,\n totalheight: totalheight,\n src: src\n }\n },\n mathmlBuilder: (group, style) => {\n const height = calculateSize(group.height, style);\n const depth = { number: 0, unit: \"em\" };\n\n if (group.totalheight.number > 0) {\n if (group.totalheight.unit === height.unit &&\n group.totalheight.number > height.number) {\n depth.number = group.totalheight.number - height.number;\n depth.unit = height.unit;\n }\n }\n\n let width = 0;\n if (group.width.number > 0) {\n width = calculateSize(group.width, style);\n }\n\n const graphicStyle = { height: height.number + depth.number + \"em\" };\n if (width.number > 0) {\n graphicStyle.width = width.number + width.unit;\n }\n if (depth.number > 0) {\n graphicStyle.verticalAlign = -depth.number + depth.unit;\n }\n\n const node = new Img(group.src, group.alt, graphicStyle);\n node.height = height;\n node.depth = depth;\n return new mathMLTree.MathNode(\"mtext\", [node])\n }\n});\n\n// Horizontal spacing commands\n\n\n// TODO: \\hskip and \\mskip should support plus and minus in lengths\n\ndefineFunction({\n type: \"kern\",\n names: [\"\\\\kern\", \"\\\\mkern\", \"\\\\hskip\", \"\\\\mskip\"],\n props: {\n numArgs: 1,\n argTypes: [\"size\"],\n primitive: true,\n allowedInText: true\n },\n handler({ parser, funcName, token }, args) {\n const size = assertNodeType(args[0], \"size\");\n if (parser.settings.strict) {\n const mathFunction = funcName[1] === \"m\"; // \\mkern, \\mskip\n const muUnit = size.value.unit === \"mu\";\n if (mathFunction) {\n if (!muUnit) {\n throw new ParseError(`LaTeX's ${funcName} supports only mu units, ` +\n `not ${size.value.unit} units`, token)\n }\n if (parser.mode !== \"math\") {\n throw new ParseError(`LaTeX's ${funcName} works only in math mode`, token)\n }\n } else {\n // !mathFunction\n if (muUnit) {\n throw new ParseError(`LaTeX's ${funcName} doesn't support mu units`, token)\n }\n }\n }\n return {\n type: \"kern\",\n mode: parser.mode,\n dimension: size.value\n };\n },\n mathmlBuilder(group, style) {\n const dimension = calculateSize(group.dimension, style);\n const ch = dimension.number > 0 && dimension.unit === \"em\"\n ? spaceCharacter(dimension.number)\n : \"\";\n if (group.mode === \"text\" && ch.length > 0) {\n const character = new mathMLTree.TextNode(ch);\n return new mathMLTree.MathNode(\"mtext\", [character]);\n } else {\n if (dimension.number >= 0) {\n const node = new mathMLTree.MathNode(\"mspace\");\n node.setAttribute(\"width\", dimension.number + dimension.unit);\n return node\n } else {\n // Don't use <mspace> or <mpadded> because\n // WebKit recognizes negative left margin only on a <mrow> element\n const node = new mathMLTree.MathNode(\"mrow\");\n node.style.marginLeft = dimension.number + dimension.unit;\n return node\n }\n }\n }\n});\n\nconst spaceCharacter = function(width) {\n if (width >= 0.05555 && width <= 0.05556) {\n return \"\\u200a\"; // &VeryThinSpace;\n } else if (width >= 0.1666 && width <= 0.1667) {\n return \"\\u2009\"; // &ThinSpace;\n } else if (width >= 0.2222 && width <= 0.2223) {\n return \"\\u2005\"; // &MediumSpace;\n } else if (width >= 0.2777 && width <= 0.2778) {\n return \"\\u2005\\u200a\"; // &ThickSpace;\n } else {\n return \"\";\n }\n};\n\n// Limit valid characters to a small set, for safety.\nconst invalidIdRegEx = /[^A-Za-z_0-9-]/g;\n\ndefineFunction({\n type: \"label\",\n names: [\"\\\\label\"],\n props: {\n numArgs: 1,\n argTypes: [\"raw\"]\n },\n handler({ parser }, args) {\n return {\n type: \"label\",\n mode: parser.mode,\n string: args[0].string.replace(invalidIdRegEx, \"\")\n };\n },\n mathmlBuilder(group, style) {\n // Return a no-width, no-ink element with an HTML id.\n const node = new mathMLTree.MathNode(\"mrow\", [], [\"tml-label\"]);\n if (group.string.length > 0) {\n node.setLabel(group.string);\n }\n return node\n }\n});\n\n// Horizontal overlap functions\n\nconst textModeLap = [\"\\\\clap\", \"\\\\llap\", \"\\\\rlap\"];\n\ndefineFunction({\n type: \"lap\",\n names: [\"\\\\mathllap\", \"\\\\mathrlap\", \"\\\\mathclap\", \"\\\\clap\", \"\\\\llap\", \"\\\\rlap\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: ({ parser, funcName, token }, args) => {\n if (textModeLap.includes(funcName)) {\n if (parser.settings.strict && parser.mode !== \"text\") {\n throw new ParseError(`{${funcName}} can be used only in text mode.\n Try \\\\math${funcName.slice(1)}`, token)\n }\n funcName = funcName.slice(1);\n } else {\n funcName = funcName.slice(5);\n }\n const body = args[0];\n return {\n type: \"lap\",\n mode: parser.mode,\n alignment: funcName,\n body\n }\n },\n mathmlBuilder: (group, style) => {\n // mathllap, mathrlap, mathclap\n let strut;\n if (group.alignment === \"llap\") {\n // We need an invisible strut with the same depth as the group.\n // We can't just read the depth, so we use \\vphantom methods.\n const phantomInner = buildExpression(ordargument(group.body), style);\n const phantom = new mathMLTree.MathNode(\"mphantom\", phantomInner);\n strut = new mathMLTree.MathNode(\"mpadded\", [phantom]);\n strut.setAttribute(\"width\", \"0.1px\"); // Don't use 0. WebKit would hide it.\n }\n\n const inner = buildGroup$1(group.body, style);\n let node;\n if (group.alignment === \"llap\") {\n inner.style.position = \"absolute\";\n inner.style.right = \"0\";\n inner.style.bottom = `0`; // If we could have read the ink depth, it would go here.\n node = new mathMLTree.MathNode(\"mpadded\", [strut, inner]);\n } else {\n node = new mathMLTree.MathNode(\"mpadded\", [inner]);\n }\n\n if (group.alignment === \"rlap\") {\n if (group.body.body.length > 0 && group.body.body[0].type === \"genfrac\") {\n // In Firefox, a <mpadded> squashes the 3/18em padding of a child \\frac. Put it back.\n node.setAttribute(\"lspace\", \"0.16667em\");\n }\n } else {\n const offset = group.alignment === \"llap\" ? \"-1\" : \"-0.5\";\n node.setAttribute(\"lspace\", offset + \"width\");\n if (group.alignment === \"llap\") {\n node.style.position = \"relative\";\n } else {\n node.style.display = \"flex\";\n node.style.justifyContent = \"center\";\n }\n }\n node.setAttribute(\"width\", \"0.1px\"); // Don't use 0. WebKit would hide it.\n return node\n }\n});\n\n// Switching from text mode back to math mode\ndefineFunction({\n type: \"ordgroup\",\n names: [\"\\\\(\", \"$\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInMath: false\n },\n handler({ funcName, parser }, args) {\n const outerMode = parser.mode;\n parser.switchMode(\"math\");\n const close = funcName === \"\\\\(\" ? \"\\\\)\" : \"$\";\n const body = parser.parseExpression(false, close);\n parser.expect(close);\n parser.switchMode(outerMode);\n return {\n type: \"ordgroup\",\n mode: parser.mode,\n body\n };\n }\n});\n\n// Check for extra closing math delimiters\ndefineFunction({\n type: \"text\", // Doesn't matter what this is.\n names: [\"\\\\)\", \"\\\\]\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInMath: false\n },\n handler(context, token) {\n throw new ParseError(`Mismatched ${context.funcName}`, token);\n }\n});\n\nconst chooseStyle = (group, style) => {\n switch (style.level) {\n case StyleLevel.DISPLAY: // 0\n return group.display;\n case StyleLevel.TEXT: // 1\n return group.text;\n case StyleLevel.SCRIPT: // 2\n return group.script;\n case StyleLevel.SCRIPTSCRIPT: // 3\n return group.scriptscript;\n default:\n return group.text;\n }\n};\n\ndefineFunction({\n type: \"mathchoice\",\n names: [\"\\\\mathchoice\"],\n props: {\n numArgs: 4,\n primitive: true\n },\n handler: ({ parser }, args) => {\n return {\n type: \"mathchoice\",\n mode: parser.mode,\n display: ordargument(args[0]),\n text: ordargument(args[1]),\n script: ordargument(args[2]),\n scriptscript: ordargument(args[3])\n };\n },\n mathmlBuilder: (group, style) => {\n const body = chooseStyle(group, style);\n return buildExpressionRow(body, style);\n }\n});\n\nconst textAtomTypes = [\"text\", \"textord\", \"mathord\", \"atom\"];\n\nfunction mathmlBuilder$3(group, style) {\n let node;\n const inner = buildExpression(group.body, style);\n\n if (group.mclass === \"minner\") {\n node = new mathMLTree.MathNode(\"mpadded\", inner);\n } else if (group.mclass === \"mord\") {\n if (group.isCharacterBox || inner[0].type === \"mathord\") {\n node = inner[0];\n node.type = \"mi\";\n if (node.children.length === 1 && node.children[0].text && node.children[0].text === \"∇\") {\n node.setAttribute(\"mathvariant\", \"normal\");\n }\n } else {\n node = new mathMLTree.MathNode(\"mi\", inner);\n }\n } else {\n node = new mathMLTree.MathNode(\"mrow\", inner);\n if (group.mustPromote) {\n node = inner[0];\n node.type = \"mo\";\n if (group.isCharacterBox && group.body[0].text && /[A-Za-z]/.test(group.body[0].text)) {\n node.setAttribute(\"mathvariant\", \"italic\");\n }\n } else {\n node = new mathMLTree.MathNode(\"mrow\", inner);\n }\n\n // Set spacing based on what is the most likely adjacent atom type.\n // See TeXbook p170.\n const doSpacing = style.level < 2; // Operator spacing is zero inside a (sub|super)script.\n if (node.type === \"mrow\") {\n if (doSpacing ) {\n if (group.mclass === \"mbin\") {\n // medium space\n node.children.unshift(padding$1(0.2222));\n node.children.push(padding$1(0.2222));\n } else if (group.mclass === \"mrel\") {\n // thickspace\n node.children.unshift(padding$1(0.2778));\n node.children.push(padding$1(0.2778));\n } else if (group.mclass === \"mpunct\") {\n node.children.push(padding$1(0.1667));\n } else if (group.mclass === \"minner\") {\n node.children.unshift(padding$1(0.0556)); // 1 mu is the most likely option\n node.children.push(padding$1(0.0556));\n }\n }\n } else {\n if (group.mclass === \"mbin\") {\n // medium space\n node.attributes.lspace = (doSpacing ? \"0.2222em\" : \"0\");\n node.attributes.rspace = (doSpacing ? \"0.2222em\" : \"0\");\n } else if (group.mclass === \"mrel\") {\n // thickspace\n node.attributes.lspace = (doSpacing ? \"0.2778em\" : \"0\");\n node.attributes.rspace = (doSpacing ? \"0.2778em\" : \"0\");\n } else if (group.mclass === \"mpunct\") {\n node.attributes.lspace = \"0em\";\n node.attributes.rspace = (doSpacing ? \"0.1667em\" : \"0\");\n } else if (group.mclass === \"mopen\" || group.mclass === \"mclose\") {\n node.attributes.lspace = \"0em\";\n node.attributes.rspace = \"0em\";\n } else if (group.mclass === \"minner\" && doSpacing) {\n node.attributes.lspace = \"0.0556em\"; // 1 mu is the most likely option\n node.attributes.width = \"+0.1111em\";\n }\n }\n\n if (!(group.mclass === \"mopen\" || group.mclass === \"mclose\")) {\n delete node.attributes.stretchy;\n delete node.attributes.form;\n }\n }\n return node;\n}\n\n// Math class commands except \\mathop\ndefineFunction({\n type: \"mclass\",\n names: [\n \"\\\\mathord\",\n \"\\\\mathbin\",\n \"\\\\mathrel\",\n \"\\\\mathopen\",\n \"\\\\mathclose\",\n \"\\\\mathpunct\",\n \"\\\\mathinner\"\n ],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler({ parser, funcName }, args) {\n const body = args[0];\n const isCharacterBox = utils.isCharacterBox(body);\n // We should not wrap a <mo> around a <mi> or <mord>. That would be invalid MathML.\n // In that case, we instead promote the text contents of the body to the parent.\n let mustPromote = true;\n const mord = { type: \"mathord\", text: \"\", mode: parser.mode };\n const arr = (body.body) ? body.body : [body];\n for (const arg of arr) {\n if (textAtomTypes.includes(arg.type)) {\n if (symbols[parser.mode][arg.text]) {\n mord.text += symbols[parser.mode][arg.text].replace;\n } else if (arg.text) {\n mord.text += arg.text;\n } else if (arg.body) {\n arg.body.map(e => { mord.text += e.text; });\n }\n } else {\n mustPromote = false;\n break\n }\n }\n if (mustPromote && funcName === \"\\\\mathord\" && mord.type === \"mathord\"\n && mord.text.length > 1) {\n return mord\n } else {\n return {\n type: \"mclass\",\n mode: parser.mode,\n mclass: \"m\" + funcName.slice(5),\n body: ordargument(mustPromote ? mord : body),\n isCharacterBox,\n mustPromote\n };\n }\n },\n mathmlBuilder: mathmlBuilder$3\n});\n\nconst binrelClass = (arg) => {\n // \\binrel@ spacing varies with (bin|rel|ord) of the atom in the argument.\n // (by rendering separately and with {}s before and after, and measuring\n // the change in spacing). We'll do roughly the same by detecting the\n // atom type directly.\n const atom = arg.type === \"ordgroup\" && arg.body.length && arg.body.length === 1\n ? arg.body[0]\n : arg;\n if (atom.type === \"atom\" && (atom.family === \"bin\" || atom.family === \"rel\")) {\n return \"m\" + atom.family;\n } else {\n return \"mord\";\n }\n};\n\n// \\@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord.\n// This is equivalent to \\binrel@{x}\\binrel@@{y} in AMSTeX.\ndefineFunction({\n type: \"mclass\",\n names: [\"\\\\@binrel\"],\n props: {\n numArgs: 2\n },\n handler({ parser }, args) {\n return {\n type: \"mclass\",\n mode: parser.mode,\n mclass: binrelClass(args[0]),\n body: ordargument(args[1]),\n isCharacterBox: utils.isCharacterBox(args[1])\n };\n }\n});\n\n// Build a relation or stacked op by placing one symbol on top of another\ndefineFunction({\n type: \"mclass\",\n names: [\"\\\\stackrel\", \"\\\\overset\", \"\\\\underset\"],\n props: {\n numArgs: 2\n },\n handler({ parser, funcName }, args) {\n const baseArg = args[1];\n const shiftedArg = args[0];\n\n let mclass;\n if (funcName !== \"\\\\stackrel\") {\n // LaTeX applies \\binrel spacing to \\overset and \\underset.\n mclass = binrelClass(baseArg);\n } else {\n mclass = \"mrel\"; // for \\stackrel\n }\n\n const baseType = mclass === \"mrel\" || mclass === \"mbin\"\n ? \"op\"\n : \"ordgroup\";\n\n const baseOp = {\n type: baseType,\n mode: baseArg.mode,\n limits: true,\n alwaysHandleSupSub: true,\n parentIsSupSub: false,\n symbol: false,\n suppressBaseShift: funcName !== \"\\\\stackrel\",\n body: ordargument(baseArg)\n };\n\n return {\n type: \"supsub\",\n mode: shiftedArg.mode,\n stack: true,\n base: baseOp,\n sup: funcName === \"\\\\underset\" ? null : shiftedArg,\n sub: funcName === \"\\\\underset\" ? shiftedArg : null\n };\n },\n mathmlBuilder: mathmlBuilder$3\n});\n\n// Helper function\nconst buildGroup = (el, style, noneNode) => {\n if (!el) { return noneNode }\n const node = buildGroup$1(el, style);\n if (node.type === \"mrow\" && node.children.length === 0) { return noneNode }\n return node\n};\n\ndefineFunction({\n type: \"multiscript\",\n names: [\"\\\\sideset\", \"\\\\pres@cript\"], // See macros.js for \\prescript\n props: {\n numArgs: 3\n },\n handler({ parser, funcName, token }, args) {\n if (args[2].body.length === 0) {\n throw new ParseError(funcName + `cannot parse an empty base.`)\n }\n const base = args[2].body[0];\n if (parser.settings.strict && funcName === \"\\\\sideset\" && !base.symbol) {\n throw new ParseError(`The base of \\\\sideset must be a big operator. Try \\\\prescript.`)\n }\n\n if ((args[0].body.length > 0 && args[0].body[0].type !== \"supsub\") ||\n (args[1].body.length > 0 && args[1].body[0].type !== \"supsub\")) {\n throw new ParseError(\"\\\\sideset can parse only subscripts and \" +\n \"superscripts in its first two arguments\", token)\n }\n\n // The prescripts and postscripts come wrapped in a supsub.\n const prescripts = args[0].body.length > 0 ? args[0].body[0] : null;\n const postscripts = args[1].body.length > 0 ? args[1].body[0] : null;\n\n if (!prescripts && !postscripts) {\n return base\n } else if (!prescripts) {\n // It's not a multi-script. Get a \\textstyle supsub.\n return {\n type: \"styling\",\n mode: parser.mode,\n scriptLevel: \"text\",\n body: [{\n type: \"supsub\",\n mode: parser.mode,\n base,\n sup: postscripts.sup,\n sub: postscripts.sub\n }]\n }\n } else {\n return {\n type: \"multiscript\",\n mode: parser.mode,\n isSideset: funcName === \"\\\\sideset\",\n prescripts,\n postscripts,\n base\n }\n }\n },\n mathmlBuilder(group, style) {\n const base = buildGroup$1(group.base, style);\n\n const prescriptsNode = new mathMLTree.MathNode(\"mprescripts\");\n const noneNode = new mathMLTree.MathNode(\"none\");\n let children = [];\n\n const preSub = buildGroup(group.prescripts.sub, style, noneNode);\n const preSup = buildGroup(group.prescripts.sup, style, noneNode);\n if (group.isSideset) {\n // This seems silly, but LaTeX does this. Firefox ignores it, which does not make me sad.\n preSub.setAttribute(\"style\", \"text-align: left;\");\n preSup.setAttribute(\"style\", \"text-align: left;\");\n }\n\n if (group.postscripts) {\n const postSub = buildGroup(group.postscripts.sub, style, noneNode);\n const postSup = buildGroup(group.postscripts.sup, style, noneNode);\n children = [base, postSub, postSup, prescriptsNode, preSub, preSup];\n } else {\n children = [base, prescriptsNode, preSub, preSup];\n }\n\n return new mathMLTree.MathNode(\"mmultiscripts\", children);\n }\n});\n\ndefineFunction({\n type: \"not\",\n names: [\"\\\\not\"],\n props: {\n numArgs: 1,\n primitive: true,\n allowedInText: false\n },\n handler({ parser }, args) {\n const isCharacterBox = utils.isCharacterBox(args[0]);\n let body;\n if (isCharacterBox) {\n body = ordargument(args[0]);\n if (body[0].text.charAt(0) === \"\\\\\") {\n body[0].text = symbols.math[body[0].text].replace;\n }\n // \\u0338 is the Unicode Combining Long Solidus Overlay\n body[0].text = body[0].text.slice(0, 1) + \"\\u0338\" + body[0].text.slice(1);\n } else {\n // When the argument is not a character box, TeX does an awkward, poorly placed overlay.\n // We'll do the same.\n const notNode = { type: \"textord\", mode: \"math\", text: \"\\u0338\" };\n const kernNode = { type: \"kern\", mode: \"math\", dimension: { number: -0.6, unit: \"em\" } };\n body = [notNode, kernNode, args[0]];\n }\n return {\n type: \"not\",\n mode: parser.mode,\n body,\n isCharacterBox\n };\n },\n mathmlBuilder(group, style) {\n if (group.isCharacterBox) {\n const inner = buildExpression(group.body, style, true);\n return inner[0]\n } else {\n return buildExpressionRow(group.body, style)\n }\n }\n});\n\n// Limits, symbols\n\n// Some helpers\n\nconst ordAtomTypes = [\"textord\", \"mathord\", \"atom\"];\n\n// Most operators have a large successor symbol, but these don't.\nconst noSuccessor = [\"\\\\smallint\"];\n\n// Math operators (e.g. \\sin) need a space between these types and themselves:\nconst ordTypes = [\"textord\", \"mathord\", \"ordgroup\", \"close\", \"leftright\", \"font\"];\n\n// NOTE: Unlike most `builders`s, this one handles not only \"op\", but also\n// \"supsub\" since some of them (like \\int) can affect super/subscripting.\n\nconst setSpacing = node => {\n // The user wrote a \\mathop{…} function. Change spacing from default to OP spacing.\n // The most likely spacing for an OP is a thin space per TeXbook p170.\n node.attributes.lspace = \"0.1667em\";\n node.attributes.rspace = \"0.1667em\";\n};\n\nconst mathmlBuilder$2 = (group, style) => {\n let node;\n\n if (group.symbol) {\n // This is a symbol. Just add the symbol.\n node = new MathNode(\"mo\", [makeText(group.name, group.mode)]);\n if (noSuccessor.includes(group.name)) {\n node.setAttribute(\"largeop\", \"false\");\n } else {\n node.setAttribute(\"movablelimits\", \"false\");\n }\n if (group.fromMathOp) { setSpacing(node); }\n } else if (group.body) {\n // This is an operator with children. Add them.\n node = new MathNode(\"mo\", buildExpression(group.body, style));\n if (group.fromMathOp) { setSpacing(node); }\n } else {\n // This is a text operator. Add all of the characters from the operator's name.\n node = new MathNode(\"mi\", [new TextNode(group.name.slice(1))]);\n\n if (!group.parentIsSupSub) {\n // Append an invisible <mo>&ApplyFunction;</mo>.\n // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4\n const operator = new MathNode(\"mo\", [makeText(\"\\u2061\", \"text\")]);\n const row = [node, operator];\n // Set spacing\n if (group.needsLeadingSpace) {\n const lead = new MathNode(\"mspace\");\n lead.setAttribute(\"width\", \"0.1667em\"); // thin space.\n row.unshift(lead);\n }\n if (!group.isFollowedByDelimiter) {\n const trail = new MathNode(\"mspace\");\n trail.setAttribute(\"width\", \"0.1667em\"); // thin space.\n row.push(trail);\n }\n node = new MathNode(\"mrow\", row);\n }\n }\n\n return node;\n};\n\nconst singleCharBigOps = {\n \"\\u220F\": \"\\\\prod\",\n \"\\u2210\": \"\\\\coprod\",\n \"\\u2211\": \"\\\\sum\",\n \"\\u22c0\": \"\\\\bigwedge\",\n \"\\u22c1\": \"\\\\bigvee\",\n \"\\u22c2\": \"\\\\bigcap\",\n \"\\u22c3\": \"\\\\bigcup\",\n \"\\u2a00\": \"\\\\bigodot\",\n \"\\u2a01\": \"\\\\bigoplus\",\n \"\\u2a02\": \"\\\\bigotimes\",\n \"\\u2a04\": \"\\\\biguplus\",\n \"\\u2a05\": \"\\\\bigsqcap\",\n \"\\u2a06\": \"\\\\bigsqcup\",\n \"\\u2a03\": \"\\\\bigcupdot\",\n \"\\u2a07\": \"\\\\bigdoublevee\",\n \"\\u2a08\": \"\\\\bigdoublewedge\",\n \"\\u2a09\": \"\\\\bigtimes\"\n};\n\ndefineFunction({\n type: \"op\",\n names: [\n \"\\\\coprod\",\n \"\\\\bigvee\",\n \"\\\\bigwedge\",\n \"\\\\biguplus\",\n \"\\\\bigcupplus\",\n \"\\\\bigcupdot\",\n \"\\\\bigcap\",\n \"\\\\bigcup\",\n \"\\\\bigdoublevee\",\n \"\\\\bigdoublewedge\",\n \"\\\\intop\",\n \"\\\\prod\",\n \"\\\\sum\",\n \"\\\\bigotimes\",\n \"\\\\bigoplus\",\n \"\\\\bigodot\",\n \"\\\\bigsqcap\",\n \"\\\\bigsqcup\",\n \"\\\\bigtimes\",\n \"\\\\smallint\",\n \"\\u220F\",\n \"\\u2210\",\n \"\\u2211\",\n \"\\u22c0\",\n \"\\u22c1\",\n \"\\u22c2\",\n \"\\u22c3\",\n \"\\u2a00\",\n \"\\u2a01\",\n \"\\u2a02\",\n \"\\u2a03\",\n \"\\u2a04\",\n \"\\u2a05\",\n \"\\u2a06\",\n \"\\u2a07\",\n \"\\u2a08\",\n \"\\u2a09\"\n ],\n props: {\n numArgs: 0\n },\n handler: ({ parser, funcName }, args) => {\n let fName = funcName;\n if (fName.length === 1) {\n fName = singleCharBigOps[fName];\n }\n return {\n type: \"op\",\n mode: parser.mode,\n limits: true,\n parentIsSupSub: false,\n symbol: true,\n stack: false, // This is true for \\stackrel{}, not here.\n name: fName\n };\n },\n mathmlBuilder: mathmlBuilder$2\n});\n\n// Note: calling defineFunction with a type that's already been defined only\n// works because the same mathmlBuilder is being used.\ndefineFunction({\n type: \"op\",\n names: [\"\\\\mathop\"],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: ({ parser }, args) => {\n const body = args[0];\n // It would be convienient to just wrap a <mo> around the argument.\n // But if the argument is a <mi> or <mord>, that would be invalid MathML.\n // In that case, we instead promote the text contents of the body to the parent.\n const arr = (body.body) ? body.body : [body];\n const isSymbol = arr.length === 1 && ordAtomTypes.includes(arr[0].type);\n return {\n type: \"op\",\n mode: parser.mode,\n limits: true,\n parentIsSupSub: false,\n symbol: isSymbol,\n fromMathOp: true,\n stack: false,\n name: isSymbol ? arr[0].text : null,\n body: isSymbol ? null : ordargument(body)\n };\n },\n mathmlBuilder: mathmlBuilder$2\n});\n\n// There are 2 flags for operators; whether they produce limits in\n// displaystyle, and whether they are symbols and should grow in\n// displaystyle. These four groups cover the four possible choices.\n\nconst singleCharIntegrals = {\n \"\\u222b\": \"\\\\int\",\n \"\\u222c\": \"\\\\iint\",\n \"\\u222d\": \"\\\\iiint\",\n \"\\u222e\": \"\\\\oint\",\n \"\\u222f\": \"\\\\oiint\",\n \"\\u2230\": \"\\\\oiiint\",\n \"\\u2231\": \"\\\\intclockwise\",\n \"\\u2232\": \"\\\\varointclockwise\",\n \"\\u2a0c\": \"\\\\iiiint\",\n \"\\u2a0d\": \"\\\\intbar\",\n \"\\u2a0e\": \"\\\\intBar\",\n \"\\u2a0f\": \"\\\\fint\",\n \"\\u2a12\": \"\\\\rppolint\",\n \"\\u2a13\": \"\\\\scpolint\",\n \"\\u2a15\": \"\\\\pointint\",\n \"\\u2a16\": \"\\\\sqint\",\n \"\\u2a17\": \"\\\\intlarhk\",\n \"\\u2a18\": \"\\\\intx\",\n \"\\u2a19\": \"\\\\intcap\",\n \"\\u2a1a\": \"\\\\intcup\"\n};\n\n// No limits, not symbols\ndefineFunction({\n type: \"op\",\n names: [\n \"\\\\arcsin\",\n \"\\\\arccos\",\n \"\\\\arctan\",\n \"\\\\arctg\",\n \"\\\\arcctg\",\n \"\\\\arg\",\n \"\\\\ch\",\n \"\\\\cos\",\n \"\\\\cosec\",\n \"\\\\cosh\",\n \"\\\\cot\",\n \"\\\\cotg\",\n \"\\\\coth\",\n \"\\\\csc\",\n \"\\\\ctg\",\n \"\\\\cth\",\n \"\\\\deg\",\n \"\\\\dim\",\n \"\\\\exp\",\n \"\\\\hom\",\n \"\\\\ker\",\n \"\\\\lg\",\n \"\\\\ln\",\n \"\\\\log\",\n \"\\\\sec\",\n \"\\\\sin\",\n \"\\\\sinh\",\n \"\\\\sh\",\n \"\\\\sgn\",\n \"\\\\tan\",\n \"\\\\tanh\",\n \"\\\\tg\",\n \"\\\\th\"\n ],\n props: {\n numArgs: 0\n },\n handler({ parser, funcName }) {\n const prevAtomType = parser.prevAtomType;\n const next = parser.gullet.future().text;\n return {\n type: \"op\",\n mode: parser.mode,\n limits: false,\n parentIsSupSub: false,\n symbol: false,\n stack: false,\n isFollowedByDelimiter: isDelimiter(next),\n needsLeadingSpace: prevAtomType.length > 0 && ordTypes.includes(prevAtomType),\n name: funcName\n };\n },\n mathmlBuilder: mathmlBuilder$2\n});\n\n// Limits, not symbols\ndefineFunction({\n type: \"op\",\n names: [\"\\\\det\", \"\\\\gcd\", \"\\\\inf\", \"\\\\lim\", \"\\\\max\", \"\\\\min\", \"\\\\Pr\", \"\\\\sup\"],\n props: {\n numArgs: 0\n },\n handler({ parser, funcName }) {\n const prevAtomType = parser.prevAtomType;\n const next = parser.gullet.future().text;\n return {\n type: \"op\",\n mode: parser.mode,\n limits: true,\n parentIsSupSub: false,\n symbol: false,\n stack: false,\n isFollowedByDelimiter: isDelimiter(next),\n needsLeadingSpace: prevAtomType.length > 0 && ordTypes.includes(prevAtomType),\n name: funcName\n };\n },\n mathmlBuilder: mathmlBuilder$2\n});\n\n// No limits, symbols\ndefineFunction({\n type: \"op\",\n names: [\n \"\\\\int\",\n \"\\\\iint\",\n \"\\\\iiint\",\n \"\\\\iiiint\",\n \"\\\\oint\",\n \"\\\\oiint\",\n \"\\\\oiiint\",\n \"\\\\intclockwise\",\n \"\\\\varointclockwise\",\n \"\\\\intbar\",\n \"\\\\intBar\",\n \"\\\\fint\",\n \"\\\\rppolint\",\n \"\\\\scpolint\",\n \"\\\\pointint\",\n \"\\\\sqint\",\n \"\\\\intlarhk\",\n \"\\\\intx\",\n \"\\\\intcap\",\n \"\\\\intcup\",\n \"\\u222b\",\n \"\\u222c\",\n \"\\u222d\",\n \"\\u222e\",\n \"\\u222f\",\n \"\\u2230\",\n \"\\u2231\",\n \"\\u2232\",\n \"\\u2a0c\",\n \"\\u2a0d\",\n \"\\u2a0e\",\n \"\\u2a0f\",\n \"\\u2a12\",\n \"\\u2a13\",\n \"\\u2a15\",\n \"\\u2a16\",\n \"\\u2a17\",\n \"\\u2a18\",\n \"\\u2a19\",\n \"\\u2a1a\"\n ],\n props: {\n numArgs: 0\n },\n handler({ parser, funcName }) {\n let fName = funcName;\n if (fName.length === 1) {\n fName = singleCharIntegrals[fName];\n }\n return {\n type: \"op\",\n mode: parser.mode,\n limits: false,\n parentIsSupSub: false,\n symbol: true,\n stack: false,\n name: fName\n };\n },\n mathmlBuilder: mathmlBuilder$2\n});\n\n// NOTE: Unlike most builders, this one handles not only\n// \"operatorname\", but also \"supsub\" since \\operatorname* can\n// affect super/subscripting.\n\nconst mathmlBuilder$1 = (group, style) => {\n let expression = buildExpression(group.body, style.withFont(\"mathrm\"));\n\n // Is expression a string or has it something like a fraction?\n let isAllString = true; // default\n for (let i = 0; i < expression.length; i++) {\n let node = expression[i];\n if (node instanceof mathMLTree.MathNode) {\n if ((node.type === \"mrow\" || node.type === \"mpadded\") && node.children.length === 1 &&\n node.children[0] instanceof mathMLTree.MathNode) {\n node = node.children[0];\n }\n switch (node.type) {\n case \"mi\":\n case \"mn\":\n case \"ms\":\n case \"mtext\":\n break; // Do nothing yet.\n case \"mspace\":\n {\n if (node.attributes.width) {\n const width = node.attributes.width.replace(\"em\", \"\");\n const ch = spaceCharacter(Number(width));\n if (ch === \"\") {\n isAllString = false;\n } else {\n expression[i] = new mathMLTree.MathNode(\"mtext\", [new mathMLTree.TextNode(ch)]);\n }\n }\n }\n break\n case \"mo\": {\n const child = node.children[0];\n if (node.children.length === 1 && child instanceof mathMLTree.TextNode) {\n child.text = child.text.replace(/\\u2212/, \"-\").replace(/\\u2217/, \"*\");\n } else {\n isAllString = false;\n }\n break\n }\n default:\n isAllString = false;\n }\n } else {\n isAllString = false;\n }\n }\n\n if (isAllString) {\n // Write a single TextNode instead of multiple nested tags.\n const word = expression.map((node) => node.toText()).join(\"\");\n expression = [new mathMLTree.TextNode(word)];\n } else if (\n expression.length === 1\n && [\"mover\", \"munder\"].includes(expression[0].type) &&\n (expression[0].children[0].type === \"mi\" || expression[0].children[0].type === \"mtext\")\n ) {\n expression[0].children[0].type = \"mi\";\n if (group.parentIsSupSub) {\n return new mathMLTree.MathNode(\"mrow\", expression)\n } else {\n const operator = new mathMLTree.MathNode(\"mo\", [makeText(\"\\u2061\", \"text\")]);\n return mathMLTree.newDocumentFragment([expression[0], operator])\n }\n }\n\n let wrapper;\n if (isAllString) {\n wrapper = new mathMLTree.MathNode(\"mi\", expression);\n if (expression[0].text.length === 1) {\n wrapper.setAttribute(\"mathvariant\", \"normal\");\n }\n } else {\n wrapper = new mathMLTree.MathNode(\"mrow\", expression);\n }\n\n if (!group.parentIsSupSub) {\n // Append an <mo>&ApplyFunction;</mo>.\n // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4\n const operator = new mathMLTree.MathNode(\"mo\", [makeText(\"\\u2061\", \"text\")]);\n const fragment = [wrapper, operator];\n if (group.needsLeadingSpace) {\n // LaTeX gives operator spacing, but a <mi> gets ord spacing.\n // So add a leading space.\n const space = new mathMLTree.MathNode(\"mspace\");\n space.setAttribute(\"width\", \"0.1667em\"); // thin space.\n fragment.unshift(space);\n }\n if (!group.isFollowedByDelimiter) {\n const trail = new mathMLTree.MathNode(\"mspace\");\n trail.setAttribute(\"width\", \"0.1667em\"); // thin space.\n fragment.push(trail);\n }\n return mathMLTree.newDocumentFragment(fragment)\n }\n\n return wrapper\n};\n\n// \\operatorname\n// amsopn.dtx: \\mathop{#1\\kern\\z@\\operator@font#3}\\newmcodes@\ndefineFunction({\n type: \"operatorname\",\n names: [\"\\\\operatorname@\", \"\\\\operatornamewithlimits\"],\n props: {\n numArgs: 1,\n allowedInArgument: true\n },\n handler: ({ parser, funcName }, args) => {\n const body = args[0];\n const prevAtomType = parser.prevAtomType;\n const next = parser.gullet.future().text;\n return {\n type: \"operatorname\",\n mode: parser.mode,\n body: ordargument(body),\n alwaysHandleSupSub: (funcName === \"\\\\operatornamewithlimits\"),\n limits: false,\n parentIsSupSub: false,\n isFollowedByDelimiter: isDelimiter(next),\n needsLeadingSpace: prevAtomType.length > 0 && ordTypes.includes(prevAtomType)\n };\n },\n mathmlBuilder: mathmlBuilder$1\n});\n\ndefineMacro(\"\\\\operatorname\",\n \"\\\\@ifstar\\\\operatornamewithlimits\\\\operatorname@\");\n\ndefineFunctionBuilders({\n type: \"ordgroup\",\n mathmlBuilder(group, style) {\n return buildExpressionRow(group.body, style, group.semisimple);\n }\n});\n\ndefineFunction({\n type: \"phantom\",\n names: [\"\\\\phantom\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: ({ parser }, args) => {\n const body = args[0];\n return {\n type: \"phantom\",\n mode: parser.mode,\n body: ordargument(body)\n };\n },\n mathmlBuilder: (group, style) => {\n const inner = buildExpression(group.body, style);\n return new mathMLTree.MathNode(\"mphantom\", inner);\n }\n});\n\ndefineFunction({\n type: \"hphantom\",\n names: [\"\\\\hphantom\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: ({ parser }, args) => {\n const body = args[0];\n return {\n type: \"hphantom\",\n mode: parser.mode,\n body\n };\n },\n mathmlBuilder: (group, style) => {\n const inner = buildExpression(ordargument(group.body), style);\n const phantom = new mathMLTree.MathNode(\"mphantom\", inner);\n const node = new mathMLTree.MathNode(\"mpadded\", [phantom]);\n node.setAttribute(\"height\", \"0px\");\n node.setAttribute(\"depth\", \"0px\");\n return node;\n }\n});\n\ndefineFunction({\n type: \"vphantom\",\n names: [\"\\\\vphantom\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: ({ parser }, args) => {\n const body = args[0];\n return {\n type: \"vphantom\",\n mode: parser.mode,\n body\n };\n },\n mathmlBuilder: (group, style) => {\n const inner = buildExpression(ordargument(group.body), style);\n const phantom = new mathMLTree.MathNode(\"mphantom\", inner);\n const node = new mathMLTree.MathNode(\"mpadded\", [phantom]);\n node.setAttribute(\"width\", \"0px\");\n return node;\n }\n});\n\n// In LaTeX, \\pmb is a simulation of bold font.\n// The version of \\pmb in ambsy.sty works by typesetting three copies of the argument\n// with small offsets. We use CSS font-weight:bold.\n\ndefineFunction({\n type: \"pmb\",\n names: [\"\\\\pmb\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler({ parser }, args) {\n return {\n type: \"pmb\",\n mode: parser.mode,\n body: ordargument(args[0])\n }\n },\n mathmlBuilder(group, style) {\n const inner = buildExpression(group.body, style);\n // Wrap with an <mstyle> element.\n const node = wrapWithMstyle(inner);\n node.setAttribute(\"style\", \"font-weight:bold\");\n return node\n }\n});\n\n// \\raise, \\lower, and \\raisebox\n\nconst mathmlBuilder = (group, style) => {\n const newStyle = style.withLevel(StyleLevel.TEXT);\n const node = new mathMLTree.MathNode(\"mpadded\", [buildGroup$1(group.body, newStyle)]);\n const dy = calculateSize(group.dy, style);\n node.setAttribute(\"voffset\", dy.number + dy.unit);\n // Add padding, which acts to increase height in Chromium.\n // TODO: Figure out some way to change height in Firefox w/o breaking Chromium.\n if (dy.number > 0) {\n node.style.padding = dy.number + dy.unit + \" 0 0 0\";\n } else {\n node.style.padding = \"0 0 \" + Math.abs(dy.number) + dy.unit + \" 0\";\n }\n return node\n};\n\ndefineFunction({\n type: \"raise\",\n names: [\"\\\\raise\", \"\\\\lower\"],\n props: {\n numArgs: 2,\n argTypes: [\"size\", \"primitive\"],\n primitive: true\n },\n handler({ parser, funcName }, args) {\n const amount = assertNodeType(args[0], \"size\").value;\n if (funcName === \"\\\\lower\") { amount.number *= -1; }\n const body = args[1];\n return {\n type: \"raise\",\n mode: parser.mode,\n dy: amount,\n body\n };\n },\n mathmlBuilder\n});\n\n\ndefineFunction({\n type: \"raise\",\n names: [\"\\\\raisebox\"],\n props: {\n numArgs: 2,\n argTypes: [\"size\", \"hbox\"],\n allowedInText: true\n },\n handler({ parser, funcName }, args) {\n const amount = assertNodeType(args[0], \"size\").value;\n const body = args[1];\n return {\n type: \"raise\",\n mode: parser.mode,\n dy: amount,\n body\n };\n },\n mathmlBuilder\n});\n\ndefineFunction({\n type: \"ref\",\n names: [\"\\\\ref\", \"\\\\eqref\"],\n props: {\n numArgs: 1,\n argTypes: [\"raw\"]\n },\n handler({ parser, funcName }, args) {\n return {\n type: \"ref\",\n mode: parser.mode,\n funcName,\n string: args[0].string.replace(invalidIdRegEx, \"\")\n };\n },\n mathmlBuilder(group, style) {\n // Create an empty <a> node. Set a class and an href attribute.\n // The post-processor will populate with the target's tag or equation number.\n const classes = group.funcName === \"\\\\ref\" ? [\"tml-ref\"] : [\"tml-ref\", \"tml-eqref\"];\n return new AnchorNode(\"#\" + group.string, classes, null)\n }\n});\n\ndefineFunction({\n type: \"reflect\",\n names: [\"\\\\reflectbox\"],\n props: {\n numArgs: 1,\n argTypes: [\"hbox\"],\n allowedInText: true\n },\n handler({ parser }, args) {\n return {\n type: \"reflect\",\n mode: parser.mode,\n body: args[0]\n };\n },\n mathmlBuilder(group, style) {\n const node = buildGroup$1(group.body, style);\n node.style.transform = \"scaleX(-1)\";\n return node\n }\n});\n\ndefineFunction({\n type: \"internal\",\n names: [\"\\\\relax\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInArgument: true\n },\n handler({ parser }) {\n return {\n type: \"internal\",\n mode: parser.mode\n };\n }\n});\n\ndefineFunction({\n type: \"rule\",\n names: [\"\\\\rule\"],\n props: {\n numArgs: 2,\n numOptionalArgs: 1,\n allowedInText: true,\n allowedInMath: true,\n argTypes: [\"size\", \"size\", \"size\"]\n },\n handler({ parser }, args, optArgs) {\n const shift = optArgs[0];\n const width = assertNodeType(args[0], \"size\");\n const height = assertNodeType(args[1], \"size\");\n return {\n type: \"rule\",\n mode: parser.mode,\n shift: shift && assertNodeType(shift, \"size\").value,\n width: width.value,\n height: height.value\n };\n },\n mathmlBuilder(group, style) {\n const width = calculateSize(group.width, style);\n const height = calculateSize(group.height, style);\n const shift = group.shift\n ? calculateSize(group.shift, style)\n : { number: 0, unit: \"em\" };\n const color = (style.color && style.getColor()) || \"black\";\n\n const rule = new mathMLTree.MathNode(\"mspace\");\n if (width.number > 0 && height.number > 0) {\n rule.setAttribute(\"mathbackground\", color);\n }\n rule.setAttribute(\"width\", width.number + width.unit);\n rule.setAttribute(\"height\", height.number + height.unit);\n if (shift.number === 0) { return rule }\n\n const wrapper = new mathMLTree.MathNode(\"mpadded\", [rule]);\n if (shift.number >= 0) {\n wrapper.setAttribute(\"height\", \"+\" + shift.number + shift.unit);\n } else {\n wrapper.setAttribute(\"height\", shift.number + shift.unit);\n wrapper.setAttribute(\"depth\", \"+\" + -shift.number + shift.unit);\n }\n wrapper.setAttribute(\"voffset\", shift.number + shift.unit);\n return wrapper;\n }\n});\n\nconst numRegEx = /^[0-9]$/;\nconst unicodeNumSubs = {\n '0': '₀',\n '1': '₁',\n '2': '₂',\n '3': '₃',\n '4': '₄',\n '5': '₅',\n '6': '₆',\n '7': '₇',\n '8': '₈',\n '9': '₉'\n};\nconst unicodeNumSups = {\n '0': '⁰',\n '1': '¹',\n '2': '²',\n '3': '³',\n '4': '⁴',\n '5': '⁵',\n '6': '⁶',\n '7': '⁷',\n '8': '⁸',\n '9': '⁹'\n};\n\ndefineFunction({\n type: \"sfrac\",\n names: [\"\\\\sfrac\"],\n props: {\n numArgs: 2,\n allowedInText: true,\n allowedInMath: true\n },\n handler({ parser }, args) {\n let numerator = \"\";\n for (const node of args[0].body) {\n if (node.type !== \"textord\" || !numRegEx.test(node.text)) {\n throw new ParseError(\"Numerator must be an integer.\", node)\n }\n numerator += node.text;\n }\n let denominator = \"\";\n for (const node of args[1].body) {\n if (node.type !== \"textord\" || !numRegEx.test(node.text)) {\n throw new ParseError(\"Denominator must be an integer.\", node)\n }\n denominator += node.text;\n }\n return {\n type: \"sfrac\",\n mode: parser.mode,\n numerator,\n denominator\n };\n },\n mathmlBuilder(group, style) {\n const numerator = group.numerator.split('').map(c => unicodeNumSups[c]).join('');\n const denominator = group.denominator.split('').map(c => unicodeNumSubs[c]).join('');\n // Use a fraction slash.\n const text = new mathMLTree.TextNode(numerator + \"\\u2044\" + denominator, group.mode, style);\n return new mathMLTree.MathNode(\"mn\", [text], [\"special-fraction\"])\n }\n});\n\n// The size mappings are taken from TeX with \\normalsize=10pt.\n// We don't have to track script level. MathML does that.\nconst sizeMap = {\n \"\\\\tiny\": 0.5,\n \"\\\\sixptsize\": 0.6,\n \"\\\\Tiny\": 0.6,\n \"\\\\scriptsize\": 0.7,\n \"\\\\footnotesize\": 0.8,\n \"\\\\small\": 0.9,\n \"\\\\normalsize\": 1.0,\n \"\\\\large\": 1.2,\n \"\\\\Large\": 1.44,\n \"\\\\LARGE\": 1.728,\n \"\\\\huge\": 2.074,\n \"\\\\Huge\": 2.488\n};\n\ndefineFunction({\n type: \"sizing\",\n names: [\n \"\\\\tiny\",\n \"\\\\sixptsize\",\n \"\\\\Tiny\",\n \"\\\\scriptsize\",\n \"\\\\footnotesize\",\n \"\\\\small\",\n \"\\\\normalsize\",\n \"\\\\large\",\n \"\\\\Large\",\n \"\\\\LARGE\",\n \"\\\\huge\",\n \"\\\\Huge\"\n ],\n props: {\n numArgs: 0,\n allowedInText: true\n },\n handler: ({ breakOnTokenText, funcName, parser }, args) => {\n if (parser.settings.strict && parser.mode === \"math\") {\n // eslint-disable-next-line no-console\n console.log(`Temml strict-mode warning: Command ${funcName} is invalid in math mode.`);\n }\n const body = parser.parseExpression(false, breakOnTokenText, true);\n return {\n type: \"sizing\",\n mode: parser.mode,\n funcName,\n body\n };\n },\n mathmlBuilder: (group, style) => {\n const newStyle = style.withFontSize(sizeMap[group.funcName]);\n const inner = buildExpression(group.body, newStyle);\n // Wrap with an <mstyle> element.\n const node = wrapWithMstyle(inner);\n const factor = (sizeMap[group.funcName] / style.fontSize).toFixed(4);\n node.setAttribute(\"mathsize\", factor + \"em\");\n return node;\n }\n});\n\n// smash, with optional [tb], as in AMS\n\ndefineFunction({\n type: \"smash\",\n names: [\"\\\\smash\"],\n props: {\n numArgs: 1,\n numOptionalArgs: 1,\n allowedInText: true\n },\n handler: ({ parser }, args, optArgs) => {\n let smashHeight = false;\n let smashDepth = false;\n const tbArg = optArgs[0] && assertNodeType(optArgs[0], \"ordgroup\");\n if (tbArg) {\n // Optional [tb] argument is engaged.\n // ref: amsmath: \\renewcommand{\\smash}[1][tb]{%\n // def\\mb@t{\\ht}\\def\\mb@b{\\dp}\\def\\mb@tb{\\ht\\z@\\z@\\dp}%\n let letter = \"\";\n for (let i = 0; i < tbArg.body.length; ++i) {\n const node = tbArg.body[i];\n // TODO: Write an AssertSymbolNode\n letter = node.text;\n if (letter === \"t\") {\n smashHeight = true;\n } else if (letter === \"b\") {\n smashDepth = true;\n } else {\n smashHeight = false;\n smashDepth = false;\n break;\n }\n }\n } else {\n smashHeight = true;\n smashDepth = true;\n }\n\n const body = args[0];\n return {\n type: \"smash\",\n mode: parser.mode,\n body,\n smashHeight,\n smashDepth\n };\n },\n mathmlBuilder: (group, style) => {\n const node = new mathMLTree.MathNode(\"mpadded\", [buildGroup$1(group.body, style)]);\n\n if (group.smashHeight) {\n node.setAttribute(\"height\", \"0px\");\n }\n\n if (group.smashDepth) {\n node.setAttribute(\"depth\", \"0px\");\n }\n\n return node;\n }\n});\n\n// Letters that are x-height w/o a descender.\nconst xHeights = ['a', 'c', 'e', 'ı', 'm', 'n', 'o', 'r', 's', 'u', 'v', 'w', 'x', 'z', 'α',\n 'ε', 'ι', 'κ', 'ν', 'ο', 'π', 'σ', 'τ', 'υ', 'ω', '\\\\alpha', '\\\\epsilon', \"\\\\iota\",\n '\\\\kappa', '\\\\nu', '\\\\omega', '\\\\pi', '\\\\tau', '\\\\omega'];\n\ndefineFunction({\n type: \"sqrt\",\n names: [\"\\\\sqrt\"],\n props: {\n numArgs: 1,\n numOptionalArgs: 1\n },\n handler({ parser }, args, optArgs) {\n const index = optArgs[0];\n const body = args[0];\n // Check if the body consists entirely of an x-height letter.\n // TODO: Remove this check after Chromium is fixed.\n if (body.body && body.body.length === 1 && body.body[0].text &&\n xHeights.includes(body.body[0].text)) {\n // Chromium does not put enough space above an x-height letter.\n // Insert a strut.\n body.body.push({\n \"type\": \"rule\",\n \"mode\": \"math\",\n \"shift\": null,\n \"width\": { \"number\": 0, \"unit\": \"pt\" },\n \"height\": { \"number\": 0.5, \"unit\": \"em\" }\n });\n }\n return {\n type: \"sqrt\",\n mode: parser.mode,\n body,\n index\n };\n },\n mathmlBuilder(group, style) {\n const { body, index } = group;\n return index\n ? new mathMLTree.MathNode(\"mroot\", [\n buildGroup$1(body, style),\n buildGroup$1(index, style.incrementLevel())\n ])\n : new mathMLTree.MathNode(\"msqrt\", [buildGroup$1(body, style)]);\n }\n});\n\nconst styleMap = {\n display: 0,\n text: 1,\n script: 2,\n scriptscript: 3\n};\n\nconst styleAttributes = {\n display: [\"0\", \"true\"],\n text: [\"0\", \"false\"],\n script: [\"1\", \"false\"],\n scriptscript: [\"2\", \"false\"]\n};\n\ndefineFunction({\n type: \"styling\",\n names: [\"\\\\displaystyle\", \"\\\\textstyle\", \"\\\\scriptstyle\", \"\\\\scriptscriptstyle\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n handler({ breakOnTokenText, funcName, parser }, args) {\n // parse out the implicit body\n const body = parser.parseExpression(true, breakOnTokenText, true);\n\n const scriptLevel = funcName.slice(1, funcName.length - 5);\n return {\n type: \"styling\",\n mode: parser.mode,\n // Figure out what scriptLevel to use by pulling out the scriptLevel from\n // the function name\n scriptLevel,\n body\n };\n },\n mathmlBuilder(group, style) {\n // Figure out what scriptLevel we're changing to.\n const newStyle = style.withLevel(styleMap[group.scriptLevel]);\n // The style argument in the next line does NOT directly set a MathML script level.\n // It just tracks the style level, in case we need to know it for supsub or mathchoice.\n const inner = buildExpression(group.body, newStyle);\n // Wrap with an <mstyle> element.\n const node = wrapWithMstyle(inner);\n\n const attr = styleAttributes[group.scriptLevel];\n\n // Here is where we set the MathML script level.\n node.setAttribute(\"scriptlevel\", attr[0]);\n node.setAttribute(\"displaystyle\", attr[1]);\n\n return node;\n }\n});\n\n/**\n * Sometimes, groups perform special rules when they have superscripts or\n * subscripts attached to them. This function lets the `supsub` group know that\n * Sometimes, groups perform special rules when they have superscripts or\n * its inner element should handle the superscripts and subscripts instead of\n * handling them itself.\n */\n\n// Helpers\nconst symbolRegEx = /^m(over|under|underover)$/;\n\n// From the KaTeX font metrics, identify letters that encroach on a superscript.\nconst smallPad = \"DHKLUcegorsuvxyzΠΥΨαδηιμνοτυχϵ\";\nconst mediumPad = \"BCEFGIMNOPQRSTXZlpqtwΓΘΞΣΦΩβεζθξρςφψϑϕϱ\";\nconst largePad = \"AJdfΔΛ\";\n\n// Super scripts and subscripts, whose precise placement can depend on other\n// functions that precede them.\ndefineFunctionBuilders({\n type: \"supsub\",\n mathmlBuilder(group, style) {\n // Is the inner group a relevant horizontal brace?\n let isBrace = false;\n let isOver;\n let isSup;\n let appendApplyFunction = false;\n let appendSpace = false;\n let needsLeadingSpace = false;\n\n if (group.base && group.base.type === \"horizBrace\") {\n isSup = !!group.sup;\n if (isSup === group.base.isOver) {\n isBrace = true;\n isOver = group.base.isOver;\n }\n }\n\n if (group.base && !group.stack &&\n (group.base.type === \"op\" || group.base.type === \"operatorname\")) {\n group.base.parentIsSupSub = true;\n appendApplyFunction = !group.base.symbol;\n appendSpace = appendApplyFunction && !group.isFollowedByDelimiter;\n needsLeadingSpace = group.base.needsLeadingSpace;\n }\n\n const children = group.stack && group.base.body.length === 1\n ? [buildGroup$1(group.base.body[0], style)]\n : [buildGroup$1(group.base, style)];\n\n // Note regarding scriptstyle level.\n // (Sub|super)scripts should not shrink beyond MathML scriptlevel 2 aka \\scriptscriptstyle\n // Ref: https://w3c.github.io/mathml-core/#the-displaystyle-and-scriptlevel-attributes\n // (BTW, MathML scriptlevel 2 is equal to Temml level 3.)\n // But Chromium continues to shrink the (sub|super)scripts. So we explicitly set scriptlevel 2.\n\n const childStyle = style.inSubOrSup();\n if (group.sub) {\n const sub = buildGroup$1(group.sub, childStyle);\n if (style.level === 3) { sub.setAttribute(\"scriptlevel\", \"2\"); }\n children.push(sub);\n }\n\n if (group.sup) {\n const sup = buildGroup$1(group.sup, childStyle);\n if (style.level === 3) { sup.setAttribute(\"scriptlevel\", \"2\"); }\n if (group.base && group.base.text && group.base.text.length === 1) {\n // Make an italic correction on the superscript.\n const text = group.base.text;\n if (smallPad.indexOf(text) > -1) {\n sup.classes.push(\"tml-sml-pad\");\n } else if (mediumPad.indexOf(text) > -1) {\n sup.classes.push(\"tml-med-pad\");\n } else if (largePad.indexOf(text) > -1) {\n sup.classes.push(\"tml-lrg-pad\");\n }\n }\n children.push(sup);\n }\n\n let nodeType;\n if (isBrace) {\n nodeType = isOver ? \"mover\" : \"munder\";\n } else if (!group.sub) {\n const base = group.base;\n if (\n base &&\n base.type === \"op\" &&\n base.limits &&\n (style.level === StyleLevel.DISPLAY || base.alwaysHandleSupSub)\n ) {\n nodeType = \"mover\";\n } else if (\n base &&\n base.type === \"operatorname\" &&\n base.alwaysHandleSupSub &&\n (base.limits || style.level === StyleLevel.DISPLAY)\n ) {\n nodeType = \"mover\";\n } else {\n nodeType = \"msup\";\n }\n } else if (!group.sup) {\n const base = group.base;\n if (group.stack) {\n nodeType = \"munder\";\n } else if (\n base &&\n base.type === \"op\" &&\n base.limits &&\n (style.level === StyleLevel.DISPLAY || base.alwaysHandleSupSub)\n ) {\n nodeType = \"munder\";\n } else if (\n base &&\n base.type === \"operatorname\" &&\n base.alwaysHandleSupSub &&\n (base.limits || style.level === StyleLevel.DISPLAY)\n ) {\n nodeType = \"munder\";\n } else {\n nodeType = \"msub\";\n }\n } else {\n const base = group.base;\n if (base && ((base.type === \"op\" && base.limits) || base.type === \"multiscript\") &&\n (style.level === StyleLevel.DISPLAY || base.alwaysHandleSupSub)\n ) {\n nodeType = \"munderover\";\n } else if (\n base &&\n base.type === \"operatorname\" &&\n base.alwaysHandleSupSub &&\n (style.level === StyleLevel.DISPLAY || base.limits)\n ) {\n nodeType = \"munderover\";\n } else {\n nodeType = \"msubsup\";\n }\n }\n\n let node = new mathMLTree.MathNode(nodeType, children);\n if (appendApplyFunction) {\n // Append an <mo>&ApplyFunction;</mo>.\n // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4\n const operator = new mathMLTree.MathNode(\"mo\", [makeText(\"\\u2061\", \"text\")]);\n if (needsLeadingSpace) {\n const space = new mathMLTree.MathNode(\"mspace\");\n space.setAttribute(\"width\", \"0.1667em\"); // thin space.\n node = mathMLTree.newDocumentFragment([space, node, operator]);\n } else {\n node = mathMLTree.newDocumentFragment([node, operator]);\n }\n if (appendSpace) {\n const space = new mathMLTree.MathNode(\"mspace\");\n space.setAttribute(\"width\", \"0.1667em\"); // thin space.\n node.children.push(space);\n }\n } else if (symbolRegEx.test(nodeType)) {\n // Wrap in a <mrow>. Otherwise Firefox stretchy parens will not stretch to include limits.\n node = new mathMLTree.MathNode(\"mrow\", [node]);\n }\n\n return node\n }\n});\n\n// Operator ParseNodes created in Parser.js from symbol Groups in src/symbols.js.\n\nconst short = [\"\\\\shortmid\", \"\\\\nshortmid\", \"\\\\shortparallel\",\n \"\\\\nshortparallel\", \"\\\\smallsetminus\"];\n\nconst arrows = [\"\\\\Rsh\", \"\\\\Lsh\", \"\\\\restriction\"];\n\nconst isArrow = str => {\n if (str.length === 1) {\n const codePoint = str.codePointAt(0);\n return (0x218f < codePoint && codePoint < 0x2200)\n }\n return str.indexOf(\"arrow\") > -1 || str.indexOf(\"harpoon\") > -1 || arrows.includes(str)\n};\n\ndefineFunctionBuilders({\n type: \"atom\",\n mathmlBuilder(group, style) {\n const node = new mathMLTree.MathNode(\"mo\", [makeText(group.text, group.mode)]);\n if (group.family === \"punct\") {\n node.setAttribute(\"separator\", \"true\");\n } else if (group.family === \"open\" || group.family === \"close\") {\n // Delims built here should not stretch vertically.\n // See delimsizing.js for stretchy delims.\n if (group.family === \"open\") {\n node.setAttribute(\"form\", \"prefix\");\n // Set an explicit attribute for stretch. Otherwise Firefox may do it wrong.\n node.setAttribute(\"stretchy\", \"false\");\n } else if (group.family === \"close\") {\n node.setAttribute(\"form\", \"postfix\");\n node.setAttribute(\"stretchy\", \"false\");\n }\n } else if (group.text === \"\\\\mid\") {\n // Firefox messes up this spacing if at the end of an <mrow>. See it explicitly.\n node.setAttribute(\"lspace\", \"0.22em\"); // medium space\n node.setAttribute(\"rspace\", \"0.22em\");\n node.setAttribute(\"stretchy\", \"false\");\n } else if (group.family === \"rel\" && isArrow(group.text)) {\n node.setAttribute(\"stretchy\", \"false\");\n } else if (short.includes(group.text)) {\n node.setAttribute(\"mathsize\", \"70%\");\n } else if (group.text === \":\") {\n // \":\" is not in the MathML operator dictionary. Give it BIN spacing.\n node.attributes.lspace = \"0.2222em\";\n node.attributes.rspace = \"0.2222em\";\n } else if (group.needsSpacing) {\n // Fix a MathML bug that occurs when a <mo> is between two <mtext> elements.\n if (group.family === \"bin\") {\n return new mathMLTree.MathNode(\"mrow\", [padding$1(0.222), node, padding$1(0.222)])\n } else {\n // REL spacing\n return new mathMLTree.MathNode(\"mrow\", [padding$1(0.2778), node, padding$1(0.2778)])\n }\n }\n return node;\n }\n});\n\n/**\n * Maps TeX font commands to \"mathvariant\" attribute in buildMathML.js\n */\nconst fontMap = {\n // styles\n mathbf: \"bold\",\n mathrm: \"normal\",\n textit: \"italic\",\n mathit: \"italic\",\n mathnormal: \"italic\",\n\n // families\n mathbb: \"double-struck\",\n mathcal: \"script\",\n mathfrak: \"fraktur\",\n mathscr: \"script\",\n mathsf: \"sans-serif\",\n mathtt: \"monospace\"\n};\n\n/**\n * Returns the math variant as a string or null if none is required.\n */\nconst getVariant = function(group, style) {\n // Handle font specifiers as best we can.\n // Chromium does not support the MathML mathvariant attribute.\n // So we'll use Unicode replacement characters instead.\n // But first, determine the math variant.\n\n // Deal with the \\textit, \\textbf, etc., functions.\n if (style.fontFamily === \"texttt\") {\n return \"monospace\"\n } else if (style.fontFamily === \"textsc\") {\n return \"normal\"; // handled via character substitution in symbolsOrd.js.\n } else if (style.fontFamily === \"textsf\") {\n if (style.fontShape === \"textit\" && style.fontWeight === \"textbf\") {\n return \"sans-serif-bold-italic\"\n } else if (style.fontShape === \"textit\") {\n return \"sans-serif-italic\"\n } else if (style.fontWeight === \"textbf\") {\n return \"sans-serif-bold\"\n } else {\n return \"sans-serif\"\n }\n } else if (style.fontShape === \"textit\" && style.fontWeight === \"textbf\") {\n return \"bold-italic\"\n } else if (style.fontShape === \"textit\") {\n return \"italic\"\n } else if (style.fontWeight === \"textbf\") {\n return \"bold\"\n }\n\n // Deal with the \\mathit, mathbf, etc, functions.\n const font = style.font;\n if (!font || font === \"mathnormal\") {\n return null\n }\n\n const mode = group.mode;\n switch (font) {\n case \"mathit\":\n return \"italic\"\n case \"mathrm\": {\n const codePoint = group.text.codePointAt(0);\n // LaTeX \\mathrm returns italic for Greek characters.\n return (0x03ab < codePoint && codePoint < 0x03cf) ? \"italic\" : \"normal\"\n }\n case \"greekItalic\":\n return \"italic\"\n case \"up@greek\":\n return \"normal\"\n case \"boldsymbol\":\n case \"mathboldsymbol\":\n return \"bold-italic\"\n case \"mathbf\":\n return \"bold\"\n case \"mathbb\":\n return \"double-struck\"\n case \"mathfrak\":\n return \"fraktur\"\n case \"mathscr\":\n case \"mathcal\":\n return \"script\"\n case \"mathsf\":\n return \"sans-serif\"\n case \"mathsfit\":\n return \"sans-serif-italic\"\n case \"mathtt\":\n return \"monospace\"\n }\n\n let text = group.text;\n if (symbols[mode][text] && symbols[mode][text].replace) {\n text = symbols[mode][text].replace;\n }\n\n return Object.prototype.hasOwnProperty.call(fontMap, font) ? fontMap[font] : null\n};\n\n// Chromium does not support the MathML `mathvariant` attribute.\n// Instead, we replace ASCII characters with Unicode characters that\n// are defined in the font as bold, italic, double-struck, etc.\n// This module identifies those Unicode code points.\n\n// First, a few helpers.\nconst script = Object.freeze({\n B: 0x20EA, // Offset from ASCII B to Unicode script B\n E: 0x20EB,\n F: 0x20EB,\n H: 0x20C3,\n I: 0x20C7,\n L: 0x20C6,\n M: 0x20E6,\n R: 0x20C9,\n e: 0x20CA,\n g: 0x20A3,\n o: 0x20C5\n});\n\nconst frak = Object.freeze({\n C: 0x20EA,\n H: 0x20C4,\n I: 0x20C8,\n R: 0x20CA,\n Z: 0x20CE\n});\n\nconst bbb = Object.freeze({\n C: 0x20BF, // blackboard bold\n H: 0x20C5,\n N: 0x20C7,\n P: 0x20C9,\n Q: 0x20C9,\n R: 0x20CB,\n Z: 0x20CA\n});\n\nconst bold = Object.freeze({\n \"\\u03f5\": 0x1D2E7, // lunate epsilon\n \"\\u03d1\": 0x1D30C, // vartheta\n \"\\u03f0\": 0x1D2EE, // varkappa\n \"\\u03c6\": 0x1D319, // varphi\n \"\\u03f1\": 0x1D2EF, // varrho\n \"\\u03d6\": 0x1D30B // varpi\n});\n\nconst boldItalic = Object.freeze({\n \"\\u03f5\": 0x1D35B, // lunate epsilon\n \"\\u03d1\": 0x1D380, // vartheta\n \"\\u03f0\": 0x1D362, // varkappa\n \"\\u03c6\": 0x1D38D, // varphi\n \"\\u03f1\": 0x1D363, // varrho\n \"\\u03d6\": 0x1D37F // varpi\n});\n\nconst boldsf = Object.freeze({\n \"\\u03f5\": 0x1D395, // lunate epsilon\n \"\\u03d1\": 0x1D3BA, // vartheta\n \"\\u03f0\": 0x1D39C, // varkappa\n \"\\u03c6\": 0x1D3C7, // varphi\n \"\\u03f1\": 0x1D39D, // varrho\n \"\\u03d6\": 0x1D3B9 // varpi\n});\n\nconst bisf = Object.freeze({\n \"\\u03f5\": 0x1D3CF, // lunate epsilon\n \"\\u03d1\": 0x1D3F4, // vartheta\n \"\\u03f0\": 0x1D3D6, // varkappa\n \"\\u03c6\": 0x1D401, // varphi\n \"\\u03f1\": 0x1D3D7, // varrho\n \"\\u03d6\": 0x1D3F3 // varpi\n});\n\n// Code point offsets below are derived from https://www.unicode.org/charts/PDF/U1D400.pdf\nconst offset = Object.freeze({\n upperCaseLatin: { // A-Z\n \"normal\": ch => { return 0 },\n \"bold\": ch => { return 0x1D3BF },\n \"italic\": ch => { return 0x1D3F3 },\n \"bold-italic\": ch => { return 0x1D427 },\n \"script\": ch => { return script[ch] || 0x1D45B },\n \"script-bold\": ch => { return 0x1D48F },\n \"fraktur\": ch => { return frak[ch] || 0x1D4C3 },\n \"fraktur-bold\": ch => { return 0x1D52B },\n \"double-struck\": ch => { return bbb[ch] || 0x1D4F7 },\n \"sans-serif\": ch => { return 0x1D55F },\n \"sans-serif-bold\": ch => { return 0x1D593 },\n \"sans-serif-italic\": ch => { return 0x1D5C7 },\n \"sans-serif-bold-italic\": ch => { return 0x1D63C },\n \"monospace\": ch => { return 0x1D62F }\n },\n lowerCaseLatin: { // a-z\n \"normal\": ch => { return 0 },\n \"bold\": ch => { return 0x1D3B9 },\n \"italic\": ch => { return ch === \"h\" ? 0x20A6 : 0x1D3ED },\n \"bold-italic\": ch => { return 0x1D421 },\n \"script\": ch => { return script[ch] || 0x1D455 },\n \"script-bold\": ch => { return 0x1D489 },\n \"fraktur\": ch => { return 0x1D4BD },\n \"fraktur-bold\": ch => { return 0x1D525 },\n \"double-struck\": ch => { return 0x1D4F1 },\n \"sans-serif\": ch => { return 0x1D559 },\n \"sans-serif-bold\": ch => { return 0x1D58D },\n \"sans-serif-italic\": ch => { return 0x1D5C1 },\n \"sans-serif-bold-italic\": ch => { return 0x1D5F5 },\n \"monospace\": ch => { return 0x1D629 }\n },\n upperCaseGreek: { // A-Ω\n \"normal\": ch => { return 0 },\n \"bold\": ch => { return 0x1D317 },\n \"italic\": ch => { return 0x1D351 },\n // \\boldsymbol actually returns upright bold for upperCaseGreek\n \"bold-italic\": ch => { return 0x1D317 },\n \"script\": ch => { return 0 },\n \"script-bold\": ch => { return 0 },\n \"fraktur\": ch => { return 0 },\n \"fraktur-bold\": ch => { return 0 },\n \"double-struck\": ch => { return 0 },\n // Unicode has no code points for regular-weight san-serif Greek. Use bold.\n \"sans-serif\": ch => { return 0x1D3C5 },\n \"sans-serif-bold\": ch => { return 0x1D3C5 },\n \"sans-serif-italic\": ch => { return 0 },\n \"sans-serif-bold-italic\": ch => { return 0x1D3FF },\n \"monospace\": ch => { return 0 }\n },\n lowerCaseGreek: { // α-ω\n \"normal\": ch => { return 0 },\n \"bold\": ch => { return 0x1D311 },\n \"italic\": ch => { return 0x1D34B },\n \"bold-italic\": ch => { return ch === \"\\u03d5\" ? 0x1D37E : 0x1D385 },\n \"script\": ch => { return 0 },\n \"script-bold\": ch => { return 0 },\n \"fraktur\": ch => { return 0 },\n \"fraktur-bold\": ch => { return 0 },\n \"double-struck\": ch => { return 0 },\n // Unicode has no code points for regular-weight san-serif Greek. Use bold.\n \"sans-serif\": ch => { return 0x1D3BF },\n \"sans-serif-bold\": ch => { return 0x1D3BF },\n \"sans-serif-italic\": ch => { return 0 },\n \"sans-serif-bold-italic\": ch => { return 0x1D3F9 },\n \"monospace\": ch => { return 0 }\n },\n varGreek: { // \\varGamma, etc\n \"normal\": ch => { return 0 },\n \"bold\": ch => { return bold[ch] || -51 },\n \"italic\": ch => { return 0 },\n \"bold-italic\": ch => { return boldItalic[ch] || 0x3A },\n \"script\": ch => { return 0 },\n \"script-bold\": ch => { return 0 },\n \"fraktur\": ch => { return 0 },\n \"fraktur-bold\": ch => { return 0 },\n \"double-struck\": ch => { return 0 },\n \"sans-serif\": ch => { return boldsf[ch] || 0x74 },\n \"sans-serif-bold\": ch => { return boldsf[ch] || 0x74 },\n \"sans-serif-italic\": ch => { return 0 },\n \"sans-serif-bold-italic\": ch => { return bisf[ch] || 0xAE },\n \"monospace\": ch => { return 0 }\n },\n numeral: { // 0-9\n \"normal\": ch => { return 0 },\n \"bold\": ch => { return 0x1D79E },\n \"italic\": ch => { return 0 },\n \"bold-italic\": ch => { return 0 },\n \"script\": ch => { return 0 },\n \"script-bold\": ch => { return 0 },\n \"fraktur\": ch => { return 0 },\n \"fraktur-bold\": ch => { return 0 },\n \"double-struck\": ch => { return 0x1D7A8 },\n \"sans-serif\": ch => { return 0x1D7B2 },\n \"sans-serif-bold\": ch => { return 0x1D7BC },\n \"sans-serif-italic\": ch => { return 0 },\n \"sans-serif-bold-italic\": ch => { return 0 },\n \"monospace\": ch => { return 0x1D7C6 }\n }\n});\n\nconst variantChar = (ch, variant) => {\n const codePoint = ch.codePointAt(0);\n const block = 0x40 < codePoint && codePoint < 0x5b\n ? \"upperCaseLatin\"\n : 0x60 < codePoint && codePoint < 0x7b\n ? \"lowerCaseLatin\"\n : (0x390 < codePoint && codePoint < 0x3AA)\n ? \"upperCaseGreek\"\n : 0x3B0 < codePoint && codePoint < 0x3CA || ch === \"\\u03d5\"\n ? \"lowerCaseGreek\"\n : 0x1D6E1 < codePoint && codePoint < 0x1D6FC || bold[ch]\n ? \"varGreek\"\n : (0x2F < codePoint && codePoint < 0x3A)\n ? \"numeral\"\n : \"other\";\n return block === \"other\"\n ? ch\n : String.fromCodePoint(codePoint + offset[block][variant](ch))\n};\n\nconst smallCaps = Object.freeze({\n a: \"ᴀ\",\n b: \"ʙ\",\n c: \"\",\n d: \"ᴅ\",\n e: \"ᴇ\",\n f: \"ꜰ\",\n g: \"ɢ\",\n h: \"ʜ\",\n i: \"ɪ\",\n j: \"ᴊ\",\n k: \"ᴋ\",\n l: \"ʟ\",\n m: \"ᴍ\",\n n: \"ɴ\",\n o: \"\",\n p: \"ᴘ\",\n q: \"ǫ\",\n r: \"ʀ\",\n s: \"s\",\n t: \"ᴛ\",\n u: \"\",\n v: \"\",\n w: \"\",\n x: \"x\",\n y: \"ʏ\",\n z: \"\"\n});\n\n// \"mathord\" and \"textord\" ParseNodes created in Parser.js from symbol Groups in\n// src/symbols.js.\n\nconst numberRegEx = /^\\d(?:[\\d,.]*\\d)?$/;\nconst latinRegEx = /[A-Ba-z]/;\nconst primes = new Set([\"\\\\prime\", \"\\\\dprime\", \"\\\\trprime\", \"\\\\qprime\",\n \"\\\\backprime\", \"\\\\backdprime\", \"\\\\backtrprime\"]);\n\nconst italicNumber = (text, variant, tag) => {\n const mn = new mathMLTree.MathNode(tag, [text]);\n const wrapper = new mathMLTree.MathNode(\"mstyle\", [mn]);\n wrapper.style[\"font-style\"] = \"italic\";\n wrapper.style[\"font-family\"] = \"Cambria, 'Times New Roman', serif\";\n if (variant === \"bold-italic\") { wrapper.style[\"font-weight\"] = \"bold\"; }\n return wrapper\n};\n\ndefineFunctionBuilders({\n type: \"mathord\",\n mathmlBuilder(group, style) {\n const text = makeText(group.text, group.mode, style);\n const codePoint = text.text.codePointAt(0);\n // Test for upper-case Greek\n const defaultVariant = (0x0390 < codePoint && codePoint < 0x03aa) ? \"normal\" : \"italic\";\n const variant = getVariant(group, style) || defaultVariant;\n if (variant === \"script\") {\n text.text = variantChar(text.text, variant);\n return new mathMLTree.MathNode(\"mi\", [text], [style.font])\n } else if (variant !== \"italic\") {\n text.text = variantChar(text.text, variant);\n }\n let node = new mathMLTree.MathNode(\"mi\", [text]);\n // TODO: Handle U+1D49C - U+1D4CF per https://www.unicode.org/charts/PDF/U1D400.pdf\n if (variant === \"normal\") {\n node.setAttribute(\"mathvariant\", \"normal\");\n if (text.text.length === 1) {\n // A Firefox bug will apply spacing here, but there should be none. Fix it.\n node = new mathMLTree.MathNode(\"mpadded\", [node]);\n node.setAttribute(\"lspace\", \"0\");\n }\n }\n return node\n }\n});\n\ndefineFunctionBuilders({\n type: \"textord\",\n mathmlBuilder(group, style) {\n let ch = group.text;\n const codePoint = ch.codePointAt(0);\n if (style.fontFamily === \"textsc\") {\n // Convert small latin letters to small caps.\n if (96 < codePoint && codePoint < 123) {\n ch = smallCaps[ch];\n }\n }\n const text = makeText(ch, group.mode, style);\n const variant = getVariant(group, style) || \"normal\";\n\n let node;\n if (numberRegEx.test(group.text)) {\n const tag = group.mode === \"text\" ? \"mtext\" : \"mn\";\n if (variant === \"italic\" || variant === \"bold-italic\") {\n return italicNumber(text, variant, tag)\n } else {\n if (variant !== \"normal\") {\n text.text = text.text.split(\"\").map(c => variantChar(c, variant)).join(\"\");\n }\n node = new mathMLTree.MathNode(tag, [text]);\n }\n } else if (group.mode === \"text\") {\n if (variant !== \"normal\") {\n text.text = variantChar(text.text, variant);\n }\n node = new mathMLTree.MathNode(\"mtext\", [text]);\n } else if (primes.has(group.text)) {\n node = new mathMLTree.MathNode(\"mo\", [text]);\n // TODO: If/when Chromium uses ssty variant for prime, remove the next line.\n node.classes.push(\"tml-prime\");\n } else {\n const origText = text.text;\n if (variant !== \"italic\") {\n text.text = variantChar(text.text, variant);\n }\n node = new mathMLTree.MathNode(\"mi\", [text]);\n if (text.text === origText && latinRegEx.test(origText)) {\n node.setAttribute(\"mathvariant\", \"italic\");\n }\n }\n return node\n }\n});\n\n// A map of CSS-based spacing functions to their CSS class.\nconst cssSpace = {\n \"\\\\nobreak\": \"nobreak\",\n \"\\\\allowbreak\": \"allowbreak\"\n};\n\n// A lookup table to determine whether a spacing function/symbol should be\n// treated like a regular space character. If a symbol or command is a key\n// in this table, then it should be a regular space character. Furthermore,\n// the associated value may have a `className` specifying an extra CSS class\n// to add to the created `span`.\nconst regularSpace = {\n \" \": {},\n \"\\\\ \": {},\n \"~\": {\n className: \"nobreak\"\n },\n \"\\\\space\": {},\n \"\\\\nobreakspace\": {\n className: \"nobreak\"\n }\n};\n\n// ParseNode<\"spacing\"> created in Parser.js from the \"spacing\" symbol Groups in\n// src/symbols.js.\ndefineFunctionBuilders({\n type: \"spacing\",\n mathmlBuilder(group, style) {\n let node;\n\n if (Object.prototype.hasOwnProperty.call(regularSpace, group.text)) {\n // Firefox does not render a space in a <mtext> </mtext>. So write a no-break space.\n // TODO: If Firefox fixes that bug, uncomment the next line and write ch into the node.\n //const ch = (regularSpace[group.text].className === \"nobreak\") ? \"\\u00a0\" : \" \"\n node = new mathMLTree.MathNode(\"mtext\", [new mathMLTree.TextNode(\"\\u00a0\")]);\n } else if (Object.prototype.hasOwnProperty.call(cssSpace, group.text)) {\n // MathML 3.0 calls for nobreak to occur in an <mo>, not an <mtext>\n // Ref: https://www.w3.org/Math/draft-spec/mathml.html#chapter3_presm.lbattrs\n node = new mathMLTree.MathNode(\"mo\");\n if (group.text === \"\\\\nobreak\") {\n node.setAttribute(\"linebreak\", \"nobreak\");\n }\n } else {\n throw new ParseError(`Unknown type of space \"${group.text}\"`)\n }\n\n return node\n }\n});\n\ndefineFunctionBuilders({\n type: \"tag\"\n});\n\n// For a \\tag, the work usually done in a mathmlBuilder is instead done in buildMathML.js.\n// That way, a \\tag can be pulled out of the parse tree and wrapped around the outer node.\n\n// Non-mathy text, possibly in a font\nconst textFontFamilies = {\n \"\\\\text\": undefined,\n \"\\\\textrm\": \"textrm\",\n \"\\\\textsf\": \"textsf\",\n \"\\\\texttt\": \"texttt\",\n \"\\\\textnormal\": \"textrm\",\n \"\\\\textsc\": \"textsc\" // small caps\n};\n\nconst textFontWeights = {\n \"\\\\textbf\": \"textbf\",\n \"\\\\textmd\": \"textmd\"\n};\n\nconst textFontShapes = {\n \"\\\\textit\": \"textit\",\n \"\\\\textup\": \"textup\"\n};\n\nconst styleWithFont = (group, style) => {\n const font = group.font;\n // Checks if the argument is a font family or a font style.\n if (!font) {\n return style;\n } else if (textFontFamilies[font]) {\n return style.withTextFontFamily(textFontFamilies[font]);\n } else if (textFontWeights[font]) {\n return style.withTextFontWeight(textFontWeights[font]);\n } else if (font === \"\\\\emph\") {\n return style.fontShape === \"textit\"\n ? style.withTextFontShape(\"textup\")\n : style.withTextFontShape(\"textit\")\n }\n return style.withTextFontShape(textFontShapes[font])\n};\n\ndefineFunction({\n type: \"text\",\n names: [\n // Font families\n \"\\\\text\",\n \"\\\\textrm\",\n \"\\\\textsf\",\n \"\\\\texttt\",\n \"\\\\textnormal\",\n \"\\\\textsc\",\n // Font weights\n \"\\\\textbf\",\n \"\\\\textmd\",\n // Font Shapes\n \"\\\\textit\",\n \"\\\\textup\",\n \"\\\\emph\"\n ],\n props: {\n numArgs: 1,\n argTypes: [\"text\"],\n allowedInArgument: true,\n allowedInText: true\n },\n handler({ parser, funcName }, args) {\n const body = args[0];\n return {\n type: \"text\",\n mode: parser.mode,\n body: ordargument(body),\n font: funcName\n };\n },\n mathmlBuilder(group, style) {\n const newStyle = styleWithFont(group, style);\n const mrow = buildExpressionRow(group.body, newStyle);\n return consolidateText(mrow)\n }\n});\n\n// \\vcenter: Vertically center the argument group on the math axis.\n\ndefineFunction({\n type: \"vcenter\",\n names: [\"\\\\vcenter\"],\n props: {\n numArgs: 1,\n argTypes: [\"original\"],\n allowedInText: false\n },\n handler({ parser }, args) {\n return {\n type: \"vcenter\",\n mode: parser.mode,\n body: args[0]\n };\n },\n mathmlBuilder(group, style) {\n // Use a math table to create vertically centered content.\n const mtd = new mathMLTree.MathNode(\"mtd\", [buildGroup$1(group.body, style)]);\n mtd.style.padding = \"0\";\n const mtr = new mathMLTree.MathNode(\"mtr\", [mtd]);\n return new mathMLTree.MathNode(\"mtable\", [mtr])\n }\n});\n\ndefineFunction({\n type: \"verb\",\n names: [\"\\\\verb\"],\n props: {\n numArgs: 0,\n allowedInText: true\n },\n handler(context, args, optArgs) {\n // \\verb and \\verb* are dealt with directly in Parser.js.\n // If we end up here, it's because of a failure to match the two delimiters\n // in the regex in Lexer.js. LaTeX raises the following error when \\verb is\n // terminated by end of line (or file).\n throw new ParseError(\"\\\\verb ended by end of line instead of matching delimiter\");\n },\n mathmlBuilder(group, style) {\n const text = new mathMLTree.TextNode(makeVerb(group));\n const node = new mathMLTree.MathNode(\"mtext\", [text]);\n node.setAttribute(\"mathvariant\", \"monospace\");\n return node;\n }\n});\n\n/**\n * Converts verb group into body string.\n *\n * \\verb* replaces each space with an open box \\u2423\n * \\verb replaces each space with a no-break space \\xA0\n */\nconst makeVerb = (group) => group.body.replace(/ /g, group.star ? \"\\u2423\" : \"\\xA0\");\n\n/** Include this to ensure that all functions are defined. */\n\nconst functions = _functions;\n\n/**\n * The Lexer class handles tokenizing the input in various ways. Since our\n * parser expects us to be able to backtrack, the lexer allows lexing from any\n * given starting point.\n *\n * Its main exposed function is the `lex` function, which takes a position to\n * lex from and a type of token to lex. It defers to the appropriate `_innerLex`\n * function.\n *\n * The various `_innerLex` functions perform the actual lexing of different\n * kinds.\n */\n\n\n/* The following tokenRegex\n * - matches typical whitespace (but not NBSP etc.) using its first two groups\n * - does not match any control character \\x00-\\x1f except whitespace\n * - does not match a bare backslash\n * - matches any ASCII character except those just mentioned\n * - does not match the BMP private use area \\uE000-\\uF8FF\n * - does not match bare surrogate code units\n * - matches any BMP character except for those just described\n * - matches any valid Unicode surrogate pair\n * - mathches numerals\n * - matches a backslash followed by one or more whitespace characters\n * - matches a backslash followed by one or more letters then whitespace\n * - matches a backslash followed by any BMP character\n * Capturing groups:\n * [1] regular whitespace\n * [2] backslash followed by whitespace\n * [3] anything else, which may include:\n * [4] left character of \\verb*\n * [5] left character of \\verb\n * [6] backslash followed by word, excluding any trailing whitespace\n * Just because the Lexer matches something doesn't mean it's valid input:\n * If there is no matching function or symbol definition, the Parser will\n * still reject the input.\n */\nconst spaceRegexString = \"[ \\r\\n\\t]\";\nconst controlWordRegexString = \"\\\\\\\\[a-zA-Z@]+\";\nconst controlSymbolRegexString = \"\\\\\\\\[^\\uD800-\\uDFFF]\";\nconst controlWordWhitespaceRegexString = `(${controlWordRegexString})${spaceRegexString}*`;\nconst controlSpaceRegexString = \"\\\\\\\\(\\n|[ \\r\\t]+\\n?)[ \\r\\t]*\";\nconst combiningDiacriticalMarkString = \"[\\u0300-\\u036f]\";\nconst combiningDiacriticalMarksEndRegex = new RegExp(`${combiningDiacriticalMarkString}+$`);\nconst tokenRegexString =\n `(${spaceRegexString}+)|` + // whitespace\n `${controlSpaceRegexString}|` + // whitespace\n \"([!-\\\\[\\\\]-\\u2027\\u202A-\\uD7FF\\uF900-\\uFFFF]\" + // single codepoint\n `${combiningDiacriticalMarkString}*` + // ...plus accents\n \"|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]\" + // surrogate pair\n `${combiningDiacriticalMarkString}*` + // ...plus accents\n \"|\\\\\\\\verb\\\\*([^]).*?\\\\4\" + // \\verb*\n \"|\\\\\\\\verb([^*a-zA-Z]).*?\\\\5\" + // \\verb unstarred\n `|${controlWordWhitespaceRegexString}` + // \\macroName + spaces\n `|${controlSymbolRegexString})`; // \\\\, \\', etc.\n\n/** Main Lexer class */\nclass Lexer {\n constructor(input, settings) {\n // Separate accents from characters\n this.input = input;\n this.settings = settings;\n this.tokenRegex = new RegExp(tokenRegexString, 'g');\n // Category codes. The lexer only supports comment characters (14) for now.\n // MacroExpander additionally distinguishes active (13).\n this.catcodes = {\n \"%\": 14, // comment character\n \"~\": 13 // active character\n };\n }\n\n setCatcode(char, code) {\n this.catcodes[char] = code;\n }\n\n /**\n * This function lexes a single token.\n */\n lex() {\n const input = this.input;\n const pos = this.tokenRegex.lastIndex;\n if (pos === input.length) {\n return new Token(\"EOF\", new SourceLocation(this, pos, pos));\n }\n const match = this.tokenRegex.exec(input);\n if (match === null || match.index !== pos) {\n throw new ParseError(\n `Unexpected character: '${input[pos]}'`,\n new Token(input[pos], new SourceLocation(this, pos, pos + 1))\n );\n }\n const text = match[6] || match[3] || (match[2] ? \"\\\\ \" : \" \");\n\n if (this.catcodes[text] === 14) {\n // comment character\n const nlIndex = input.indexOf(\"\\n\", this.tokenRegex.lastIndex);\n if (nlIndex === -1) {\n this.tokenRegex.lastIndex = input.length; // EOF\n if (this.settings.strict) {\n throw new ParseError(\"% comment has no terminating newline; LaTeX would \" +\n \"fail because of commenting the end of math mode\")\n }\n } else {\n this.tokenRegex.lastIndex = nlIndex + 1;\n }\n return this.lex();\n }\n\n return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex));\n }\n}\n\n/**\n * A `Namespace` refers to a space of nameable things like macros or lengths,\n * which can be `set` either globally or local to a nested group, using an\n * undo stack similar to how TeX implements this functionality.\n * Performance-wise, `get` and local `set` take constant time, while global\n * `set` takes time proportional to the depth of group nesting.\n */\n\n\nclass Namespace {\n /**\n * Both arguments are optional. The first argument is an object of\n * built-in mappings which never change. The second argument is an object\n * of initial (global-level) mappings, which will constantly change\n * according to any global/top-level `set`s done.\n */\n constructor(builtins = {}, globalMacros = {}) {\n this.current = globalMacros;\n this.builtins = builtins;\n this.undefStack = [];\n }\n\n /**\n * Start a new nested group, affecting future local `set`s.\n */\n beginGroup() {\n this.undefStack.push({});\n }\n\n /**\n * End current nested group, restoring values before the group began.\n */\n endGroup() {\n if (this.undefStack.length === 0) {\n throw new ParseError(\n \"Unbalanced namespace destruction: attempt \" +\n \"to pop global namespace; please report this as a bug\"\n );\n }\n const undefs = this.undefStack.pop();\n for (const undef in undefs) {\n if (Object.prototype.hasOwnProperty.call(undefs, undef )) {\n if (undefs[undef] === undefined) {\n delete this.current[undef];\n } else {\n this.current[undef] = undefs[undef];\n }\n }\n }\n }\n\n /**\n * Detect whether `name` has a definition. Equivalent to\n * `get(name) != null`.\n */\n has(name) {\n return Object.prototype.hasOwnProperty.call(this.current, name ) ||\n Object.prototype.hasOwnProperty.call(this.builtins, name );\n }\n\n /**\n * Get the current value of a name, or `undefined` if there is no value.\n *\n * Note: Do not use `if (namespace.get(...))` to detect whether a macro\n * is defined, as the definition may be the empty string which evaluates\n * to `false` in JavaScript. Use `if (namespace.get(...) != null)` or\n * `if (namespace.has(...))`.\n */\n get(name) {\n if (Object.prototype.hasOwnProperty.call(this.current, name )) {\n return this.current[name];\n } else {\n return this.builtins[name];\n }\n }\n\n /**\n * Set the current value of a name, and optionally set it globally too.\n * Local set() sets the current value and (when appropriate) adds an undo\n * operation to the undo stack. Global set() may change the undo\n * operation at every level, so takes time linear in their number.\n */\n set(name, value, global = false) {\n if (global) {\n // Global set is equivalent to setting in all groups. Simulate this\n // by destroying any undos currently scheduled for this name,\n // and adding an undo with the *new* value (in case it later gets\n // locally reset within this environment).\n for (let i = 0; i < this.undefStack.length; i++) {\n delete this.undefStack[i][name];\n }\n if (this.undefStack.length > 0) {\n this.undefStack[this.undefStack.length - 1][name] = value;\n }\n } else {\n // Undo this set at end of this group (possibly to `undefined`),\n // unless an undo is already in place, in which case that older\n // value is the correct one.\n const top = this.undefStack[this.undefStack.length - 1];\n if (top && !Object.prototype.hasOwnProperty.call(top, name )) {\n top[name] = this.current[name];\n }\n }\n this.current[name] = value;\n }\n}\n\n/**\n * This file contains the “gullet” where macros are expanded\n * until only non-macro tokens remain.\n */\n\n\n// List of commands that act like macros but aren't defined as a macro,\n// function, or symbol. Used in `isDefined`.\nconst implicitCommands = {\n \"^\": true, // Parser.js\n _: true, // Parser.js\n \"\\\\limits\": true, // Parser.js\n \"\\\\nolimits\": true // Parser.js\n};\n\nclass MacroExpander {\n constructor(input, settings, mode) {\n this.settings = settings;\n this.expansionCount = 0;\n this.feed(input);\n // Make new global namespace\n this.macros = new Namespace(macros, settings.macros);\n this.mode = mode;\n this.stack = []; // contains tokens in REVERSE order\n }\n\n /**\n * Feed a new input string to the same MacroExpander\n * (with existing macros etc.).\n */\n feed(input) {\n this.lexer = new Lexer(input, this.settings);\n }\n\n /**\n * Switches between \"text\" and \"math\" modes.\n */\n switchMode(newMode) {\n this.mode = newMode;\n }\n\n /**\n * Start a new group nesting within all namespaces.\n */\n beginGroup() {\n this.macros.beginGroup();\n }\n\n /**\n * End current group nesting within all namespaces.\n */\n endGroup() {\n this.macros.endGroup();\n }\n\n /**\n * Returns the topmost token on the stack, without expanding it.\n * Similar in behavior to TeX's `\\futurelet`.\n */\n future() {\n if (this.stack.length === 0) {\n this.pushToken(this.lexer.lex());\n }\n return this.stack[this.stack.length - 1]\n }\n\n /**\n * Remove and return the next unexpanded token.\n */\n popToken() {\n this.future(); // ensure non-empty stack\n return this.stack.pop();\n }\n\n /**\n * Add a given token to the token stack. In particular, this get be used\n * to put back a token returned from one of the other methods.\n */\n pushToken(token) {\n this.stack.push(token);\n }\n\n /**\n * Append an array of tokens to the token stack.\n */\n pushTokens(tokens) {\n this.stack.push(...tokens);\n }\n\n /**\n * Find an macro argument without expanding tokens and append the array of\n * tokens to the token stack. Uses Token as a container for the result.\n */\n scanArgument(isOptional) {\n let start;\n let end;\n let tokens;\n if (isOptional) {\n this.consumeSpaces(); // \\@ifnextchar gobbles any space following it\n if (this.future().text !== \"[\") {\n return null;\n }\n start = this.popToken(); // don't include [ in tokens\n ({ tokens, end } = this.consumeArg([\"]\"]));\n } else {\n ({ tokens, start, end } = this.consumeArg());\n }\n\n // indicate the end of an argument\n this.pushToken(new Token(\"EOF\", end.loc));\n\n this.pushTokens(tokens);\n return start.range(end, \"\");\n }\n\n /**\n * Consume all following space tokens, without expansion.\n */\n consumeSpaces() {\n for (;;) {\n const token = this.future();\n if (token.text === \" \") {\n this.stack.pop();\n } else {\n break;\n }\n }\n }\n\n /**\n * Consume an argument from the token stream, and return the resulting array\n * of tokens and start/end token.\n */\n consumeArg(delims) {\n // The argument for a delimited parameter is the shortest (possibly\n // empty) sequence of tokens with properly nested {...} groups that is\n // followed ... by this particular list of non-parameter tokens.\n // The argument for an undelimited parameter is the next nonblank\n // token, unless that token is {, when the argument will be the\n // entire {...} group that follows.\n const tokens = [];\n const isDelimited = delims && delims.length > 0;\n if (!isDelimited) {\n // Ignore spaces between arguments. As the TeXbook says:\n // \"After you have said \\def\\row#1#2{...}, you are allowed to\n // put spaces between the arguments (e.g., \\row x n), because\n // TeX doesnt use single spaces as undelimited arguments.\"\n this.consumeSpaces();\n }\n const start = this.future();\n let tok;\n let depth = 0;\n let match = 0;\n do {\n tok = this.popToken();\n tokens.push(tok);\n if (tok.text === \"{\") {\n ++depth;\n } else if (tok.text === \"}\") {\n --depth;\n if (depth === -1) {\n throw new ParseError(\"Extra }\", tok);\n }\n } else if (tok.text === \"EOF\") {\n throw new ParseError(\n \"Unexpected end of input in a macro argument\" +\n \", expected '\" +\n (delims && isDelimited ? delims[match] : \"}\") +\n \"'\",\n tok\n );\n }\n if (delims && isDelimited) {\n if ((depth === 0 || (depth === 1 && delims[match] === \"{\")) && tok.text === delims[match]) {\n ++match;\n if (match === delims.length) {\n // don't include delims in tokens\n tokens.splice(-match, match);\n break;\n }\n } else {\n match = 0;\n }\n }\n } while (depth !== 0 || isDelimited);\n // If the argument found ... has the form {<nested tokens>},\n // ... the outermost braces enclosing the argument are removed\n if (start.text === \"{\" && tokens[tokens.length - 1].text === \"}\") {\n tokens.pop();\n tokens.shift();\n }\n tokens.reverse(); // to fit in with stack order\n return { tokens, start, end: tok };\n }\n\n /**\n * Consume the specified number of (delimited) arguments from the token\n * stream and return the resulting array of arguments.\n */\n consumeArgs(numArgs, delimiters) {\n if (delimiters) {\n if (delimiters.length !== numArgs + 1) {\n throw new ParseError(\"The length of delimiters doesn't match the number of args!\");\n }\n const delims = delimiters[0];\n for (let i = 0; i < delims.length; i++) {\n const tok = this.popToken();\n if (delims[i] !== tok.text) {\n throw new ParseError(\"Use of the macro doesn't match its definition\", tok);\n }\n }\n }\n\n const args = [];\n for (let i = 0; i < numArgs; i++) {\n args.push(this.consumeArg(delimiters && delimiters[i + 1]).tokens);\n }\n return args;\n }\n\n /**\n * Expand the next token only once if possible.\n *\n * If the token is expanded, the resulting tokens will be pushed onto\n * the stack in reverse order, and the number of such tokens will be\n * returned. This number might be zero or positive.\n *\n * If not, the return value is `false`, and the next token remains at the\n * top of the stack.\n *\n * In either case, the next token will be on the top of the stack,\n * or the stack will be empty (in case of empty expansion\n * and no other tokens).\n *\n * Used to implement `expandAfterFuture` and `expandNextToken`.\n *\n * If expandableOnly, only expandable tokens are expanded and\n * an undefined control sequence results in an error.\n */\n expandOnce(expandableOnly) {\n const topToken = this.popToken();\n const name = topToken.text;\n const expansion = !topToken.noexpand ? this._getExpansion(name) : null;\n if (expansion == null || (expandableOnly && expansion.unexpandable)) {\n if (expandableOnly && expansion == null && name[0] === \"\\\\\" && !this.isDefined(name)) {\n throw new ParseError(\"Undefined control sequence: \" + name);\n }\n this.pushToken(topToken);\n return false;\n }\n this.expansionCount++;\n if (this.expansionCount > this.settings.maxExpand) {\n throw new ParseError(\n \"Too many expansions: infinite loop or \" + \"need to increase maxExpand setting\"\n );\n }\n let tokens = expansion.tokens;\n const args = this.consumeArgs(expansion.numArgs, expansion.delimiters);\n if (expansion.numArgs) {\n // paste arguments in place of the placeholders\n tokens = tokens.slice(); // make a shallow copy\n for (let i = tokens.length - 1; i >= 0; --i) {\n let tok = tokens[i];\n if (tok.text === \"#\") {\n if (i === 0) {\n throw new ParseError(\"Incomplete placeholder at end of macro body\", tok);\n }\n tok = tokens[--i]; // next token on stack\n if (tok.text === \"#\") {\n // ## → #\n tokens.splice(i + 1, 1); // drop first #\n } else if (/^[1-9]$/.test(tok.text)) {\n // replace the placeholder with the indicated argument\n tokens.splice(i, 2, ...args[+tok.text - 1]);\n } else {\n throw new ParseError(\"Not a valid argument number\", tok);\n }\n }\n }\n }\n // Concatenate expansion onto top of stack.\n this.pushTokens(tokens);\n return tokens.length;\n }\n\n /**\n * Expand the next token only once (if possible), and return the resulting\n * top token on the stack (without removing anything from the stack).\n * Similar in behavior to TeX's `\\expandafter\\futurelet`.\n * Equivalent to expandOnce() followed by future().\n */\n expandAfterFuture() {\n this.expandOnce();\n return this.future();\n }\n\n /**\n * Recursively expand first token, then return first non-expandable token.\n */\n expandNextToken() {\n for (;;) {\n if (this.expandOnce() === false) { // fully expanded\n const token = this.stack.pop();\n // The token after \\noexpand is interpreted as if its meaning were \\relax\n if (token.treatAsRelax) {\n token.text = \"\\\\relax\";\n }\n return token\n }\n }\n\n // This pathway is impossible.\n throw new Error(); // eslint-disable-line no-unreachable\n }\n\n /**\n * Fully expand the given macro name and return the resulting list of\n * tokens, or return `undefined` if no such macro is defined.\n */\n expandMacro(name) {\n return this.macros.has(name) ? this.expandTokens([new Token(name)]) : undefined;\n }\n\n /**\n * Fully expand the given token stream and return the resulting list of\n * tokens. Note that the input tokens are in reverse order, but the\n * output tokens are in forward order.\n */\n expandTokens(tokens) {\n const output = [];\n const oldStackLength = this.stack.length;\n this.pushTokens(tokens);\n while (this.stack.length > oldStackLength) {\n // Expand only expandable tokens\n if (this.expandOnce(true) === false) { // fully expanded\n const token = this.stack.pop();\n if (token.treatAsRelax) {\n // the expansion of \\noexpand is the token itself\n token.noexpand = false;\n token.treatAsRelax = false;\n }\n output.push(token);\n }\n }\n return output;\n }\n\n /**\n * Fully expand the given macro name and return the result as a string,\n * or return `undefined` if no such macro is defined.\n */\n expandMacroAsText(name) {\n const tokens = this.expandMacro(name);\n if (tokens) {\n return tokens.map((token) => token.text).join(\"\");\n } else {\n return tokens;\n }\n }\n\n /**\n * Returns the expanded macro as a reversed array of tokens and a macro\n * argument count. Or returns `null` if no such macro.\n */\n _getExpansion(name) {\n const definition = this.macros.get(name);\n if (definition == null) {\n // mainly checking for undefined here\n return definition;\n }\n // If a single character has an associated catcode other than 13\n // (active character), then don't expand it.\n if (name.length === 1) {\n const catcode = this.lexer.catcodes[name];\n if (catcode != null && catcode !== 13) {\n return\n }\n }\n const expansion = typeof definition === \"function\" ? definition(this) : definition;\n if (typeof expansion === \"string\") {\n let numArgs = 0;\n if (expansion.indexOf(\"#\") !== -1) {\n const stripped = expansion.replace(/##/g, \"\");\n while (stripped.indexOf(\"#\" + (numArgs + 1)) !== -1) {\n ++numArgs;\n }\n }\n const bodyLexer = new Lexer(expansion, this.settings);\n const tokens = [];\n let tok = bodyLexer.lex();\n while (tok.text !== \"EOF\") {\n tokens.push(tok);\n tok = bodyLexer.lex();\n }\n tokens.reverse(); // to fit in with stack using push and pop\n const expanded = { tokens, numArgs };\n return expanded;\n }\n\n return expansion;\n }\n\n /**\n * Determine whether a command is currently \"defined\" (has some\n * functionality), meaning that it's a macro (in the current group),\n * a function, a symbol, or one of the special commands listed in\n * `implicitCommands`.\n */\n isDefined(name) {\n return (\n this.macros.has(name) ||\n Object.prototype.hasOwnProperty.call(functions, name ) ||\n Object.prototype.hasOwnProperty.call(symbols.math, name ) ||\n Object.prototype.hasOwnProperty.call(symbols.text, name ) ||\n Object.prototype.hasOwnProperty.call(implicitCommands, name )\n );\n }\n\n /**\n * Determine whether a command is expandable.\n */\n isExpandable(name) {\n const macro = this.macros.get(name);\n return macro != null\n ? typeof macro === \"string\" || typeof macro === \"function\" || !macro.unexpandable\n : Object.prototype.hasOwnProperty.call(functions, name ) && !functions[name].primitive;\n }\n}\n\n// Helpers for Parser.js handling of Unicode (sub|super)script characters.\n\nconst unicodeSubRegEx = /^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/;\n\nconst uSubsAndSups = Object.freeze({\n '₊': '+',\n '₋': '-',\n '₌': '=',\n '₍': '(',\n '₎': ')',\n '₀': '0',\n '₁': '1',\n '₂': '2',\n '₃': '3',\n '₄': '4',\n '₅': '5',\n '₆': '6',\n '₇': '7',\n '₈': '8',\n '₉': '9',\n '\\u2090': 'a',\n '\\u2091': 'e',\n '\\u2095': 'h',\n '\\u1D62': 'i',\n '\\u2C7C': 'j',\n '\\u2096': 'k',\n '\\u2097': 'l',\n '\\u2098': 'm',\n '\\u2099': 'n',\n '\\u2092': 'o',\n '\\u209A': 'p',\n '\\u1D63': 'r',\n '\\u209B': 's',\n '\\u209C': 't',\n '\\u1D64': 'u',\n '\\u1D65': 'v',\n '\\u2093': 'x',\n '\\u1D66': 'β',\n '\\u1D67': 'γ',\n '\\u1D68': 'ρ',\n '\\u1D69': '\\u03d5',\n '\\u1D6A': 'χ',\n '⁺': '+',\n '⁻': '-',\n '⁼': '=',\n '⁽': '(',\n '⁾': ')',\n '⁰': '0',\n '¹': '1',\n '²': '2',\n '³': '3',\n '⁴': '4',\n '⁵': '5',\n '⁶': '6',\n '⁷': '7',\n '⁸': '8',\n '⁹': '9',\n '\\u1D2C': 'A',\n '\\u1D2E': 'B',\n '\\u1D30': 'D',\n '\\u1D31': 'E',\n '\\u1D33': 'G',\n '\\u1D34': 'H',\n '\\u1D35': 'I',\n '\\u1D36': 'J',\n '\\u1D37': 'K',\n '\\u1D38': 'L',\n '\\u1D39': 'M',\n '\\u1D3A': 'N',\n '\\u1D3C': 'O',\n '\\u1D3E': 'P',\n '\\u1D3F': 'R',\n '\\u1D40': 'T',\n '\\u1D41': 'U',\n '\\u2C7D': 'V',\n '\\u1D42': 'W',\n '\\u1D43': 'a',\n '\\u1D47': 'b',\n '\\u1D9C': 'c',\n '\\u1D48': 'd',\n '\\u1D49': 'e',\n '\\u1DA0': 'f',\n '\\u1D4D': 'g',\n '\\u02B0': 'h',\n '\\u2071': 'i',\n '\\u02B2': 'j',\n '\\u1D4F': 'k',\n '\\u02E1': 'l',\n '\\u1D50': 'm',\n '\\u207F': 'n',\n '\\u1D52': 'o',\n '\\u1D56': 'p',\n '\\u02B3': 'r',\n '\\u02E2': 's',\n '\\u1D57': 't',\n '\\u1D58': 'u',\n '\\u1D5B': 'v',\n '\\u02B7': 'w',\n '\\u02E3': 'x',\n '\\u02B8': 'y',\n '\\u1DBB': 'z',\n '\\u1D5D': 'β',\n '\\u1D5E': 'γ',\n '\\u1D5F': 'δ',\n '\\u1D60': '\\u03d5',\n '\\u1D61': 'χ',\n '\\u1DBF': 'θ'\n});\n\n// Used for Unicode input of calligraphic and script letters\nconst asciiFromScript = Object.freeze({\n \"\\ud835\\udc9c\": \"A\",\n \"\\u212c\": \"B\",\n \"\\ud835\\udc9e\": \"C\",\n \"\\ud835\\udc9f\": \"D\",\n \"\\u2130\": \"E\",\n \"\\u2131\": \"F\",\n \"\\ud835\\udca2\": \"G\",\n \"\\u210B\": \"H\",\n \"\\u2110\": \"I\",\n \"\\ud835\\udca5\": \"J\",\n \"\\ud835\\udca6\": \"K\",\n \"\\u2112\": \"L\",\n \"\\u2133\": \"M\",\n \"\\ud835\\udca9\": \"N\",\n \"\\ud835\\udcaa\": \"O\",\n \"\\ud835\\udcab\": \"P\",\n \"\\ud835\\udcac\": \"Q\",\n \"\\u211B\": \"R\",\n \"\\ud835\\udcae\": \"S\",\n \"\\ud835\\udcaf\": \"T\",\n \"\\ud835\\udcb0\": \"U\",\n \"\\ud835\\udcb1\": \"V\",\n \"\\ud835\\udcb2\": \"W\",\n \"\\ud835\\udcb3\": \"X\",\n \"\\ud835\\udcb4\": \"Y\",\n \"\\ud835\\udcb5\": \"Z\"\n});\n\n// Mapping of Unicode accent characters to their LaTeX equivalent in text and\n// math mode (when they exist).\nvar unicodeAccents = {\n \"\\u0301\": { text: \"\\\\'\", math: \"\\\\acute\" },\n \"\\u0300\": { text: \"\\\\`\", math: \"\\\\grave\" },\n \"\\u0308\": { text: '\\\\\"', math: \"\\\\ddot\" },\n \"\\u0303\": { text: \"\\\\~\", math: \"\\\\tilde\" },\n \"\\u0304\": { text: \"\\\\=\", math: \"\\\\bar\" },\n \"\\u0306\": { text: \"\\\\u\", math: \"\\\\breve\" },\n \"\\u030c\": { text: \"\\\\v\", math: \"\\\\check\" },\n \"\\u0302\": { text: \"\\\\^\", math: \"\\\\hat\" },\n \"\\u0307\": { text: \"\\\\.\", math: \"\\\\dot\" },\n \"\\u030a\": { text: \"\\\\r\", math: \"\\\\mathring\" },\n \"\\u030b\": { text: \"\\\\H\" },\n '\\u0327': { text: '\\\\c' }\n};\n\nvar unicodeSymbols = {\n \"á\": \"á\",\n \"à\": \"à\",\n \"ä\": \"ä\",\n \"ǟ\": \"ǟ\",\n \"ã\": \"ã\",\n \"ā\": \"ā\",\n \"ă\": \"ă\",\n \"ắ\": \"ắ\",\n \"ằ\": \"ằ\",\n \"ẵ\": \"ẵ\",\n \"ǎ\": \"ǎ\",\n \"â\": \"â\",\n \"ấ\": \"ấ\",\n \"ầ\": \"ầ\",\n \"ẫ\": \"ẫ\",\n \"ȧ\": \"ȧ\",\n \"ǡ\": \"ǡ\",\n \"å\": \"å\",\n \"ǻ\": \"ǻ\",\n \"ḃ\": \"ḃ\",\n \"ć\": \"ć\",\n \"č\": \"č\",\n \"ĉ\": \"ĉ\",\n \"ċ\": \"ċ\",\n \"ď\": \"ď\",\n \"ḋ\": \"ḋ\",\n \"é\": \"é\",\n \"è\": \"è\",\n \"ë\": \"ë\",\n \"ẽ\": \"ẽ\",\n \"ē\": \"ē\",\n \"ḗ\": \"ḗ\",\n \"ḕ\": \"ḕ\",\n \"ĕ\": \"ĕ\",\n \"ě\": \"ě\",\n \"ê\": \"ê\",\n \"ế\": \"ế\",\n \"ề\": \"ề\",\n \"ễ\": \"ễ\",\n \"ė\": \"ė\",\n \"ḟ\": \"ḟ\",\n \"ǵ\": \"ǵ\",\n \"ḡ\": \"ḡ\",\n \"ğ\": \"ğ\",\n \"ǧ\": \"ǧ\",\n \"ĝ\": \"ĝ\",\n \"ġ\": \"ġ\",\n \"ḧ\": \"ḧ\",\n \"ȟ\": \"ȟ\",\n \"ĥ\": \"ĥ\",\n \"ḣ\": \"ḣ\",\n \"í\": \"í\",\n \"ì\": \"ì\",\n \"ï\": \"ï\",\n \"ḯ\": \"ḯ\",\n \"ĩ\": \"ĩ\",\n \"ī\": \"ī\",\n \"ĭ\": \"ĭ\",\n \"ǐ\": \"ǐ\",\n \"î\": \"î\",\n \"ǰ\": \"ǰ\",\n \"ĵ\": \"ĵ\",\n \"ḱ\": \"ḱ\",\n \"ǩ\": \"ǩ\",\n \"ĺ\": \"ĺ\",\n \"ľ\": \"ľ\",\n \"ḿ\": \"ḿ\",\n \"ṁ\": \"ṁ\",\n \"ń\": \"ń\",\n \"ǹ\": \"ǹ\",\n \"ñ\": \"ñ\",\n \"ň\": \"ň\",\n \"ṅ\": \"ṅ\",\n \"ó\": \"ó\",\n \"ò\": \"ò\",\n \"ö\": \"ö\",\n \"ȫ\": \"ȫ\",\n \"õ\": \"õ\",\n \"ṍ\": \"ṍ\",\n \"ṏ\": \"ṏ\",\n \"ȭ\": \"ȭ\",\n \"ō\": \"ō\",\n \"ṓ\": \"ṓ\",\n \"ṑ\": \"ṑ\",\n \"ŏ\": \"ŏ\",\n \"ǒ\": \"ǒ\",\n \"ô\": \"ô\",\n \"ố\": \"ố\",\n \"ồ\": \"ồ\",\n \"ỗ\": \"ỗ\",\n \"ȯ\": \"ȯ\",\n \"ȱ\": \"ȱ\",\n \"ő\": \"ő\",\n \"ṕ\": \"ṕ\",\n \"ṗ\": \"ṗ\",\n \"ŕ\": \"ŕ\",\n \"ř\": \"ř\",\n \"ṙ\": \"ṙ\",\n \"ś\": \"ś\",\n \"ṥ\": \"ṥ\",\n \"š\": \"š\",\n \"ṧ\": \"ṧ\",\n \"ŝ\": \"ŝ\",\n \"ṡ\": \"ṡ\",\n \"ẗ\": \"ẗ\",\n \"ť\": \"ť\",\n \"ṫ\": \"ṫ\",\n \"ú\": \"ú\",\n \"ù\": \"ù\",\n \"ü\": \"ü\",\n \"ǘ\": \"ǘ\",\n \"ǜ\": \"ǜ\",\n \"ǖ\": \"ǖ\",\n \"ǚ\": \"ǚ\",\n \"ũ\": \"ũ\",\n \"ṹ\": \"ṹ\",\n \"ū\": \"ū\",\n \"ṻ\": \"ṻ\",\n \"ŭ\": \"ŭ\",\n \"ǔ\": \"ǔ\",\n \"û\": \"û\",\n \"ů\": \"ů\",\n \"ű\": \"ű\",\n \"ṽ\": \"ṽ\",\n \"ẃ\": \"ẃ\",\n \"ẁ\": \"ẁ\",\n \"ẅ\": \"ẅ\",\n \"ŵ\": \"ŵ\",\n \"ẇ\": \"ẇ\",\n \"ẘ\": \"ẘ\",\n \"ẍ\": \"ẍ\",\n \"ẋ\": \"ẋ\",\n \"ý\": \"ý\",\n \"ỳ\": \"ỳ\",\n \"ÿ\": \"ÿ\",\n \"ỹ\": \"ỹ\",\n \"ȳ\": \"ȳ\",\n \"ŷ\": \"ŷ\",\n \"ẏ\": \"ẏ\",\n \"ẙ\": \"ẙ\",\n \"ź\": \"ź\",\n \"ž\": \"ž\",\n \"ẑ\": \"ẑ\",\n \"ż\": \"ż\",\n \"Á\": \"Á\",\n \"À\": \"À\",\n \"Ä\": \"Ä\",\n \"Ǟ\": \"Ǟ\",\n \"Ã\": \"Ã\",\n \"Ā\": \"Ā\",\n \"Ă\": \"Ă\",\n \"Ắ\": \"Ắ\",\n \"Ằ\": \"Ằ\",\n \"Ẵ\": \"Ẵ\",\n \"Ǎ\": \"Ǎ\",\n \"Â\": \"Â\",\n \"Ấ\": \"Ấ\",\n \"Ầ\": \"Ầ\",\n \"Ẫ\": \"Ẫ\",\n \"Ȧ\": \"Ȧ\",\n \"Ǡ\": \"Ǡ\",\n \"Å\": \"Å\",\n \"Ǻ\": \"Ǻ\",\n \"Ḃ\": \"Ḃ\",\n \"Ć\": \"Ć\",\n \"Č\": \"Č\",\n \"Ĉ\": \"Ĉ\",\n \"Ċ\": \"Ċ\",\n \"Ď\": \"Ď\",\n \"Ḋ\": \"Ḋ\",\n \"É\": \"É\",\n \"È\": \"È\",\n \"Ë\": \"Ë\",\n \"Ẽ\": \"Ẽ\",\n \"Ē\": \"Ē\",\n \"Ḗ\": \"Ḗ\",\n \"Ḕ\": \"Ḕ\",\n \"Ĕ\": \"Ĕ\",\n \"Ě\": \"Ě\",\n \"Ê\": \"Ê\",\n \"Ế\": \"Ế\",\n \"Ề\": \"Ề\",\n \"Ễ\": \"Ễ\",\n \"Ė\": \"Ė\",\n \"Ḟ\": \"Ḟ\",\n \"Ǵ\": \"Ǵ\",\n \"Ḡ\": \"Ḡ\",\n \"Ğ\": \"Ğ\",\n \"Ǧ\": \"Ǧ\",\n \"Ĝ\": \"Ĝ\",\n \"Ġ\": \"Ġ\",\n \"Ḧ\": \"Ḧ\",\n \"Ȟ\": \"Ȟ\",\n \"Ĥ\": \"Ĥ\",\n \"Ḣ\": \"Ḣ\",\n \"Í\": \"Í\",\n \"Ì\": \"Ì\",\n \"Ï\": \"Ï\",\n \"Ḯ\": \"Ḯ\",\n \"Ĩ\": \"Ĩ\",\n \"Ī\": \"Ī\",\n \"Ĭ\": \"Ĭ\",\n \"Ǐ\": \"Ǐ\",\n \"Î\": \"Î\",\n \"İ\": \"İ\",\n \"Ĵ\": \"Ĵ\",\n \"Ḱ\": \"Ḱ\",\n \"Ǩ\": \"Ǩ\",\n \"Ĺ\": \"Ĺ\",\n \"Ľ\": \"Ľ\",\n \"Ḿ\": \"Ḿ\",\n \"Ṁ\": \"Ṁ\",\n \"Ń\": \"Ń\",\n \"Ǹ\": \"Ǹ\",\n \"Ñ\": \"Ñ\",\n \"Ň\": \"Ň\",\n \"Ṅ\": \"Ṅ\",\n \"Ó\": \"Ó\",\n \"Ò\": \"Ò\",\n \"Ö\": \"Ö\",\n \"Ȫ\": \"Ȫ\",\n \"Õ\": \"Õ\",\n \"Ṍ\": \"Ṍ\",\n \"Ṏ\": \"Ṏ\",\n \"Ȭ\": \"Ȭ\",\n \"Ō\": \"Ō\",\n \"Ṓ\": \"Ṓ\",\n \"Ṑ\": \"Ṑ\",\n \"Ŏ\": \"Ŏ\",\n \"Ǒ\": \"Ǒ\",\n \"Ô\": \"Ô\",\n \"Ố\": \"Ố\",\n \"Ồ\": \"Ồ\",\n \"Ỗ\": \"Ỗ\",\n \"Ȯ\": \"Ȯ\",\n \"Ȱ\": \"Ȱ\",\n \"Ő\": \"Ő\",\n \"Ṕ\": \"Ṕ\",\n \"Ṗ\": \"Ṗ\",\n \"Ŕ\": \"Ŕ\",\n \"Ř\": \"Ř\",\n \"Ṙ\": \"Ṙ\",\n \"Ś\": \"Ś\",\n \"Ṥ\": \"Ṥ\",\n \"Š\": \"Š\",\n \"Ṧ\": \"Ṧ\",\n \"Ŝ\": \"Ŝ\",\n \"Ṡ\": \"Ṡ\",\n \"Ť\": \"Ť\",\n \"Ṫ\": \"Ṫ\",\n \"Ú\": \"Ú\",\n \"Ù\": \"Ù\",\n \"Ü\": \"Ü\",\n \"Ǘ\": \"Ǘ\",\n \"Ǜ\": \"Ǜ\",\n \"Ǖ\": \"Ǖ\",\n \"Ǚ\": \"Ǚ\",\n \"Ũ\": \"Ũ\",\n \"Ṹ\": \"Ṹ\",\n \"Ū\": \"Ū\",\n \"Ṻ\": \"Ṻ\",\n \"Ŭ\": \"Ŭ\",\n \"Ǔ\": \"Ǔ\",\n \"Û\": \"Û\",\n \"Ů\": \"Ů\",\n \"Ű\": \"Ű\",\n \"Ṽ\": \"Ṽ\",\n \"Ẃ\": \"Ẃ\",\n \"Ẁ\": \"Ẁ\",\n \"Ẅ\": \"Ẅ\",\n \"Ŵ\": \"Ŵ\",\n \"Ẇ\": \"Ẇ\",\n \"Ẍ\": \"Ẍ\",\n \"Ẋ\": \"Ẋ\",\n \"Ý\": \"Ý\",\n \"Ỳ\": \"Ỳ\",\n \"Ÿ\": \"Ÿ\",\n \"Ỹ\": \"Ỹ\",\n \"Ȳ\": \"Ȳ\",\n \"Ŷ\": \"Ŷ\",\n \"Ẏ\": \"Ẏ\",\n \"Ź\": \"Ź\",\n \"Ž\": \"Ž\",\n \"Ẑ\": \"Ẑ\",\n \"Ż\": \"Ż\",\n \"ά\": \"ά\",\n \"ὰ\": \"ὰ\",\n \"ᾱ\": \"ᾱ\",\n \"ᾰ\": \"ᾰ\",\n \"έ\": \"έ\",\n \"ὲ\": \"ὲ\",\n \"ή\": \"ή\",\n \"ὴ\": \"ὴ\",\n \"ί\": \"ί\",\n \"ὶ\": \"ὶ\",\n \"ϊ\": \"ϊ\",\n \"ΐ\": \"ΐ\",\n \"ῒ\": \"ῒ\",\n \"ῑ\": \"ῑ\",\n \"ῐ\": \"ῐ\",\n \"ό\": \"ό\",\n \"ὸ\": \"ὸ\",\n \"ύ\": \"ύ\",\n \"ὺ\": \"ὺ\",\n \"ϋ\": \"ϋ\",\n \"ΰ\": \"ΰ\",\n \"ῢ\": \"ῢ\",\n \"ῡ\": \"ῡ\",\n \"ῠ\": \"ῠ\",\n \"ώ\": \"ώ\",\n \"ὼ\": \"ὼ\",\n \"Ύ\": \"Ύ\",\n \"Ὺ\": \"Ὺ\",\n \"Ϋ\": \"Ϋ\",\n \"Ῡ\": \"Ῡ\",\n \"Ῠ\": \"Ῠ\",\n \"Ώ\": \"Ώ\",\n \"Ὼ\": \"Ὼ\"\n};\n\n/* eslint no-constant-condition:0 */\n\nconst binLeftCancellers = [\"bin\", \"op\", \"open\", \"punct\", \"rel\"];\nconst sizeRegEx = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/;\nconst textRegEx = /^ *\\\\text/;\n\n/**\n * This file contains the parser used to parse out a TeX expression from the\n * input. Since TeX isn't context-free, standard parsers don't work particularly\n * well.\n *\n * The strategy of this parser is as such:\n *\n * The main functions (the `.parse...` ones) take a position in the current\n * parse string to parse tokens from. The lexer (found in Lexer.js, stored at\n * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When\n * individual tokens are needed at a position, the lexer is called to pull out a\n * token, which is then used.\n *\n * The parser has a property called \"mode\" indicating the mode that\n * the parser is currently in. Currently it has to be one of \"math\" or\n * \"text\", which denotes whether the current environment is a math-y\n * one or a text-y one (e.g. inside \\text). Currently, this serves to\n * limit the functions which can be used in text mode.\n *\n * The main functions then return an object which contains the useful data that\n * was parsed at its given point, and a new position at the end of the parsed\n * data. The main functions can call each other and continue the parsing by\n * using the returned position as a new starting point.\n *\n * There are also extra `.handle...` functions, which pull out some reused\n * functionality into self-contained functions.\n *\n * The functions return ParseNodes.\n */\n\nclass Parser {\n constructor(input, settings, isPreamble = false) {\n // Start in math mode\n this.mode = \"math\";\n // Create a new macro expander (gullet) and (indirectly via that) also a\n // new lexer (mouth) for this parser (stomach, in the language of TeX)\n this.gullet = new MacroExpander(input, settings, this.mode);\n // Store the settings for use in parsing\n this.settings = settings;\n // Are we defining a preamble?\n this.isPreamble = isPreamble;\n // Count leftright depth (for \\middle errors)\n this.leftrightDepth = 0;\n this.prevAtomType = \"\";\n }\n\n /**\n * Checks a result to make sure it has the right type, and throws an\n * appropriate error otherwise.\n */\n expect(text, consume = true) {\n if (this.fetch().text !== text) {\n throw new ParseError(`Expected '${text}', got '${this.fetch().text}'`, this.fetch());\n }\n if (consume) {\n this.consume();\n }\n }\n\n /**\n * Discards the current lookahead token, considering it consumed.\n */\n consume() {\n this.nextToken = null;\n }\n\n /**\n * Return the current lookahead token, or if there isn't one (at the\n * beginning, or if the previous lookahead token was consume()d),\n * fetch the next token as the new lookahead token and return it.\n */\n fetch() {\n if (this.nextToken == null) {\n this.nextToken = this.gullet.expandNextToken();\n }\n return this.nextToken;\n }\n\n /**\n * Switches between \"text\" and \"math\" modes.\n */\n switchMode(newMode) {\n this.mode = newMode;\n this.gullet.switchMode(newMode);\n }\n\n /**\n * Main parsing function, which parses an entire input.\n */\n parse() {\n // Create a group namespace for every $...$, $$...$$, \\[...\\].)\n // A \\def is then valid only within that pair of delimiters.\n this.gullet.beginGroup();\n\n if (this.settings.colorIsTextColor) {\n // Use old \\color behavior (same as LaTeX's \\textcolor) if requested.\n // We do this within the group for the math expression, so it doesn't\n // pollute settings.macros.\n this.gullet.macros.set(\"\\\\color\", \"\\\\textcolor\");\n }\n\n // Try to parse the input\n const parse = this.parseExpression(false);\n\n // If we succeeded, make sure there's an EOF at the end\n this.expect(\"EOF\");\n\n if (this.isPreamble) {\n const macros = Object.create(null);\n Object.entries(this.gullet.macros.current).forEach(([key, value]) => {\n macros[key] = value;\n });\n this.gullet.endGroup();\n return macros\n }\n\n // The only local macro that we want to save is from \\tag.\n const tag = this.gullet.macros.get(\"\\\\df@tag\");\n\n // End the group namespace for the expression\n this.gullet.endGroup();\n\n if (tag) { this.gullet.macros.current[\"\\\\df@tag\"] = tag; }\n\n return parse;\n }\n\n static get endOfExpression() {\n return [\"}\", \"\\\\endgroup\", \"\\\\end\", \"\\\\right\", \"\\\\endtoggle\", \"&\"];\n }\n\n /**\n * Fully parse a separate sequence of tokens as a separate job.\n * Tokens should be specified in reverse order, as in a MacroDefinition.\n */\n subparse(tokens) {\n // Save the next token from the current job.\n const oldToken = this.nextToken;\n this.consume();\n\n // Run the new job, terminating it with an excess '}'\n this.gullet.pushToken(new Token(\"}\"));\n this.gullet.pushTokens(tokens);\n const parse = this.parseExpression(false);\n this.expect(\"}\");\n\n // Restore the next token from the current job.\n this.nextToken = oldToken;\n\n return parse;\n }\n\n/**\n * Parses an \"expression\", which is a list of atoms.\n *\n * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This\n * happens when functions have higher precedence han infix\n * nodes in implicit parses.\n *\n * `breakOnTokenText`: The text of the token that the expression should end\n * with, or `null` if something else should end the\n * expression.\n *\n * `breakOnMiddle`: \\color, \\over, and old styling functions work on an implicit group.\n * These groups end just before the usual tokens, but they also\n * end just before `\\middle`.\n */\n parseExpression(breakOnInfix, breakOnTokenText, breakOnMiddle) {\n const body = [];\n this.prevAtomType = \"\";\n // Keep adding atoms to the body until we can't parse any more atoms (either\n // we reached the end, a }, or a \\right)\n while (true) {\n // Ignore spaces in math mode\n if (this.mode === \"math\") {\n this.consumeSpaces();\n }\n const lex = this.fetch();\n if (Parser.endOfExpression.indexOf(lex.text) !== -1) {\n break;\n }\n if (breakOnTokenText && lex.text === breakOnTokenText) {\n break;\n }\n if (breakOnMiddle && lex.text === \"\\\\middle\") {\n break\n }\n if (breakOnInfix && functions[lex.text] && functions[lex.text].infix) {\n break;\n }\n const atom = this.parseAtom(breakOnTokenText);\n if (!atom) {\n break;\n } else if (atom.type === \"internal\") {\n // Internal nodes do not appear in parse tree\n continue;\n }\n body.push(atom);\n // Keep a record of the atom type, so that op.js can set correct spacing.\n this.prevAtomType = atom.type === \"atom\" ? atom.family : atom.type;\n }\n if (this.mode === \"text\") {\n this.formLigatures(body);\n }\n return this.handleInfixNodes(body);\n }\n\n /**\n * Rewrites infix operators such as \\over with corresponding commands such\n * as \\frac.\n *\n * There can only be one infix operator per group. If there's more than one\n * then the expression is ambiguous. This can be resolved by adding {}.\n */\n handleInfixNodes(body) {\n let overIndex = -1;\n let funcName;\n\n for (let i = 0; i < body.length; i++) {\n if (body[i].type === \"infix\") {\n if (overIndex !== -1) {\n throw new ParseError(\"only one infix operator per group\", body[i].token);\n }\n overIndex = i;\n funcName = body[i].replaceWith;\n }\n }\n\n if (overIndex !== -1 && funcName) {\n let numerNode;\n let denomNode;\n\n const numerBody = body.slice(0, overIndex);\n const denomBody = body.slice(overIndex + 1);\n\n if (numerBody.length === 1 && numerBody[0].type === \"ordgroup\") {\n numerNode = numerBody[0];\n } else {\n numerNode = { type: \"ordgroup\", mode: this.mode, body: numerBody };\n }\n\n if (denomBody.length === 1 && denomBody[0].type === \"ordgroup\") {\n denomNode = denomBody[0];\n } else {\n denomNode = { type: \"ordgroup\", mode: this.mode, body: denomBody };\n }\n\n let node;\n if (funcName === \"\\\\\\\\abovefrac\") {\n node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []);\n } else {\n node = this.callFunction(funcName, [numerNode, denomNode], []);\n }\n return [node];\n } else {\n return body;\n }\n }\n\n /**\n * Handle a subscript or superscript with nice errors.\n */\n handleSupSubscript(\n name // For error reporting.\n ) {\n const symbolToken = this.fetch();\n const symbol = symbolToken.text;\n this.consume();\n this.consumeSpaces(); // ignore spaces before sup/subscript argument\n // Skip over allowed internal nodes such as \\relax\n let group;\n do {\n group = this.parseGroup(name);\n } while (group.type && group.type === \"internal\")\n\n if (!group) {\n throw new ParseError(\"Expected group after '\" + symbol + \"'\", symbolToken);\n }\n\n return group;\n }\n\n /**\n * Converts the textual input of an unsupported command into a text node\n * contained within a color node whose color is determined by errorColor\n */\n formatUnsupportedCmd(text) {\n const textordArray = [];\n\n for (let i = 0; i < text.length; i++) {\n textordArray.push({ type: \"textord\", mode: \"text\", text: text[i] });\n }\n\n const textNode = {\n type: \"text\",\n mode: this.mode,\n body: textordArray\n };\n\n const colorNode = {\n type: \"color\",\n mode: this.mode,\n color: this.settings.errorColor,\n body: [textNode]\n };\n\n return colorNode;\n }\n\n /**\n * Parses a group with optional super/subscripts.\n */\n parseAtom(breakOnTokenText) {\n // The body of an atom is an implicit group, so that things like\n // \\left(x\\right)^2 work correctly.\n const base = this.parseGroup(\"atom\", breakOnTokenText);\n\n // Internal nodes (e.g. \\relax) cannot support super/subscripts.\n // Instead we will pick up super/subscripts with blank base next round.\n if (base && base.type === \"internal\") {\n return base\n }\n\n // In text mode, we don't have superscripts or subscripts\n if (this.mode === \"text\") {\n return base\n }\n\n // Note that base may be empty (i.e. null) at this point.\n\n let superscript;\n let subscript;\n while (true) {\n // Guaranteed in math mode, so eat any spaces first.\n this.consumeSpaces();\n\n // Lex the first token\n const lex = this.fetch();\n\n if (lex.text === \"\\\\limits\" || lex.text === \"\\\\nolimits\") {\n // We got a limit control\n if (base && base.type === \"op\") {\n const limits = lex.text === \"\\\\limits\";\n base.limits = limits;\n base.alwaysHandleSupSub = true;\n } else if (base && base.type === \"operatorname\") {\n if (base.alwaysHandleSupSub) {\n base.limits = lex.text === \"\\\\limits\";\n }\n } else {\n throw new ParseError(\"Limit controls must follow a math operator\", lex);\n }\n this.consume();\n } else if (lex.text === \"^\") {\n // We got a superscript start\n if (superscript) {\n throw new ParseError(\"Double superscript\", lex);\n }\n superscript = this.handleSupSubscript(\"superscript\");\n } else if (lex.text === \"_\") {\n // We got a subscript start\n if (subscript) {\n throw new ParseError(\"Double subscript\", lex);\n }\n subscript = this.handleSupSubscript(\"subscript\");\n } else if (lex.text === \"'\") {\n // We got a prime\n if (superscript) {\n throw new ParseError(\"Double superscript\", lex);\n }\n const prime = { type: \"textord\", mode: this.mode, text: \"\\\\prime\" };\n\n // Many primes can be grouped together, so we handle this here\n const primes = [prime];\n this.consume();\n // Keep lexing tokens until we get something that's not a prime\n while (this.fetch().text === \"'\") {\n // For each one, add another prime to the list\n primes.push(prime);\n this.consume();\n }\n // If there's a superscript following the primes, combine that\n // superscript in with the primes.\n if (this.fetch().text === \"^\") {\n primes.push(this.handleSupSubscript(\"superscript\"));\n }\n // Put everything into an ordgroup as the superscript\n superscript = { type: \"ordgroup\", mode: this.mode, body: primes };\n } else if (uSubsAndSups[lex.text]) {\n // A Unicode subscript or superscript character.\n // We treat these similarly to the unicode-math package.\n // So we render a string of Unicode (sub|super)scripts the\n // same as a (sub|super)script of regular characters.\n const isSub = unicodeSubRegEx.test(lex.text);\n const subsupTokens = [];\n subsupTokens.push(new Token(uSubsAndSups[lex.text]));\n this.consume();\n // Continue fetching tokens to fill out the group.\n while (true) {\n const token = this.fetch().text;\n if (!(uSubsAndSups[token])) { break }\n if (unicodeSubRegEx.test(token) !== isSub) { break }\n subsupTokens.unshift(new Token(uSubsAndSups[token]));\n this.consume();\n }\n // Now create a (sub|super)script.\n const body = this.subparse(subsupTokens);\n if (isSub) {\n subscript = { type: \"ordgroup\", mode: \"math\", body };\n } else {\n superscript = { type: \"ordgroup\", mode: \"math\", body };\n }\n } else {\n // If it wasn't ^, _, a Unicode (sub|super)script, or ', stop parsing super/subscripts\n break;\n }\n }\n\n if (superscript || subscript) {\n if (base && base.type === \"multiscript\" && !base.postscripts) {\n // base is the result of a \\prescript function.\n // Write the sub- & superscripts into the multiscript element.\n base.postscripts = { sup: superscript, sub: subscript };\n return base\n } else {\n // We got either a superscript or subscript, create a supsub\n const isFollowedByDelimiter = (!base || base.type !== \"op\" && base.type !== \"operatorname\")\n ? undefined\n : isDelimiter(this.nextToken.text);\n return {\n type: \"supsub\",\n mode: this.mode,\n base: base,\n sup: superscript,\n sub: subscript,\n isFollowedByDelimiter\n }\n }\n } else {\n // Otherwise return the original body\n return base;\n }\n }\n\n /**\n * Parses an entire function, including its base and all of its arguments.\n */\n parseFunction(\n breakOnTokenText,\n name // For determining its context\n ) {\n const token = this.fetch();\n const func = token.text;\n const funcData = functions[func];\n if (!funcData) {\n return null;\n }\n this.consume(); // consume command token\n\n if (name && name !== \"atom\" && !funcData.allowedInArgument) {\n throw new ParseError(\n \"Got function '\" + func + \"' with no arguments\" + (name ? \" as \" + name : \"\"),\n token\n );\n } else if (this.mode === \"text\" && !funcData.allowedInText) {\n throw new ParseError(\"Can't use function '\" + func + \"' in text mode\", token);\n } else if (this.mode === \"math\" && funcData.allowedInMath === false) {\n throw new ParseError(\"Can't use function '\" + func + \"' in math mode\", token);\n }\n\n const prevAtomType = this.prevAtomType;\n const { args, optArgs } = this.parseArguments(func, funcData);\n this.prevAtomType = prevAtomType;\n return this.callFunction(func, args, optArgs, token, breakOnTokenText);\n }\n\n /**\n * Call a function handler with a suitable context and arguments.\n */\n callFunction(name, args, optArgs, token, breakOnTokenText) {\n const context = {\n funcName: name,\n parser: this,\n token,\n breakOnTokenText\n };\n const func = functions[name];\n if (func && func.handler) {\n return func.handler(context, args, optArgs);\n } else {\n throw new ParseError(`No function handler for ${name}`);\n }\n }\n\n /**\n * Parses the arguments of a function or environment\n */\n parseArguments(\n func, // Should look like \"\\name\" or \"\\begin{name}\".\n funcData\n ) {\n const totalArgs = funcData.numArgs + funcData.numOptionalArgs;\n if (totalArgs === 0) {\n return { args: [], optArgs: [] };\n }\n\n const args = [];\n const optArgs = [];\n\n for (let i = 0; i < totalArgs; i++) {\n let argType = funcData.argTypes && funcData.argTypes[i];\n const isOptional = i < funcData.numOptionalArgs;\n\n if (\n (funcData.primitive && argType == null) ||\n // \\sqrt expands into primitive if optional argument doesn't exist\n (funcData.type === \"sqrt\" && i === 1 && optArgs[0] == null)\n ) {\n argType = \"primitive\";\n }\n\n const arg = this.parseGroupOfType(`argument to '${func}'`, argType, isOptional);\n if (isOptional) {\n optArgs.push(arg);\n } else if (arg != null) {\n args.push(arg);\n } else {\n // should be unreachable\n throw new ParseError(\"Null argument, please report this as a bug\");\n }\n }\n\n return { args, optArgs };\n }\n\n /**\n * Parses a group when the mode is changing.\n */\n parseGroupOfType(name, type, optional) {\n switch (type) {\n case \"size\":\n return this.parseSizeGroup(optional);\n case \"url\":\n return this.parseUrlGroup(optional);\n case \"math\":\n case \"text\":\n return this.parseArgumentGroup(optional, type);\n case \"hbox\": {\n // hbox argument type wraps the argument in the equivalent of\n // \\hbox, which is like \\text but switching to \\textstyle size.\n const group = this.parseArgumentGroup(optional, \"text\");\n return group != null\n ? {\n type: \"styling\",\n mode: group.mode,\n body: [group],\n scriptLevel: \"text\" // simulate \\textstyle\n }\n : null;\n }\n case \"raw\": {\n const token = this.parseStringGroup(\"raw\", optional);\n return token != null\n ? {\n type: \"raw\",\n mode: \"text\",\n string: token.text\n }\n : null;\n }\n case \"primitive\": {\n if (optional) {\n throw new ParseError(\"A primitive argument cannot be optional\");\n }\n const group = this.parseGroup(name);\n if (group == null) {\n throw new ParseError(\"Expected group as \" + name, this.fetch());\n }\n return group;\n }\n case \"original\":\n case null:\n case undefined:\n return this.parseArgumentGroup(optional);\n default:\n throw new ParseError(\"Unknown group type as \" + name, this.fetch());\n }\n }\n\n /**\n * Discard any space tokens, fetching the next non-space token.\n */\n consumeSpaces() {\n while (true) {\n const ch = this.fetch().text;\n // \\ufe0e is the Unicode variation selector to supress emoji. Ignore it.\n if (ch === \" \" || ch === \"\\u00a0\" || ch === \"\\ufe0e\") {\n this.consume();\n } else {\n break\n }\n }\n }\n\n /**\n * Parses a group, essentially returning the string formed by the\n * brace-enclosed tokens plus some position information.\n */\n parseStringGroup(\n modeName, // Used to describe the mode in error messages.\n optional\n ) {\n const argToken = this.gullet.scanArgument(optional);\n if (argToken == null) {\n return null;\n }\n let str = \"\";\n let nextToken;\n while ((nextToken = this.fetch()).text !== \"EOF\") {\n str += nextToken.text;\n this.consume();\n }\n this.consume(); // consume the end of the argument\n argToken.text = str;\n return argToken;\n }\n\n /**\n * Parses a regex-delimited group: the largest sequence of tokens\n * whose concatenated strings match `regex`. Returns the string\n * formed by the tokens plus some position information.\n */\n parseRegexGroup(\n regex,\n modeName // Used to describe the mode in error messages.\n ) {\n const firstToken = this.fetch();\n let lastToken = firstToken;\n let str = \"\";\n let nextToken;\n while ((nextToken = this.fetch()).text !== \"EOF\" && regex.test(str + nextToken.text)) {\n lastToken = nextToken;\n str += lastToken.text;\n this.consume();\n }\n if (str === \"\") {\n throw new ParseError(\"Invalid \" + modeName + \": '\" + firstToken.text + \"'\", firstToken);\n }\n return firstToken.range(lastToken, str);\n }\n\n /**\n * Parses a size specification, consisting of magnitude and unit.\n */\n parseSizeGroup(optional) {\n let res;\n let isBlank = false;\n // don't expand before parseStringGroup\n this.gullet.consumeSpaces();\n if (!optional && this.gullet.future().text !== \"{\") {\n res = this.parseRegexGroup(/^[-+]? *(?:$|\\d+|\\d+\\.\\d*|\\.\\d*) *[a-z]{0,2} *$/, \"size\");\n } else {\n res = this.parseStringGroup(\"size\", optional);\n }\n if (!res) {\n return null;\n }\n if (!optional && res.text.length === 0) {\n // Because we've tested for what is !optional, this block won't\n // affect \\kern, \\hspace, etc. It will capture the mandatory arguments\n // to \\genfrac and \\above.\n res.text = \"0pt\"; // Enable \\above{}\n isBlank = true; // This is here specifically for \\genfrac\n }\n const match = sizeRegEx.exec(res.text);\n if (!match) {\n throw new ParseError(\"Invalid size: '\" + res.text + \"'\", res);\n }\n const data = {\n number: +(match[1] + match[2]), // sign + magnitude, cast to number\n unit: match[3]\n };\n if (!validUnit(data)) {\n throw new ParseError(\"Invalid unit: '\" + data.unit + \"'\", res);\n }\n return {\n type: \"size\",\n mode: this.mode,\n value: data,\n isBlank\n };\n }\n\n /**\n * Parses an URL, checking escaped letters and allowed protocols,\n * and setting the catcode of % as an active character (as in \\hyperref).\n */\n parseUrlGroup(optional) {\n this.gullet.lexer.setCatcode(\"%\", 13); // active character\n this.gullet.lexer.setCatcode(\"~\", 12); // other character\n const res = this.parseStringGroup(\"url\", optional);\n this.gullet.lexer.setCatcode(\"%\", 14); // comment character\n this.gullet.lexer.setCatcode(\"~\", 13); // active character\n if (res == null) {\n return null;\n }\n // hyperref package allows backslashes alone in href, but doesn't\n // generate valid links in such cases; we interpret this as\n // \"undefined\" behaviour, and keep them as-is. Some browser will\n // replace backslashes with forward slashes.\n let url = res.text.replace(/\\\\([#$%&~_^{}])/g, \"$1\");\n url = res.text.replace(/{\\u2044}/g, \"/\");\n return {\n type: \"url\",\n mode: this.mode,\n url\n };\n }\n\n /**\n * Parses an argument with the mode specified.\n */\n parseArgumentGroup(optional, mode) {\n const argToken = this.gullet.scanArgument(optional);\n if (argToken == null) {\n return null;\n }\n const outerMode = this.mode;\n if (mode) {\n // Switch to specified mode\n this.switchMode(mode);\n }\n\n this.gullet.beginGroup();\n const expression = this.parseExpression(false, \"EOF\");\n // TODO: find an alternative way to denote the end\n this.expect(\"EOF\"); // expect the end of the argument\n this.gullet.endGroup();\n const result = {\n type: \"ordgroup\",\n mode: this.mode,\n loc: argToken.loc,\n body: expression\n };\n\n if (mode) {\n // Switch mode back\n this.switchMode(outerMode);\n }\n return result;\n }\n\n /**\n * Parses an ordinary group, which is either a single nucleus (like \"x\")\n * or an expression in braces (like \"{x+y}\") or an implicit group, a group\n * that starts at the current position, and ends right before a higher explicit\n * group ends, or at EOF.\n */\n parseGroup(\n name, // For error reporting.\n breakOnTokenText\n ) {\n const firstToken = this.fetch();\n const text = firstToken.text;\n\n let result;\n // Try to parse an open brace or \\begingroup\n if (text === \"{\" || text === \"\\\\begingroup\" || text === \"\\\\toggle\") {\n this.consume();\n const groupEnd = text === \"{\"\n ? \"}\"\n : text === \"\\\\begingroup\"\n ? \"\\\\endgroup\"\n : \"\\\\endtoggle\";\n\n this.gullet.beginGroup();\n // If we get a brace, parse an expression\n const expression = this.parseExpression(false, groupEnd);\n const lastToken = this.fetch();\n this.expect(groupEnd); // Check that we got a matching closing brace\n this.gullet.endGroup();\n result = {\n type: (lastToken.text === \"\\\\endtoggle\" ? \"toggle\" : \"ordgroup\"),\n mode: this.mode,\n loc: SourceLocation.range(firstToken, lastToken),\n body: expression,\n // A group formed by \\begingroup...\\endgroup is a semi-simple group\n // which doesn't affect spacing in math mode, i.e., is transparent.\n // https://tex.stackexchange.com/questions/1930/\n semisimple: text === \"\\\\begingroup\" || undefined\n };\n } else {\n // If there exists a function with this name, parse the function.\n // Otherwise, just return a nucleus\n result = this.parseFunction(breakOnTokenText, name) || this.parseSymbol();\n if (result == null && text[0] === \"\\\\\" &&\n !Object.prototype.hasOwnProperty.call(implicitCommands, text )) {\n result = this.formatUnsupportedCmd(text);\n this.consume();\n }\n }\n return result;\n }\n\n /**\n * Form ligature-like combinations of characters for text mode.\n * This includes inputs like \"--\", \"---\", \"``\" and \"''\".\n * The result will simply replace multiple textord nodes with a single\n * character in each value by a single textord node having multiple\n * characters in its value. The representation is still ASCII source.\n * The group will be modified in place.\n */\n formLigatures(group) {\n let n = group.length - 1;\n for (let i = 0; i < n; ++i) {\n const a = group[i];\n const v = a.text;\n if (v === \"-\" && group[i + 1].text === \"-\") {\n if (i + 1 < n && group[i + 2].text === \"-\") {\n group.splice(i, 3, {\n type: \"textord\",\n mode: \"text\",\n loc: SourceLocation.range(a, group[i + 2]),\n text: \"---\"\n });\n n -= 2;\n } else {\n group.splice(i, 2, {\n type: \"textord\",\n mode: \"text\",\n loc: SourceLocation.range(a, group[i + 1]),\n text: \"--\"\n });\n n -= 1;\n }\n }\n if ((v === \"'\" || v === \"`\") && group[i + 1].text === v) {\n group.splice(i, 2, {\n type: \"textord\",\n mode: \"text\",\n loc: SourceLocation.range(a, group[i + 1]),\n text: v + v\n });\n n -= 1;\n }\n }\n }\n\n /**\n * Parse a single symbol out of the string. Here, we handle single character\n * symbols and special functions like \\verb.\n */\n parseSymbol() {\n const nucleus = this.fetch();\n let text = nucleus.text;\n\n if (/^\\\\verb[^a-zA-Z]/.test(text)) {\n this.consume();\n let arg = text.slice(5);\n const star = arg.charAt(0) === \"*\";\n if (star) {\n arg = arg.slice(1);\n }\n // Lexer's tokenRegex is constructed to always have matching\n // first/last characters.\n if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) {\n throw new ParseError(`\\\\verb assertion failed --\n please report what input caused this bug`);\n }\n arg = arg.slice(1, -1); // remove first and last char\n return {\n type: \"verb\",\n mode: \"text\",\n body: arg,\n star\n };\n }\n // At this point, we should have a symbol, possibly with accents.\n // First expand any accented base symbol according to unicodeSymbols.\n if (Object.prototype.hasOwnProperty.call(unicodeSymbols, text[0]) &&\n this.mode === \"math\" && !symbols[this.mode][text[0]]) {\n // This behavior is not strict (XeTeX-compatible) in math mode.\n if (this.settings.strict && this.mode === \"math\") {\n throw new ParseError(`Accented Unicode text character \"${text[0]}\" used in ` + `math mode`,\n nucleus\n );\n }\n text = unicodeSymbols[text[0]] + text.slice(1);\n }\n // Strip off any combining characters\n const match = this.mode === \"math\"\n ? combiningDiacriticalMarksEndRegex.exec(text)\n : null;\n if (match) {\n text = text.substring(0, match.index);\n if (text === \"i\") {\n text = \"\\u0131\"; // dotless i, in math and text mode\n } else if (text === \"j\") {\n text = \"\\u0237\"; // dotless j, in math and text mode\n }\n }\n // Recognize base symbol\n let symbol;\n if (symbols[this.mode][text]) {\n let group = symbols[this.mode][text].group;\n if (group === \"bin\" && binLeftCancellers.includes(this.prevAtomType)) {\n // Change from a binary operator to a unary (prefix) operator\n group = \"open\";\n }\n const loc = SourceLocation.range(nucleus);\n let s;\n if (Object.prototype.hasOwnProperty.call(ATOMS, group )) {\n const family = group;\n s = {\n type: \"atom\",\n mode: this.mode,\n family,\n loc,\n text\n };\n if ((family === \"rel\" || family === \"bin\") && this.prevAtomType === \"text\") {\n if (textRegEx.test(loc.lexer.input.slice(loc.end))) {\n s.needsSpacing = true; // Fix a MathML bug.\n }\n }\n } else {\n if (asciiFromScript[text]) {\n // Unicode 14 disambiguates chancery from roundhand.\n // See https://www.unicode.org/charts/PDF/U1D400.pdf\n this.consume();\n const nextCode = this.fetch().text.charCodeAt(0);\n // mathcal is Temml default. Use mathscript if called for.\n const font = nextCode === 0xfe01 ? \"mathscr\" : \"mathcal\";\n if (nextCode === 0xfe00 || nextCode === 0xfe01) { this.consume(); }\n return {\n type: \"font\",\n mode: \"math\",\n font,\n body: { type: \"mathord\", mode: \"math\", loc, text: asciiFromScript[text] }\n }\n }\n // Default ord character. No disambiguation necessary.\n s = {\n type: group,\n mode: this.mode,\n loc,\n text\n };\n }\n symbol = s;\n } else if (text.charCodeAt(0) >= 0x80 || combiningDiacriticalMarksEndRegex.exec(text)) {\n // no symbol for e.g. ^\n if (this.settings.strict && this.mode === \"math\") {\n throw new ParseError(`Unicode text character \"${text[0]}\" used in math mode`, nucleus)\n }\n // All nonmathematical Unicode characters are rendered as if they\n // are in text mode (wrapped in \\text) because that's what it\n // takes to render them in LaTeX.\n symbol = {\n type: \"textord\",\n mode: \"text\",\n loc: SourceLocation.range(nucleus),\n text\n };\n } else {\n return null; // EOF, ^, _, {, }, etc.\n }\n this.consume();\n // Transform combining characters into accents\n if (match) {\n for (let i = 0; i < match[0].length; i++) {\n const accent = match[0][i];\n if (!unicodeAccents[accent]) {\n throw new ParseError(`Unknown accent ' ${accent}'`, nucleus);\n }\n const command = unicodeAccents[accent][this.mode] ||\n unicodeAccents[accent].text;\n if (!command) {\n throw new ParseError(`Accent ${accent} unsupported in ${this.mode} mode`, nucleus);\n }\n symbol = {\n type: \"accent\",\n mode: this.mode,\n loc: SourceLocation.range(nucleus),\n label: command,\n isStretchy: false,\n base: symbol\n };\n }\n }\n return symbol;\n }\n}\n\n/**\n * Parses an expression using a Parser, then returns the parsed result.\n */\nconst parseTree = function(toParse, settings) {\n if (!(typeof toParse === \"string\" || toParse instanceof String)) {\n throw new TypeError(\"Temml can only parse string typed expression\")\n }\n const parser = new Parser(toParse, settings);\n // Blank out any \\df@tag to avoid spurious \"Duplicate \\tag\" errors\n delete parser.gullet.macros.current[\"\\\\df@tag\"];\n\n let tree = parser.parse();\n\n // LaTeX ignores a \\tag placed outside an AMS environment.\n if (!(tree.length > 0 && tree[0].type && tree[0].type === \"array\" && tree[0].addEqnNum)) {\n // If the input used \\tag, it will set the \\df@tag macro to the tag.\n // In this case, we separately parse the tag and wrap the tree.\n if (parser.gullet.macros.get(\"\\\\df@tag\")) {\n if (!settings.displayMode) {\n throw new ParseError(\"\\\\tag works only in display mode\")\n }\n parser.gullet.feed(\"\\\\df@tag\");\n tree = [\n {\n type: \"tag\",\n mode: \"text\",\n body: tree,\n tag: parser.parse()\n }\n ];\n }\n }\n\n return tree\n};\n\n/**\n * This file contains information about the style that the mathmlBuilder carries\n * around with it. Data is held in an `Style` object, and when\n * recursing, a new `Style` object can be created with the `.with*` functions.\n */\n\nconst subOrSupLevel = [2, 2, 3, 3];\n\n/**\n * This is the main Style class. It contains the current style.level, color, and font.\n *\n * Style objects should not be modified. To create a new Style with\n * different properties, call a `.with*` method.\n */\nclass Style {\n constructor(data) {\n // Style.level can be 0 | 1 | 2 | 3, which correspond to\n // displaystyle, textstyle, scriptstyle, and scriptscriptstyle.\n // style.level usually does not directly set MathML's script level. MathML does that itself.\n // However, Chromium does not stop shrinking after scriptscriptstyle, so we do explicitly\n // set a scriptlevel attribute in those conditions.\n // We also use style.level to track math style so that we can get the correct\n // scriptlevel when needed in supsub.js, mathchoice.js, or for dimensions in em.\n this.level = data.level;\n this.color = data.color; // string | void\n // A font family applies to a group of fonts (i.e. SansSerif), while a font\n // represents a specific font (i.e. SansSerif Bold).\n // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm\n this.font = data.font || \"\"; // string\n this.fontFamily = data.fontFamily || \"\"; // string\n this.fontSize = data.fontSize || 1.0; // number\n this.fontWeight = data.fontWeight || \"\";\n this.fontShape = data.fontShape || \"\";\n this.maxSize = data.maxSize; // [number, number]\n }\n\n /**\n * Returns a new style object with the same properties as \"this\". Properties\n * from \"extension\" will be copied to the new style object.\n */\n extend(extension) {\n const data = {\n level: this.level,\n color: this.color,\n font: this.font,\n fontFamily: this.fontFamily,\n fontSize: this.fontSize,\n fontWeight: this.fontWeight,\n fontShape: this.fontShape,\n maxSize: this.maxSize\n };\n\n for (const key in extension) {\n if (Object.prototype.hasOwnProperty.call(extension, key)) {\n data[key] = extension[key];\n }\n }\n\n return new Style(data);\n }\n\n withLevel(n) {\n return this.extend({\n level: n\n });\n }\n\n incrementLevel() {\n return this.extend({\n level: Math.min(this.level + 1, 3)\n });\n }\n\n inSubOrSup() {\n return this.extend({\n level: subOrSupLevel[this.level]\n })\n }\n\n /**\n * Create a new style object with the given color.\n */\n withColor(color) {\n return this.extend({\n color: color\n });\n }\n\n /**\n * Creates a new style object with the given math font or old text font.\n * @type {[type]}\n */\n withFont(font) {\n return this.extend({\n font\n });\n }\n\n /**\n * Create a new style objects with the given fontFamily.\n */\n withTextFontFamily(fontFamily) {\n return this.extend({\n fontFamily,\n font: \"\"\n });\n }\n\n /**\n * Creates a new style object with the given font size\n */\n withFontSize(num) {\n return this.extend({\n fontSize: num\n });\n }\n\n /**\n * Creates a new style object with the given font weight\n */\n withTextFontWeight(fontWeight) {\n return this.extend({\n fontWeight,\n font: \"\"\n });\n }\n\n /**\n * Creates a new style object with the given font weight\n */\n withTextFontShape(fontShape) {\n return this.extend({\n fontShape,\n font: \"\"\n });\n }\n\n /**\n * Gets the CSS color of the current style object\n */\n getColor() {\n return this.color;\n }\n}\n\n/* Temml Post Process\n * Populate the text contents of each \\ref & \\eqref\n *\n * As with other Temml code, this file is released under terms of the MIT license.\n * https://mit-license.org/\n */\n\nconst version = \"0.11.10\";\n\nfunction postProcess(block) {\n const labelMap = {};\n let i = 0;\n\n // Get a collection of the parents of each \\tag & auto-numbered equation\n const amsEqns = document.getElementsByClassName('tml-eqn');\n for (let parent of amsEqns) {\n // AMS automatically numbered equation.\n // Assign an id.\n i += 1;\n parent.setAttribute(\"id\", \"tml-eqn-\" + String(i));\n // No need to write a number into the text content of the element.\n // A CSS counter has done that even if this postProcess() function is not used.\n\n // Find any \\label that refers to an AMS automatic eqn number.\n while (true) {\n if (parent.tagName === \"mtable\") { break }\n const labels = parent.getElementsByClassName(\"tml-label\");\n if (labels.length > 0) {\n const id = parent.attributes.id.value;\n labelMap[id] = String(i);\n break\n } else {\n parent = parent.parentElement;\n }\n }\n }\n\n // Find \\labels associated with \\tag\n const taggedEqns = document.getElementsByClassName('tml-tageqn');\n for (const parent of taggedEqns) {\n const labels = parent.getElementsByClassName(\"tml-label\");\n if (labels.length > 0) {\n const tags = parent.getElementsByClassName(\"tml-tag\");\n if (tags.length > 0) {\n const id = parent.attributes.id.value;\n labelMap[id] = tags[0].textContent;\n }\n }\n }\n\n // Populate \\ref & \\eqref text content\n const refs = block.getElementsByClassName(\"tml-ref\");\n [...refs].forEach(ref => {\n const attr = ref.getAttribute(\"href\");\n let str = labelMap[attr.slice(1)];\n if (ref.className.indexOf(\"tml-eqref\") === -1) {\n // \\ref. Omit parens.\n str = str.replace(/^\\(/, \"\");\n str = str.replace(/\\)$/, \"\");\n } else {\n // \\eqref. Include parens\n if (str.charAt(0) !== \"(\") { str = \"(\" + str; }\n if (str.slice(-1) !== \")\") { str = str + \")\"; }\n }\n const mtext = document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"mtext\");\n mtext.appendChild(document.createTextNode(str));\n const math = document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"math\");\n math.appendChild(mtext);\n ref.textContent = '';\n ref.appendChild(math);\n });\n}\n\nconst findEndOfMath = function(delimiter, text, startIndex) {\n // Adapted from\n // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx\n let index = startIndex;\n let braceLevel = 0;\n\n const delimLength = delimiter.length;\n\n while (index < text.length) {\n const character = text[index];\n\n if (braceLevel <= 0 && text.slice(index, index + delimLength) === delimiter) {\n return index;\n } else if (character === \"\\\\\") {\n index++;\n } else if (character === \"{\") {\n braceLevel++;\n } else if (character === \"}\") {\n braceLevel--;\n }\n\n index++;\n }\n\n return -1;\n};\n\nconst escapeRegex = function(string) {\n return string.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n};\n\nconst amsRegex = /^\\\\(?:begin|(?:eq)?ref){/;\n\nconst splitAtDelimiters = function(text, delimiters) {\n let index;\n const data = [];\n\n const regexLeft = new RegExp(\n \"(\" + delimiters.map((x) => escapeRegex(x.left)).join(\"|\") + \")\"\n );\n\n while (true) {\n index = text.search(regexLeft);\n if (index === -1) {\n break;\n }\n if (index > 0) {\n data.push({\n type: \"text\",\n data: text.slice(0, index)\n });\n text = text.slice(index); // now text starts with delimiter\n }\n // ... so this always succeeds:\n const i = delimiters.findIndex((delim) => text.startsWith(delim.left));\n index = findEndOfMath(delimiters[i].right, text, delimiters[i].left.length);\n if (index === -1) {\n break;\n }\n const rawData = text.slice(0, index + delimiters[i].right.length);\n const math = amsRegex.test(rawData)\n ? rawData\n : text.slice(delimiters[i].left.length, index);\n data.push({\n type: \"math\",\n data: math,\n rawData,\n display: delimiters[i].display\n });\n text = text.slice(index + delimiters[i].right.length);\n }\n\n if (text !== \"\") {\n data.push({\n type: \"text\",\n data: text\n });\n }\n\n return data;\n};\n\nconst defaultDelimiters = [\n { left: \"$$\", right: \"$$\", display: true },\n { left: \"\\\\(\", right: \"\\\\)\", display: false },\n // LaTeX uses $…$, but it ruins the display of normal `$` in text:\n // {left: \"$\", right: \"$\", display: false},\n // $ must come after $$\n\n // Render AMS environments even if outside $$…$$ delimiters.\n { left: \"\\\\begin{equation}\", right: \"\\\\end{equation}\", display: true },\n { left: \"\\\\begin{equation*}\", right: \"\\\\end{equation*}\", display: true },\n { left: \"\\\\begin{align}\", right: \"\\\\end{align}\", display: true },\n { left: \"\\\\begin{align*}\", right: \"\\\\end{align*}\", display: true },\n { left: \"\\\\begin{alignat}\", right: \"\\\\end{alignat}\", display: true },\n { left: \"\\\\begin{alignat*}\", right: \"\\\\end{alignat*}\", display: true },\n { left: \"\\\\begin{gather}\", right: \"\\\\end{gather}\", display: true },\n { left: \"\\\\begin{gather*}\", right: \"\\\\end{gather*}\", display: true },\n { left: \"\\\\begin{CD}\", right: \"\\\\end{CD}\", display: true },\n // Ditto \\ref & \\eqref\n { left: \"\\\\ref{\", right: \"}\", display: false },\n { left: \"\\\\eqref{\", right: \"}\", display: false },\n\n { left: \"\\\\[\", right: \"\\\\]\", display: true }\n];\n\nconst firstDraftDelimiters = {\n \"$\": [\n { left: \"$$\", right: \"$$\", display: true },\n { left: \"$`\", right: \"`$\", display: false },\n { left: \"$\", right: \"$\", display: false }\n ],\n \"(\": [\n { left: \"\\\\[\", right: \"\\\\]\", display: true },\n { left: \"\\\\(\", right: \"\\\\)\", display: false }\n ]\n};\n\nconst amsDelimiters = [\n { left: \"\\\\begin{equation}\", right: \"\\\\end{equation}\", display: true },\n { left: \"\\\\begin{equation*}\", right: \"\\\\end{equation*}\", display: true },\n { left: \"\\\\begin{align}\", right: \"\\\\end{align}\", display: true },\n { left: \"\\\\begin{align*}\", right: \"\\\\end{align*}\", display: true },\n { left: \"\\\\begin{alignat}\", right: \"\\\\end{alignat}\", display: true },\n { left: \"\\\\begin{alignat*}\", right: \"\\\\end{alignat*}\", display: true },\n { left: \"\\\\begin{gather}\", right: \"\\\\end{gather}\", display: true },\n { left: \"\\\\begin{gather*}\", right: \"\\\\end{gather*}\", display: true },\n { left: \"\\\\begin{CD}\", right: \"\\\\end{CD}\", display: true },\n { left: \"\\\\ref{\", right: \"}\", display: false },\n { left: \"\\\\eqref{\", right: \"}\", display: false }\n];\n\nconst delimitersFromKey = key => {\n if (key === \"$\" || key === \"(\") {\n return firstDraftDelimiters[key];\n } else if (key === \"$+\" || key === \"(+\") {\n const firstDraft = firstDraftDelimiters[key.slice(0, 1)];\n return firstDraft.concat(amsDelimiters)\n } else if (key === \"ams\") {\n return amsDelimiters\n } else if (key === \"all\") {\n return (firstDraftDelimiters[\"(\"]).concat(firstDraftDelimiters[\"$\"]).concat(amsDelimiters)\n } else {\n return defaultDelimiters\n }\n};\n\n/* Note: optionsCopy is mutated by this method. If it is ever exposed in the\n * API, we should copy it before mutating.\n */\nconst renderMathInText = function(text, optionsCopy) {\n const data = splitAtDelimiters(text, optionsCopy.delimiters);\n if (data.length === 1 && data[0].type === \"text\") {\n // There is no formula in the text.\n // Let's return null which means there is no need to replace\n // the current text node with a new one.\n return null;\n }\n\n const fragment = document.createDocumentFragment();\n\n for (let i = 0; i < data.length; i++) {\n if (data[i].type === \"text\") {\n fragment.appendChild(document.createTextNode(data[i].data));\n } else {\n const span = document.createElement(\"span\");\n let math = data[i].data;\n // Override any display mode defined in the settings with that\n // defined by the text itself\n optionsCopy.displayMode = data[i].display;\n try {\n if (optionsCopy.preProcess) {\n math = optionsCopy.preProcess(math);\n }\n // Importing render() from temml.js would be a circular dependency.\n // So call the global version.\n // eslint-disable-next-line no-undef\n temml.render(math, span, optionsCopy);\n } catch (e) {\n if (!(e instanceof ParseError)) {\n throw e;\n }\n optionsCopy.errorCallback(\n \"Temml auto-render: Failed to parse `\" + data[i].data + \"` with \",\n e\n );\n fragment.appendChild(document.createTextNode(data[i].rawData));\n continue;\n }\n fragment.appendChild(span);\n }\n }\n\n return fragment;\n};\n\nconst renderElem = function(elem, optionsCopy) {\n for (let i = 0; i < elem.childNodes.length; i++) {\n const childNode = elem.childNodes[i];\n if (childNode.nodeType === 3) {\n // Text node\n const frag = renderMathInText(childNode.textContent, optionsCopy);\n if (frag) {\n i += frag.childNodes.length - 1;\n elem.replaceChild(frag, childNode);\n }\n } else if (childNode.nodeType === 1) {\n // Element node\n const className = \" \" + childNode.className + \" \";\n const shouldRender =\n optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === -1 &&\n optionsCopy.ignoredClasses.every((x) => className.indexOf(\" \" + x + \" \") === -1);\n\n if (shouldRender) {\n renderElem(childNode, optionsCopy);\n }\n }\n // Otherwise, it's something else, and ignore it.\n }\n};\n\nconst renderMathInElement = function(elem, options) {\n if (!elem) {\n throw new Error(\"No element provided to render\");\n }\n\n const optionsCopy = {};\n\n // Object.assign(optionsCopy, option)\n for (const option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option)) {\n optionsCopy[option] = options[option];\n }\n }\n\n if (optionsCopy.fences) {\n optionsCopy.delimiters = delimitersFromKey(optionsCopy.fences);\n } else {\n optionsCopy.delimiters = optionsCopy.delimiters || defaultDelimiters;\n }\n optionsCopy.ignoredTags = optionsCopy.ignoredTags || [\n \"script\",\n \"noscript\",\n \"style\",\n \"textarea\",\n \"pre\",\n \"code\",\n \"option\"\n ];\n optionsCopy.ignoredClasses = optionsCopy.ignoredClasses || [];\n // eslint-disable-next-line no-console\n optionsCopy.errorCallback = optionsCopy.errorCallback || console.error;\n\n // Enable sharing of global macros defined via `\\gdef` between different\n // math elements within a single call to `renderMathInElement`.\n optionsCopy.macros = optionsCopy.macros || {};\n\n renderElem(elem, optionsCopy);\n postProcess(elem);\n};\n\n/* eslint no-console:0 */\n/**\n * This is the main entry point for Temml. Here, we expose functions for\n * rendering expressions either to DOM nodes or to markup strings.\n *\n * We also expose the ParseError class to check if errors thrown from Temml are\n * errors in the expression, or errors in javascript handling.\n */\n\n\n/**\n * @type {import('./temml').render}\n * Parse and build an expression, and place that expression in the DOM node\n * given.\n */\nlet render = function(expression, baseNode, options = {}) {\n baseNode.textContent = \"\";\n const alreadyInMathElement = baseNode.tagName.toLowerCase() === \"math\";\n if (alreadyInMathElement) { options.wrap = \"none\"; }\n const math = renderToMathMLTree(expression, options);\n if (alreadyInMathElement) {\n // The <math> element already exists. Populate it.\n baseNode.textContent = \"\";\n math.children.forEach(e => { baseNode.appendChild(e.toNode()); });\n } else if (math.children.length > 1) {\n baseNode.textContent = \"\";\n math.children.forEach(e => { baseNode.appendChild(e.toNode()); });\n } else {\n baseNode.appendChild(math.toNode());\n }\n};\n\n// Temml's styles don't work properly in quirks mode. Print out an error, and\n// disable rendering.\nif (typeof document !== \"undefined\") {\n if (document.compatMode !== \"CSS1Compat\") {\n typeof console !== \"undefined\" &&\n console.warn(\n \"Warning: Temml doesn't work in quirks mode. Make sure your \" +\n \"website has a suitable doctype.\"\n );\n\n render = function() {\n throw new ParseError(\"Temml doesn't work in quirks mode.\");\n };\n }\n}\n\n/**\n * @type {import('./temml').renderToString}\n * Parse and build an expression, and return the markup for that.\n */\nconst renderToString = function(expression, options) {\n const markup = renderToMathMLTree(expression, options).toMarkup();\n return markup;\n};\n\n/**\n * @type {import('./temml').generateParseTree}\n * Parse an expression and return the parse tree.\n */\nconst generateParseTree = function(expression, options) {\n const settings = new Settings(options);\n return parseTree(expression, settings);\n};\n\n/**\n * @type {import('./temml').definePreamble}\n * Take an expression which contains a preamble.\n * Parse it and return the macros.\n */\nconst definePreamble = function(expression, options) {\n const settings = new Settings(options);\n settings.macros = {};\n if (!(typeof expression === \"string\" || expression instanceof String)) {\n throw new TypeError(\"Temml can only parse string typed expression\")\n }\n const parser = new Parser(expression, settings, true);\n // Blank out any \\df@tag to avoid spurious \"Duplicate \\tag\" errors\n delete parser.gullet.macros.current[\"\\\\df@tag\"];\n const macros = parser.parse();\n return macros\n};\n\n/**\n * If the given error is a Temml ParseError,\n * renders the invalid LaTeX as a span with hover title giving the Temml\n * error message. Otherwise, simply throws the error.\n */\nconst renderError = function(error, expression, options) {\n if (options.throwOnError || !(error instanceof ParseError)) {\n throw error;\n }\n const node = new Span([\"temml-error\"], [new TextNode$1(expression + \"\\n\\n\" + error.toString())]);\n node.style.color = options.errorColor;\n node.style.whiteSpace = \"pre-line\";\n return node;\n};\n\n/**\n * @type {import('./temml').renderToMathMLTree}\n * Generates and returns the Temml build tree. This is used for advanced\n * use cases (like rendering to custom output).\n */\nconst renderToMathMLTree = function(expression, options) {\n const settings = new Settings(options);\n try {\n const tree = parseTree(expression, settings);\n const style = new Style({\n level: settings.displayMode ? StyleLevel.DISPLAY : StyleLevel.TEXT,\n maxSize: settings.maxSize\n });\n return buildMathML(tree, expression, style, settings);\n } catch (error) {\n return renderError(error, expression, settings);\n }\n};\n\n/** @type {import('./temml').default} */\nvar temml$1 = {\n /**\n * Current Temml version\n */\n version: version,\n /**\n * Renders the given LaTeX into MathML, and adds\n * it as a child to the specified DOM node.\n */\n render,\n /**\n * Renders the given LaTeX into MathML string,\n * for sending to the client.\n */\n renderToString,\n /**\n * Finds all the math delimiters in a given element of a running HTML document\n * and converts the contents of each instance into a <math> element.\n */\n renderMathInElement,\n /**\n * Post-process an entire HTML block.\n * Writes AMS auto-numbers and implements \\ref{}.\n * Typcally called once, after a loop has rendered many individual spans.\n */\n postProcess,\n /**\n * Temml error, usually during parsing.\n */\n ParseError,\n /**\n * Creates a set of macros with document-wide scope.\n */\n definePreamble,\n /**\n * Parses the given LaTeX into Temml's internal parse tree structure,\n * without rendering to HTML or MathML.\n *\n * NOTE: This method is not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */\n __parse: generateParseTree,\n /**\n * Renders the given LaTeX into a MathML internal DOM tree\n * representation, without flattening that representation to a string.\n *\n * NOTE: This method is not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */\n __renderToMathMLTree: renderToMathMLTree,\n /**\n * adds a new symbol to builtin symbols table\n */\n __defineSymbol: defineSymbol,\n /**\n * adds a new macro to builtin macro list\n */\n __defineMacro: defineMacro\n};\n\nexport { temml$1 as default };\n"],"names":["ParseError","message","token","error","start","loc","input","end","underlined","left","right","self","deflt","setting","defaultIfUndefined","uppercase","hyphenate","str","ESCAPE_LOOKUP","ESCAPE_REGEX","escape","text","match","getBaseElem","group","isCharacterBox","baseElem","assert","value","protocolFromUrl","url","protocol","round","n","utils","Settings","options","context","_functions","_mathmlGroupBuilders","defineFunction","type","names","props","handler","mathmlBuilder","data","i","defineFunctionBuilders","normalizeArgument","arg","ordargument","DocumentFragment","children","className","frag","markup","toText","child","createClass","classes","cls","initNode","style","toNode","tagName","node","attr","toMarkup","styles","Span","attribute","TextNode$1","AnchorNode","href","Img","src","alt","newDocumentFragment","MathNode","name","TextNode","wrapWithMstyle","expression","mathMLTree","estimatedWidth","width","item","ch","codePoint","stretchyCodePoint","mathMLnode","label","crookedWides","accentNode","mo","stretchy","ATOMS","NON_ATOMS","symbols","defineSymbol","mode","replace","acceptUnicodeChar","math","accent","bin","close","inner","mathord","op","open","punct","rel","spacing","textord","ligatures","mathTextSymbols","textSymbols","letters","narrow","wideChar","openDelims","closeDelims","setLineBreaks","wrapMode","isDisplayMode","mtrs","mrows","block","numTopLevelEquals","level","mtd","element","next","glueIsFreeOfNobreak","j","nd","mtr","mtable","makeText","copyChar","newRow","mtext","consolidateText","mrow","canConsolidate","grandChild","L","key","makeRow","body","semisimple","isNumberPunctuation","isComma","followingNode","isRel","buildExpression","buildGroup$1","groups","groupArray","lastGroup","base","buildExpressionRow","glue$1","_","labelContainers","getLabel","parent","taggedExpression","tag","leqno","rowArray","table","buildMathML","tree","texExpression","settings","wrap","n1","wrapper","annotation","smalls","smallNudge","mediumNudge","largeNudge","mathmlBuilder$a","needsWbkVertShift","needsWebkitVerticalShift","isVec","vecPostfix","wbkPostfix","nonStretchyAccents","combiningChar","args","isStretchy","parser","funcName","ptPerUnit","validUnits","validUnit","unit","emScale","styleLevel","scriptLevel","calculateSize","sizeValue","number","padding$1","paddedNode","lspace","rspace","mustSmash","row","mpadded","labelSize","size","munderoverNode","fName","below","arrowNode","isEq","minWidth","labelStyle","minArrowWidth","dummyWidth","emptyLabel","dummyNode","space","upperNode","lowerNode","gotUpper","gotLower","optArgs","arrowComponent","lowerArrowBody","upperArrowBelow","topLabel","botLabel","topArrow","botArrow","raiseNode","botNode","_environments","defineEnvironment","assertNodeType","assertSymbolNodeType","typedNode","checkSymbolNodeType","cdArrowFunctionName","newCell","isStartOfArrow","isLabelEnd","endChar","cdArrow","arrowChar","labels","leftLabel","bareArrow","sizedArrow","rightLabel","arrowGroup","arrow","parseCD","parsedRows","rowNodes","cell","labelNum","inLabel","k","ordGroup","phantom","bordermatrixParseTree","matrix","delimiters","leftColumnBody","phantomBody","topRowBody","leftColumn","topWrapper","mover","SourceLocation","lexer","first","second","Token","endToken","StyleLevel","_macros","defineMacro","macros","nextToken","stringFromArg","digitToNumber","nextCharNumber","numStr","appendCharNumbers","digit","recreateArgStr","tokens","expectedLoc","actualLoc","dotsByToken","thedots","spaceAfterDots","replaceVert","argStr","replaceStr","regEx","pdvHelper","numerator","denoms","power","numOp","denominator","e","chemParse","stateMachine","tex","texify","mhchemParser","state","buffer","lastInput","watchdog","output","machine","t","iterateTransitions","matches","task","iA","o","a","b","iB","m","begExcl","begIncl","endIncl","endExcl","beg2Excl","beg2Incl","end2Incl","end2Excl","combine","_match","pattern","_findObserveGroups","endChars","braces","match1","group2","matchRet","mm","ret","stateArray","transitions","p","patternArray","tmp","isAfterD","c1","c2","c3","c4","hyphenFollows","withSpace","entityFollows","rd","rq","p1","md","mq","b5","mrm","isInner","res","cee","inputi","buf","c","d","b6","getHLines","hlineInfo","nxt","validateAmsEnvironmentContext","sizeRegEx$1","arrayGaps","arraystretch","arraycolsepStr","arraycolsep","checkCellForLabels","rowLabel","getAutoTag","parseArray","cols","envClasses","autoTag","singleRow","emptySingleRow","maxNumCols","rowGaps","hLinesBeforeRow","tags","beginRow","endRow","dCellStyle","envName","alignMap","glue","glueNode","mathmlBuilder$9","tbl","numRows","hlines","rw","cellLevel","align","numColumns","tagElement","mustSquashRow","pad","sidePadding","sidePadUnit","arraySidePad","numCols","sidePad","hand","prevTypeWasAlign","iStart","iEnd","sep","iCol","colAlign","alignedHandler","isSplit","numMaths","isAlignedAt","arg0","curMaths","nde","ca","payload","environments","env","result","code","htmlRegEx","htmlOrNameRegEx","RGBregEx","rgbRegEx","xcolorHtmlRegEx","toHex","num","xcolors","colorFromSpec","model","spec","color","validateColor","macroName","mathmlBuilder$8","expr","breakOnTokenText","newLine","globalMap","checkControlSequence","tok","getRHS","letCommand","global","macro","numArgs","insert","middle","exists","delimiterSizes","dels","isDelimiter","sizeToMaxHeight","checkDelimiter","delim","symDelim","needExplicitStretch","delimNode","assertParsed","leftNode","rightNode","lastElement","textNode","middleNode","padding","mathmlBuilder$7","borderColor","backgroundColor","borderSpec","backgroundSpec","nameGroup","endNameToken","isLongVariableName","font","parseNodeType","mathmlBuilder$6","newStyle","mathGroup","mi","bogus","fontAliases","func","fontStyle","stylArray","mathmlBuilder$5","childOptions","numer","denom","ruleWidth","withDelims","leftOp","rightOp","hasBarLine","leftDelim","rightDelim","replaceWith","delimFromValue","delimString","barNode","barSize","styl","textOrd","mathmlBuilder$4","trustContext","attributes","keyVal","sizeData","height","totalheight","depth","graphicStyle","mathFunction","muUnit","dimension","spaceCharacter","character","invalidIdRegEx","textModeLap","strut","phantomInner","offset","outerMode","chooseStyle","textAtomTypes","mathmlBuilder$3","doSpacing","mustPromote","mord","arr","binrelClass","atom","baseArg","shiftedArg","mclass","baseOp","buildGroup","el","noneNode","prescripts","postscripts","prescriptsNode","preSub","preSup","postSub","postSup","ordAtomTypes","noSuccessor","ordTypes","setSpacing","mathmlBuilder$2","operator","lead","trail","singleCharBigOps","isSymbol","singleCharIntegrals","prevAtomType","mathmlBuilder$1","isAllString","word","fragment","dy","amount","shift","rule","numRegEx","unicodeNumSubs","unicodeNumSups","sizeMap","factor","smashHeight","smashDepth","tbArg","letter","xHeights","index","styleMap","styleAttributes","symbolRegEx","smallPad","mediumPad","largePad","isBrace","isOver","isSup","appendApplyFunction","appendSpace","needsLeadingSpace","childStyle","sub","sup","nodeType","short","arrows","isArrow","fontMap","getVariant","script","frak","bbb","bold","boldItalic","boldsf","bisf","variantChar","variant","smallCaps","numberRegEx","latinRegEx","primes","italicNumber","mn","defaultVariant","origText","cssSpace","regularSpace","textFontFamilies","textFontWeights","textFontShapes","styleWithFont","makeVerb","functions","spaceRegexString","controlWordRegexString","controlSymbolRegexString","controlWordWhitespaceRegexString","controlSpaceRegexString","combiningDiacriticalMarkString","combiningDiacriticalMarksEndRegex","tokenRegexString","Lexer","char","pos","nlIndex","Namespace","builtins","globalMacros","undefs","undef","top","implicitCommands","MacroExpander","newMode","isOptional","delims","isDelimited","expandableOnly","topToken","expansion","oldStackLength","definition","catcode","stripped","bodyLexer","unicodeSubRegEx","uSubsAndSups","asciiFromScript","unicodeAccents","unicodeSymbols","binLeftCancellers","sizeRegEx","textRegEx","Parser","isPreamble","consume","parse","oldToken","breakOnInfix","breakOnMiddle","lex","overIndex","numerNode","denomNode","numerBody","denomBody","symbolToken","symbol","textordArray","superscript","subscript","limits","prime","isSub","subsupTokens","isFollowedByDelimiter","funcData","totalArgs","argType","optional","modeName","argToken","regex","firstToken","lastToken","isBlank","groupEnd","v","nucleus","star","s","family","nextCode","command","parseTree","toParse","subOrSupLevel","Style","extension","fontFamily","fontWeight","fontShape","version","postProcess","labelMap","amsEqns","id","taggedEqns","ref","findEndOfMath","delimiter","startIndex","braceLevel","delimLength","escapeRegex","string","amsRegex","splitAtDelimiters","regexLeft","x","rawData","defaultDelimiters","firstDraftDelimiters","amsDelimiters","delimitersFromKey","renderMathInText","optionsCopy","span","renderElem","elem","childNode","renderMathInElement","option","render","baseNode","alreadyInMathElement","renderToMathMLTree","renderToString","generateParseTree","definePreamble","renderError","temml$1"],"mappings":"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IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,IAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,GACZ,CAAC,EAGKC,GAAkB,OAAO,OAAO,CACpC,KAAgB,IAChB,EAAU,IACV,KAAgB,IAChB,KAAgB,IAChB,EAAU,IACV,EAAU,IACV,KAAgB,IAChB,EAAU,IACV,EAAU,IACV,KAAgB,IAChB,KAAgB,IAChB,EAAU,IACV,EAAU,IACV,KAAgB,IAChB,KAAgB,IAChB,KAAgB,IAChB,KAAgB,IAChB,EAAU,IACV,KAAgB,IAChB,KAAgB,IAChB,KAAgB,IAChB,KAAgB,IAChB,KAAgB,IAChB,KAAgB,IAChB,KAAgB,IAChB,KAAgB,GAClB,CAAC,EAID,IAAIC,GAAiB,CACnB,IAAU,CAAE,KAAM,MAAO,KAAM,SAAW,EAC1C,IAAU,CAAE,KAAM,MAAO,KAAM,SAAW,EAC1C,IAAU,CAAE,KAAM,MAAO,KAAM,QAAU,EACzC,IAAU,CAAE,KAAM,MAAO,KAAM,SAAW,EAC1C,IAAU,CAAE,KAAM,MAAO,KAAM,OAAS,EACxC,IAAU,CAAE,KAAM,MAAO,KAAM,SAAW,EAC1C,IAAU,CAAE,KAAM,MAAO,KAAM,SAAW,EAC1C,IAAU,CAAE,KAAM,MAAO,KAAM,OAAS,EACxC,IAAU,CAAE,KAAM,MAAO,KAAM,OAAS,EACxC,IAAU,CAAE,KAAM,MAAO,KAAM,YAAc,EAC7C,IAAU,CAAE,KAAM,KAAO,EACzB,IAAU,CAAE,KAAM,KAAK,CACzB,EAEIC,GAAiB,CACnB,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MACL,EAAK,MACL,EAAK,KACL,EAAK,KACL,EAA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","x_google_ignoreList":[0]}