{"version":3,"file":"asciimath2tex.mjs","sources":["../asciimath2tex.js"],"sourcesContent":["export default class AsciiMathParser {\n    constructor() {\n        this.decimalsign = '\\\\.';\n\n        this.setup_symbols();\n        this.sort_symbols();\n    }\n\n    setup_symbols() {\n        this.greek_letters = ['alpha', 'beta', 'gamma', 'Gamma', 'delta', 'Delta', 'epsilon', 'varepsilon', 'zeta', 'eta', 'theta', 'Theta', 'vartheta', 'iota', 'kappa', 'lambda', 'Lambda', 'mu', 'nu', 'xi', 'Xi', 'pi', 'Pi', 'rho', 'sigma', 'Sigma', 'tau', 'upsilon', 'phi', 'Phi', 'varphi', 'chi', 'psi', 'Psi', 'omega', 'Omega'];\n\n        this.relations = [\n            {\"asciimath\":\":=\",\"tex\":\":=\"},\n            {\"asciimath\":\":|:\",\"tex\":\"\\\\mid\"},\n            {\"asciimath\":\"=>\",\"tex\":\"\\\\Rightarrow\"},\n            {\"asciimath\":\"approx\",\"tex\":\"\\\\approx\"},\n            {\"asciimath\":\"~~\",\"tex\":\"\\\\approx\"},\n            {\"asciimath\":\"cong\",\"tex\":\"\\\\cong\"},\n            {\"asciimath\":\"~=\",\"tex\":\"\\\\cong\"},\n            {\"asciimath\":\"equiv\",\"tex\":\"\\\\equiv\"},\n            {\"asciimath\":\"-=\",\"tex\":\"\\\\equiv\"},\n            {\"asciimath\":\"exists\",\"tex\":\"\\\\exists\"},\n            {\"asciimath\":\"EE\",\"tex\":\"\\\\exists\"},\n            {\"asciimath\":\"forall\",\"tex\":\"\\\\forall\"},\n            {\"asciimath\":\"AA\",\"tex\":\"\\\\forall\"},\n            {\"asciimath\":\">=\",\"tex\":\"\\\\ge\"},\n            {\"asciimath\":\"ge\",\"tex\":\"\\\\ge\"},\n            {\"asciimath\":\"gt=\",\"tex\":\"\\\\geq\"},\n            {\"asciimath\":\"geq\",\"tex\":\"\\\\geq\"},\n            {\"asciimath\":\"gt\",\"tex\":\"\\\\gt\"},\n            {\"asciimath\":\"in\",\"tex\":\"\\\\in\"},\n            {\"asciimath\":\"<=\",\"tex\":\"\\\\le\"},\n            {\"asciimath\":\"le\",\"tex\":\"\\\\le\"},\n            {\"asciimath\":\"lt=\",\"tex\":\"\\\\leq\"},\n            {\"asciimath\":\"leq\",\"tex\":\"\\\\leq\"},\n            {\"asciimath\":\"lt\",\"tex\":\"\\\\lt\"},\n            {\"asciimath\":\"models\",\"tex\":\"\\\\models\"},\n            {\"asciimath\":\"|==\",\"tex\":\"\\\\models\"},\n            {\"asciimath\":\"!=\",\"tex\":\"\\\\ne\"},\n            {\"asciimath\":\"ne\",\"tex\":\"\\\\ne\"},\n            {\"asciimath\":\"notin\",\"tex\":\"\\\\notin\"},\n            {\"asciimath\":\"!in\",\"tex\":\"\\\\notin\"},\n            {\"asciimath\":\"prec\",\"tex\":\"\\\\prec\"},\n            {\"asciimath\":\"-lt\",\"tex\":\"\\\\prec\"},\n            {\"asciimath\":\"-<\",\"tex\":\"\\\\prec\"},\n            {\"asciimath\":\"preceq\",\"tex\":\"\\\\preceq\"},\n            {\"asciimath\":\"-<=\",\"tex\":\"\\\\preceq\"},\n            {\"asciimath\":\"propto\",\"tex\":\"\\\\propto\"},\n            {\"asciimath\":\"prop\",\"tex\":\"\\\\propto\"},\n            {\"asciimath\":\"subset\",\"tex\":\"\\\\subset\"},\n            {\"asciimath\":\"sub\",\"tex\":\"\\\\subset\"},\n            {\"asciimath\":\"subseteq\",\"tex\":\"\\\\subseteq\"},\n            {\"asciimath\":\"sube\",\"tex\":\"\\\\subseteq\"},\n            {\"asciimath\":\"succ\",\"tex\":\"\\\\succ\"},\n            {\"asciimath\":\">-\",\"tex\":\"\\\\succ\"},\n            {\"asciimath\":\"succeq\",\"tex\":\"\\\\succeq\"},\n            {\"asciimath\":\">-=\",\"tex\":\"\\\\succeq\"},\n            {\"asciimath\":\"supset\",\"tex\":\"\\\\supset\"},\n            {\"asciimath\":\"sup\",\"tex\":\"\\\\supset\"},\n            {\"asciimath\":\"supseteq\",\"tex\":\"\\\\supseteq\"},\n            {\"asciimath\":\"supe\",\"tex\":\"\\\\supseteq\"},\n            {\"asciimath\":\"vdash\",\"tex\":\"\\\\vdash\"},\n            {\"asciimath\":\"|--\",\"tex\":\"\\\\vdash\"},\n        ]\n\n        this.constants = [\n            {\"asciimath\":\"dt\",\"tex\":\"dt\"},\n            {\"asciimath\":\"dx\",\"tex\":\"dx\"},\n            {\"asciimath\":\"dy\",\"tex\":\"dy\"},\n            {\"asciimath\":\"dz\",\"tex\":\"dz\"},\n            {\"asciimath\":\"prime\",\"tex\":\"'\"},\n            {\"asciimath\":\"implies\",\"tex\":\"\\\\implies\"},\n            {\"asciimath\":\"epsi\",\"tex\":\"\\\\epsilon\"},\n            {\"asciimath\":\"leftrightarrow\",\"tex\":\"\\\\leftrightarrow\"},\n            {\"asciimath\":\"Leftrightarrow\",\"tex\":\"\\\\Leftrightarrow\"},\n            {\"asciimath\":\"rightarrow\",\"tex\":\"\\\\rightarrow\"},\n            {\"asciimath\":\"Rightarrow\",\"tex\":\"\\\\Rightarrow\"},\n            {\"asciimath\":\"backslash\",\"tex\":\"\\\\backslash\"},\n            {\"asciimath\":\"leftarrow\",\"tex\":\"\\\\leftarrow\"},\n            {\"asciimath\":\"Leftarrow\",\"tex\":\"\\\\Leftarrow\"},\n            {\"asciimath\":\"setminus\",\"tex\":\"\\\\setminus\"},\n            {\"asciimath\":\"bigwedge\",\"tex\":\"\\\\bigwedge\"},\n            {\"asciimath\":\"diamond\",\"tex\":\"\\\\diamond\"},\n            {\"asciimath\":\"bowtie\",\"tex\":\"\\\\bowtie\"},\n            {\"asciimath\":\"bigvee\",\"tex\":\"\\\\bigvee\"},\n            {\"asciimath\":\"bigcap\",\"tex\":\"\\\\bigcap\"},\n            {\"asciimath\":\"bigcup\",\"tex\":\"\\\\bigcup\"},\n            {\"asciimath\":\"square\",\"tex\":\"\\\\square\"},\n            {\"asciimath\":\"lamda\",\"tex\":\"\\\\lambda\"},\n            {\"asciimath\":\"Lamda\",\"tex\":\"\\\\Lambda\"},\n            {\"asciimath\":\"aleph\",\"tex\":\"\\\\aleph\"},\n            {\"asciimath\":\"angle\",\"tex\":\"\\\\angle\"},\n            {\"asciimath\":\"frown\",\"tex\":\"\\\\frown\"},\n            {\"asciimath\":\"qquad\",\"tex\":\"\\\\qquad\"},\n            {\"asciimath\":\"cdots\",\"tex\":\"\\\\cdots\"},\n            {\"asciimath\":\"vdots\",\"tex\":\"\\\\vdots\"},\n            {\"asciimath\":\"ddots\",\"tex\":\"\\\\ddots\"},\n            {\"asciimath\":\"cdot\",\"tex\":\"\\\\cdot\"},\n            {\"asciimath\":\"star\",\"tex\":\"\\\\star\"},\n            {\"asciimath\":\"|><|\",\"tex\":\"\\\\bowtie\"},\n            {\"asciimath\":\"circ\",\"tex\":\"\\\\circ\"},\n            {\"asciimath\":\"oint\",\"tex\":\"\\\\oint\"},\n            {\"asciimath\":\"grad\",\"tex\":\"\\\\nabla\"},\n            {\"asciimath\":\"quad\",\"tex\":\"\\\\quad\"},\n            {\"asciimath\":\"uarr\",\"tex\":\"\\\\uparrow\"},\n            {\"asciimath\":\"darr\",\"tex\":\"\\\\downarrow\"},\n            {\"asciimath\":\"downarrow\",\"tex\":\"\\\\downarrow\"},\n            {\"asciimath\":\"rarr\",\"tex\":\"\\\\rightarrow\"},\n            {\"asciimath\":\">->>\",\"tex\":\"\\\\twoheadrightarrowtail\"},\n            {\"asciimath\":\"larr\",\"tex\":\"\\\\leftarrow\"},\n            {\"asciimath\":\"harr\",\"tex\":\"\\\\leftrightarrow\"},\n            {\"asciimath\":\"rArr\",\"tex\":\"\\\\Rightarrow\"},\n            {\"asciimath\":\"lArr\",\"tex\":\"\\\\Leftarrow\"},\n            {\"asciimath\":\"hArr\",\"tex\":\"\\\\Leftrightarrow\"},\n            {\"asciimath\":\"ast\",\"tex\":\"\\\\ast\"},\n            {\"asciimath\":\"***\",\"tex\":\"\\\\star\"},\n            {\"asciimath\":\"|><\",\"tex\":\"\\\\ltimes\"},\n            {\"asciimath\":\"><|\",\"tex\":\"\\\\rtimes\"},\n            {\"asciimath\":\"^^^\",\"tex\":\"\\\\bigwedge\"},\n            {\"asciimath\":\"vvv\",\"tex\":\"\\\\bigvee\"},\n            {\"asciimath\":\"cap\",\"tex\":\"\\\\cap\"},\n            {\"asciimath\":\"nnn\",\"tex\":\"\\\\bigcap\"},\n            {\"asciimath\":\"cup\",\"tex\":\"\\\\cup\"},\n            {\"asciimath\":\"uuu\",\"tex\":\"\\\\bigcup\"},\n            {\"asciimath\":\"not\",\"tex\":\"\\\\neg\"},\n            {\"asciimath\":\"<=>\",\"tex\":\"\\\\Leftrightarrow\"},\n            {\"asciimath\":\"_|_\",\"tex\":\"\\\\bot\"},\n            {\"asciimath\":\"bot\",\"tex\":\"\\\\bot\"},\n            {\"asciimath\":\"int\",\"tex\":\"\\\\int\"},\n            {\"asciimath\":\"del\",\"tex\":\"\\\\partial\"},\n            {\"asciimath\":\"...\",\"tex\":\"\\\\ldots\"},\n            {\"asciimath\":\"/_\\\\\",\"tex\":\"\\\\triangle\"},\n            {\"asciimath\":\"|__\",\"tex\":\"\\\\lfloor\"},\n            {\"asciimath\":\"__|\",\"tex\":\"\\\\rfloor\"},\n            {\"asciimath\":\"dim\",\"tex\":\"\\\\dim\"},\n            {\"asciimath\":\"mod\",\"tex\":\"\\\\operatorname{mod}\"},\n            {\"asciimath\":\"lub\",\"tex\":\"\\\\operatorname{lub}\"},\n            {\"asciimath\":\"glb\",\"tex\":\"\\\\operatorname{glb}\"},\n            {\"asciimath\":\">->\",\"tex\":\"\\\\rightarrowtail\"},\n            {\"asciimath\":\"->>\",\"tex\":\"\\\\twoheadrightarrow\"},\n            {\"asciimath\":\"|->\",\"tex\":\"\\\\mapsto\"},\n            {\"asciimath\":\"lim\",\"tex\":\"\\\\lim\"},\n            {\"asciimath\":\"Lim\",\"tex\":\"\\\\operatorname{Lim}\"},\n            {\"asciimath\":\"and\",\"tex\":\"\\\\quad\\\\text{and}\\\\quad\"},\n            {\"asciimath\":\"**\",\"tex\":\"\\\\ast\"},\n            {\"asciimath\":\"//\",\"tex\":\"/\"},\n            {\"asciimath\":\"\\\\\",\"tex\":\"\\\\,\"},\n            {\"asciimath\":\"\\\\\\\\\",\"tex\":\"\\\\backslash\"},\n            {\"asciimath\":\"xx\",\"tex\":\"\\\\times\"},\n            {\"asciimath\":\"-:\",\"tex\":\"\\\\div\"},\n            {\"asciimath\":\"o+\",\"tex\":\"\\\\oplus\"},\n            {\"asciimath\":\"ox\",\"tex\":\"\\\\otimes\"},\n            {\"asciimath\":\"o.\",\"tex\":\"\\\\odot\"},\n            {\"asciimath\":\"^\",\"tex\":\"\\\\hat{}\"},\n            {\"asciimath\":\"_\",\"tex\":\"\\\\_\"},\n            {\"asciimath\":\"^^\",\"tex\":\"\\\\wedge\"},\n            {\"asciimath\":\"vv\",\"tex\":\"\\\\vee\"},\n            {\"asciimath\":\"nn\",\"tex\":\"\\\\cap\"},\n            {\"asciimath\":\"uu\",\"tex\":\"\\\\cup\"},\n            {\"asciimath\":\"TT\",\"tex\":\"\\\\top\"},\n            {\"asciimath\":\"+-\",\"tex\":\"\\\\pm\"},\n            {\"asciimath\":\"O/\",\"tex\":\"\\\\emptyset\"},\n            {\"asciimath\":\"oo\",\"tex\":\"\\\\infty\"},\n            {\"asciimath\":\":.\",\"tex\":\"\\\\therefore\"},\n            {\"asciimath\":\":'\",\"tex\":\"\\\\because\"},\n            {\"asciimath\":\"/_\",\"tex\":\"\\\\angle\"},\n            {\"asciimath\":\"|~\",\"tex\":\"\\\\lceil\"},\n            {\"asciimath\":\"~|\",\"tex\":\"\\\\rceil\"},\n            {\"asciimath\":\"CC\",\"tex\":\"\\\\mathbb{C}\"},\n            {\"asciimath\":\"NN\",\"tex\":\"\\\\mathbb{N}\"},\n            {\"asciimath\":\"QQ\",\"tex\":\"\\\\mathbb{Q}\"},\n            {\"asciimath\":\"RR\",\"tex\":\"\\\\mathbb{R}\"},\n            {\"asciimath\":\"ZZ\",\"tex\":\"\\\\mathbb{Z}\"},\n            {\"asciimath\":\"->\",\"tex\":\"\\\\to\"},\n            {\"asciimath\":\"or\",\"tex\":\"\\\\quad\\\\text{or}\\\\quad\"},\n            {\"asciimath\":\"if\",\"tex\":\"\\\\quad\\\\text{if}\\\\quad\"},\n            {\"asciimath\":\"iff\", \"tex\":\"\\\\iff\"},\n            {\"asciimath\":\"*\",\"tex\":\"\\\\cdot\"},\n            {\"asciimath\":\"@\",\"tex\":\"\\\\circ\"},\n            {\"asciimath\":\"%\",\"tex\":\"\\\\%\"},\n            {\"asciimath\":\"boxempty\",\"tex\":\"\\\\square\"},\n            {\"asciimath\":\"lambda\",\"tex\":\"\\\\lambda\"},\n            {\"asciimath\":\"Lambda\",\"tex\":\"\\\\Lambda\"},\n            {\"asciimath\":\"nabla\",\"tex\":\"\\\\nabla\"},\n            {\"asciimath\":\"uparrow\",\"tex\":\"\\\\uparrow\"},\n            {\"asciimath\":\"downarrow\",\"tex\":\"\\\\downarrow\"},\n            {\"asciimath\":\"twoheadrightarrowtail\",\"tex\":\"\\\\twoheadrightarrowtail\"},\n            {\"asciimath\":\"ltimes\",\"tex\":\"\\\\ltimes\"},\n            {\"asciimath\":\"rtimes\",\"tex\":\"\\\\rtimes\"},\n            {\"asciimath\":\"neg\",\"tex\":\"\\\\neg\"},\n            {\"asciimath\":\"partial\",\"tex\":\"\\\\partial\"},\n            {\"asciimath\":\"ldots\",\"tex\":\"\\\\ldots\"},\n            {\"asciimath\":\"triangle\",\"tex\":\"\\\\triangle\"},\n            {\"asciimath\":\"lfloor\",\"tex\":\"\\\\lfloor\"},\n            {\"asciimath\":\"rfloor\",\"tex\":\"\\\\rfloor\"},\n            {\"asciimath\":\"rightarrowtail\",\"tex\":\"\\\\rightarrowtail\"},\n            {\"asciimath\":\"twoheadrightarrow\",\"tex\":\"\\\\twoheadrightarrow\"},\n            {\"asciimath\":\"mapsto\",\"tex\":\"\\\\mapsto\"},\n            {\"asciimath\":\"times\",\"tex\":\"\\\\times\"},\n            {\"asciimath\":\"div\",\"tex\":\"\\\\div\"},\n            {\"asciimath\":\"divide\",\"tex\":\"\\\\div\"},\n            {\"asciimath\":\"oplus\",\"tex\":\"\\\\oplus\"},\n            {\"asciimath\":\"otimes\",\"tex\":\"\\\\otimes\"},\n            {\"asciimath\":\"odot\",\"tex\":\"\\\\odot\"},\n            {\"asciimath\":\"wedge\",\"tex\":\"\\\\wedge\"},\n            {\"asciimath\":\"vee\",\"tex\":\"\\\\vee\"},\n            {\"asciimath\":\"top\",\"tex\":\"\\\\top\"},\n            {\"asciimath\":\"pm\",\"tex\":\"\\\\pm\"},\n            {\"asciimath\":\"emptyset\",\"tex\":\"\\\\emptyset\"},\n            {\"asciimath\":\"infty\",\"tex\":\"\\\\infty\"},\n            {\"asciimath\":\"therefore\",\"tex\":\"\\\\therefore\"},\n            {\"asciimath\":\"because\",\"tex\":\"\\\\because\"},\n            {\"asciimath\":\"lceil\",\"tex\":\"\\\\lceil\"},\n            {\"asciimath\":\"rceil\",\"tex\":\"\\\\rceil\"},\n            {\"asciimath\":\"to\",\"tex\":\"\\\\to\"},\n            {\"asciimath\":\"langle\",\"tex\":\"\\\\langle\"},\n            {\"asciimath\":\"lceiling\",\"tex\":\"\\\\lceil\"},\n            {\"asciimath\":\"rceiling\",\"tex\":\"\\\\rceil\"},\n            {\"asciimath\":\"max\",\"tex\":\"\\\\max\"},\n            {\"asciimath\":\"min\",\"tex\":\"\\\\min\"},\n            {\"asciimath\":\"prod\",\"tex\":\"\\\\prod\"},\n            {\"asciimath\":\"sum\",\"tex\":\"\\\\sum\"},\n        ];\n        this.constants = this.constants.concat(this.relations);\n        \n        this.left_brackets = [\n            {asciimath: 'langle', tex: '\\\\langle'},\n            {asciimath: '(:', tex: '\\\\langle'},\n            {asciimath: '<<', tex: '\\\\langle'},\n            {asciimath: '{:', tex: '.'},\n            {asciimath: '(', tex: '('},\n            {asciimath: '[', tex: '['},\n            {asciimath: '|:', tex: '\\\\lvert'},\n            {asciimath: '{', tex: '\\\\lbrace'},\n            {asciimath: 'lbrace', tex: '\\\\lbrace'},\n        ];\n        this.right_brackets = [\n            {asciimath: 'rangle', tex: '\\\\rangle'},\n            {asciimath: ':)', tex: '\\\\rangle'},\n            {asciimath: '>>', tex: '\\\\rangle'},\n            {asciimath: ':}', tex: '.', free_tex: ':\\\\}'},\n            {asciimath: ')', tex: ')'},\n            {asciimath: ']', tex: ']'},\n            {asciimath: ':|', tex: '\\\\rvert'},\n            {asciimath: '}', tex: '\\\\rbrace'},\n            {asciimath: 'rbrace', tex: '\\\\rbrace'},\n        ];\n        this.leftright_brackets = [\n            {asciimath: '|', left_tex: '\\\\lvert', right_tex: '\\\\rvert', free_tex: '|', mid_tex: '\\\\mid'},\n        ];\n        \n        this.unary_symbols = [\n            {asciimath: \"sqrt\", tex: \"\\\\sqrt\"},\n            {asciimath: \"f\", tex:\"f\", func:true},\n            {asciimath: \"g\", tex:\"g\", func:true},\n            {asciimath: \"sin\", tex:\"\\\\sin\", func:true},\n            {asciimath: \"cos\", tex:\"\\\\cos\", func:true},\n            {asciimath: \"tan\", tex:\"\\\\tan\", func:true},\n            {asciimath: \"arcsin\", tex:\"\\\\arcsin\", func:true},\n            {asciimath: \"arccos\", tex:\"\\\\arccos\", func:true},\n            {asciimath: \"arctan\", tex:\"\\\\arctan\", func:true},\n            {asciimath: \"sinh\", tex:\"\\\\sinh\", func:true},\n            {asciimath: \"cosh\", tex:\"\\\\cosh\", func:true},\n            {asciimath: \"tanh\", tex:\"\\\\tanh\", func:true},\n            {asciimath: \"cot\", tex:\"\\\\cot\", func:true},\n            {asciimath: \"coth\", tex:\"\\\\coth\", func:true},\n            {asciimath: \"sech\", tex:\"\\\\operatorname{sech}\", func:true},\n            {asciimath: \"csch\", tex:\"\\\\operatorname{csch}\", func:true},\n            {asciimath: \"sec\", tex:\"\\\\sec\", func:true},\n            {asciimath: \"csc\", tex:\"\\\\csc\", func:true},\n            {asciimath: \"log\", tex:\"\\\\log\", func:true},\n            {asciimath: \"ln\", tex:\"\\\\ln\", func:true},\n            {asciimath: \"abs\", rewriteleftright:[\"|\",\"|\"]},\n            {asciimath: \"norm\", rewriteleftright:[\"\\\\|\",\"\\\\|\"]},\n            {asciimath: \"floor\", rewriteleftright:[\"\\\\lfloor\",\"\\\\rfloor\"]},\n            {asciimath: \"ceil\", rewriteleftright:[\"\\\\lceil\",\"\\\\rceil\"]},\n            {asciimath: \"Sin\", tex:\"\\\\Sin\", func:true},\n            {asciimath: \"Cos\", tex:\"\\\\Cos\", func:true},\n            {asciimath: \"Tan\", tex:\"\\\\Tan\", func:true},\n            {asciimath: \"Arcsin\", tex:\"\\\\Arcsin\", func:true},\n            {asciimath: \"Arccos\", tex:\"\\\\Arccos\", func:true},\n            {asciimath: \"Arctan\", tex:\"\\\\Arctan\", func:true},\n            {asciimath: \"Sinh\", tex:\"\\\\Sinh\", func:true},\n            {asciimath: \"Cosh\", tex:\"\\\\Cosh\", func:true},\n            {asciimath: \"Tanh\", tex:\"\\\\Tanh\", func:true},\n            {asciimath: \"Cot\", tex:\"\\\\Cot\", func:true},\n            {asciimath: \"Sec\", tex:\"\\\\Sec\", func:true},\n            {asciimath: \"Csc\", tex:\"\\\\Csc\", func:true},\n            {asciimath: \"Log\", tex:\"\\\\Log\", func:true},\n            {asciimath: \"Ln\", tex:\"\\\\Ln\", func:true},\n            {asciimath: \"Abs\", tex:\"\\\\Abs\", rewriteleftright:[\"|\",\"|\"]},\n            {asciimath: \"det\", tex:\"\\\\det\", func:true},\n            {asciimath: \"exp\", tex:\"\\\\exp\", func:true},\n            {asciimath: \"gcd\", tex:\"\\\\gcd\", func:true},\n            {asciimath:\"lcm\", tex:\"\\\\operatorname{lcm}\", func:true},\n            {asciimath: \"cancel\", tex:\"\\\\cancel\"},\n            {asciimath: \"Sqrt\", tex:\"\\\\Sqrt\"},\n            {asciimath: \"hat\", tex:\"\\\\hat\", acc:true},\n            {asciimath:\"bar\", tex:\"\\\\overline\", acc:true},\n            {asciimath:\"overline\", tex:\"\\\\overline\", acc:true},\n            {asciimath: \"vec\", tex:\"\\\\vec\", acc:true},\n            {asciimath: \"tilde\", tex:\"\\\\tilde\", acc:true},\n            {asciimath: \"dot\", tex:\"\\\\dot\", acc:true},\n            {asciimath: \"ddot\", tex:\"\\\\ddot\", acc:true},\n            {asciimath:\"ul\", tex:\"\\\\underline\", acc:true},\n            {asciimath:\"underline\", tex:\"\\\\underline\", acc:true},\n            {asciimath:\"ubrace\", tex:\"\\\\underbrace\", acc:true},\n            {asciimath:\"underbrace\", tex:\"\\\\underbrace\", acc:true},\n            {asciimath:\"obrace\", tex:\"\\\\overbrace\", acc:true},\n            {asciimath:\"overbrace\", tex:\"\\\\overbrace\", acc:true},\n            {asciimath:\"bb\", atname:\"mathvariant\", atval:\"bold\", tex:\"\\\\mathbf\"},\n            {asciimath: \"mathbf\", atname:\"mathvariant\", atval:\"bold\", tex:\"mathbf\"},\n            {asciimath:\"sf\", atname:\"mathvariant\", atval:\"sans-serif\", tex:\"\\\\mathsf\"},\n            {asciimath: \"mathsf\", atname:\"mathvariant\", atval:\"sans-serif\", tex:\"mathsf\"},\n            {asciimath:\"bbb\", atname:\"mathvariant\", atval:\"double-struck\", tex:\"\\\\mathbb\"},\n            {asciimath: \"mathbb\", atname:\"mathvariant\", atval:\"double-struck\", tex:\"\\\\mathbb\"},\n            {asciimath:\"cc\", atname:\"mathvariant\", atval:\"script\", tex:\"\\\\mathcal\"},\n            {asciimath: \"mathcal\", atname:\"mathvariant\", atval:\"script\", tex:\"\\\\mathcal\"},\n            {asciimath:\"tt\", atname:\"mathvariant\", atval:\"monospace\", tex:\"\\\\mathtt\"},\n            {asciimath: \"mathtt\", atname:\"mathvariant\", atval:\"monospace\", tex:\"\\\\mathtt\"},\n            {asciimath:\"fr\", atname:\"mathvariant\", atval:\"fraktur\", tex:\"\\\\mathfrak\"},\n            {asciimath: \"mathfrak\", atname:\"mathvariant\", atval:\"fraktur\", tex:\"\\\\mathfrak\"},\n        ];\n        \n        this.binary_symbols = [\n            {asciimath: \"root\", tex:\"\\\\sqrt\", option: true},\n            {asciimath: \"frac\",    tex:\"\\\\frac\"},\n            {asciimath: \"stackrel\", tex:\"\\\\stackrel\"},\n            {asciimath: \"overset\", tex:\"\\\\overset\"},\n            {asciimath: \"underset\", tex:\"\\\\underset\"},\n            {asciimath:\"color\", tex: \"\\\\color\", rawfirst: true},\n        ]\n        \n        this.non_constant_symbols = ['_','^','/'];\n        \n    }\n\n    sort_symbols() {\n        const by_asciimath = (a,b)=>{a=a.asciimath.length,b=b.asciimath.length; return a>b ? -1 : a<b ? 1 : 0};\n        this.constants.sort(by_asciimath);\n        this.relations.sort(by_asciimath);\n        this.left_brackets.sort(by_asciimath);\n        this.right_brackets.sort(by_asciimath);\n        this.leftright_brackets.sort(by_asciimath);\n        this.unary_symbols.sort(by_asciimath);\n        this.binary_symbols.sort(by_asciimath);\n    }\n    \n    error(message, pos) {\n        const neighbourhood = this.source(pos).slice(0,5);\n        throw(new Error(`Error at character ${pos} near \"${neighbourhood}\": ${message}`));\n    }\n    \n    literal(token) {\n        if(token) {\n            return {tex: token.token, pos: token.pos, end: token.end, ttype: 'literal'};\n        }\n    }\n\n    longest(matches) {\n        matches = matches.filter(x=>!!x);\n        matches.sort((x,y)=>{\n            x=x.end;\n            y=y.end;\n            return x>y ? -1 : x<y ? 1 : 0;\n        });\n        return matches[0];\n    }\n\n    escape_text(str) {\n        return str\n            .replace(/\\{/g,'\\\\{')\n            .replace(/\\}/g,'\\\\}')\n        ;\n    }\n    \n    input(str) {\n        this._source = str;\n        this.brackets = [];\n    }\n    \n    source(pos = 0,end) {\n        if(arguments.length>1) {\n            return this._source.slice(pos,end);\n        } else {\n            return this._source.slice(pos);\n        }\n    }\n    \n    eof(pos = 0) {\n        pos = this.strip_space(pos);\n        return pos == this._source.length;\n    }\n\n    unbracket(tok) {\n        if(!tok) {\n            return;\n        }\n        if(!tok.bracket) {\n            return tok;\n        }\n\n        const skip_brackets = ['(',')','[',']','{','}'];\n        const skipleft = skip_brackets.includes(tok.left.asciimath);\n        const skipright = skip_brackets.includes(tok.right.asciimath);\n        const pos = skipleft ? tok.left.end : tok.pos;\n        const end = skipright ? tok.right.pos : tok.end;\n        let left = skipleft ? '' : tok.left.tex;\n        let right = skipright ? '' : tok.right.tex;\n        const middle = tok.middle ? tok.middle.tex : '';\n        if(left || right) {\n            left = left || '.';\n            right = right || '.';\n            return {tex: `\\\\left ${left} ${middle} \\\\right ${right}`, pos: tok.pos, end: tok.end};\n        } else {\n            return {tex: middle, pos: tok.pos, end: tok.end, middle_asciimath: this.source(pos,end)};\n        }\n    }\n    \n    parse(str) {\n        this.input(str);\n        const result = this.consume();\n        return result.tex;\n    }\n\n    consume(pos = 0) {\n        let tex = '';\n        const exprs = [];\n        while(!this.eof(pos)) {\n            let expr = this.expression_list(pos);\n            if(!expr) {\n                const rb = this.right_bracket(pos);\n                if(rb) {\n                    if(rb.def.free_tex) {\n                        rb.tex = rb.def.free_tex;\n                    }\n                    expr = rb;\n\n                }\n                const lr = this.leftright_bracket(pos);\n                if(lr) {\n                    expr = lr;\n                    const ss = this.subsup(lr.end);\n                    if(ss) {\n                        expr = {tex: `${expr.tex}${ss.tex}`, pos: pos, end: ss.end, ttype: 'expression'}\n                    }\n                }\n            }\n            if(expr) {\n                if(tex) {\n                    tex += ' ';\n                }\n                tex += expr.tex;\n                pos = expr.end;\n                exprs.push(expr);\n            } else if(!this.eof(pos)) {\n                const chr = this.source(pos,pos+1);\n                exprs.push({tex: chr, pos: pos, ttype: 'character'});\n                tex += chr;\n                pos += 1;\n            }\n        }\n        return {tex: tex, exprs: exprs};\n    }\n    \n    strip_space(pos = 0) {\n        const osource = this.source(pos);\n        const reduced = osource.replace(/^(\\s|\\\\(?![\\\\ ]))*/,'');\n        return pos + osource.length - reduced.length;\n    }\n    \n    /* Does the given regex match next?\n     */\n    match(re, pos) {\n        pos = this.strip_space(pos);\n        const m = re.exec(this.source(pos));\n        if(m) {\n            const token = m[0];\n            return {token: token, pos: pos, match: m, end: pos+token.length, ttype: 'regex'};\n        }\n    }\n    \n    /* Does the exact given string occur next?\n     */\n    exact(str, pos) {\n        pos = this.strip_space(pos);\n        if(this.source(pos).slice(0, str.length) == str) {\n            return {token: str, pos: pos, end: pos+str.length, ttype: 'exact'};\n        }\n    }\n\n    expression_list(pos = 0) {\n        let expr = this.expression(pos);\n        if(!expr) {\n            return;\n        }\n        let end = expr.end;\n        let tex = expr.tex;\n        let exprs = [expr];\n        while(!this.eof(end)) {\n            const comma = this.exact(\",\",end);\n            if(!comma) {\n                break;\n            }\n            tex += ' ,';\n            end = comma.end;\n            expr = this.expression(end);\n            if(!expr) {\n                break;\n            }\n            tex += ' '+expr.tex;\n            exprs.push(expr);\n            end = expr.end;\n        }\n        return {tex: tex, pos: pos, end: end, exprs: exprs, ttype: 'expression_list'};\n    }\n    \n    // E ::= IE | I/I                       Expression\n    expression(pos = 0) {\n        const negative = this.negative_expression(pos);\n        if(negative) {\n            return negative;\n        }\n        const first = this.intermediate_or_fraction(pos);\n        if(!first) {\n            for(let c of this.non_constant_symbols) {\n                const m = this.exact(c,pos);\n                if(m) {\n                    return {tex: c, pos: pos, end: m.end, ttype: 'constant'};\n                }\n            }\n            return;\n        }\n        if(this.eof(first.end)) {\n            return first;\n        }\n        const second = this.expression(first.end);\n        if(second) {\n            return {tex: first.tex+' '+second.tex, pos: first.pos, end: second.end, ttype: 'expression', exprs: [first,second]};\n        } else {\n            return first;\n        }\n    }\n\n    negative_expression(pos = 0) {\n        const dash = this.exact(\"-\",pos);\n        if(dash && !this.other_constant(pos)) {\n            const expr = this.expression(dash.end);\n            if(expr) {\n                return {tex: `- ${expr.tex}`, pos: pos, end: expr.end, ttype: 'negative_expression', dash: dash, expression: expr}\n            } else {\n                return {tex: '-', pos: pos, end: dash.end, ttype: 'constant'};\n            }\n        }\n    }\n    \n    intermediate_or_fraction(pos = 0) {\n        const first = this.intermediate(pos);\n        if(!first) {\n            return;\n        }\n        let frac = this.match(/^\\/(?!\\/)/,first.end);\n        if(frac) {\n            const second = this.intermediate(frac.end);\n            if(second) {\n                const ufirst = this.unbracket(first);\n                const usecond = this.unbracket(second);\n                return {tex: `\\\\frac{${ufirst.tex}}{${usecond.tex}}`, pos: first.pos, end: second.end, ttype: 'fraction', numerator: ufirst, denominator: usecond, raw_numerator: first, raw_denominator: second};\n            } else {\n                const ufirst = this.unbracket(first);\n                return {tex: `\\\\frac{${ufirst.tex}}{}`, pos: first.pos, end: frac.end, ttype: 'fraction', numerator: ufirst, denominator: null, raw_numerator: first, raw_denominator: null};\n            }\n        } else {\n            return first;\n        }\n    }\n    \n    // I ::= S_S | S^S | S_S^S | S          Intermediate expression\n    intermediate(pos = 0) {\n        const first = this.simple(pos);\n        if(!first) {\n            return;\n        }\n        const ss = this.subsup(first.end);\n        if(ss) {\n            return {tex: `${first.tex}${ss.tex}`, pos:pos, end:ss.end, ttype: 'intermediate', expression: first, subsup: ss};\n        } else {\n            return first;\n        }\n    }\n\n    subsup(pos = 0) {\n        let tex = '';\n        let end = pos;\n        let sub = this.exact('_',pos);\n        let sub_expr, sup_expr;\n        if(sub) {\n            sub_expr = this.unbracket(this.simple(sub.end));\n            if(sub_expr) {\n                tex = `${tex}_{${sub_expr.tex}}`;\n                end = sub_expr.end;\n            } else {\n                tex = `${tex}_{}`;\n                end = sub.end;\n            }\n        }\n        let sup = this.match(/^\\^(?!\\^)/,end);\n        if(sup) {\n            sup_expr = this.unbracket(this.simple(sup.end));\n            if(sup_expr) {\n                tex = `${tex}^{${sup_expr.tex}}`;\n                end = sup_expr.end;\n            } else {\n                tex = `${tex}^{}`;\n                end = sup.end;\n            }\n        }\n        if(sub || sup) {\n            return {tex: tex, pos: pos, end: end, ttype: 'subsup', sub: sub_expr, sup: sup_expr};\n        }\n    }\n\n    // S ::= v | lEr | uS | bSS             Simple expression\n    simple(pos = 0) {\n        return this.longest([this.matrix(pos), this.bracketed_expression(pos), this.binary(pos), this.constant(pos), this.text(pos), this.unary(pos), this.negative_simple(pos)]);\n    }\n\n    negative_simple(pos = 0) {\n        const dash = this.exact(\"-\",pos);\n        if(dash && !this.other_constant(pos)) {\n            const expr = this.simple(dash.end);\n            if(expr) {\n                return {tex: `- ${expr.tex}`, pos: pos, end: expr.end, ttype: 'negative_simple', dash: dash, expr: expr}\n            } else {\n                return {tex: '-', pos: pos, end: dash.end, ttype: 'constant'};\n            }\n        }\n    }\n\n    // matrix: leftbracket \"(\" expr \")\" (\",\" \"(\" expr \")\")* rightbracket \n    // each row must have the same number of elements\n    matrix(pos = 0) {\n        let left = this.left_bracket(pos);\n        let lr = false;\n        if(!left) {\n            left = this.leftright_bracket(pos,'left');\n            if(!left) {\n                return;\n            }\n            lr = true;\n        }\n        const contents = this.matrix_contents(left.end, lr);\n        if(!contents) {\n            return;\n        }\n        const right = lr ? this.leftright_bracket(contents.end, 'right') : this.right_bracket(contents.end);\n        if(!right) {\n            return;\n        }\n        const contents_tex = contents.rows.map(r=>r.tex).join(' \\\\\\\\ ');\n        const matrix_tex = contents.is_array ? `\\\\begin{array}{${contents.column_desc}} ${contents_tex} \\\\end{array}` : `\\\\begin{matrix} ${contents_tex} \\\\end{matrix}`;\n        return {tex: `\\\\left ${left.tex} ${matrix_tex} \\\\right ${right.tex}`, pos: pos, end: right.end, ttype: 'matrix', rows: contents.rows, left: left, right: right};\n    }\n\n    matrix_contents(pos = 0, leftright = false) {\n        let rows = [];\n        let end = pos;\n        let row_length = undefined;\n        let column_desc = undefined;\n        let is_array = false;\n        while(!this.eof(end) && !(leftright ? this.leftright_bracket(end) : this.right_bracket(end))) {\n            if(rows.length) {\n                const comma = this.exact(\",\",end);\n                if(!comma) {\n                    return;\n                }\n                end = comma.end;\n            }\n            const lb = this.match(/^[(\\[]/,end);\n            if(!lb) {\n                return;\n            }\n\n            const cells = [];\n            const columns = [];\n            end = lb.end;\n            while(!this.eof(end)) {\n                if(cells.length) {\n                    const comma = this.exact(\",\",end);\n                    if(!comma) {\n                        break;\n                    }\n                    end = comma.end;\n                }\n                const cell = this.matrix_cell(end);\n                if(!cell) {\n                    break;\n                }\n                if(cell.ttype=='column') {\n                    columns.push('|');\n                    is_array = true;\n                    if(cell.expr!==null) {\n                        columns.push('r');\n                        cells.push(cell.expr);\n                    }\n                } else {\n                    columns.push('r');\n                    cells.push(cell);\n                }\n                end = cell.end;\n            }\n            if(!cells.length) {\n                return;\n            }\n            if(row_length===undefined) {\n                row_length = cells.length;\n            } else if(cells.length!=row_length) {\n                return;\n            }\n            const rb = this.match(/^[)\\]]/,end);\n            if(!rb) {\n                return;\n            }\n            const row_column_desc = columns.join('');\n            if(column_desc===undefined) {\n                column_desc = row_column_desc;\n            } else if(row_column_desc!=column_desc) {\n                return;\n            }\n            rows.push({ttype: 'row', tex: cells.map(c=>c.tex).join(' & '), pos: lb.end, end: end, cells: cells});\n            end = rb.end;\n        }\n        if(row_length===undefined || (row_length<=1 && rows.length<=1)) {\n            return;\n        }\n        return {rows: rows, end: end, column_desc: column_desc, is_array: is_array};\n    }\n\n    matrix_cell(pos = 0) {\n        const lvert = this.exact('|',pos);\n        if(lvert) {\n            const middle = this.expression(lvert.end);\n            if(middle) {\n                const rvert = this.exact('|',middle.end);\n                if(rvert) {\n                    const second = this.expression(rvert.end);\n                    if(second) {\n                        return {tex: `\\\\left \\\\lvert ${middle.tex} \\\\right \\\\rvert ${second.text}`, pos: lvert.pos, end: second.end, ttype: 'expression', exprs: [middle,second]};\n                    }\n                } else {\n                    return {ttype: 'column', expr: middle, pos: lvert.pos, end: middle.end};\n                }\n            } else {\n                return {ttype: 'column', expr: null, pos: lvert.pos, end: lvert.end}\n            }\n        }\n        return this.expression(pos);\n    }\n    \n    bracketed_expression(pos = 0) {\n        const l = this.left_bracket(pos);\n        if(l) {\n            const middle = this.expression_list(l.end);\n            if(middle) {\n                const m = this.mid_expression(l,middle,pos);\n                if(m) {\n                    return m;\n                }\n                const r = this.right_bracket(middle.end) || this.leftright_bracket(middle.end,'right');\n                if(r) {\n                    return {tex: `\\\\left ${l.tex} ${middle.tex} \\\\right ${r.tex}`, pos: pos, end: r.end, bracket: true, left: l, right: r, middle: middle, ttype: 'bracket'};\n                } else if(this.eof(middle.end)) {\n                    return {tex: `\\\\left ${l.tex} ${middle.tex} \\\\right.`, pos: pos, end: middle.end, ttype: 'bracket', left: l, right: null, middle: middle};\n                } else {\n                    return {tex: `${l.tex} ${middle.tex}`, pos: pos, end: middle.end, ttype: 'expression', exprs: [l,middle]};\n                }\n            } else {\n                const r = this.right_bracket(l.end) || this.leftright_bracket(l.end,'right');\n                if(r) {\n                    return {tex: `\\\\left ${l.tex} \\\\right ${r.tex}`, pos: pos, end: r.end, bracket: true, left: l, right: r, middle: null, ttype: 'bracket'};\n                } else {\n                    return {tex: l.tex, pos: pos, end: l.end, ttype: 'constant'};\n                }\n            }\n        }\n        if(this.other_constant(pos)) {\n            return;\n        }\n        const left = this.leftright_bracket(pos, 'left');\n        if(left) {\n            const middle = this.expression_list(left.end);\n            if(middle) {\n                const m = this.mid_expression(left,middle,pos);\n                if(m) {\n                    return m;\n                }\n                const right = this.leftright_bracket(middle.end, 'right') || this.right_bracket(middle.end);\n                if(right) {\n                    return {tex: `\\\\left ${left.tex} ${middle.tex} \\\\right ${right.tex}`, pos: pos, end: right.end, bracket: true, left: left, right: right, middle: middle, ttype: 'bracket'};\n                }\n            }\n        }\n    }\n\n    // Detect the case where the \"middle\" part of a bracketed expression ends in another bracketed expression whose left delimiter is a left/right symbol, e.g. `|`.\n    // In these cases, interpret this as a bracketed expression where the left/right symbol is a 'mid' delimiter.\n    mid_expression(l,middle,pos) {\n        function is_mid_bracket(t) {\n            return t.ttype == 'bracket' && t.left.ttype=='leftright_bracket';\n        }\n        if(middle.exprs.length==1 && middle.exprs[0].ttype=='expression') {\n            const firsts = [middle.exprs[0].exprs[0]];\n            let last =  middle.exprs[0].exprs[1];\n            let end = middle.end;\n            while(last.ttype=='expression') {\n                const first = last.exprs[0];\n                if(is_mid_bracket(first)) {\n                    last = first;\n                    end = first.end;\n                    break;\n                }\n                firsts.push(last.exprs[0]);\n                last = last.exprs[1];\n            }\n            if(last.ttype=='fraction') {\n                last = last.raw_numerator;\n                end = last.end;\n            }\n            if(!(last.ttype=='bracket' && last.left.ttype=='leftright_bracket')) {\n                return;\n            }\n            const firsttex = firsts.map(e=>e.tex).join(' ');\n            const mid = last.left;\n            const lasttex = last.middle.exprs.map(e=>e.tex).join(' ');\n            const nr = last.right;\n            return {tex: `\\\\left ${l.tex} ${firsttex} ${mid.def.mid_tex} ${lasttex} \\\\right ${nr.tex}`, pos: pos, end: end, left: l, right: nr, middle: {tex: `${firsttex} ${mid.def.mid_tex} ${lasttex}`, exprs: firsts.concat([mid,last.middle]), pos: middle.pos, end: last.middle.end, ttype: 'expression_list'}};\n        }\n    }\n    \n    // r ::= ) | ] | } | :) | :} | other right brackets\n    right_bracket(pos = 0) {\n        for(let bracket of this.right_brackets) {\n            const m = this.exact(bracket.asciimath,pos);\n            if(m) {\n                return {tex: bracket.tex, pos: pos, end: m.end, asciimath: bracket.asciimath, def: bracket, ttype: 'right_bracket'};\n            }\n        }\n    }\n    \n    // l ::= ( | [ | { | (: | {: | other left brackets\n    left_bracket(pos = 0) {\n        for(let bracket of this.left_brackets) {\n            const m = this.exact(bracket.asciimath,pos);\n            if(m) {\n                return {tex: bracket.tex, pos: pos, end: m.end, asciimath: bracket.asciimath, ttype: 'left_bracket'};\n            }\n        }\n    }\n\n    leftright_bracket(pos = 0,position) {\n        for(let lr of this.leftright_brackets) {\n            const b = this.exact(lr.asciimath, pos);\n            if(b) {\n                if(this.exact(',',b.end)) {\n                    return {tex: lr.free_tex, pos: pos, end: b.end, ttype: 'binary'};\n                } else {\n                    return {tex: position=='left' ? lr.left_tex : position=='right' ? lr.right_tex : lr.free_tex, pos: pos, end: b.end, ttype: 'leftright_bracket', def: lr};\n                }\n            }\n        }\n    }\n\n    text(pos = 0) {\n        const quoted = this.match(/^\"([^\"]*)\"/,pos);\n        if(quoted) {\n            const text = this.escape_text(quoted.match[1]);\n            return {tex: `\\\\text{${text}}`, pos: pos, end: quoted.end, ttype: 'text', text: text};\n        }\n        const textfn = this.match(/^(?:mbox|text)\\s*(\\([^)]*\\)?|\\{[^}]*\\}?|\\[[^\\]]*\\]?)/,pos);\n        if(textfn) {\n            const text = this.escape_text(textfn.match[1].slice(1,textfn.match[1].length-1));\n            return {tex: `\\\\text{${text}}`, pos: pos, end: textfn.end, ttype: 'text', text: text};\n        }\n    }\n\n    // b ::= frac | root | stackrel | other binary symbols\n    binary(pos = 0) {\n        for(let binary of this.binary_symbols) {\n            const m = this.exact(binary.asciimath, pos);\n            const [lb1,rb1] = binary.option ? ['[',']'] : ['{','}'];\n            if(m) {\n                const a = this.unbracket(this.simple(m.end));\n                if(a) {\n                    const atex = binary.rawfirst ? a.middle_asciimath : a.tex;\n                    const b = this.unbracket(this.simple(a.end));\n                    if(b) {\n                        return {tex: `${binary.tex}${lb1}${atex}${rb1}{${b.tex}}`, pos: pos, end: b.end, ttype: 'binary', op: binary, arg1: a, arg2: b};\n                    } else {\n                        return {tex: `${binary.tex}${lb1}${atex}${rb1}{}`, pos: pos, end: a.end, ttype: 'binary', op: binary, arg1: a, arg2: null};\n                    }\n                } else {\n                    return {tex: `${binary.tex}${lb1}${rb1}{}`, pos: pos, end: m.end, ttype: 'binary', op: binary, arg1: null, arg2: null};\n                }\n            }\n        }\n    }\n\n    // u ::= sqrt | text | bb | other unary symbols for font commands\n    unary(pos = 0) {\n        for(let u of this.unary_symbols) {\n            const m = this.exact(u.asciimath, pos);\n            if(m) {\n                const ss = this.subsup(m.end);\n                const sstex = ss ? ss.tex : '';\n                const end = ss ? ss.end : m.end;\n                const barg = this.simple(end);\n                const arg = u.func ? barg : this.unbracket(barg);\n                const argtex = arg && (u.raw ? arg.middle_asciimath : arg.tex);\n                if(u.rewriteleftright) {\n                    const [left,right] = u.rewriteleftright;\n                    if(arg) {\n                        return {tex: `\\\\left ${left} ${argtex} \\\\right ${right} ${sstex}`, pos: pos, end: arg.end, ttype: 'unary', op: m, subsup: ss, arg: arg};\n                    } else {\n                        return {tex: `\\\\left ${left} \\\\right ${right} ${sstex}`, pos: pos, end: m.end, ttype: 'unary', op: m, subsup: ss, arg: null};\n                    }\n                } else {\n                    if(arg) {\n                        return {tex: `${u.tex}${sstex}{${argtex}}`, pos: pos, end: arg.end, ttype: 'unary', op: m, subsup: ss, arg: arg};\n                    } else {\n                        return {tex: `${u.tex}${sstex}{}`, pos: pos, end: m.end, ttype: 'unary', op: m, subsup: ss, arg: null};\n                    }\n                }\n            }\n        }\n    }\n\n    // v ::= [A-Za-z] | greek letters | numbers | other constant symbols\n    constant(pos = 0) {\n        if(this.right_bracket(pos)) {\n            return;\n        }\n        return this.longest([this.other_constant(pos), this.greek(pos), this.name(pos), this.number(pos), this.arbitrary_constant(pos)]);\n    }\n    \n    name(pos = 0) {\n        return this.literal(this.match(/^[A-Za-z]/, pos));\n    }\n    \n    greek(pos = 0) {\n        const re_greek = new RegExp('^('+this.greek_letters.join('|')+')');\n        const m = this.match(re_greek, pos);\n        if(m) {\n            return {tex: '\\\\'+m.token, pos: pos, end: m.end, ttype: 'greek'};\n        }\n    }\n    \n    number(pos = 0) {\n        const re_number = new RegExp('^\\\\d+('+this.decimalsign+'\\\\d+)?');\n        return this.literal(this.match(re_number, pos));\n    }\n\n    other_constant(pos = 0) {\n        for(let sym of this.constants) {\n            let m = this.exact(sym.asciimath, pos);\n            if(m) {\n                return {tex: `${sym.tex}`, pos: m.pos, end: m.end, ttype: 'other_constant'};\n            }\n        }\n        for(let sym of this.relations) {\n            if(!sym.asciimath.match(/^!/)) {\n                let notm = this.exact('!'+sym.asciimath, pos);\n                if(notm) {\n                    return {tex: `\\\\not ${sym.tex}`, pos: notm.pos, end: notm.end, ttype: 'other_constant'};\n                }\n            }\n        }\n    }\n    \n    arbitrary_constant(pos = 0) {\n        if(!this.eof(pos)) {\n            if(this.exact(\",\",pos)) {\n                return;\n            }\n            for(let nc of this.non_constant_symbols.concat(this.left_brackets.map(x=>x.asciimath), this.right_brackets.map(x=>x.asciimath), this.leftright_brackets.map(x=>x.asciimath))) {\n                if(this.exact(nc, pos)) {\n                    return;\n                }\n            }\n            const spos = this.strip_space(pos);\n            const symbol = this.source(spos).slice(0,1);\n            return {tex: symbol, pos: pos, end: spos+1, ttype: 'arbitrary_constant'};\n        }\n    }\n}\n\n"],"names":["AsciiMathParser","this","decimalsign","setup_symbols","sort_symbols","greek_letters","relations","asciimath","tex","constants","concat","left_brackets","right_brackets","free_tex","leftright_brackets","left_tex","right_tex","mid_tex","unary_symbols","func","rewriteleftright","acc","atname","atval","binary_symbols","option","rawfirst","non_constant_symbols","by_asciimath","a","b","length","sort","error","message","pos","neighbourhood","source","slice","Error","literal","token","end","ttype","longest","matches","filter","x","y","escape_text","str","replace","input","_source","brackets","arguments","eof","strip_space","unbracket","tok","bracket","skip_brackets","skipleft","includes","left","skipright","right","middle","middle_asciimath","parse","consume","exprs","expr","expression_list","rb","right_bracket","def","lr","leftright_bracket","ss","subsup","push","chr","osource","reduced","match","re","m","exec","exact","expression","comma","negative","negative_expression","first","intermediate_or_fraction","second","c","dash","other_constant","intermediate","frac","ufirst","usecond","numerator","denominator","raw_numerator","raw_denominator","simple","sub_expr","sup_expr","sub","sup","matrix","bracketed_expression","binary","constant","text","unary","negative_simple","left_bracket","contents","matrix_contents","contents_tex","rows","map","r","join","is_array","column_desc","leftright","row_length","undefined","lb","cells","columns","cell","matrix_cell","row_column_desc","lvert","rvert","l","mid_expression","firsts","last","t","firsttex","e","mid","lasttex","nr","position","quoted","textfn","lb1","rb1","atex","op","arg1","arg2","u","sstex","barg","arg","argtex","raw","greek","name","number","arbitrary_constant","re_greek","RegExp","re_number","sym","notm","spos"],"mappings":"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"}