mathup
Version:
Easy MathML authoring tool with a quick to write syntax
2 lines (1 loc) • 33.2 kB
JavaScript
var mathup=function(){"use strict";function e(e){return"operator"===e.type&&"|"===e.value}function t(e){return"operator"===e.type&&"∥"===e.value}function n(e){if(e.length<2)return;const t=e.at(0);"OperatorLiteral"===t?.type&&"∥"===t.value&&(t.value="‖");const n=e.at(-1);"OperatorLiteral"===n?.type&&"∥"===n.value&&(n.value="‖")}function a(e){let t=e;for(;t&&("Term"===t.type||"UnaryOperation"===t.type||"BinaryOperation"===t.type||"TernaryOperation"===t.type);)[t]=t.items;t&&"OperatorLiteral"===t.type&&(t.attrs||(t.attrs={}),void 0===t.attrs.lspace&&(t.attrs.lspace=0))}function r(e){return"sep.row"===e.type||"sep.col"===e.type||"infix"===e.type&&("sub"===e.value||"sup"===e.value)}function o(e){if(!e)return[];if("SpaceLiteral"===e.at(-1)?.type&&e.pop(),1!==e.length)return e;const[t]=e;if("FencedGroup"!==t.type||1!==t.items.length)return e;const[n]=t.items;if(1===n.length){const[t]=n;if(("Term"===t.type&&1===t.items.length?t.items[0]:t).type.endsWith("Literal"))return e}return[{type:"Term",items:n}]}function s(e){let t=e.start+1,n=e.tokens.at(t);const a=[];let s=null,u=null;function l(){(s&&s.length>0||u&&u.length>0)&&a.push([o(s),o(u)]),s=null,u=null}let i=n?.value??"sub";for(;n&&r(n);){"infix"===n.type&&(i=n.value),t+=1,n=e.tokens[t],n&&"space"===n.type&&(t+=1,n=e.tokens[t]);const a=[];for(;n&&"paren.close"!==n.type&&!r(n);){const r=x({...e,start:t,stack:[],nestLevel:e.nestLevel+1,stopAt:e=>"infix"===e.type&&("sub"===e.value||"sup"===e.value)});a.push(r.node),t=r.end,n=e.tokens[t]}"sup"===i?(u&&l(),u=a):(s&&l(),s=a)}return(s||u)&&l(),"paren.close"===n?.type&&(t+=1),{scripts:a,end:t}}function u(e){const{type:t,...n}=e;return n}function l(e){let t=e.start,n=e.tokens[t];const r=n,o=[];let l=[],i=[];const c=[];if(t+=1,n=e.tokens[t],n&&"space"===n.type&&(t+=1,n=e.tokens[t]),n&&"infix"===n.type&&("sub"===n.value||"sup"===n.value))return function(e){let t,n,{scripts:a,end:r}=s(e),o=e.tokens.at(r);if(o&&"space"!==o.type){n=a,a=[];const u=x({...e,start:r,stack:[],nestLevel:e.nestLevel+1,stopAt:e=>"paren.open"===e.type});if(t=u.node,r=u.end,o=e.tokens[r],"paren.open"===o?.type){const t=e.tokens.at(r+1);"infix"!==t?.type||"sub"!==t.value&&"sup"!==t.value||({scripts:a,end:r}=s({...e,start:r}))}}else t=e.stack.pop(),"SpaceLiteral"===t?.type&&(t={type:"Term",items:[]});const u={type:"MultiScripts",base:t??{type:"Term",items:[]},post:a};return n&&(u.pre=n),{node:u,end:r}}({...e,start:t-1});for(;n&&"paren.close"!==n.type;){if("space"===n.type&&" "===n.value){t+=1,n=e.tokens[t];continue}if("sep.col"===n.type){const a={value:n.value};n.attrs&&(a.attrs=n.attrs),o.push(a),i.push(l),l=[],t+=1,n=e.tokens[t],n&&"space"===n.type&&(t+=1,n=e.tokens[t]);continue}if("sep.row"===n.type){i.push(l),c.push(i),l=[],i=[],t+=1,n=e.tokens[t],n&&"space"===n.type&&(t+=1,n=e.tokens[t]);continue}1===l.length&&a(l[0]);const r=x({...e,start:t,stack:l,nestLevel:e.nestLevel+1});l.push(r.node),t=r.end,n=e.tokens[t]}l.length>0&&i.push(l);const p=t+1,v=n&&"paren.close"===n.type?n:null,m={open:u(r),close:v?u(v):null,seps:o};if("|"!==m.close?.value||r.value||(m.close.attrs||(m.close.attrs={}),m.close.attrs.lspace="0.35ex"),0===c.length)return{node:{type:"FencedGroup",items:i,attrs:m},end:p};const f=c;return i.length>0&&f.push(i),{node:{type:"MatrixGroup",items:f,attrs:m},end:p}}function i(e,t){if("Term"===e.type&&e.items.length>0){const[n,...a]=e.items;return{...e,items:[i(n,t),...a]}}if("BinaryOperation"===e.type){const[n,a]=e.items;return{...e,items:[i(n,t),a]}}if("TernaryOperation"===e.type){const[n,a,r]=e.items;return{...e,items:[i(n,t),a,r]}}return{type:"UnaryOperation",name:"command",transforms:t,items:[e]}}function c(e){return 1===e.length?e[0]:{type:"Term",items:e}}function p(n){const{tokens:a,start:r}=n,o=a[r],s=n.nestLevel+1;if(!o.name)throw new Error("Got prefix token without a name");const u=function({start:n,tokens:a,stack:r,stopAt:o}){if(o)return o;if(1!==r.length)return;const s=a[n];if(!s||s.arity&&1!==s.arity)return;const u=n>0?a[n-1]:void 0;return u&&"operator"===u.type?"|"===u.value?e:"∥"===u.value?t:void 0:void 0}(n);let l=x({...n,stack:[],start:r+1,nestLevel:s,stopAt:u});if(l&&l.node&&"SpaceLiteral"===l.node.type&&(l=x({...n,stack:[],start:l.end,nestLevel:s,stopAt:u})),2===o.arity){if(l&&l.node&&"FencedGroup"===l.node.type&&2===l.node.items.length){const[e,t]=l.node.items,n="root"===o.name?[c(t),c(e)]:[c(e),c(t)];return{node:{type:"BinaryOperation",name:o.name,attrs:o.attrs,items:n},end:l.end}}const e=l;let t=l&&x({...n,stack:[],start:l.end,nestLevel:s});t&&t.node&&"SpaceLiteral"===t.node.type&&(t=x({...n,stack:[],start:t.end,nestLevel:s}));const a={type:"BinaryOperation",name:o.name,items:[e.node,t.node]};return"root"===o.name&&(a.items=[t.node,e.node]),o.attrs&&(a.attrs=o.attrs),{node:a,end:t.end}}const i={type:"UnaryOperation",name:o.name,items:[l.node]};return o.accent&&(i.accent=o.accent),o.attrs&&(i.attrs=o.attrs),l&&l.node&&"FencedGroup"===l.node.type&&1===l.node.items.length&&(i.items=[c(l.node.items[0])]),{node:i,end:l.end}}function v(e){const t=e.tokens[e.start],n=t.value.startsWith("\n")?0:t.value.length;return{node:{type:"SpaceLiteral",attrs:{width:(a=n,a<=0?0:a<=3?.35*(a-1):a<=5?.5*(a-1):a-3)+"ex"}},end:e.start+1};var a}const m=e=>({start:t,tokens:n})=>{const{value:a,attrs:r}=n[t],o={type:`${e}Literal`,value:a};return r&&(o.attrs=r),{node:o,end:t+1}},f=[["command",function(n){const a=n.tokens[n.start];if(!a.name)throw new Error("Got command token without a name");const r=[],o=new Map;function s({name:e,value:t}){t&&("text-transform"===e?r.push(t):e&&o.set(e,t))}const u=function({start:n,tokens:a,stack:r,stopAt:o}){if(o)return o;if(1!==r.length)return;const s=n>0?a[n-1]:void 0;return s&&"operator"===s.type?"|"===s.value?e:"∥"===s.value?t:void 0:void 0}(n);s(a);let l=n.start+1,c=n.tokens[l];for(;c&&("command"===c.type||"space"===c.type);)"command"===c.type&&s(c),l+=1,c=n.tokens[l];const p=x({...n,stack:[],start:l,nestLevel:n.nestLevel+1,textTransforms:r,stopAt:u});if(0===r.length)return{node:{type:"UnaryOperation",name:"command",styles:o,items:[p.node]},end:p.end};const v=i(p.node,r);return o.size>0?{node:{type:"UnaryOperation",name:"command",styles:o,items:[v]},end:p.end}:{node:v,end:p.end}}],["ident",m("Ident")],["number",m("Number")],["operator",m("Operator")],["text",m("Text")],["infix",k],["paren.open",l],["prefix",p],["space",v]];var d=new Map(f);const g=["ident","number","operator","text"];function h(e){return function(e){if("frac"!==e.name)return e;for(const t of e.items)a(t);return e}(function(e){const t=e;return t.items.forEach(((n,a)=>{if("FencedGroup"!==n.type||1!==n.items.length)return;if(0===a&&"frac"!==e.name)return;const[r]=n.items;if(1!==r.length)return void(t.items[a]={type:"Term",items:r});const[o]=r,s="Term"===o.type&&1===o.items.length?o.items[0]:o;s.type.endsWith("Literal")||(t.items[a]=s)})),t}(function(e){const t=e,[n]=e.items;return"OperatorLiteral"!==n.type?t:"sub"===e.name&&["lim","∑","∏","⋂","⋃","⋀","⋁"].includes(n.value)?(t.name="under",t):"subsup"===e.name&&["∑","∏","⋂","⋃","⋀","⋁"].includes(n.value)?(t.name="underover",t):t}(e)))}function y(e,t,n){if("sub"===t.name&&"sup"===e){const[e,a]=t.items;return{type:"TernaryOperation",name:"subsup",items:[e,a,n]}}if("sup"===t.name&&"sub"===e){const[e,a]=t.items;return{type:"TernaryOperation",name:"subsup",items:[e,n,a]}}if("under"===t.name&&("over"===e||"sup"===e)){const[e,a]=t.items;return{type:"TernaryOperation",name:"underover",items:[e,a,n]}}if("over"===t.name&&("under"===e||"sub"===e)){const[e,a]=t.items;return{type:"TernaryOperation",name:"underover",items:[e,n,a]}}const a=h({type:"BinaryOperation",name:e,items:[t,n]});return b(a.name,a.items)}function b(e,[t,n]){if("BinaryOperation"!==t.type||"frac"===e)return{type:"BinaryOperation",name:e,items:[t,n]};const[a,r]=t.items;return{type:"BinaryOperation",name:t.name,items:[a,b(e,[r,n])]}}function k(e){const{tokens:t,start:a,stack:r}=e,o=e.nestLevel+1,s=t[a];let u;!function(e){if(e.length<3)return!1;const t=e.at(0),n=e.at(-1);return"OperatorLiteral"===t?.type&&"OperatorLiteral"===n?.type&&("|"===t.value||"∥"===t.value||"‖"===t.value)&&t.value===n.value}(r)?(u=r.pop(),"SpaceLiteral"===u?.type&&(u=r.pop())):(n(r),u={type:"Term",items:[...r]},r.splice(0,r.length)),u||(u={type:"Term",items:[]});const l=t[a+1];let i;if(l&&g.includes(l.type)){const t=d.get(l.type);if(!t)throw new Error("Unknown handler");i=t({...e,stack:[],start:a+1,nestLevel:o})}else i=x({...e,stack:[],start:a+1,nestLevel:o});i&&i.node&&"SpaceLiteral"===i.node.type&&(i=x({...e,stack:[],start:i.end,nestLevel:o}));const{end:c,node:p}=i;return"BinaryOperation"===u.type?{end:c,node:h(y(s.value,u,p))}:{end:c,node:h({type:"BinaryOperation",name:s.value,items:[u,p]})}}const w=["command","ident","infix","number","operator","paren.open","prefix","text"];function x(e){if(e.start>=e.tokens.length)return{node:{type:"Term",items:[]},end:e.start};const{type:t}=e.tokens[e.start];return"paren.open"===t?l(e):"space"===t?v(e):"infix"===t?k(e):"prefix"===t?p(e):function(e){let t=e.start,a=e.tokens[t];const r=[];for(;a&&w.includes(a.type)&&!e.stopAt?.(a);){const n=d.get(a.type);if(!n)throw new Error("Unknown Hander");const o=n({...e,start:t,stack:r});r.push(o.node),t=o.end,a=e.tokens[t]}return function(e,t){if(e.length<2)return;const[n,a]=e;if("IdentLiteral"!==n.type||"d"!==n.value)return;let r=a;for(;"UnaryOperation"===r.type||"BinaryOperation"===r.type||"TernaryOperation"===r.type;)[r]=r.items;if("IdentLiteral"!==r.type)return;const o=(t?.length??0)>0?n.value:"𝑑",s={...e[0],type:"OperatorLiteral",value:o,attrs:{...n.attrs??{},rspace:"0"}};e[0]=s}(r,e.textTransforms),n(r),{node:{type:"Term",items:r},end:t}}(e)}function L(e,{bare:t}){let n;if(n="math"===e.tag&&t?document.createDocumentFragment():document.createElementNS("http://www.w3.org/1998/Math/MathML",e.tag),n instanceof Element&&e.attrs)for(const[t,a]of Object.entries(e.attrs))n.setAttribute(t,`${a}`);if(e.textContent&&(n.textContent=e.textContent),e.childNodes)for(const t of e.childNodes)t&&n.appendChild(L(t,{bare:!1}));return n}function O(e,{bare:t}){const n=Object.entries(e.attrs||{}).map((([e,t])=>{return`${e}="${n=`${t}`,n.replace(/"/g,""")}"`;var n})).join(" "),a=n?`${e.tag} ${n}`:e.tag;if(e.textContent){return`<${a}>${e.textContent.replace(/[&<]/g,(e=>"&"===e?"&":"<"))}</${e.tag}>`}if(e.childNodes){const n=e.childNodes.map((e=>e?O(e,{bare:!1}):"")).join("");return"math"===e.tag&&t?n:`<${a}>${n}</${e.tag}>`}return`<${a} />`}function M(e,t,n){if(!e)throw new Error("updateDOM called on null");if(e.tagName.toLowerCase()!==t.tag)throw new Error("tag name mismatch");if("math"!==t.tag||!n.bare){const n=t.attrs||{},a=[];for(const t of e.attributes){const r=n[t.name];r?r!==t.value&&e.setAttribute(t.name,`${r}`):a.push(t.name)}for(const t of a)e.removeAttribute(t);for(const[t,a]of Object.entries(n))e.getAttribute(t)||e.setAttribute(t,`${a}`)}if(["mi","mn","mo","mspace","mtext"].includes(t.tag))return void(e.textContent!==t.textContent&&(e.textContent=t.textContent??""));const a=[],r=[],o=[];for(const[s,u]of function*(e){const t=e.map((e=>e?e[Symbol.iterator]():function*(){}()));for(;;){const e=t.map((e=>e.next()));if(e.every((({done:e})=>e)))return;yield e.map((({value:e})=>e))}}([e.children,t.childNodes]))(s||u)&&(u?s?s.tagName.toLowerCase()!==u.tag?o.push([s,L(u,n)]):M(s,u,{bare:!1}):a.push(L(u,n)):r.push(s));for(const t of r)e.removeChild(t);for(const t of a)e.appendChild(t);for(const[t,n]of o)e.replaceChild(n,t)}const N=/^\p{L}/u;function $(e){return!!e&&N.test(e)}const T=/^[\p{L}\p{N}]/u;function C(e){return!!e&&T.test(e)}const S=/^\p{M}/u;function A(e){return!!e&&S.test(e)}const B=/^[\p{N}\u{218a}-\u{218b}]/u;function E(e){return!!e&&B.test(e)}const _=/^[\p{P}\p{Sm}\p{So}\u{2061}-\u{2064}]/u;const G=/^\p{Pe}/u;function F(e){return!!e&&G.test(e)}const I=/^\p{Ps}/u;const P={class:"mathup-function-ident"},U=new Map([["CC",{value:"ℂ"}],["Delta",{value:"Δ",attrs:{mathvariant:"normal"}}],["Gamma",{value:"Γ",attrs:{mathvariant:"normal"}}],["Lambda",{value:"Λ",attrs:{mathvariant:"normal"}}],["NN",{value:"ℕ"}],["O/",{value:"∅"}],["Omega",{value:"Ω",attrs:{mathvariant:"normal"}}],["Phi",{value:"Φ",attrs:{mathvariant:"normal"}}],["Pi",{value:"Π",attrs:{mathvariant:"normal"}}],["Psi",{value:"Ψ",attrs:{mathvariant:"normal"}}],["QQ",{value:"ℚ"}],["RR",{value:"ℝ"}],["Sigma",{value:"Σ",attrs:{mathvariant:"normal"}}],["Theta",{value:"Θ",attrs:{mathvariant:"normal"}}],["Xi",{value:"Ξ",attrs:{mathvariant:"normal"}}],["ZZ",{value:"ℤ"}],["alpha",{value:"α"}],["beta",{value:"β"}],["chi",{value:"χ"}],["cos",{value:"cos",attrs:{...P}}],["cosh",{value:"cosh",attrs:{...P}}],["cot",{value:"cot",attrs:{...P}}],["csc",{value:"csc",attrs:{...P}}],["cosec",{value:"cosec",attrs:{...P}}],["delta",{value:"δ"}],["det",{value:"det",attrs:{...P}}],["dim",{value:"dim",attrs:{...P}}],["epsilon",{value:"ɛ"}],["eta",{value:"η"}],["gamma",{value:"γ"}],["gcd",{value:"gcd",attrs:{...P}}],["iota",{value:"ι"}],["kappa",{value:"κ"}],["lambda",{value:"λ"}],["lcm",{value:"lcm",attrs:{...P}}],["ln",{value:"ln",attrs:{...P}}],["log",{value:"log",attrs:{...P}}],["max",{value:"max",attrs:{...P}}],["min",{value:"min",attrs:{...P}}],["mu",{value:"μ"}],["nu",{value:"ν"}],["omega",{value:"ω"}],["oo",{value:"∞"}],["phi",{value:"φ"}],["phiv",{value:"ϕ"}],["pi",{value:"π"}],["psi",{value:"ψ"}],["rho",{value:"ρ"}],["sec",{value:"sec",attrs:{...P}}],["sigma",{value:"σ"}],["sin",{value:"sin",attrs:{...P}}],["sinh",{value:"sinh",attrs:{...P}}],["tan",{value:"tan",attrs:{...P}}],["tanh",{value:"tanh",attrs:{...P}}],["tau",{value:"τ"}],["theta",{value:"θ"}],["upsilon",{value:"υ"}],["xi",{value:"ξ"}],["zeta",{value:"ζ"}]]),W=new Map([["-",{value:"−"}],["!=",{value:"≠"}],["!==",{value:"≢"}],["!in",{value:"∉"}],[".$",{value:"",attrs:{class:"mathup-function-application"}}],[".*",{value:"",attrs:{class:"mathup-invisible-times"}}],[".+",{value:"",attrs:{class:"mathup-invisible-add"}}],[".,",{value:"",attrs:{class:"mathup-invisible-separator"}}],["'",{value:"′",attrs:{lspace:0,rspace:0}}],["''",{value:"″",attrs:{lspace:0,rspace:0}}],["'''",{value:"‴",attrs:{lspace:0,rspace:0}}],["''''",{value:"⁗",attrs:{lspace:0,rspace:0}}],["*",{value:"·"}],["**",{value:"∗"}],["***",{value:"⋆"}],["+-",{value:"±"}],["-+",{value:"∓"}],["-:",{value:"÷"}],["-<",{value:"≺"}],["-<=",{value:"⪯"}],["-=",{value:"≡"}],["->",{value:"→"}],["->>",{value:"↠"}],["...",{value:"…"}],["//",{value:"⁄"}],["/_",{value:"∠"}],["/_\\",{value:"△"}],[":.",{value:"∴"}],[":|:",{value:"|",attrs:{stretchy:!0},sep:!0}],["<-",{value:"←"}],["<<<",{value:"≪"}],["<=",{value:"≤"}],["<=>",{value:"⇔"}],["<>",{value:"⋄"}],["<|",{value:"⊲"}],["==",{value:"≡"}],["=>",{value:"⇒"}],[">-",{value:"≻"}],[">-=",{value:"⪰"}],[">->",{value:"↣"}],[">->>",{value:"⤖"}],["><|",{value:"⋊"}],[">=",{value:"≥"}],[">>>",{value:"≫"}],["@",{value:"∘"}],["AA",{value:"∀"}],["EE",{value:"∃"}],["TT",{value:"⊤"}],["[]",{value:"□"}],["^^",{value:"∧"}],["^^^",{value:"⋀"}],["_|_",{value:"⊥"}],["aleph",{value:"ℵ"}],["and",{value:"and"}],["cdots",{value:"⋯"}],["darr",{value:"↓"}],["ddots",{value:"⋱"}],["del",{value:"∂"}],["diamond",{value:"⋄"}],["dint",{value:"∬"}],["grad",{value:"∇"}],["hArr",{value:"⇔"}],["harr",{value:"↔"}],["if",{value:"if"}],["iff",{value:"⇔"}],["in",{value:"∈"}],["int",{value:"∫"}],["lArr",{value:"⇐"}],["larr",{value:"←"}],["lim",{value:"lim"}],["mod",{value:"mod"}],["nn",{value:"∩"}],["nnn",{value:"⋂"}],["not",{value:"¬"}],["o+",{value:"⊕"}],["o.",{value:"⊙"}],["oc",{value:"∝"}],["oint",{value:"∮"}],["or",{value:"or"}],["otherwise",{value:"otherwise"}],["ox",{value:"⊗"}],["prod",{value:"∏"}],["prop",{value:"∝"}],["rArr",{value:"⇒"}],["rarr",{value:"→"}],["square",{value:"□"}],["sub",{value:"⊂"}],["sube",{value:"⊆"}],["sum",{value:"∑"}],["sup",{value:"⊃"}],["supe",{value:"⊇"}],["uarr",{value:"↑"}],["uu",{value:"∪"}],["uuu",{value:"⋃"}],["vdots",{value:"⋮"}],["vv",{value:"∨"}],["vvv",{value:"⋁"}],["xx",{value:"×"}],["|--",{value:"⊢"}],["|->",{value:"↦"}],["|==",{value:"⊨"}],["|>",{value:"⊳"}],["|><",{value:"⋉"}],["|><|",{value:"⋈"}],["||",{value:"∥"}],["~=",{value:"≅"}],["~~",{value:"≈"}]]),j=new Map([["(:",{value:"⟨"}],["<<",{value:"⟨"}],["{:",{value:""}],["|(",{value:"|"}],["|:",{value:"|"}],["|__",{value:"⌊"}],["||(",{value:"‖"}],["||:",{value:"‖"}],["|~",{value:"⌈"}],["(mod",{value:"(",attrs:{lspace:"1.65ex"},extraTokensAfter:[{type:"operator",value:"mod",attrs:{lspace:0}}]}]]),D=new Map([[")|",{value:"|"}],[")||",{value:"‖"}],[":)",{value:"⟩"}],[":|",{value:"|"}],[":||",{value:"‖"}],[":}",{value:""}],[">>",{value:"⟩"}],["__|",{value:"⌋"}],["~|",{value:"⌉"}]]),q=new Map([["bar",{name:"over",accent:"‾"}],["ddot",{name:"over",accent:"⋅⋅"}],["dot",{name:"over",accent:"⋅"}],["hat",{name:"over",accent:"^"}],["obrace",{name:"over",accent:"⏞"}],["obracket",{name:"over",accent:"⎴"}],["oparen",{name:"over",accent:"⏜"}],["oshell",{name:"over",accent:"⏠"}],["tilde",{name:"over",accent:"˜"}],["ubrace",{name:"under",accent:"⏟"}],["ubrace",{name:"under",accent:"⏟"}],["ubracket",{name:"under",accent:"⎵"}],["ul",{name:"under",accent:"_"}],["uparen",{name:"under",accent:"⏝"}],["ushell",{name:"under",accent:"⏡"}],["vec",{name:"over",accent:"→"}],["abs",{name:"fence",attrs:{open:"|",close:"|"}}],["binom",{name:"frac",arity:2,attrs:{linethickness:0,open:"(",close:")"}}],["ceil",{name:"fence",attrs:{open:"⌈",close:"⌉"}}],["floor",{name:"fence",attrs:{open:"⌊",close:"⌋"}}],["norm",{name:"fence",attrs:{open:"‖",close:"‖"}}],["root",{name:"root",arity:2}],["sqrt",{name:"sqrt"}],["cancel",{name:"row",attrs:{class:"mathup-enclose-cancel"}}]]),R=new Map([["rm",{name:"text-transform",value:"normal"}],["bf",{name:"text-transform",value:"bold"}],["it",{name:"text-transform",value:"italic"}],["bb",{name:"text-transform",value:"double-struck"}],["cc",{name:"text-transform",value:"script"}],["tt",{name:"text-transform",value:"monospace"}],["fr",{name:"text-transform",value:"fraktur"}],["sf",{name:"text-transform",value:"sans-serif"}],["black",{name:"color",value:"black"}],["⚫",{name:"color",value:"black"}],["blue",{name:"color",value:"blue"}],["🔵",{name:"color",value:"blue"}],["brown",{name:"color",value:"brown"}],["🟤",{name:"color",value:"brown"}],["cyan",{name:"color",value:"cyan"}],["gray",{name:"color",value:"gray"}],["green",{name:"color",value:"green"}],["🟢",{name:"color",value:"green"}],["lightgray",{name:"color",value:"lightgray"}],["orange",{name:"color",value:"orange"}],["🟠",{name:"color",value:"orange"}],["purple",{name:"color",value:"purple"}],["🟣",{name:"color",value:"purple"}],["red",{name:"color",value:"red"}],["🔴",{name:"color",value:"red"}],["white",{name:"color",value:"white"}],["⚪",{name:"color",value:"white"}],["yellow",{name:"color",value:"yellow"}],["🟡",{name:"color",value:"yellow"}],["bg.black",{name:"background",value:"black"}],["⬛",{name:"background",value:"black"}],["bg.blue",{name:"background",value:"blue"}],["🟦",{name:"background",value:"blue"}],["bg.brown",{name:"background",value:"brown"}],["🟫",{name:"background",value:"brown"}],["bg.cyan",{name:"background",value:"cyan"}],["bg.gray",{name:"background",value:"gray"}],["bg.green",{name:"background",value:"green"}],["🟩",{name:"background",value:"green"}],["bg.lightgray",{name:"background",value:"lightgray"}],["bg.orange",{name:"background",value:"orange"}],["🟧",{name:"background",value:"orange"}],["bg.purple",{name:"background",value:"purple"}],["🟪",{name:"background",value:"purple"}],["bg.red",{name:"background",value:"red"}],["🟥",{name:"background",value:"red"}],["bg.white",{name:"background",value:"white"}],["⬜",{name:"background",value:"white"}],["bg.yellow",{name:"background",value:"yellow"}],["🟨",{name:"background",value:"yellow"}]]);function H(e,t,n,{offset:a=0}={}){let r=0;for(;n[t+a+r]===e;)r+=1;let o="",s=0,u=t+a+r;for(;s<r&&!(u>=n.length);)n[u]===e?s+=1:(s>0&&(o+=e.repeat(s),s=0),o+=n[u]),u+=1;return{value:o.trim(),end:u}}function Z(e,t,n){return H("`",e,t,n)}function z(e,t,n){const a=t+e.length;let r="",[o]=n.slice(a);if(!o)return{value:e,end:a};if(C(o)){for(;C(o);)r+=o,[o]=n.slice(a+r.length);return{value:r,end:a+r.length}}return"`"===o?Z(t,n,{offset:e.length}):{value:o,end:a+o.length}}function Q(e,t,n){let a=t,r=e.at(a);for(;" "===r||"\n"===r;)a+=1,r=e.at(a);return!!r&&!(n&&(F(r)||function(e,t){for(const n of D.keys())if(e.startsWith(n,t))return!0;return!1}(e,a)))}const X=new Map([["^","sup"],["/","frac"],["_","sub"],[".^","over"],["._","under"]]),J=new Set;for(const e of[R,U,W,D,j,q])for(const t of e.keys())"^/_".includes(t[0])&&J.add(t);function K(e){for(const[t]of W)if(t.startsWith(e))return!0;return!1}function V(e){for(const[t]of D)if(t.startsWith(e))return!0;return!1}function Y(e){for(const[t]of j)if(t.startsWith(e))return!0;return!1}var ee=[function(e,t,{start:n}){if(" "!==e)return null;let a=n,r=e,o="";for(;" "===r;)o+=r,a+=1,r=t[a];return{type:"space",value:o,end:a}},function(e,t,{start:n,grouping:a}){if(!$(e))return null;let r=e,o="";for(;$(r)||A(r)||o.length>0&&"."===r;){const e=n+o.length+r.length;o+=r,[r]=t.slice(e)}o.endsWith(".")&&(o=o.slice(0,-1));let s=n+o.length;{const e=W.get(o);if(e)return{type:"operator",value:e.value,attrs:e.attrs,end:n+o.length}}{const e=U.get(o);if(e)return{type:"ident",value:e.value,attrs:e.attrs,end:n+o.length}}const u=`${o}${r}`,[l]=t.slice(n+u.length);{const e=W.get(u);if(e&&!C(l))return{type:"operator",value:e.value,attrs:e.attrs,end:n+u.length}}{const e=U.get(u);if(e&&!C(l))return{type:"ident",value:e.value,attrs:e.attrs,end:n+u.length}}{const e=q.get(o);if(e&&(function(e){return"root"===e.name||"sqrt"===e.name}(e)||Q(t,s,a)))return{type:"prefix",value:"",end:s,...e}}{const e=R.get(o);if(e&&Q(t,s,a))return{type:"command",end:s,...e}}return o.includes(".")&&(o=o.slice(0,o.indexOf(".")),s=n+o.length),{type:"ident",value:o,end:s,split:!0}},function(e,t,{start:n},{decimalMark:a}){if(!E(e))return null;let r=e,o="";for(;E(r);)o+=r,[r]=t.slice(n+o.length);if(r===a&&([r]=t.slice(n+o.length+a.length),E(r)))for(o+=a;E(r);)o+=r,[r]=t.slice(n+o.length);return{type:"number",value:o,end:n+o.length}},function(e,t,{start:n}){if("`"!==e)return null;const{end:a,value:r}=Z(n,t);return{type:"ident",value:r,end:a}},function(e,t,{start:n}){if('"'!==e)return null;const{end:a,value:r}=function(e,t,n){return H('"',e,t,n)}(n,t);return{type:"text",value:r,end:a}},function(e,t,{start:n}){if("#"!==e)return null;const{end:a,value:r}=z("#",n,t);return{type:"number",value:r,end:a}},function(e,t,{start:n}){return"\\"!==e?null:{type:"operator",...z("\\",n,t)}},function(e,t,{start:n,grouping:a}){if("\n"!==e)return null;let r=n,o=e,s="";for(;"\n"===o;)s+=o,r+=1,o=t[r];return{type:a?"sep.row":"space",value:s,end:r}},function(e,t,{start:n}){if("."===e){const e=t[n+1],a=X.get(`.${e}`);if(a){for(const e of J)if(e===t.slice(n+1,n+1+e.length))return null;return{type:"infix",value:a,end:n+2}}}const a=X.get(e);if(a){for(const e of J)if(e===t.slice(n,n+e.length))return null;return{type:"infix",value:a,end:n+1}}return null},function(e,t,{grouping:n,start:a},{colSep:r,rowSep:o}){if(!n)return null;const s=a+r.length,u=a+o.length;return t.slice(a,u)===o?{type:"sep.row",value:o,end:u}:t.slice(a,s)===r?{type:"sep.col",value:r,end:s}:null},function(e,t,{start:n}){let a=e;if(Y(a)){let[e]=t.slice(n+a.length),r=a+e;for(;e&&Y(r);)a+=e,[e]=t.slice(n+a.length),r=a+e}{const[e]=t.slice(n+a.length),r=a+e;if(W.has(r))return null}const r=j.get(a);return r?{...r,type:"paren.open",end:n+a.length}:function(e){return!!e&&I.test(e)}(e)?{type:"paren.open",value:e,end:n+e.length}:null},function(e,t,{grouping:n,start:a}){if(!n)return null;let r=e;if(V(r)){let[e]=t.slice(a+r.length),n=r+e;for(;e&&V(n);)r+=e,[e]=t.slice(a+r.length),n=r+e}{const[e]=t.slice(a+r.length),n=r+e;if(W.has(n))return null}const o=D.get(r);return o?{type:"paren.close",value:o.value,end:a+r.length}:F(e)?{type:"paren.close",value:e,end:a+e.length}:null},function(e,t,{start:n,grouping:a}){let r=e;if(K(r)){let[e]=t.slice(n+r.length),a=r+e;for(;e&&K(a);)r+=e,[e]=t.slice(n+r.length),a=r+e}const o=W.get(r);if(o)return{type:o.sep&&a?"sep.col":"operator",value:o.value,attrs:o.attrs,end:n+r.length};const s=R.get(r);if(s)return{type:"command",end:n+r.length,...s};if(!function(e){return!!e&&_.test(e)}(e))return null;const u={type:"operator",value:e,end:n+e.length};return"|"===e&&" "===t.at(n-1)&&" "===t.at(n+1)&&(u.attrs={stretchy:!0}),u}];function te(e){return null!==e}function ne(e){return t=>({tag:e,attrs:t.attrs,textContent:t.value})}function ae(e){return null!==e}function re(e,t){const{open:n,close:a,...r}=e.attrs||{},o={tag:`m${e.name}`,childNodes:e.items.map(t),attrs:r};return n||a?{tag:"mrow",childNodes:[{tag:"mo",textContent:`${n}`,attrs:{fence:!0}},o,{tag:"mo",textContent:`${a}`,attrs:{fence:!0}}]}:o}function oe(e,t){return`var(--mathup-${e}-${t}, ${t})`}function se(e,t){if(!e||!t)return t;const n=new Map;for(const[t,a]of e)if("background"===t){const e=n.get("background"),r=oe(t,a);e?n.set("background",`${e},${r}`):n.set("background",r)}else n.set(t,oe(t,a));let a=t.attrs?.style??"";for(const[e,t]of n)a+=`${e}:${t};`;return a?{...t,attrs:t.attrs?{...t.attrs,style:a}:{style:a}}:t}function ue(e){return null!==e}function le(e,t){let n="";for(const a of t)n+=e(a);return n}function ie(e,t){return n=>{if(t){const e=t.get(n);if(e)return e}const a=n.codePointAt(0);if(!a)return n;for(const[[t,n],r]of e)if(t<=a&&a<=n)return String.fromCodePoint(a+r);return n}}function ce([e,t]){return n=>[[e,t],n-e]}const pe=ce([48,57]),ve=ce([65,90]),me=ce([97,122]),fe=ce([913,937]),de=ce([945,969]),ge=ie([pe(120782),ve(119808),me(119834),fe(120488),de(120514)],new Map([["ϴ","𝚹"],["∇","𝛁"],["∂","𝛛"],["ϵ","𝛜"],["ϑ","𝛝"],["ϰ","𝛞"],["ϕ","𝛟"],["ϱ","𝛠"],["ϖ","𝛡"],["Ϝ","𝟊"],["ϝ","𝟋"]])),he=ie([ve(119860),me(119886),fe(120546),de(120572)],new Map([["h","ℎ"],["ı","𝚤"],["ȷ","𝚥"],["ϴ","𝛳"],["∇","𝛻"],["∂","𝜕"],["ϵ","𝜖 "],["ϑ","𝜗"],["ϰ","𝜘"],["ϕ","𝜙"],["ϱ","𝜚"],["ϖ","𝜛"]])),ye=ie([ve(119912),me(119938),fe(120604),de(120630)],new Map([["ϴ","𝜭"],["∇","𝜵"],["∂","𝝏"],["ϵ","𝝐"],["ϑ","𝝑"],["ϰ","𝝒"],["ϕ","𝝓"],["ϱ","𝝔"],["ϖ","𝝕"]])),be=ie([pe(120792),ve(120120),me(120146)],new Map([["C","ℂ"],["H","ℍ"],["N","ℕ"],["P","ℙ"],["Q","ℚ"],["R","ℝ"],["Z","ℤ"],["π","ℼ"],["γ","ℽ"],["Π","ℿ"],["∑","⅀"]])),ke=ie([],new Map([["D","ⅅ"],["d","ⅆ"],["i","ⅈ"],["j","ⅉ"]])),we=ie([ve(120068),me(120094)],new Map([["C","ℭ"],["H","ℌ"],["I","ℑ"],["R","ℜ"],["Z","ℨ"]])),xe=ie([ve(120172),me(120198)]),Le=ie([pe(120822),ve(120432),me(120458)]),Oe=ie([pe(120802),ve(120224),me(120250)]),Me=ie([pe(120812),ve(120276),me(120302),fe(120662),de(120688)],new Map([["ϴ","𝝧"],["∇","𝝯"],["∂","𝞉"],["ϵ","𝞊"],["ϑ","𝞋"],["ϰ","𝞌"],["ϕ","𝞍"],["ϱ","𝞎"],["ϖ","𝞏"]])),Ne=ie([ve(120328),me(120354)]),$e=ie([ve(120380),me(120406),fe(120720),de(120746)],new Map([["ϴ","𝞡"],["∇","𝞩"],["∂","𝟃"],["ϵ","𝟄"],["ϑ","𝟅"],["ϰ","𝟆"],["ϕ","𝟇"],["ϱ","𝟈"],["ϖ","𝟉"]])),Te=ie([ve(119964),me(119990)],new Map([["B","ℬ"],["E","ℰ"],["F","ℱ"],["H","ℋ"],["I","ℐ"],["L","ℒ"],["M","ℳ"],["R","ℛ"],["e","ℯ"],["g","ℊ"],["o","ℴ"]])),Ce=ie([ve(120016),me(120042)]);function Se(e){return`var(--mathup-font-family-${e}, ${e})`}function Ae(e,t){const n=new Map;if(t.includes("bold")&&n.set("font-weight","bold"),t.includes("italic")&&n.set("font-style","italic"),t.includes("sans-serif")?n.set("font-family",Se("sans-serif")):t.includes("monospace")&&n.set("font-family",Se("monospace")),0===n.size)return e;let a="";for(const[e,t]of n)a+=`${e}:${t};`;return{...e,style:a}}function Be(e,t){return t.includes("double-struck")?le(be,e):t.includes("script")?le(Te,e):t.includes("fraktur")?le(we,e):e}function Ee(e,t){return t.includes("bold")?t.includes("italic")?t.includes("sans-serif")?le($e,e):le(ye,e):t.includes("script")?le(Ce,e):t.includes("fraktur")?le(xe,e):t.includes("sans-serif")?le(Me,e):le(ge,e):t.includes("italic")?t.includes("double-struck")?le(ke,e):t.includes("sans-serif")?le(Ne,e):le(he,e):t.includes("sans-serif")?le(Oe,e):t.includes("monospace")?le(Le,e):Be(e,t)}function _e(e,t){if(Array.isArray(e))return e.map((e=>_e(e,t)));if("TextLiteral"===e.type){const{attrs:n={},transforms:a=[]}=t;return{...e,attrs:Ae(n,a),value:Be(e.value,a)}}if("IdentLiteral"===e.type&&1===e.value.length&&t.transforms&&1===t.transforms.length&&"normal"===t.transforms[0])return{...e,attrs:{...e.attrs??{},mathvariant:"normal"}};if("IdentLiteral"===e.type||"NumberLiteral"===e.type||"OperatorLiteral"===e.type){const{transforms:n=[]}=t;return{...e,value:Ee(e.value,n)}}return"MultiScripts"===e.type?{...e,base:_e(e.base,t)}:"items"in e?{...e,items:e.items.map((e=>_e(e,t)))}:e}var Ge=new Map([["BinaryOperation",re],["FencedGroup",function(e,t){const n=e.items.map((e=>1===e.length?t(e[0]):{tag:"mrow",childNodes:e.map(t).filter(te)})).reduce(((t,n,a)=>{t?.childNodes?.push(n);const r=e.attrs.seps[a];if(r){const{value:e,attrs:n={}}=r;t?.childNodes?.push({tag:"mo",textContent:e,attrs:{...n,separator:!0}})}return t}),{tag:"mrow",childNodes:[]}),{open:a,close:r}=e.attrs;if(n&&!a.value&&!r?.value)return n;const o=[];return a.value&&o.push({tag:"mo",textContent:a.value,attrs:{...a.attrs,fence:"true"}}),1===n?.childNodes?.length?o.push(n.childNodes[0]):o.push(n),r?.value&&o.push({tag:"mo",textContent:r.value,attrs:{...r.attrs,fence:"true"}}),{tag:"mrow",childNodes:o}}],["IdentLiteral",ne("mi")],["MatrixGroup",function(e,t){const n=[],a=e.items.reduce(((e,t)=>Math.max(e,t.length)),0),{open:r,close:o}=e.attrs,s=o?.value?[]:Array.from({length:a}).fill("start");return r.value&&n.push({tag:"mo",textContent:r.value,attrs:{...r.attrs,fence:"true"}}),n.push({tag:"mtable",childNodes:e.items.map((e=>({tag:"mtr",childNodes:e.map(((e,n)=>({tag:"mtd",attrs:s[n]?{style:`text-align: ${s[n]}`}:{},childNodes:e.map(t).filter(ae)})))})))}),o?.value&&n.push({tag:"mo",textContent:o.value,attrs:{...o.attrs,fence:"true"}}),{tag:"mrow",childNodes:n}}],["MultiScripts",function(e,t){const n=e.post.flatMap((e=>e.map((e=>1===e.length?t(e[0]):{tag:"mrow",childNodes:e.map(t)})))),a=[t(e.base),...n];if(e.pre&&e.pre.length>0){a.push({tag:"mprescripts"});const n=e.pre.flatMap((e=>e.map((e=>1===e.length?t(e[0]):{tag:"mrow",childNodes:e.map(t)}))));a.push(...n)}return{tag:"mmultiscripts",childNodes:a}}],["NumberLiteral",ne("mn")],["OperatorLiteral",ne("mo")],["Sentence",function(e,t,n){const a={};return n.dir&&(a.dir=n.dir),n.display&&(a.display=n.display),{tag:"math",attrs:a,childNodes:e.body.map(t).filter((e=>null!==e))}}],["SpaceLiteral",function(e){return"0ex"===e.attrs.width?null:{tag:"mspace",attrs:e.attrs}}],["Term",function(e,t){return 1===e.items.length&&ue(e.items[0])?se(e.styles,t(e.items[0])):se(e.styles,{tag:"mrow",childNodes:e.items.map(t).filter(ue)})}],["TernaryOperation",re],["TextLiteral",ne("mtext")],["UnaryOperation",function(e,t){if("command"===e.name)return se(e.styles,t(_e(e.items[0],e)));if("fence"===e.name){const{open:n,close:a}=e.attrs||{};return{tag:"mrow",childNodes:[{tag:"mo",attrs:{fence:!0},textContent:`${n}`},1===e.items.length?t(e.items[0]):{tag:"mrow",childNodes:e.items.map(t)},{tag:"mo",attrs:{fence:!0},textContent:`${a}`}]}}const n=`m${e.name}`;let[a]=e.items;if("Term"===a.type&&1===a.items.length&&([a]=a.items),e.accent){const r=e.attrs?{...e.attrs}:{};"over"===e.name?(r.accent=!0,"IdentLiteral"===a.type&&("i"===a.value?a.value="ı":"j"===a.value&&(a.value="ȷ"))):"under"===e.name&&(r.accentunder=!0);return{tag:n,childNodes:[t(a),{tag:"mo",textContent:e.accent}],attrs:r}}return{tag:n,childNodes:[t(a)],attrs:e.attrs}}]]);function Fe({bare:e=!1,dir:t=null,display:n=null,decimalMark:a=".",colSep:r=(","===a?";":","),rowSep:o=(";"===r?";;":";")}){const s={decimalMark:a,colSep:r,rowSep:o},u={dir:t,display:n},l={bare:e};return function(e){const t=function(e){function t(t,n){const[a]=t.slice(n.start);for(const r of ee){const o=r(a,t,n,e);if(o)return o}return function(e,t,{start:n}){return{type:"ident",value:e,end:n+e.length}}(a,0,n)}return function*(e){let n=0,a=0;for(;n<e.length;){const{type:r,value:o,end:s,split:u,extraTokensAfter:l,...i}=t(e,{start:n,grouping:a>0});if(u){let e="";for(const t of o)A(t)?e+=t:e?(yield{type:r,value:e},e=t):e=t;e&&(yield{type:r,value:e})}else yield{type:r,value:o,...i};if(l)for(const e of l)yield e;n=s,"paren.open"===r?a+=1:"paren.close"===r&&a>0&&(a-=1)}}}(s),n=function(e){const t=[];let n=0;for(;n<e.length;){const a=x({tokens:e,start:n,stack:t,nestLevel:1});n=a.end,t.push(a.node)}return{type:"Sentence",body:t}}([...t(e)]);var a;const r=(a=u,function e(t){const n=Ge.get(t.type);return n?n(t,e,a):null})(n);if(!r)throw new Error("Failed parsing AST");return{toDOM:()=>L(r,l),toString:()=>O(r,l),updateDOM:e=>M(e,r,l)}}}return function(e,t={}){return Fe(t)(e)}}();