From c227ad916a581e818d05d92a30ab0a8eb0d85d50 Mon Sep 17 00:00:00 2001 From: Alexander Goussas Date: Mon, 18 May 2026 11:30:01 -0500 Subject: [PATCH] refactor: use zine SSG --- assets/Temml-Local.css | 249 ++++++++ assets/Temml.woff2 | Bin 0 -> 9404 bytes assets/highlight.css | 37 ++ assets/hornet.png | Bin 0 -> 95983 bytes assets/logo.png | Bin 0 -> 45775 bytes assets/render-mathtex.js | 8 + assets/styles.css | 98 +++ assets/temml.min.js | 1 + .../.gitattributes | 2 + .../.gitignore | 6 + .../LICENSE | 20 + .../README.md | 17 + .../build.zig | 24 + .../licenses.txt | 9 + .../test.zig | 161 +++++ .../time.zig | 583 ++++++++++++++++++ .../zig.mod | 11 + ...est-skills-ive-learned-as-a-programmer.smd | 9 +- .../2026-04-30-how-i-manage-my-blog.smd | 7 +- ...ow-i-cut-my-expenses-by-a-freaking-lot.smd | 7 +- content/index.smd | 7 + layouts/index.shtml | 18 + layouts/page.shtml | 7 + layouts/post.shtml | 21 + layouts/rss.xml | 21 + layouts/templates/base.shtml | 46 ++ .../index.html | 59 ++ .../index.html | 65 ++ .../index.html | 59 ++ public/Temml-Local.css | 249 ++++++++ public/Temml.woff2 | Bin 0 -> 9404 bytes public/highlight.css | 37 ++ public/index.html | 117 ++-- public/render-mathtex.js | 8 + public/styles.css | 8 + public/temml.min.js | 1 + templates/index.html | 41 -- zine.ziggy | 12 + 38 files changed, 1930 insertions(+), 95 deletions(-) create mode 100644 assets/Temml-Local.css create mode 100644 assets/Temml.woff2 create mode 100644 assets/highlight.css create mode 100644 assets/hornet.png create mode 100644 assets/logo.png create mode 100644 assets/render-mathtex.js create mode 100644 assets/styles.css create mode 100644 assets/temml.min.js create mode 100644 bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/.gitattributes create mode 100644 bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/.gitignore create mode 100644 bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/LICENSE create mode 100644 bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/README.md create mode 100644 bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/build.zig create mode 100644 bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/licenses.txt create mode 100644 bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/test.zig create mode 100644 bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/time.zig create mode 100644 bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/zig.mod rename posts/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer.md => content/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer.smd (87%) rename posts/2026-04-30-how-i-manage-my-blog.md => content/2026-04-30-how-i-manage-my-blog.smd (93%) rename posts/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot.md => content/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot.smd (95%) create mode 100644 content/index.smd create mode 100644 layouts/index.shtml create mode 100644 layouts/page.shtml create mode 100644 layouts/post.shtml create mode 100644 layouts/rss.xml create mode 100644 layouts/templates/base.shtml create mode 100644 public/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer/index.html create mode 100644 public/2026-04-30-how-i-manage-my-blog/index.html create mode 100644 public/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot/index.html create mode 100644 public/Temml-Local.css create mode 100644 public/Temml.woff2 create mode 100644 public/highlight.css create mode 100644 public/render-mathtex.js create mode 100644 public/temml.min.js delete mode 100644 templates/index.html create mode 100644 zine.ziggy diff --git a/assets/Temml-Local.css b/assets/Temml-Local.css new file mode 100644 index 0000000..fe05099 --- /dev/null +++ b/assets/Temml-Local.css @@ -0,0 +1,249 @@ +/* +Temml.woff2 is a clone of KaTeX_Script-Regular, except that the code points +have been changed from ASCII to Unicode Mathematical Alphanumeric Symbols Script capitals, +Unicode range 1D49C to 1D4B5. +*/ + +@font-face { + font-family: 'Temml'; + src: url('Temml.woff2') format('woff2'); + font-weight: normal; + font-style: normal; +} + +math { + font-family: "Cambria Math", 'STIXTwoMath-Regular', 'NotoSansMath-Regular', math; + font-style: normal; + font-weight: normal; + line-height: normal; + font-size-adjust: none; + text-indent: 0; + text-transform: none; + letter-spacing: normal; + word-wrap: normal; + direction: ltr; + /* Prevent Firefox from omitting the dot on i or j. */ + font-feature-settings: "dtls" off; +} + +math * { + border-color: currentColor; +} + +/* Next line is active in Firefox and Safari. + * Not in Chromium, which recognizes display: "block math" written inline. */ +math.tml-display { display: block; } + +*.mathcal { + /* NotoSans */ + font-feature-settings: 'ss01'; +} + +math .mathscr { + font-family: "Temml"; +} + +mo.tml-prime { + font-family: Temml; +} + +/* Prevent f' from overlapping in Chromium */ +mo.prime-pad { + padding-left: 0.08em; +} + +/* \cancel & \phase use background images. Get them to print. */ +menclose { + -webkit-print-color-adjust: exact; /* Chrome & Edge */ + print-color-adjust: exact; +} + +/* Array cell justification in Firefox & WebKit */ +.tml-right { + text-align: right; +} +.tml-left { + text-align: left; +} + +/* Styles for Chromium only */ +@supports (not (-webkit-backdrop-filter: blur(1px))) and (not (-moz-appearance: none)) { + /* MathML Core & Chromium do not support the MathML 3.0 element attributes. */ + /* So use styles. */ + menclose { + position: relative; + padding: 0.5ex 0ex; + } + + .tml-overline { + padding: 0.1em 0 0 0; + border-top: 0.065em solid; + } + + .tml-underline { + padding: 0 0 0.1em 0; + border-bottom: 0.065em solid; + } + + .tml-cancel { + display: inline-block; + position: absolute; + left: 0.5px; + bottom: 0; + width: 100%; + height: 100%; + background-color: currentColor; + } + .upstrike { + clip-path: polygon(0.05em 100%, 0em calc(100% - 0.05em), calc(100% - 0.05em) 0em, 100% 0.05em); + } + .downstrike { + clip-path: polygon(0em 0.05em, 0.05em 0em, 100% calc(100% - 0.05em), calc(100% - 0.05em) 100%); + } + .sout { + clip-path: polygon(0em calc(55% + 0.0333em), 0em calc(55% - 0.0333em), 100% calc(55% - 0.0333em), 100% calc(55% + 0.0333em)); + } + .tml-xcancel { + background: linear-gradient(to top left, + rgba(0,0,0,0) 0%, + rgba(0,0,0,0) calc(50% - 0.06em), + rgba(0,0,0,1) 50%, + rgba(0,0,0,0) calc(50% + 0.06em), + rgba(0,0,0,0) 100%), + linear-gradient(to top right, + rgba(0,0,0,0) 0%, + rgba(0,0,0,0) calc(50% - 0.06em), + rgba(0,0,0,1) 50%, + rgba(0,0,0,0) calc(50% + 0.06em), + rgba(0,0,0,0) 100%) + } + + .longdiv-top { + border-top: 0.067em solid; + padding: 0.1em 0.2em 0.2em 0.433em; + } + .longdiv-arc { + position: absolute; + top: 0; + bottom: 0.1em; + left: -0.4em; + width: 0.7em; + border: 0.067em solid; + transform: translateY(-0.067em); + border-radius: 70%; + clip-path: inset(0 0 0 0.4em); + box-sizing: border-box;} + .menclose {display: inline-block; + text-align: left; + position: relative; + } + + .phasor-bottom { + border-bottom: 0.067em solid; + padding: 0.2em 0.2em 0.1em 0.6em; + } + .phasor-angle { + display: inline-block; + position: absolute; + left: 0.5px; + bottom: -0.04em; + height: 100%; + aspect-ratio: 0.5; + background-color: currentColor; + clip-path: polygon(0.05em 100%, 0em calc(100% - 0.05em), calc(100% - 0.05em) 0em, 100% 0.05em); + } + + .tml-box { + padding: 3pt 0 3pt 0; + border: 1px solid; + } + .tml-fbox { + padding: 3pt; + border: 1px solid; + } + + .circle-pad { + padding: 0.267em; + } + .textcircle { + position: absolute; + top: 0; + bottom: 0; + right: 0; + left: 0; + border: 0.067em solid; + border-radius: 50%; + } + + .actuarial { + padding: 0.03889em 0.03889em 0 0.03889em; + border-width: 0.08em 0.08em 0em 0em; + border-style: solid; + margin-right: 0.03889em; + } + + /* Stretch \widetilde */ + .tml-crooked-2 { + transform: scale(2.0, 1.1) + } + .tml-crooked-3 { + transform: scale(3.0, 1.3) + } + .tml-crooked-4 { + transform: scale(4.0, 1.4) + } + /* set array cell justification */ + .tml-right { + text-align: -webkit-right; + } + .tml-left { + text-align: -webkit-left; + } +} + +/* Adjust WebKit accents */ +@supports (-webkit-backdrop-filter: blur(1px)) { + .tml-xshift { transform: translate(0px, 0.45em) } + .tml-capshift { transform: translate(0px, 0.35em) } +} + +/* flex-wrap for line-breaking in Chromium */ +math { + display: inline-flex; + flex-wrap: wrap; + align-items: baseline; +} +math > mrow { + padding: 0.5ex 0ex; +} + +/* Default mtd top padding is 0.5ex per MathML-Core and user-agent CSS */ +/* We adjust for jot and small */ +mtable.tml-jot mtd { + padding-top: 0.7ex; + padding-bottom: 0.7ex; +} +mtable.tml-small mtd { + padding-top: 0.35ex; + padding-bottom: 0.35ex; +} + +/* Firefox */ +@-moz-document url-prefix() { + /* Avoid flex-wrap */ + math { display: inline; } + math > mrow { padding: 0 } + /* Adjust Firefox spacing between array rows */ + mtd, mtable.tml-small mtd { padding-top: 0; padding-bottom: 0; } + mtable.tml-jot mtd { padding-top: 0.2ex; padding-bottom: 0.ex; } +} + +/* AMS environment auto-numbering via CSS counter. */ +.tml-eqn::before { + counter-increment: tmlEqnNo; + content: "(" counter(tmlEqnNo) ")"; +} + +body { + counter-reset: tmlEqnNo; +} diff --git a/assets/Temml.woff2 b/assets/Temml.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..fccefda4b3a0d812687d62efff0d6a554347ddc8 GIT binary patch literal 9404 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 Cd@~6E literal 0 HcmV?d00001 diff --git a/assets/highlight.css b/assets/highlight.css new file mode 100644 index 0000000..f2c4c4a --- /dev/null +++ b/assets/highlight.css @@ -0,0 +1,37 @@ +:root { + --light-yellow: #e5c07b; + --dark-yellow: #d19a66; + --blue: #61afef; + --cyan: #56b6c2; + --light-red: #e06c75; + --dark-red: #be5046; + --comment-gray: #5c6370; + --magenta: #c678dd; +} + +pre { + border-top: 1px solid white; + border-bottom: 1px solid white; + padding: 10px 5px; +} + +code.ziggy { + color: var(--cyan); +} + +code.ziggy .keyword, +code.ziggy .type { + color: var(--light-yellow); +} + +code.ziggy .string { + color: var(--dark-yellow); +} + +code.ziggy .numeric.constant { + color: var(--magenta); +} + +code.ziggy .function { + color: var(--blue); +} \ No newline at end of file diff --git a/assets/hornet.png b/assets/hornet.png new file mode 100644 index 0000000000000000000000000000000000000000..ba66fceb734690d774c5014a858569a8b406e96d GIT binary patch literal 95983 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≪_4VCpS+W@szQ|I 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 Q0JxWyx}I8%ibKr*0XSNcivR!s literal 0 HcmV?d00001 diff --git a/assets/logo.png b/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..764882d27096f0bdeaf90a17139d24c15b3dd05f GIT binary patch literal 45775 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 VxBhPLkK0OUp3pg-eat-I{{ifWJfZ*q literal 0 HcmV?d00001 diff --git a/assets/render-mathtex.js b/assets/render-mathtex.js new file mode 100644 index 0000000..b4255ea --- /dev/null +++ b/assets/render-mathtex.js @@ -0,0 +1,8 @@ +let eqns = document.querySelectorAll("script[type='math/tex']"); +for (let i=eqns.length-1; i>=0; i--) { + let eqn = eqns[i]; + let src = eqn.text; + let d = eqn.closest('p') == null; + eqn.outerHTML = temml.renderToString(src, { displayMode: d }); +} + diff --git a/assets/styles.css b/assets/styles.css new file mode 100644 index 0000000..bed9ab0 --- /dev/null +++ b/assets/styles.css @@ -0,0 +1,98 @@ +body { + width: 60%; + margin: auto; + margin-top: 1rem; + margin-bottom: 1rem; + background-color: black; + color: white; + font-size: 1.18rem; +} + +h1 { + text-align: center; +} + +h1 { + color: yellow; +} + +h2 { + color: green; +} + +a { + text-decoration: underline; +} + +nav { + display: flex; + justify-content: center; + ul { + list-style: none; + display: flex; + } +} + +#logo { + max-width: 169px; + position: fixed; + right: 10px; + top: 200px; + border: 2px lightgreen solid; + animation: 0.3s linear infinite alternate blink-green; +} + +#hornet { + max-width: 169px; + position: fixed; + top: 20px; + left: 10px; + border: 2px red solid; + animation: 0.3s linear infinite alternate blink-red; +} + +@keyframes blink-red { + from { + transform: scale(1); + box-shadow: none; + } + to { + transform: scale(0.99); + box-shadow: + rgba(255 0 0 / 80%) 3px 3px 8px, + rgba(255 0 0 / 80%) -3px -3px 8px; + } +} + +@keyframes blink-green { + from { + transform: scale(1); + box-shadow: none; + } + to { + transform: scale(0.99); + box-shadow: + rgba(0 255 0 / 80%) 3px 3px 8px, + rgba(0 255 0 / 80%) -3px -3px 8px; + } +} + +.nav-item { + background-color: #ff0000; + padding: 1rem; + width: fit-content; + border: 2px solid black; + box-shadow: + inset rgba(0 0 0 / 20%) 5px 0px, + inset rgba(0 0 0 / 20%) -5px 0px, + inset rgba(0 0 0 / 20%) 0px -5px, + inset rgba(255 255 255 / 40%) 0px 5px; +} + +.post-preview { + display: flex; + align-items: center; + gap: 0.4rem; + margin-bottom: 0px; + height: fit-content; +} diff --git a/assets/temml.min.js b/assets/temml.min.js new file mode 100644 index 0000000..68a0e9f --- /dev/null +++ b/assets/temml.min.js @@ -0,0 +1 @@ +var temml=function(){"use strict";class e{constructor(t,r){let n,s=" "+t;const o=r&&r.loc;if(o&&o.start<=o.end){const e=o.lexer.input;n=o.start;const t=o.end;n===e.length?s+=" at end of input: ":s+=" at position "+(n+1)+": \n";const r=e.slice(n,t).replace(/[^]/g,"$&̲");let a,l;a=n>15?"…"+e.slice(n-15,n):e.slice(0,n),l=t+15":">","<":"<",'"':""","'":"'"},n=/[&><"']/g;const s=function(e){return"ordgroup"===e.type||"color"===e.type?1===e.body.length?s(e.body[0]):e:"font"===e.type?s(e.body):e};var o={deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(n,(e=>r[e]))},hyphenate:function(e){return e.replace(t,"-$1").toLowerCase()},getBaseElem:s,isCharacterBox:function(e){const t=s(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){const t=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return t?":"!==t[2]?null:/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?t[1].toLowerCase():null:"_relative"},round:function(e){return+e.toFixed(4)}};class a{constructor(e){e=e||{},this.displayMode=o.deflt(e.displayMode,!1),this.annotate=o.deflt(e.annotate,!1),this.leqno=o.deflt(e.leqno,!1),this.throwOnError=o.deflt(e.throwOnError,!1),this.errorColor=o.deflt(e.errorColor,"#b22222"),this.macros=e.macros||{},this.wrap=o.deflt(e.wrap,"tex"),this.xml=o.deflt(e.xml,!1),this.colorIsTextColor=o.deflt(e.colorIsTextColor,!1),this.strict=o.deflt(e.strict,!1),this.trust=o.deflt(e.trust,!1),this.maxSize=void 0===e.maxSize?[1/0,1/0]:Array.isArray(e.maxSize)?e.maxSize:[1/0,1/0],this.maxExpand=Math.max(0,o.deflt(e.maxExpand,1e3))}isTrusted(e){if(e.url&&!e.protocol){const t=o.protocolFromUrl(e.url);if(null==t)return!1;e.protocol=t}const t="function"==typeof this.trust?this.trust(e):this.trust;return Boolean(t)}}const l={},i={};function c({type:e,names:t,props:r,handler:n,mathmlBuilder:s}){const o={type:e,numArgs:r.numArgs,argTypes:r.argTypes,allowedInArgument:!!r.allowedInArgument,allowedInText:!!r.allowedInText,allowedInMath:void 0===r.allowedInMath||r.allowedInMath,numOptionalArgs:r.numOptionalArgs||0,infix:!!r.infix,primitive:!!r.primitive,handler:n};for(let e=0;ee.toText())).join("")}}const h=function(e){return e.filter((e=>e)).join(" ")},g=function(e,t){this.classes=e||[],this.attributes={},this.style=t||{}},f=function(e){const t=document.createElement(e);t.className=h(this.classes);for(const e in this.style)Object.prototype.hasOwnProperty.call(this.style,e)&&(t.style[e]=this.style[e]);for(const e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&t.setAttribute(e,this.attributes[e]);for(let e=0;e`,t};class y{constructor(e,t,r){g.call(this,e,r),this.children=t||[]}setAttribute(e,t){this.attributes[e]=t}toNode(){return f.call(this,"span")}toMarkup(){return b.call(this,"span")}}let w=class{constructor(e){this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return o.escape(this.text)}};class x{constructor(e,t,r){this.href=e,this.classes=t,this.children=r||[]}toNode(){const e=document.createElement("a");e.setAttribute("href",this.href),this.classes.length>0&&(e.className=h(this.classes));for(let t=0;t0&&(e+=` class="${o.escape(h(this.classes))}"`),e+=">";for(let t=0;t0&&(e.className=h(this.classes));for(const t in this.style)Object.prototype.hasOwnProperty.call(this.style,t)&&(e.style[t]=this.style[t]);for(let t=0;t0&&(e+=` class="${o.escape(h(this.classes))}"`);let t="";for(const e in this.style)Object.prototype.hasOwnProperty.call(this.style,e)&&(t+=`${o.hyphenate(e)}:${this.style[e]};`);t&&(e+=` style="${t}"`),e+=">";for(let t=0;t",e}toText(){return this.children.map((e=>e.toText())).join("")}}class A{constructor(e){this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return o.escape(this.toText())}toText(){return this.text}}const N=e=>{let t;return 1===e.length&&"mrow"===e[0].type?(t=e.pop(),t.type="mstyle"):t=new v("mstyle",e),t};var T={MathNode:v,TextNode:A,newDocumentFragment:function(e){return new u(e)}};const S=e=>{let t=0;if(e.body)for(const r of e.body)t+=S(r);else if("supsub"===e.type)t+=S(e.base),e.sub&&(t+=.7*S(e.sub)),e.sup&&(t+=.7*S(e.sup));else if("mathord"===e.type||"textord"===e.type)for(const r of e.text.split("")){const e=r.codePointAt(0);t+=96{const t=O(e.label);if(M.includes(e.label)){const r=S(e.base);1","\\gt",!0),I(L,_,"∈","\\in",!0),I(L,_,"∉","\\notin",!0),I(L,_,"","\\@not"),I(L,_,"⊂","\\subset",!0),I(L,_,"⊃","\\supset",!0),I(L,_,"⊆","\\subseteq",!0),I(L,_,"⊇","\\supseteq",!0),I(L,_,"⊈","\\nsubseteq",!0),I(L,_,"⊈","\\nsubseteqq"),I(L,_,"⊉","\\nsupseteq",!0),I(L,_,"⊉","\\nsupseteqq"),I(L,_,"⊨","\\models"),I(L,_,"←","\\leftarrow",!0),I(L,_,"≤","\\le"),I(L,_,"≤","\\leq",!0),I(L,_,"<","\\lt",!0),I(L,_,"→","\\rightarrow",!0),I(L,_,"→","\\to"),I(L,_,"≱","\\ngeq",!0),I(L,_,"≱","\\ngeqq"),I(L,_,"≱","\\ngeqslant"),I(L,_,"≰","\\nleq",!0),I(L,_,"≰","\\nleqq"),I(L,_,"≰","\\nleqslant"),I(L,_,"â««","\\Perp",!0),I(L,W," ","\\ "),I(L,W," ","\\space"),I(L,W," ","\\nobreakspace"),I(F,W," ","\\ "),I(F,W," "," "),I(F,W," ","\\space"),I(F,W," ","\\nobreakspace"),I(L,W,null,"\\nobreak"),I(L,W,null,"\\allowbreak"),I(L,V,",",","),I(F,V,":",":"),I(L,V,";",";"),I(L,G,"⊼","\\barwedge"),I(L,G,"⊻","\\veebar"),I(L,G,"⊙","\\odot",!0),I(L,G,"⊕︎","\\oplus"),I(L,G,"⊗","\\otimes",!0),I(L,X,"∂","\\partial",!0),I(L,G,"⊘","\\oslash",!0),I(L,G,"⊚","\\circledcirc",!0),I(L,G,"⊡","\\boxdot",!0),I(L,G,"△","\\bigtriangleup"),I(L,G,"▽","\\bigtriangledown"),I(L,G,"†","\\dagger"),I(L,G,"⋄","\\diamond"),I(L,G,"◃","\\triangleleft"),I(L,G,"▹","\\triangleright"),I(L,H,"{","\\{"),I(F,X,"{","\\{"),I(F,X,"{","\\textbraceleft"),I(L,j,"}","\\}"),I(F,X,"}","\\}"),I(F,X,"}","\\textbraceright"),I(L,H,"{","\\lbrace"),I(L,j,"}","\\rbrace"),I(L,H,"[","\\lbrack",!0),I(F,X,"[","\\lbrack",!0),I(L,j,"]","\\rbrack",!0),I(F,X,"]","\\rbrack",!0),I(L,H,"(","\\lparen",!0),I(L,j,")","\\rparen",!0),I(L,H,"⦇","\\llparenthesis",!0),I(L,j,"⦈","\\rrparenthesis",!0),I(F,X,"<","\\textless",!0),I(F,X,">","\\textgreater",!0),I(L,H,"⌊","\\lfloor",!0),I(L,j,"⌋","\\rfloor",!0),I(L,H,"⌈","\\lceil",!0),I(L,j,"⌉","\\rceil",!0),I(L,X,"\\","\\backslash"),I(L,X,"|","|"),I(L,X,"|","\\vert"),I(F,X,"|","\\textbar",!0),I(L,X,"‖","\\|"),I(L,X,"‖","\\Vert"),I(F,X,"‖","\\textbardbl"),I(F,X,"~","\\textasciitilde"),I(F,X,"\\","\\textbackslash"),I(F,X,"^","\\textasciicircum"),I(L,_,"↑","\\uparrow",!0),I(L,_,"⇑","\\Uparrow",!0),I(L,_,"↓","\\downarrow",!0),I(L,_,"⇓","\\Downarrow",!0),I(L,_,"↕","\\updownarrow",!0),I(L,_,"⇕","\\Updownarrow",!0),I(L,U,"∐","\\coprod"),I(L,U,"⋁","\\bigvee"),I(L,U,"⋀","\\bigwedge"),I(L,U,"⨄","\\biguplus"),I(L,U,"⨄","\\bigcupplus"),I(L,U,"⨃","\\bigcupdot"),I(L,U,"⨇","\\bigdoublevee"),I(L,U,"⨈","\\bigdoublewedge"),I(L,U,"⋂","\\bigcap"),I(L,U,"⋃","\\bigcup"),I(L,U,"∫","\\int"),I(L,U,"∫","\\intop"),I(L,U,"∬","\\iint"),I(L,U,"∭","\\iiint"),I(L,U,"∏","\\prod"),I(L,U,"∑","\\sum"),I(L,U,"⨂","\\bigotimes"),I(L,U,"⨁","\\bigoplus"),I(L,U,"⨀","\\bigodot"),I(L,U,"⨉","\\bigtimes"),I(L,U,"∮","\\oint"),I(L,U,"∯","\\oiint"),I(L,U,"∰","\\oiiint"),I(L,U,"∱","\\intclockwise"),I(L,U,"∲","\\varointclockwise"),I(L,U,"⨌","\\iiiint"),I(L,U,"⨍","\\intbar"),I(L,U,"⨎","\\intBar"),I(L,U,"⨏","\\fint"),I(L,U,"⨒","\\rppolint"),I(L,U,"⨓","\\scpolint"),I(L,U,"⨕","\\pointint"),I(L,U,"⨖","\\sqint"),I(L,U,"⨗","\\intlarhk"),I(L,U,"⨘","\\intx"),I(L,U,"⨙","\\intcap"),I(L,U,"⨚","\\intcup"),I(L,U,"⨅","\\bigsqcap"),I(L,U,"⨆","\\bigsqcup"),I(L,U,"∫","\\smallint"),I(F,P,"…","\\textellipsis"),I(L,P,"…","\\mathellipsis"),I(F,P,"…","\\ldots",!0),I(L,P,"…","\\ldots",!0),I(L,P,"⋰","\\iddots",!0),I(L,P,"⋯","\\@cdots",!0),I(L,P,"⋱","\\ddots",!0),I(L,X,"⋮","\\varvdots"),I(F,X,"⋮","\\varvdots"),I(L,D,"ˊ","\\acute"),I(L,D,"`","\\grave"),I(L,D,"¨","\\ddot"),I(L,D,"…","\\dddot"),I(L,D,"….","\\ddddot"),I(L,D,"~","\\tilde"),I(L,D,"‾","\\bar"),I(L,D,"˘","\\breve"),I(L,D,"ˇ","\\check"),I(L,D,"^","\\hat"),I(L,D,"→","\\vec"),I(L,D,"˙","\\dot"),I(L,D,"˚","\\mathring"),I(L,R,"ı","\\imath",!0),I(L,R,"È·","\\jmath",!0),I(L,X,"ı","ı"),I(L,X,"È·","È·"),I(F,X,"ı","\\i",!0),I(F,X,"È·","\\j",!0),I(F,X,"ø","\\o",!0),I(L,R,"ø","\\o",!0),I(F,X,"Ø","\\O",!0),I(L,R,"Ø","\\O",!0),I(F,D,"ˊ","\\'"),I(F,D,"ˋ","\\`"),I(F,D,"ˆ","\\^"),I(F,D,"˜","\\~"),I(F,D,"ˉ","\\="),I(F,D,"˘","\\u"),I(F,D,"˙","\\."),I(F,D,"¸","\\c"),I(F,D,"˚","\\r"),I(F,D,"ˇ","\\v");I(F,D,"¨",'\\"'),I(F,D,"˝","\\H"),I(L,D,"ˊ","\\'"),I(L,D,"ˋ","\\`"),I(L,D,"ˆ","\\^"),I(L,D,"˜","\\~"),I(L,D,"ˉ","\\="),I(L,D,"˘","\\u"),I(L,D,"˙","\\."),I(L,D,"¸","\\c"),I(L,D,"˚","\\r"),I(L,D,"ˇ","\\v"),I(L,D,"¨",'\\"'),I(L,D,"˝","\\H");const Z={"--":!0,"---":!0,"``":!0,"''":!0};I(F,X,"–","--",!0),I(F,X,"–","\\textendash"),I(F,X,"—","---",!0),I(F,X,"—","\\textemdash"),I(F,X,"‘","`",!0),I(F,X,"‘","\\textquoteleft"),I(F,X,"’","'",!0),I(F,X,"’","\\textquoteright"),I(F,X,"“","``",!0),I(F,X,"“","\\textquotedblleft"),I(F,X,"”","''",!0),I(F,X,"”","\\textquotedblright"),I(L,X,"°","\\degree",!0),I(F,X,"°","\\degree"),I(F,X,"°","\\textdegree",!0),I(L,X,"£","\\pounds"),I(L,X,"£","\\mathsterling",!0),I(F,X,"£","\\pounds"),I(F,X,"£","\\textsterling",!0),I(L,X,"✠","\\maltese"),I(F,X,"✠","\\maltese"),I(L,X,"€","\\euro",!0),I(F,X,"€","\\euro",!0),I(F,X,"€","\\texteuro"),I(L,X,"©","\\copyright",!0),I(F,X,"©","\\textcopyright"),I(L,X,"⌀","\\diameter",!0),I(F,X,"⌀","\\diameter"),I(L,X,"𝛤","\\varGamma"),I(L,X,"𝛥","\\varDelta"),I(L,X,"𝛩","\\varTheta"),I(L,X,"𝛬","\\varLambda"),I(L,X,"𝛯","\\varXi"),I(L,X,"𝛱","\\varPi"),I(L,X,"𝛴","\\varSigma"),I(L,X,"𝛶","\\varUpsilon"),I(L,X,"𝛷","\\varPhi"),I(L,X,"𝛹","\\varPsi"),I(L,X,"𝛺","\\varOmega"),I(F,X,"𝛤","\\varGamma"),I(F,X,"𝛥","\\varDelta"),I(F,X,"𝛩","\\varTheta"),I(F,X,"𝛬","\\varLambda"),I(F,X,"𝛯","\\varXi"),I(F,X,"𝛱","\\varPi"),I(F,X,"𝛴","\\varSigma"),I(F,X,"𝛶","\\varUpsilon"),I(F,X,"𝛷","\\varPhi"),I(F,X,"𝛹","\\varPsi"),I(F,X,"𝛺","\\varOmega");const Y='0123456789/@."';for(let e=0;e<14;e++){const t=Y.charAt(e);I(L,X,t,t)}const J='0123456789!@*()-=+";:?/.,';for(let e=0;e<25;e++){const t=J.charAt(e);I(F,X,t,t)}const K="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";for(let e=0;e<52;e++){const t=K.charAt(e);I(L,R,t,t),I(F,X,t,t)}const Q="ÇÐÞçþℂℍℕℙℚℝℤℎℏℊℋℌℐℑℒℓ℘ℛℜℬℰℱℳℭℨ";for(let e=0;e<30;e++){const t=Q.charAt(e);I(L,R,t,t),I(F,X,t,t)}let ee="";for(let e=0;e<52;e++){ee=String.fromCharCode(55349,56320+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56372+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56424+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56580+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56736+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56788+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56840+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56944+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56632+e),I(L,R,ee,ee),I(F,X,ee,ee);const t=K.charAt(e);ee=String.fromCharCode(55349,56476+e),I(L,R,t,ee),I(F,X,t,ee)}for(let e=0;e<10;e++)ee=String.fromCharCode(55349,57294+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,57314+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,57324+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,57334+e),I(L,R,ee,ee),I(F,X,ee,ee);const te=function(e,t,r){return!$[t][e]||!$[t][e].replace||55349===e.charCodeAt(0)||Object.prototype.hasOwnProperty.call(Z,e)&&r&&(r.fontFamily&&"tt"===r.fontFamily.slice(4,6)||r.font&&"tt"===r.font.slice(4,6))||(e=$[t][e].replace),new T.TextNode(e)},re=(e,t)=>{if(0===e.children.length||"mtext"!==e.children[e.children.length-1].type){const r=new T.MathNode("mtext",[new T.TextNode(t.children[0].text)]);e.children.push(r)}else e.children[e.children.length-1].children[0].text+=t.children[0].text},ne=e=>{if("mrow"!==e.type&&"mstyle"!==e.type)return e;if(0===e.children.length)return e;const t=new T.MathNode("mrow");for(let r=0;r0&&" "===n.children[0].text.charAt(s-1)&&(n.children[0].text=n.children[0].text.slice(0,-1)+" ");for(const[t,r]of Object.entries(e.attributes))n.attributes[t]=r}return 1===t.children.length&&"mtext"===t.children[0].type?t.children[0]:t},se=function(e,t=!1){if(!(1!==e.length||e[0]instanceof u))return e[0];if(!t){e[0]instanceof v&&"mo"===e[0].type&&!e[0].attributes.fence&&(e[0].attributes.lspace="0em",e[0].attributes.rspace="0em");const t=e.length-1;e[t]instanceof v&&"mo"===e[t].type&&!e[t].attributes.fence&&(e[t].attributes.lspace="0em",e[t].attributes.rspace="0em")}return new T.MathNode("mrow",e)};function oe(e){if(!e)return!1;if("mi"===e.type&&1===e.children.length){const t=e.children[0];return t instanceof A&&"."===t.text}if("mtext"===e.type&&1===e.children.length){const t=e.children[0];return t instanceof A&&" "===t.text}if("mo"===e.type&&1===e.children.length&&"true"===e.getAttribute("separator")&&"0em"===e.getAttribute("lspace")&&"0em"===e.getAttribute("rspace")){const t=e.children[0];return t instanceof A&&","===t.text}return!1}const ae=(e,t)=>{const r=e[t],n=e[t+1];return"atom"===r.type&&","===r.text&&r.loc&&n.loc&&r.loc.end===n.loc.start},le=e=>"atom"===e.type&&"rel"===e.family||"mclass"===e.type&&"mrel"===e.mclass,ie=function(e,t,r=!1){if(!r&&1===e.length){const r=de(e[0],t);return r instanceof v&&"mo"===r.type&&(r.setAttribute("lspace","0em"),r.setAttribute("rspace","0em")),[r]}const n=[],s=[];let o;for(let r=0;r0&&le(e[t])&&le(e[t-1])&&r.setAttribute("lspace","0em"),"mn"===r.type&&o&&"mn"===o.type)o.children.push(...r.children);else if(oe(r)&&o&&"mn"===o.type)o.children.push(...r.children);else if(o&&"mn"===o.type&&t=1&&o&&("mn"===o.type||oe(o))){const e=r.children[0];e instanceof v&&"mn"===e.type&&o&&(e.children=[...o.children,...e.children],n.pop())}n.push(r),o=r}}return n},ce=function(e,t,r=!1){return se(ie(e,t,r),r)},de=function(t,r){if(!t)return new T.MathNode("mrow");if(i[t.type]){return i[t.type](t,r)}throw new e("Got group of unknown type: '"+t.type+"'")},me=e=>new T.MathNode("mtd",[],[],{padding:"0",width:"50%"}),pe=["mrow","mtd","mtable","mtr"],ue=e=>{for(const t of e.children)if(t.type&&pe.includes(t.type)){if(t.classes&&"tml-label"===t.classes[0]){return t.label}{const e=ue(t);if(e)return e}}else if(!t.type){const e=ue(t);if(e)return e}};function he(e,t,r,n){let s=null;1===e.length&&"tag"===e[0].type&&(s=e[0].tag,e=e[0].body);const o=ie(e,r);if(1===o.length&&o[0]instanceof x)return o[0];const a=n.displayMode||n.annotate?"none":n.wrap,l=0===o.length?null:o[0];let i=1===o.length&&null===s&&l instanceof v?o[0]:function(e,t,r){const n=[];let s=[],o=[],a=0,l=0,i=0;for(;l0&&s.push(new T.MathNode("mrow",o)),s.push(r),o=[];const e=new T.MathNode("mtd",s);e.style.textAlign="left",n.push(new T.MathNode("mtr",[e])),s=[],l+=1}else{if(o.push(r),r.type&&"mo"===r.type&&1===r.children.length&&!Object.prototype.hasOwnProperty.call(r.attributes,"movablelimits")){const n=r.children[0].text;if("([{⌊⌈⟨⟮⎰⟦⦃".indexOf(n)>-1)i+=1;else if(")]}⌋⌉⟩⟯⎱⟦⦄".indexOf(n)>-1)i-=1;else if(0===i&&"="===t&&"="===n){if(a+=1,a>1){o.pop();const e=new T.MathNode("mrow",o);s.push(e),o=[r]}}else if(0===i&&"tex"===t&&"∇"!==n){const t=l0){const e=new T.MathNode("mrow",o);s.push(e)}if(n.length>0){const e=new T.MathNode("mtd",s);e.style.textAlign="left";const t=new T.MathNode("mtr",[e]);n.push(t);const o=new T.MathNode("mtable",n);return r||(o.setAttribute("columnalign","left"),o.setAttribute("rowspacing","0em")),o}return T.newDocumentFragment(s)}(o,a,n.displayMode);if(s&&(i=((e,t,r,n)=>{t=ce(t[0].body,r),(t=ne(t)).classes.push("tml-tag");const s=ue(e);e=new T.MathNode("mtd",[e]);const o=[me(),e,me()];o[n?0:2].classes.push(n?"tml-left":"tml-right"),o[n?0:2].children.push(t);const a=new T.MathNode("mtr",o,["tml-tageqn"]);s&&a.setAttribute("id",s);const l=new T.MathNode("mtable",[a]);return l.style.width="100%",l.setAttribute("displaystyle","true"),l})(i,s,r,n.leqno)),n.annotate){const e=new T.MathNode("annotation",[new T.TextNode(t)]);e.setAttribute("encoding","application/x-tex"),i=new T.MathNode("semantics",[i,e])}const c=new T.MathNode("math",[i]);return n.xml&&c.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),i.style.width&&(c.style.width="100%"),n.displayMode&&(c.setAttribute("display","block"),c.style.display="block math",c.classes=["tml-display"]),c}const ge="acegıȷmnopqrsuvwxyzαγεηικμνοπρςστυχωϕ𝐚𝐜𝐞𝐠𝐦𝐧𝐨𝐩𝐪𝐫𝐬𝐮𝐯𝐰𝐱𝐲𝐳",fe="ABCDEFGHIJKLMNOPQRSTUVWXYZbdfhkltΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩβδλζφθψ𝐀𝐁𝐂𝐃𝐄𝐅𝐆𝐇𝐈𝐉𝐊𝐋𝐌𝐍𝐎𝐏𝐐𝐑𝐒𝐓𝐔𝐕𝐖𝐗𝐘𝐙𝐛𝐝𝐟𝐡𝐤𝐥𝐭",be=new Set(["\\alpha","\\gamma","\\delta","\\epsilon","\\eta","\\iota","\\kappa","\\mu","\\nu","\\pi","\\rho","\\sigma","\\tau","\\upsilon","\\chi","\\psi","\\omega","\\imath","\\jmath"]),ye=new Set(["\\Gamma","\\Delta","\\Sigma","\\Omega","\\beta","\\delta","\\lambda","\\theta","\\psi"]),we=(e,t)=>{const r=e.isStretchy?C(e):new T.MathNode("mo",[te(e.label,e.mode)]);if("\\vec"===e.label)r.style.transform="scale(0.75) translate(10%, 30%)";else if(r.style.mathStyle="normal",r.style.mathDepth="0",ke.has(e.label)&&o.isCharacterBox(e.base)){let t="";const n=e.base.text;(ge.indexOf(n)>-1||be.has(n))&&(t="tml-xshift"),(fe.indexOf(n)>-1||ye.has(n))&&(t="tml-capshift"),t&&r.classes.push(t)}e.isStretchy||r.setAttribute("stretchy","false");return new T.MathNode("\\c"===e.label?"munder":"mover",[de(e.base,t),r])},xe=new Set(["\\acute","\\grave","\\ddot","\\dddot","\\ddddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"]),ke=new Set(["\\acute","\\bar","\\breve","\\check","\\dot","\\ddot","\\grave","\\hat","\\mathring","\\'","\\^","\\~","\\=","\\u","\\.",'\\"',"\\r","\\H","\\v"]),ve={"\\`":"̀","\\'":"́","\\^":"̂","\\~":"̃","\\=":"̄","\\u":"̆","\\.":"̇",'\\"':"̈","\\r":"̊","\\H":"̋","\\v":"̌"};c({type:"accent",names:["\\acute","\\grave","\\ddot","\\dddot","\\ddddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\overparen","\\widecheck","\\widehat","\\wideparen","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(e,t)=>{const r=m(t[0]),n=!xe.has(e.funcName);return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,base:r}},mathmlBuilder:we}),c({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\c","\\u","\\.",'\\"',"\\r","\\H","\\v"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(e,t)=>{const r=m(t[0]),n=e.parser.mode;return"math"===n&&e.parser.settings.strict&&console.log(`Temml parse error: Command ${e.funcName} is invalid in math mode.`),"text"===n&&r.text&&1===r.text.length&&e.funcName in ve&&ge.indexOf(r.text)>-1?{type:"textord",mode:"text",text:r.text+ve[e.funcName]}:{type:"accent",mode:n,label:e.funcName,isStretchy:!1,base:r}},mathmlBuilder:we}),c({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underparen","\\utilde"],props:{numArgs:1},handler:({parser:e,funcName:t},r)=>{const n=r[0];return{type:"accentUnder",mode:e.mode,label:t,base:n}},mathmlBuilder:(e,t)=>{const r=C(e);r.style["math-depth"]=0;return new T.MathNode("munder",[de(e.base,t),r])}});const Ae={pt:800/803,pc:9600/803,dd:1238/1157*800/803,cc:12.792133216944668,nd:685/642*800/803,nc:1370/107*800/803,sp:1/65536*800/803,mm:25.4/72,cm:2.54/72,in:1/72,px:96/72},Ne=["em","ex","mu","pt","mm","cm","in","px","bp","pc","dd","cc","nd","nc","sp"],Te=function(e){return"string"!=typeof e&&(e=e.unit),Ne.indexOf(e)>-1},Se=e=>[1,.7,.5][Math.max(e-1,0)],qe=function(t,r){let n=t.number;if(r.maxSize[0]<0&&n>0)return{number:0,unit:"em"};const s=t.unit;switch(s){case"mm":case"cm":case"in":case"px":return n*Ae[s]>r.maxSize[1]?{number:r.maxSize[1],unit:"pt"}:{number:n,unit:s};case"em":case"ex":return"ex"===s&&(n*=.431),n=Math.min(n/Se(r.level),r.maxSize[0]),{number:o.round(n),unit:"em"};case"bp":return n>r.maxSize[1]&&(n=r.maxSize[1]),{number:n,unit:"pt"};case"pt":case"pc":case"dd":case"cc":case"nd":case"nc":case"sp":return n=Math.min(n*Ae[s],r.maxSize[1]),{number:o.round(n),unit:"pt"};case"mu":return n=Math.min(n/18,r.maxSize[0]),{number:o.round(n),unit:"em"};default:throw new e("Invalid unit: '"+s+"'")}},Oe=e=>{const t=new T.MathNode("mspace");return t.setAttribute("width",e+"em"),t},Me=(e,t=.3,r=0,n=!1)=>{if(null==e&&0===r)return Oe(t);const s=e?[e]:[];if(0!==t&&s.unshift(Oe(t)),r>0&&s.push(Oe(r)),n){const e=new T.MathNode("mpadded",s);return e.setAttribute("height","0"),e}return new T.MathNode("mrow",s)},Be=(e,t)=>Number(e)/Se(t),Ce=(e,t,r,n)=>{const s=B(e),o="eq"===e.slice(1,3),a="x"===e.charAt(1)?"1.75":"cd"===e.slice(2,4)?"3.0":o?"1.0":"2.0";s.setAttribute("lspace","0"),s.setAttribute("rspace",o?"0.5em":"0");const l=n.withLevel(n.level<2?2:3),i=Be(a,l.level),c=Be(a,3),d=Me(null,i.toFixed(4),0),m=Me(null,c.toFixed(4),0),p=Be(o?0:.3,l.level).toFixed(4);let u,h;const g=t&&t.body&&(t.body.body||t.body.length>0);if(g){let r=de(t,l);r=Me(r,p,p,"\\\\cdrightarrow"===e||"\\\\cdleftarrow"===e),u=new T.MathNode("mover",[r,m])}const f=r&&r.body&&(r.body.body||r.body.length>0);if(f){let e=de(r,l);e=Me(e,p,p),h=new T.MathNode("munder",[e,m])}let b;return b=g||f?g&&f?new T.MathNode("munderover",[s,h,u]):g?new T.MathNode("mover",[s,u]):new T.MathNode("munder",[s,h]):new T.MathNode("mover",[s,d]),"3.0"===a&&(b.style.height="1em"),b.setAttribute("accent","false"),b};c({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\yields","\\yieldsLeft","\\mesomerism","\\longrightharpoonup","\\longleftharpoondown","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler:({parser:e,funcName:t},r,n)=>({type:"xArrow",mode:e.mode,name:t,body:r[0],below:n[0]}),mathmlBuilder(e,t){const r=[Ce(e.name,e.body,e.below,t)];return r.unshift(Oe(.2778)),r.push(Oe(.2778)),new T.MathNode("mrow",r)}});const ze={"\\xtofrom":["\\xrightarrow","\\xleftarrow"],"\\xleftrightharpoons":["\\xleftharpoonup","\\xrightharpoondown"],"\\xrightleftharpoons":["\\xrightharpoonup","\\xleftharpoondown"],"\\yieldsLeftRight":["\\yields","\\yieldsLeft"],"\\equilibrium":["\\longrightharpoonup","\\longleftharpoondown"],"\\equilibriumRight":["\\longrightharpoonup","\\eqleftharpoondown"],"\\equilibriumLeft":["\\eqrightharpoonup","\\longleftharpoondown"]};c({type:"stackedArrow",names:["\\xtofrom","\\xleftrightharpoons","\\xrightleftharpoons","\\yieldsLeftRight","\\equilibrium","\\equilibriumRight","\\equilibriumLeft"],props:{numArgs:1,numOptionalArgs:1},handler({parser:e,funcName:t},r,n){const s=r[0]?{type:"hphantom",mode:e.mode,body:r[0]}:null,o=n[0]?{type:"hphantom",mode:e.mode,body:n[0]}:null;return{type:"stackedArrow",mode:e.mode,name:t,body:r[0],upperArrowBelow:o,lowerArrowBody:s,below:n[0]}},mathmlBuilder(e,t){const r=ze[e.name][0],n=ze[e.name][1],s=Ce(r,e.body,e.upperArrowBelow,t),o=Ce(n,e.lowerArrowBody,e.below,t);let a;const l=new T.MathNode("mpadded",[s]);if(l.setAttribute("voffset","0.3em"),l.setAttribute("height","+0.3em"),l.setAttribute("depth","-0.3em"),"\\equilibriumLeft"===e.name){const e=new T.MathNode("mpadded",[o]);e.setAttribute("width","0.5em"),a=new T.MathNode("mpadded",[Oe(.2778),e,l,Oe(.2778)])}else l.setAttribute("width","\\equilibriumRight"===e.name?"0.5em":"0"),a=new T.MathNode("mpadded",[Oe(.2778),l,o,Oe(.2778)]);return a.setAttribute("voffset","-0.18em"),a.setAttribute("height","-0.18em"),a.setAttribute("depth","+0.18em"),a}});const Ee={};function $e({type:e,names:t,props:r,handler:n,mathmlBuilder:s}){const o={type:e,numArgs:r.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:n};for(let e=0;e":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Ge=e=>"textord"===e.type&&"@"===e.text;function je(e,t,r){const n=De[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":{const e={type:"atom",text:n,mode:"math",family:"rel"},s={type:"ordgroup",mode:"math",body:[r.callFunction("\\\\cdleft",[t[0]],[]),r.callFunction("\\Big",[e],[]),r.callFunction("\\\\cdright",[t[1]],[])],semisimple:!0};return r.callFunction("\\\\cdparent",[s],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{const e={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[e],[])}default:return{type:"textord",text:" ",mode:"math"}}}c({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler:({parser:e,funcName:t},r)=>({type:"cdlabel",mode:e.mode,side:t.slice(4),label:r[0]}),mathmlBuilder(e,t){if(0===e.label.body.length)return new T.MathNode("mrow",t);const r=new T.MathNode("mtd",[de(e.label,t)]);r.style.padding="0";const n=new T.MathNode("mtr",[r]),s=new T.MathNode("mtable",[n]),o=new T.MathNode("mpadded",[s]);return o.setAttribute("width","0"),o.setAttribute("displaystyle","false"),o.setAttribute("scriptlevel","1"),"left"===e.side&&(o.style.display="flex",o.style.justifyContent="flex-end"),o}}),c({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler:({parser:e},t)=>({type:"cdlabelparent",mode:e.mode,fragment:t[0]}),mathmlBuilder:(e,t)=>new T.MathNode("mrow",[de(e.fragment,t)])});const Pe=e=>({type:"ordgroup",mode:"math",body:e,semisimple:!0}),Re=(e,t)=>({type:t,mode:"math",body:Pe(e)});class Ue{constructor(e,t,r){this.lexer=e,this.start=t,this.end=r}static range(e,t){return t?e&&e.loc&&t.loc&&e.loc.lexer===t.loc.lexer?new Ue(e.loc.lexer,e.loc.start,t.loc.end):null:e&&e.loc}}class He{constructor(e,t){this.text=e,this.loc=t}range(e,t){return new He(t,Ue.range(this,e))}}const Ve=0,_e=1,We=2,Xe=3,Ze={};function Ye(e,t){Ze[e]=t}const Je=Ze;Ye("\\noexpand",(function(e){const t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}})),Ye("\\expandafter",(function(e){const t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}})),Ye("\\@firstoftwo",(function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}})),Ye("\\@secondoftwo",(function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}})),Ye("\\@ifnextchar",(function(e){const t=e.consumeArgs(3);e.consumeSpaces();const r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}})),Ye("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),Ye("\\TextOrMath",(function(e){const t=e.consumeArgs(2);return"text"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}}));const Ke=e=>{let t="";for(let r=e.length-1;r>-1;r--)t+=e[r].text;return t},Qe={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15},et=e=>{const t=e.future().text;return"EOF"===t?[null,""]:[Qe[t.charAt(0)],t]},tt=(e,t,r)=>{for(let n=1;n=0;e--){const s=t[e].loc.start;s>n&&(r+=" ",n=s),r+=t[e].text,n+=t[e].text.length}return r}Ye("\\char",(function(t){let r,n=t.popToken(),s="";if("'"===n.text)r=8,n=t.popToken();else if('"'===n.text)r=16,n=t.popToken();else if("`"===n.text)if(n=t.popToken(),"\\"===n.text[0])s=n.text.charCodeAt(1);else{if("EOF"===n.text)throw new e("\\char` missing argument");s=n.text.charCodeAt(0)}else r=10;if(r){let o,a=n.text;if(s=Qe[a.charAt(0)],null==s||s>=r)throw new e(`Invalid base-${r} digit ${n.text}`);for(s=tt(s,a,r),[o,a]=et(t);null!=o&&o":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcap":"\\dotsb","\\bigsqcup":"\\dotsb","\\bigtimes":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};Ye("\\dots",(function(e){let t="\\dotso";const r=e.expandAfterFuture().text;return r in nt?t=nt[r]:("\\not"===r.slice(0,4)||r in $.math&&["bin","rel"].includes($.math[r].group))&&(t="\\dotsb"),t}));const st={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};Ye("\\dotso",(function(e){return e.future().text in st?"\\ldots\\,":"\\ldots"})),Ye("\\dotsc",(function(e){const t=e.future().text;return t in st&&","!==t?"\\ldots\\,":"\\ldots"})),Ye("\\cdots",(function(e){return e.future().text in st?"\\@cdots\\,":"\\@cdots"})),Ye("\\dotsb","\\cdots"),Ye("\\dotsm","\\cdots"),Ye("\\dotsi","\\!\\cdots"),Ye("\\idotsint","\\dotsi"),Ye("\\dotsx","\\ldots\\,"),Ye("\\DOTSI","\\relax"),Ye("\\DOTSB","\\relax"),Ye("\\DOTSX","\\relax"),Ye("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),Ye("\\,","{\\tmspace+{3mu}{.1667em}}"),Ye("\\thinspace","\\,"),Ye("\\>","\\mskip{4mu}"),Ye("\\:","{\\tmspace+{4mu}{.2222em}}"),Ye("\\medspace","\\:"),Ye("\\;","{\\tmspace+{5mu}{.2777em}}"),Ye("\\thickspace","\\;"),Ye("\\!","{\\tmspace-{3mu}{.1667em}}"),Ye("\\negthinspace","\\!"),Ye("\\negmedspace","{\\tmspace-{4mu}{.2222em}}"),Ye("\\negthickspace","{\\tmspace-{5mu}{.277em}}"),Ye("\\enspace","\\kern.5em "),Ye("\\enskip","\\hskip.5em\\relax"),Ye("\\quad","\\hskip1em\\relax"),Ye("\\qquad","\\hskip2em\\relax"),Ye("\\AA","\\TextOrMath{\\Angstrom}{\\mathring{A}}\\relax"),Ye("\\tag","\\@ifstar\\tag@literal\\tag@paren"),Ye("\\tag@paren","\\tag@literal{({#1})}"),Ye("\\tag@literal",(t=>{if(t.macros.get("\\df@tag"))throw new e("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"})),Ye("\\notag","\\nonumber"),Ye("\\nonumber","\\gdef\\@eqnsw{0}"),Ye("\\bmod","\\mathbin{\\text{mod}}"),Ye("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),Ye("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),Ye("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),Ye("\\newline","\\\\\\relax"),Ye("\\TeX","\\textrm{T}\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125em\\textrm{X}"),Ye("\\LaTeX","\\textrm{L}\\kern-.35em\\raisebox{0.2em}{\\scriptstyle A}\\kern-.15em\\TeX"),Ye("\\Temml","\\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}}"),Ye("\\hspace","\\@ifstar\\@hspacer\\@hspace"),Ye("\\@hspace","\\hskip #1\\relax"),Ye("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),Ye("\\colon",'\\mathpunct{\\char"3a}'),Ye("\\prescript","\\pres@cript{_{#1}^{#2}}{}{#3}"),Ye("\\ordinarycolon",'\\char"3a'),Ye("\\vcentcolon","\\mathrel{\\raisebox{0.035em}{\\ordinarycolon}}"),Ye("\\coloneq",'\\mathrel{\\raisebox{0.035em}{\\ordinarycolon}\\char"2212}'),Ye("\\Coloneq",'\\mathrel{\\char"2237\\char"2212}'),Ye("\\Eqqcolon",'\\mathrel{\\char"3d\\char"2237}'),Ye("\\Eqcolon",'\\mathrel{\\char"2212\\char"2237}'),Ye("\\colonapprox",'\\mathrel{\\raisebox{0.035em}{\\ordinarycolon}\\char"2248}'),Ye("\\Colonapprox",'\\mathrel{\\char"2237\\char"2248}'),Ye("\\colonsim",'\\mathrel{\\raisebox{0.035em}{\\ordinarycolon}\\char"223c}'),Ye("\\Colonsim",'\\mathrel{\\raisebox{0.035em}{\\ordinarycolon}\\char"223c}'),Ye("\\ratio","\\vcentcolon"),Ye("\\coloncolon","\\dblcolon"),Ye("\\colonequals","\\coloneqq"),Ye("\\coloncolonequals","\\Coloneqq"),Ye("\\equalscolon","\\eqqcolon"),Ye("\\equalscoloncolon","\\Eqqcolon"),Ye("\\colonminus","\\coloneq"),Ye("\\coloncolonminus","\\Coloneq"),Ye("\\minuscolon","\\eqcolon"),Ye("\\minuscoloncolon","\\Eqcolon"),Ye("\\coloncolonapprox","\\Colonapprox"),Ye("\\coloncolonsim","\\Colonsim"),Ye("\\notni","\\mathrel{\\char`∌}"),Ye("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),Ye("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),Ye("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),Ye("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),Ye("\\varlimsup","\\DOTSB\\operatorname*{\\overline{\\text{lim}}}"),Ye("\\varliminf","\\DOTSB\\operatorname*{\\underline{\\text{lim}}}"),Ye("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{\\text{lim}}}"),Ye("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{\\text{lim}}}"),Ye("\\centerdot","{\\medspace\\rule{0.167em}{0.189em}\\medspace}"),Ye("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),Ye("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),Ye("\\plim","\\DOTSB\\operatorname*{plim}"),Ye("\\leftmodels","\\mathop{\\reflectbox{$\\models$}}"),Ye("\\bra","\\mathinner{\\langle{#1}|}"),Ye("\\ket","\\mathinner{|{#1}\\rangle}"),Ye("\\braket","\\mathinner{\\langle{#1}\\rangle}"),Ye("\\Bra","\\left\\langle#1\\right|"),Ye("\\Ket","\\left|#1\\right\\rangle");const ot=(e,t)=>{const r=`}\\,\\middle${"|"===t[0]?"\\vert":"\\Vert"}\\,{`;return e.slice(0,t.index)+r+e.slice(t.index+t[0].length)};Ye("\\Braket",(function(e){let t=rt(e);const r=/\|\||\||\\\|/g;let n;for(;null!==(n=r.exec(t));)t=ot(t,n);return"\\left\\langle{"+t+"}\\right\\rangle"})),Ye("\\Set",(function(e){let t=rt(e);const r=/\|\||\||\\\|/.exec(t);return r&&(t=ot(t,r)),"\\left\\{\\:{"+t+"}\\:\\right\\}"})),Ye("\\set",(function(e){return"\\{{"+rt(e).replace(/\|/,"}\\mid{")+"}\\}"})),Ye("\\angln","{\\angl n}"),Ye("\\odv","\\@ifstar\\odv@next\\odv@numerator"),Ye("\\odv@numerator","\\frac{\\mathrm{d}#1}{\\mathrm{d}#2}"),Ye("\\odv@next","\\frac{\\mathrm{d}}{\\mathrm{d}#2}#1"),Ye("\\pdv","\\@ifstar\\pdv@next\\pdv@numerator");const at=e=>{const t=e[0][0].text,r=Ke(e[1]).split(","),n=String(r.length),s="1"===n?"\\partial":`\\partial^${n}`;let o="";return r.map((e=>{o+="\\partial "+e.trim()+"\\,"})),[t,s,o.replace(/\\,$/,"")]};function lt(e){const t=[];e.consumeSpaces();let r=e.fetch().text;for("\\relax"===r&&(e.consume(),e.consumeSpaces(),r=e.fetch().text);"\\hline"===r||"\\hdashline"===r;)e.consume(),t.push("\\hdashline"===r),e.consumeSpaces(),r=e.fetch().text;return t}Ye("\\pdv@numerator",(function(e){const[t,r,n]=at(e.consumeArgs(2));return`\\frac{${r} ${t}}{${n}}`})),Ye("\\pdv@next",(function(e){const[t,r,n]=at(e.consumeArgs(2));return`\\frac{${r}}{${n}} ${t}`})),Ye("\\upalpha","\\up@greek{\\alpha}"),Ye("\\upbeta","\\up@greek{\\beta}"),Ye("\\upgamma","\\up@greek{\\gamma}"),Ye("\\updelta","\\up@greek{\\delta}"),Ye("\\upepsilon","\\up@greek{\\epsilon}"),Ye("\\upzeta","\\up@greek{\\zeta}"),Ye("\\upeta","\\up@greek{\\eta}"),Ye("\\uptheta","\\up@greek{\\theta}"),Ye("\\upiota","\\up@greek{\\iota}"),Ye("\\upkappa","\\up@greek{\\kappa}"),Ye("\\uplambda","\\up@greek{\\lambda}"),Ye("\\upmu","\\up@greek{\\mu}"),Ye("\\upnu","\\up@greek{\\nu}"),Ye("\\upxi","\\up@greek{\\xi}"),Ye("\\upomicron","\\up@greek{\\omicron}"),Ye("\\uppi","\\up@greek{\\pi}"),Ye("\\upalpha","\\up@greek{\\alpha}"),Ye("\\uprho","\\up@greek{\\rho}"),Ye("\\upsigma","\\up@greek{\\sigma}"),Ye("\\uptau","\\up@greek{\\tau}"),Ye("\\upupsilon","\\up@greek{\\upsilon}"),Ye("\\upphi","\\up@greek{\\phi}"),Ye("\\upchi","\\up@greek{\\chi}"),Ye("\\uppsi","\\up@greek{\\psi}"),Ye("\\upomega","\\up@greek{\\omega}"),Ye("\\invamp",'\\mathbin{\\char"214b}'),Ye("\\parr",'\\mathbin{\\char"214b}'),Ye("\\with",'\\mathbin{\\char"26}'),Ye("\\multimapinv",'\\mathrel{\\char"27dc}'),Ye("\\multimapboth",'\\mathrel{\\char"29df}'),Ye("\\scoh",'{\\mkern5mu\\char"2322\\mkern5mu}'),Ye("\\sincoh",'{\\mkern5mu\\char"2323\\mkern5mu}'),Ye("\\coh",'{\\mkern5mu\\rule{}{0.7em}\\mathrlap{\\smash{\\raise2mu{\\char"2322}}}\n{\\smash{\\lower4mu{\\char"2323}}}\\mkern5mu}'),Ye("\\incoh",'{\\mkern5mu\\rule{}{0.7em}\\mathrlap{\\smash{\\raise2mu{\\char"2323}}}\n{\\smash{\\lower4mu{\\char"2322}}}\\mkern5mu}'),Ye("\\standardstate","\\text{\\tiny\\char`⦵}");const it=t=>{if(!t.parser.settings.displayMode)throw new e(`{${t.envName}} can be used only in display mode.`)},ct=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/,dt=e=>{let t=e.get("\\arraystretch");"string"!=typeof t&&(t=Ke(t.tokens)),t=isNaN(t)?null:Number(t);let r=e.get("\\arraycolsep");"string"!=typeof r&&(r=Ke(r.tokens));const n=ct.exec(r);return[t,n?{number:+(n[1]+n[2]),unit:n[3]}:null]},mt=t=>{let r="";for(let n=0;n1||!a)&&h.pop(),f.push(mt(r.body)),b.length{const t=new T.MathNode("mtd",[]);return t.style={padding:"0",width:"50%"},e.envClasses.includes("multline")&&(t.style.width="7.5%"),t},bt=function(e,t){const r=[],n=e.body.length,s=e.hLinesBeforeRow;for(let o=0;o0&&(2===s[0].length?d.children.forEach((e=>{e.style.borderTop="0.15em double"})):d.children.forEach((e=>{e.style.borderTop=s[0][0]?"0.06em dashed":"0.06em solid"}))),s[o+1].length>0&&(2===s[o+1].length?d.children.forEach((e=>{e.style.borderBottom="0.15em double"})):d.children.forEach((e=>{e.style.borderBottom=s[o+1][0]?"0.06em dashed":"0.06em solid"})));let p=!0;for(let e=0;e0&&(o=e.envClasses.includes("abut")||e.envClasses.includes("cases")?"0":e.envClasses.includes("small")?"0.1389":e.envClasses.includes("cd")?"0.25":"0.4",a="em"),e.arraycolsep){const r=qe(e.arraycolsep,t);o=r.number.toFixed(4),a=r.unit}if(o){const t=0===r.length?0:r[0].children.length,n=(r,n)=>0===r&&0===n||r===t-1&&1===n?"0":"align"!==e.envClasses[0]?o:1===n?"0":e.autoTag?r%2?"1":"0":r%2?"0":"1";for(let e=0;e0){const t=e.envClasses.includes("align")||e.envClasses.includes("alignat");for(let n=0;n1&&e.envClasses.includes("cases")&&(s.children[1].style.paddingLeft="1em"),e.envClasses.includes("cases")||e.envClasses.includes("subarray"))for(const e of s.children)e.classes.push("tml-left")}}let l=new T.MathNode("mtable",r);e.envClasses.length>0&&(e.envClasses.includes("jot")?l.classes.push("tml-jot"):e.envClasses.includes("small")&&l.classes.push("tml-small")),"display"===e.scriptLevel&&l.setAttribute("displaystyle","true"),(e.autoTag||e.envClasses.includes("multline"))&&(l.style.width="100%");let i="";if(e.cols&&e.cols.length>0){const t=e.cols;let r=!1,n=0,s=t.length;for(;"separator"===t[n].type;)n+=1;for(;"separator"===t[s-1].type;)s-=1;if("separator"===t[0].type){const e="separator"===t[1].type?"0.15em double":"|"===t[0].separator?"0.06em solid ":"0.06em dashed ";for(const t of l.children)t.children[0].style.borderLeft=e}let o=e.autoTag?0:-1;for(let e=n;e0?i:"center ")+"right "),i&&l.setAttribute("columnalign",i.trim()),e.envClasses.includes("small")&&(l=new T.MathNode("mstyle",[l]),l.setAttribute("scriptlevel","1")),l},yt=function(t,r){-1===t.envName.indexOf("ed")&&it(t);const n="split"===t.envName,s=[],o=ut(t.parser,{cols:s,emptySingleRow:!0,autoTag:n?void 0:pt(t.envName),envClasses:["abut","jot"],maxNumCols:"split"===t.envName?2:void 0,leqno:t.parser.settings.leqno},"display");let a,l=0;const i=t.envName.indexOf("at")>-1;if(r[0]&&i){let t="";for(let e=0;e0?new Array(o.body[0].length).fill({type:"align",align:n}):[];const[a,l]=dt(t.parser.gullet.macros);return o.arraystretch=a,!l||6===l&&"pt"===l||(o.arraycolsep=l),r?{type:"leftright",mode:t.mode,body:[o],left:r[0],right:r[1],rightColor:void 0}:o},mathmlBuilder:bt}),$e({type:"array",names:["bordermatrix"],props:{numArgs:0},handler(e){const t=ut(e.parser,{cols:[],envClasses:["bordermatrix"]},"text");return t.cols=t.body.length>0?new Array(t.body[0].length).fill({type:"align",align:"c"}):[],t.envClasses=[],t.arraystretch=1,"matrix"===e.envName?t:((e,t)=>{const r=e.body;r[0].shift();const n=new Array(r.length-1).fill().map((()=>[]));for(let e=1;e[]));for(let e=0;e[])),envClasses:[],scriptLevel:"text",arraystretch:1,labels:new Array(n.length).fill(""),arraycolsep:{number:.04,unit:"em"}},a={type:"styling",mode:"math",scriptLevel:"text",body:[{type:"array",mode:"math",body:s,cols:new Array(s.length).fill({type:"align",align:"c"}),rowGaps:new Array(s.length-1).fill(null),hLinesBeforeRow:new Array(s.length+1).fill().map((()=>[])),envClasses:[],scriptLevel:"text",arraystretch:1,labels:new Array(s.length).fill(""),arraycolsep:null}]},l={type:"leftright",mode:"math",body:[e],left:t?t[0]:"(",right:t?t[1]:")",rightColor:void 0};return Pe([o,{type:"supsub",mode:"math",base:{type:"op",mode:"math",limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!0,symbol:!1,stack:!0,suppressBaseShift:!0,body:[l]},sup:a,sub:null}])})(t,e.delimiters)},mathmlBuilder:bt}),$e({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(e){const t=ut(e.parser,{type:"small"},"script");return t.envClasses=["small"],t},mathmlBuilder:bt}),$e({type:"array",names:["subarray"],props:{numArgs:1},handler(t,r){const n=(Fe(r[0])?[r[0]]:Ie(r[0],"ordgroup").body).map((function(t){const r=Le(t).text;if(-1!=="lc".indexOf(r))return{type:"align",align:r};throw new e("Unknown column alignment: "+r,t)}));if(n.length>1)throw new e("{subarray} can contain only one column");let s={cols:n,envClasses:["small"]};if(s=ut(t.parser,s,"script"),s.body.length>0&&s.body[0].length>1)throw new e("{subarray} can contain only one column");return s},mathmlBuilder:bt}),$e({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(e){const t=ut(e.parser,{cols:[],envClasses:["cases"]},ht(e.envName));return{type:"leftright",mode:e.mode,body:[t],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},mathmlBuilder:bt}),$e({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:yt,mathmlBuilder:bt}),$e({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:yt,mathmlBuilder:bt}),$e({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(e){"gathered"!==e.envName&&it(e);const t={cols:[],envClasses:["abut","jot"],autoTag:pt(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return ut(e.parser,t,"display")},mathmlBuilder:bt}),$e({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(e){it(e);const t={autoTag:pt(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,envClasses:["align"],leqno:e.parser.settings.leqno};return ut(e.parser,t,"display")},mathmlBuilder:bt}),$e({type:"array",names:["multline","multline*"],props:{numArgs:0},handler(e){it(e);const t={autoTag:"multline"===e.envName,maxNumCols:1,envClasses:["jot","multline"],leqno:e.parser.settings.leqno};return ut(e.parser,t,"display")},mathmlBuilder:bt}),$e({type:"array",names:["CD"],props:{numArgs:0},handler:t=>(it(t),function(t){const r=[];for(t.gullet.beginGroup(),t.gullet.macros.set("\\cr","\\\\\\relax"),t.gullet.beginGroup();;){r.push(t.parseExpression(!1,"\\\\")),t.gullet.endGroup(),t.gullet.beginGroup();const n=t.fetch().text;if("&"!==n&&"\\\\"!==n){if("\\end"===n){0===r[r.length-1].length&&r.pop();break}throw new e("Expected \\\\ or \\cr or \\end",t.nextToken)}t.consume()}let n=[];const s=[n];for(let l=0;l-1);else{if(!("<>AV".indexOf(s)>-1))throw new e('Expected one of "<>AV=|." after @.');for(let t=0;t<2;t++){let n=!0;for(let c=r+1;c{let s=["(",")"];if("\\bordermatrix"===t&&n[0]&&n[0].body){const e=n[0].body;2===e.length&&"atom"===e[0].type&&"atom"===e[1].type&&"open"===e[0].family&&"close"===e[1].family&&(s=[e[0].text,e[1].text])}e.consumeSpaces(),e.consume();const o=wt.bordermatrix,a={mode:e.mode,envName:t.slice(1),delimiters:s,parser:e},l=o.handler(a);return e.expect("}",!0),l}}),c({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler({parser:t,token:r},n){const s=Ie(n[0],"ordgroup").body;let o="";for(let e=0;e{let t=e.toString(16);return 1===t.length&&(t="0"+t),t},St=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}'),qt=(t,r)=>{let n="";if("HTML"===t){if(!xt.test(r))throw new e("Invalid HTML input.");n=r}else if("RGB"===t){if(!vt.test(r))throw new e("Invalid RGB input.");r.split(",").map((e=>{n+=Tt(Number(e.trim()))}))}else{if(!At.test(r))throw new e("Invalid rbg input.");r.split(",").map((t=>{const r=Number(t.trim());if(r>1)throw new e("Color rgb input must be < 1.");n+=Tt(Number((255*r).toFixed(0)))}))}return"#"!==n.charAt(0)&&(n="#"+n),n},Ot=(t,r,n)=>{const s=`\\\\color@${t}`;if(!kt.exec(t))throw new e("Invalid color: '"+t+"'",n);return Nt.test(t)?"#"+t:("#"===t.charAt(0)||(r.has(s)?t=r.get(s).tokens[0].text:St[t]&&(t=St[t])),t)},Mt=(e,t)=>{let r=ie(e.body,t.withColor(e.color));return 0===r.length&&r.push(new T.MathNode("mrow")),r=r.map((t=>(t.style.color=e.color,t))),T.newDocumentFragment(r)};c({type:"color",names:["\\textcolor"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,argTypes:["raw","raw","original"]},handler({parser:e,token:t},r,n){const s=n[0]&&Ie(n[0],"raw").string;let o="";if(s){const e=Ie(r[0],"raw").string;o=qt(s,e)}else o=Ot(Ie(r[0],"raw").string,e.gullet.macros,t);const a=r[1];return{type:"color",mode:e.mode,color:o,isTextColor:!0,body:p(a)}},mathmlBuilder:Mt}),c({type:"color",names:["\\color"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0,argTypes:["raw","raw"]},handler({parser:e,breakOnTokenText:t,token:r},n,s){const o=s[0]&&Ie(s[0],"raw").string;let a="";if(o){const e=Ie(n[0],"raw").string;a=qt(o,e)}else a=Ot(Ie(n[0],"raw").string,e.gullet.macros,r);const l=e.parseExpression(!0,t,!0);return{type:"color",mode:e.mode,color:a,isTextColor:!1,body:l}},mathmlBuilder:Mt}),c({type:"color",names:["\\definecolor"],props:{numArgs:3,allowedInText:!0,argTypes:["raw","raw","raw"]},handler({parser:t,funcName:r,token:n},s){const o=Ie(s[0],"raw").string;if(!/^[A-Za-z]+$/.test(o))throw new e("Color name must be latin letters.",n);const a=Ie(s[1],"raw").string;if(!["HTML","RGB","rgb"].includes(a))throw new e("Color model must be HTML, RGB, or rgb.",n);const l=Ie(s[2],"raw").string,i=qt(a,l);return t.gullet.macros.set(`\\\\color@${o}`,{tokens:[{text:i}],numArgs:0}),{type:"internal",mode:t.mode}}}),c({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler({parser:e},t,r){const n="["===e.gullet.future().text?e.parseSizeGroup(!0):null,s=!e.settings.displayMode;return{type:"cr",mode:e.mode,newLine:s,size:n&&Ie(n,"size").value}},mathmlBuilder(e,t){const r=new T.MathNode("mo");if(e.newLine&&(r.setAttribute("linebreak","newline"),e.size)){const n=qe(e.size,t);r.setAttribute("height",n.number+n.unit)}return r}});const Bt={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},Ct=t=>{const r=t.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(r))throw new e("Expected a control sequence",t);return r},zt=(e,t,r,n)=>{let s=e.gullet.macros.get(r.text);null==s&&(r.noexpand=!0,s={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,s,n)};c({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler({parser:t,funcName:r}){t.consumeSpaces();const n=t.fetch();if(Bt[n.text])return"\\global"!==r&&"\\\\globallong"!==r||(n.text=Bt[n.text]),Ie(t.parseFunction(),"internal");throw new e("Invalid token after macro prefix",n)}}),c({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler({parser:t,funcName:r}){let n=t.gullet.popToken();const s=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(s))throw new e("Expected a control sequence",n);let o,a=0;const l=[[]];for(;"{"!==t.gullet.future().text;)if(n=t.gullet.popToken(),"#"===n.text){if("{"===t.gullet.future().text){o=t.gullet.future(),l[a].push("{");break}if(n=t.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new e(`Invalid argument number "${n.text}"`);if(parseInt(n.text)!==a+1)throw new e(`Argument number "${n.text}" out of order`);a++,l.push([])}else{if("EOF"===n.text)throw new e("Expected a macro definition");l[a].push(n.text)}let{tokens:i}=t.gullet.consumeArg();if(o&&i.unshift(o),"\\edef"===r||"\\xdef"===r){if(i=t.gullet.expandTokens(i),i.length>t.gullet.settings.maxExpand)throw new e("Too many expansions in an "+r);i.reverse()}return t.gullet.macros.set(s,{tokens:i,numArgs:a,delimiters:l},r===Bt[r]),{type:"internal",mode:t.mode}}}),c({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler({parser:e,funcName:t}){const r=Ct(e.gullet.popToken());e.gullet.consumeSpaces();const n=(e=>{let t=e.gullet.popToken();return"="===t.text&&(t=e.gullet.popToken()," "===t.text&&(t=e.gullet.popToken())),t})(e);return zt(e,r,n,"\\\\globallet"===t),{type:"internal",mode:e.mode}}}),c({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler({parser:e,funcName:t}){const r=Ct(e.gullet.popToken()),n=e.gullet.popToken(),s=e.gullet.popToken();return zt(e,r,s,"\\\\globalfuture"===t),e.gullet.pushToken(s),e.gullet.pushToken(n),{type:"internal",mode:e.mode}}}),c({type:"internal",names:["\\newcommand","\\renewcommand","\\providecommand"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler({parser:t,funcName:r}){let n="";const s=t.gullet.popToken();"{"===s.text?(n=Ct(t.gullet.popToken()),t.gullet.popToken()):n=Ct(s);const o=t.gullet.isDefined(n);if(o&&"\\newcommand"===r)throw new e(`\\newcommand{${n}} attempting to redefine ${n}; use \\renewcommand`);if(!o&&"\\renewcommand"===r)throw new e(`\\renewcommand{${n}} when command ${n} does not yet exist; use \\newcommand`);let a=0;if("["===t.gullet.future().text){let r=t.gullet.popToken();if(r=t.gullet.popToken(),!/^[0-9]$/.test(r.text))throw new e(`Invalid number of arguments: "${r.text}"`);if(a=parseInt(r.text),r=t.gullet.popToken(),"]"!==r.text)throw new e(`Invalid argument "${r.text}"`)}const{tokens:l}=t.gullet.consumeArg();return"\\providecommand"===r&&t.gullet.macros.has(n)||t.gullet.macros.set(n,{tokens:l,numArgs:a}),{type:"internal",mode:t.mode}}});const Et={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},$t=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","⦇","\\llparenthesis","⦈","\\rrparenthesis","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","<",">","\\langle","⟨","\\rangle","⟩","\\lAngle","⟪","\\rAngle","⟫","\\llangle","⦉","\\rrangle","⦊","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱","\\llbracket","\\rrbracket","⟦","⟦","\\lBrace","\\rBrace","⦃","⦄","/","\\backslash","|","\\vert","\\|","\\Vert","‖","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."],It=["}","\\left","\\middle","\\right"],Lt=e=>e.length>0&&($t.includes(e)||Et[e]||It.includes(e)),Ft=[0,1.2,1.8,2.4,3];function Dt(t,r){const n=Fe(t);if(n&&$t.includes(n.text))return["<","\\lt"].includes(n.text)&&(n.text="⟨"),[">","\\gt"].includes(n.text)&&(n.text="⟩"),n;throw new e(n?`Invalid delimiter '${n.text}' after '${r.funcName}'`:`Invalid delimiter type '${t.type}'`,t)}const Gt=["/","\\","\\backslash","\\vert","|"];c({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(e,t)=>{const r=Dt(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:Et[e.funcName].size,mclass:Et[e.funcName].mclass,delim:r.text}},mathmlBuilder:e=>{const t=[];"."===e.delim&&(e.delim=""),t.push(te(e.delim,e.mode));const r=new T.MathNode("mo",t);return"mopen"===e.mclass||"mclose"===e.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),(Gt.includes(e.delim)||e.delim.indexOf("arrow")>-1)&&r.setAttribute("stretchy","true"),r.setAttribute("symmetric","true"),r.setAttribute("minsize",Ft[e.size]+"em"),r.setAttribute("maxsize",Ft[e.size]+"em"),r}}),c({type:"leftright-right",names:["\\right"],props:{numArgs:1,argTypes:["primitive"]},handler:(e,t)=>({type:"leftright-right",mode:e.parser.mode,delim:Dt(t[0],e).text})}),c({type:"leftright",names:["\\left"],props:{numArgs:1,argTypes:["primitive"]},handler:(t,r)=>{const n=Dt(r[0],t),s=t.parser;++s.leftrightDepth;let o=s.parseExpression(!1,null,!0),a=s.fetch();for(;"\\middle"===a.text;){s.consume();const t=s.fetch().text;if(!$.math[t])throw new e(`Invalid delimiter '${t}' after '\\middle'`);Dt({type:"atom",mode:"math",text:t},{funcName:"\\middle"}),o.push({type:"middle",mode:"math",delim:t}),s.consume(),o=o.concat(s.parseExpression(!1,null,!0)),a=s.fetch()}--s.leftrightDepth,s.expect("\\right",!1);const l=Ie(s.parseFunction(),"leftright-right");return{type:"leftright",mode:s.mode,body:o,left:n.text,right:l.delim}},mathmlBuilder:(e,t)=>{!function(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}(e);const r=ie(e.body,t);"."===e.left&&(e.left="");const n=new T.MathNode("mo",[te(e.left,e.mode)]);n.setAttribute("fence","true"),n.setAttribute("form","prefix"),("/"===e.left||"\\"===e.left||e.left.indexOf("arrow")>-1)&&n.setAttribute("stretchy","true"),r.unshift(n),"."===e.right&&(e.right="");const s=new T.MathNode("mo",[te(e.right,e.mode)]);if(s.setAttribute("fence","true"),s.setAttribute("form","postfix"),("∖"===e.right||e.right.indexOf("arrow")>-1)&&s.setAttribute("stretchy","true"),e.body.length>0){const t=e.body[e.body.length-1];"color"!==t.type||t.isTextColor||s.setAttribute("mathcolor",t.color)}return r.push(s),se(r)}}),c({type:"middle",names:["\\middle"],props:{numArgs:1,argTypes:["primitive"]},handler:(t,r)=>{const n=Dt(r[0],t);if(!t.parser.leftrightDepth)throw new e("\\middle without preceding \\left",n);return{type:"middle",mode:t.parser.mode,delim:n.text}},mathmlBuilder:(e,t)=>{const r=te(e.delim,e.mode),n=new T.MathNode("mo",[r]);return n.setAttribute("fence","true"),e.delim.indexOf("arrow")>-1&&n.setAttribute("stretchy","true"),n.setAttribute("form","prefix"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n}});const jt=e=>{const t=new T.MathNode("mspace");return t.setAttribute("width","3pt"),t},Pt=(e,t)=>{let r;switch(r=e.label.indexOf("colorbox")>-1||"\\boxed"===e.label?new T.MathNode("mrow",[jt(),de(e.body,t),jt()]):new T.MathNode("menclose",[de(e.body,t)]),e.label){case"\\overline":r.setAttribute("notation","top"),r.classes.push("tml-overline");break;case"\\underline":r.setAttribute("notation","bottom"),r.classes.push("tml-underline");break;case"\\cancel":r.setAttribute("notation","updiagonalstrike"),r.children.push(new T.MathNode("mrow",[],["tml-cancel","upstrike"]));break;case"\\bcancel":r.setAttribute("notation","downdiagonalstrike"),r.children.push(new T.MathNode("mrow",[],["tml-cancel","downstrike"]));break;case"\\sout":r.setAttribute("notation","horizontalstrike"),r.children.push(new T.MathNode("mrow",[],["tml-cancel","sout"]));break;case"\\xcancel":r.setAttribute("notation","updiagonalstrike downdiagonalstrike"),r.classes.push("tml-xcancel");break;case"\\longdiv":r.setAttribute("notation","longdiv"),r.classes.push("longdiv-top"),r.children.push(new T.MathNode("mrow",[],["longdiv-arc"]));break;case"\\phase":r.setAttribute("notation","phasorangle"),r.classes.push("phasor-bottom"),r.children.push(new T.MathNode("mrow",[],["phasor-angle"]));break;case"\\textcircled":r.setAttribute("notation","circle"),r.classes.push("circle-pad"),r.children.push(new T.MathNode("mrow",[],["textcircle"]));break;case"\\angl":r.setAttribute("notation","actuarial"),r.classes.push("actuarial");break;case"\\boxed":r.setAttribute("notation","box"),r.classes.push("tml-box"),r.setAttribute("scriptlevel","0"),r.setAttribute("displaystyle","true");break;case"\\fbox":r.setAttribute("notation","box"),r.classes.push("tml-fbox");break;case"\\fcolorbox":case"\\colorbox":{const t={padding:"3pt 0 3pt 0"};"\\fcolorbox"===e.label&&(t.border="0.0667em solid "+String(e.borderColor)),r.style=t;break}}return e.backgroundColor&&r.setAttribute("mathbackground",e.backgroundColor),r};c({type:"enclose",names:["\\colorbox"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,argTypes:["raw","raw","text"]},handler({parser:e,funcName:t},r,n){const s=n[0]&&Ie(n[0],"raw").string;let o="";if(s){const e=Ie(r[0],"raw").string;o=qt(s,e)}else o=Ot(Ie(r[0],"raw").string,e.gullet.macros);const a=r[1];return{type:"enclose",mode:e.mode,label:t,backgroundColor:o,body:a}},mathmlBuilder:Pt}),c({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,numOptionalArgs:1,allowedInText:!0,argTypes:["raw","raw","raw","text"]},handler({parser:e,funcName:t},r,n){const s=n[0]&&Ie(n[0],"raw").string;let o,a="";if(s){const e=Ie(r[0],"raw").string,t=Ie(r[0],"raw").string;a=qt(s,e),o=qt(s,t)}else a=Ot(Ie(r[0],"raw").string,e.gullet.macros),o=Ot(Ie(r[1],"raw").string,e.gullet.macros);const l=r[2];return{type:"enclose",mode:e.mode,label:t,backgroundColor:o,borderColor:a,body:l}},mathmlBuilder:Pt}),c({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:({parser:e},t)=>({type:"enclose",mode:e.mode,label:"\\fbox",body:t[0]})}),c({type:"enclose",names:["\\angl","\\cancel","\\bcancel","\\xcancel","\\sout","\\overline","\\boxed","\\longdiv","\\phase"],props:{numArgs:1},handler({parser:e,funcName:t},r){const n=r[0];return{type:"enclose",mode:e.mode,label:t,body:n}},mathmlBuilder:Pt}),c({type:"enclose",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler({parser:e,funcName:t},r){const n=r[0];return{type:"enclose",mode:e.mode,label:t,body:n}},mathmlBuilder:Pt}),c({type:"enclose",names:["\\textcircled"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler({parser:e,funcName:t},r){const n=r[0];return{type:"enclose",mode:e.mode,label:t,body:n}},mathmlBuilder:Pt}),c({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler({parser:t,funcName:r},n){const s=n[0];if("ordgroup"!==s.type)throw new e("Invalid environment name",s);let o="";for(let e=0;e({type:"envTag",mode:e.mode,body:t[0]}),mathmlBuilder:(e,t)=>new T.MathNode("mrow")}),c({type:"noTag",names:["\\env@notag"],props:{numArgs:0},handler:({parser:e})=>({type:"noTag",mode:e.mode}),mathmlBuilder:(e,t)=>new T.MathNode("mrow")});const Rt=(e,t)=>{const r=e.font,n=t.withFont(r),s=de(e.body,n);if(0===s.children.length)return s;if("boldsymbol"===r&&["mo","mpadded","mrow"].includes(s.type))return s.style.fontWeight="bold",s;if(((e,t)=>{if("mathrm"!==t||"ordgroup"!==e.body.type||1===e.body.body.length)return!1;if("mathord"!==e.body.body[0].type)return!1;for(let t=1;t{const n=m(r[0]);let s=t;return s in Ut&&(s=Ut[s]),{type:"font",mode:e.mode,font:s.slice(1),body:n}},mathmlBuilder:Rt}),c({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:({parser:e,funcName:t,breakOnTokenText:r},n)=>{const{mode:s}=e,o=e.parseExpression(!0,r,!0);return{type:"font",mode:s,font:`math${t.slice(1)}`,body:{type:"ordgroup",mode:e.mode,body:o}}},mathmlBuilder:Rt});const Ht=["display","text","script","scriptscript"],Vt={auto:-1,display:0,text:0,script:1,scriptscript:2},_t=(e,t)=>{const r="auto"===e.scriptLevel?t.incrementLevel():"display"===e.scriptLevel?t.withLevel(_e):"text"===e.scriptLevel?t.withLevel(We):t.withLevel(Xe),n=de(e.numer,r),s=de(e.denom,r);3===t.level&&(n.style.mathDepth="2",n.setAttribute("scriptlevel","2"),s.style.mathDepth="2",s.setAttribute("scriptlevel","2"));let o=new T.MathNode("mfrac",[n,s]);if(e.hasBarLine){if(e.barSize){const r=qe(e.barSize,t);o.setAttribute("linethickness",r.number+r.unit)}}else o.setAttribute("linethickness","0px");if(null!=e.leftDelim||null!=e.rightDelim){const t=[];if(null!=e.leftDelim){const r=new T.MathNode("mo",[new T.TextNode(e.leftDelim.replace("\\",""))]);r.setAttribute("fence","true"),t.push(r)}if(t.push(o),null!=e.rightDelim){const r=new T.MathNode("mo",[new T.TextNode(e.rightDelim.replace("\\",""))]);r.setAttribute("fence","true"),t.push(r)}o=se(t)}return"auto"!==e.scriptLevel&&(o=new T.MathNode("mstyle",[o]),o.setAttribute("displaystyle",String("display"===e.scriptLevel)),o.setAttribute("scriptlevel",Vt[e.scriptLevel])),o};c({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:({parser:e,funcName:t},r)=>{const n=r[0],s=r[1];let o=!1,a=null,l=null,i="auto";switch(t){case"\\dfrac":case"\\frac":case"\\tfrac":o=!0;break;case"\\\\atopfrac":o=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":a="(",l=")";break;case"\\\\bracefrac":a="\\{",l="\\}";break;case"\\\\brackfrac":a="[",l="]";break;default:throw new Error("Unrecognized genfrac command")}switch(t){case"\\dfrac":case"\\dbinom":i="display";break;case"\\tfrac":case"\\tbinom":i="text"}return{type:"genfrac",mode:e.mode,continued:!1,numer:n,denom:s,hasBarLine:o,leftDelim:a,rightDelim:l,scriptLevel:i,barSize:null}},mathmlBuilder:_t}),c({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:({parser:e,funcName:t},r)=>{const n=r[0],s=r[1];return{type:"genfrac",mode:e.mode,continued:!0,numer:n,denom:s,hasBarLine:!0,leftDelim:null,rightDelim:null,scriptLevel:"display",barSize:null}}}),c({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler({parser:e,funcName:t,token:r}){let n;switch(t){case"\\over":n="\\frac";break;case"\\choose":n="\\binom";break;case"\\atop":n="\\\\atopfrac";break;case"\\brace":n="\\\\bracefrac";break;case"\\brack":n="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:n,token:r}}});const Wt=function(e){let t=null;return e.length>0&&(t=e,t="."===t?null:t),t};c({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler({parser:e},t){const r=t[4],n=t[5],s=m(t[0]),o="atom"===s.type&&"open"===s.family?Wt(s.text):null,a=m(t[1]),l="atom"===a.type&&"close"===a.family?Wt(a.text):null,i=Ie(t[2],"size");let c,d=null;i.isBlank?c=!0:(d=i.value,c=d.number>0);let p="auto",u=t[3];if("ordgroup"===u.type){if(u.body.length>0){const e=Ie(u.body[0],"textord");p=Ht[Number(e.text)]}}else u=Ie(u,"textord"),p=Ht[Number(u.text)];return{type:"genfrac",mode:e.mode,numer:r,denom:n,continued:!1,hasBarLine:c,barSize:d,leftDelim:o,rightDelim:l,scriptLevel:p}},mathmlBuilder:_t}),c({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler:({parser:e,funcName:t,token:r},n)=>({type:"infix",mode:e.mode,replaceWith:"\\\\abovefrac",barSize:Ie(n[0],"size").value,token:r})}),c({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:({parser:e,funcName:t},r)=>{const n=r[0],s=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e}(Ie(r[1],"infix").barSize),o=r[2],a=s.number>0;return{type:"genfrac",mode:e.mode,numer:n,denom:o,continued:!1,hasBarLine:a,barSize:s,leftDelim:null,rightDelim:null,scriptLevel:"auto"}},mathmlBuilder:_t}),c({type:"hbox",names:["\\hbox"],props:{numArgs:1,argTypes:["hbox"],allowedInArgument:!0,allowedInText:!1},handler:({parser:e},t)=>({type:"hbox",mode:e.mode,body:p(t[0])}),mathmlBuilder(e,t){const r=t.withLevel(_e),n=ce(e.body,r);return ne(n)}});c({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler:({parser:e,funcName:t},r)=>({type:"horizBrace",mode:e.mode,label:t,isOver:/^\\over/.test(t),base:r[0]}),mathmlBuilder:(e,t)=>{const r=B(e.label);return r.style["math-depth"]=0,new T.MathNode(e.isOver?"mover":"munder",[de(e.base,t),r])}}),c({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:({parser:t,token:r},n)=>{const s=n[1],o=Ie(n[0],"url").url;if(!t.settings.isTrusted({command:"\\href",url:o}))throw new e('Function "\\href" is not trusted',r);return{type:"href",mode:t.mode,href:o,body:p(s)}},mathmlBuilder:(e,t)=>{const r=new v("math",[ce(e.body,t)]);return new x(e.href,[],[r])}}),c({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:({parser:t,token:r},n)=>{const s=Ie(n[0],"url").url;if(!t.settings.isTrusted({command:"\\url",url:s}))throw new e('Function "\\url" is not trusted',r);const o=[];for(let e=0;e{const o=Ie(s[0],"raw").string,a=s[1];if(t.settings.strict)throw new e(`Function "${r}" is disabled in strict mode`,n);let l;const i={};switch(r){case"\\class":i.class=o,l={command:"\\class",class:o};break;case"\\id":i.id=o,l={command:"\\id",id:o};break;case"\\style":i.style=o,l={command:"\\style",style:o};break;case"\\data":{const t=o.split(",");for(let r=0;r{const r=ce(e.body,t),n=[];e.attributes.class&&n.push(...e.attributes.class.trim().split(/\s+/)),r.classes=n;for(const t in e.attributes)"class"!==t&&Object.prototype.hasOwnProperty.call(e.attributes,t)&&r.setAttribute(t,e.attributes[t]);return r}});const Xt=function(t){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(t))return{number:+t,unit:"bp"};{const r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t);if(!r)throw new e("Invalid size: '"+t+"' in \\includegraphics");const n={number:+(r[1]+r[2]),unit:r[3]};if(!Te(n))throw new e("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n}};c({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:({parser:t,token:r},n,s)=>{let o={number:0,unit:"em"},a={number:.9,unit:"em"},l={number:0,unit:"em"},i="";if(s[0]){const t=Ie(s[0],"raw").string.split(",");for(let r=0;r{const r=qe(e.height,t),n={number:0,unit:"em"};e.totalheight.number>0&&e.totalheight.unit===r.unit&&e.totalheight.number>r.number&&(n.number=e.totalheight.number-r.number,n.unit=r.unit);let s=0;e.width.number>0&&(s=qe(e.width,t));const o={height:r.number+n.number+"em"};s.number>0&&(o.width=s.number+s.unit),n.number>0&&(o.verticalAlign=-n.number+n.unit);const a=new k(e.src,e.alt,o);return a.height=r,a.depth=n,new T.MathNode("mtext",[a])}}),c({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler({parser:t,funcName:r,token:n},s){const o=Ie(s[0],"size");if(t.settings.strict){const s="m"===r[1],a="mu"===o.value.unit;if(s){if(!a)throw new e(`LaTeX's ${r} supports only mu units, not ${o.value.unit} units`,n);if("math"!==t.mode)throw new e(`LaTeX's ${r} works only in math mode`,n)}else if(a)throw new e(`LaTeX's ${r} doesn't support mu units`,n)}return{type:"kern",mode:t.mode,dimension:o.value}},mathmlBuilder(e,t){const r=qe(e.dimension,t),n="em"===r.unit?Zt(r.number):"";if("text"===e.mode&&n.length>0){const e=new T.TextNode(n);return new T.MathNode("mtext",[e])}{const e=new T.MathNode("mspace");return e.setAttribute("width",r.number+r.unit),r.number<0&&(e.style.marginLeft=r.number+r.unit),e}}});const Zt=function(e){return e>=.05555&&e<=.05556?" ":e>=.1666&&e<=.1667?" ":e>=.2222&&e<=.2223?" ":e>=.2777&&e<=.2778?"  ":""},Yt=/[^A-Za-z_0-9-]/g;c({type:"label",names:["\\label"],props:{numArgs:1,argTypes:["raw"]},handler:({parser:e},t)=>({type:"label",mode:e.mode,string:t[0].string.replace(Yt,"")}),mathmlBuilder(e,t){const r=new T.MathNode("mrow",[],["tml-label"]);return e.string.length>0&&r.setLabel(e.string),r}});const Jt=["\\clap","\\llap","\\rlap"];c({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap","\\clap","\\llap","\\rlap"],props:{numArgs:1,allowedInText:!0},handler:({parser:t,funcName:r,token:n},s)=>{if(Jt.includes(r)){if(t.settings.strict&&"text"!==t.mode)throw new e(`{${r}} can be used only in text mode.\n Try \\math${r.slice(1)}`,n);r=r.slice(1)}else r=r.slice(5);const o=s[0];return{type:"lap",mode:t.mode,alignment:r,body:o}},mathmlBuilder:(e,t)=>{let r;if("llap"===e.alignment){const n=ie(p(e.body),t),s=new T.MathNode("mphantom",n);r=new T.MathNode("mpadded",[s]),r.setAttribute("width","0px")}const n=de(e.body,t);let s;if("llap"===e.alignment?(n.style.position="absolute",n.style.right="0",n.style.bottom="0",s=new T.MathNode("mpadded",[r,n])):s=new T.MathNode("mpadded",[n]),"rlap"===e.alignment)e.body.body.length>0&&"genfrac"===e.body.body[0].type&&s.setAttribute("lspace","0.16667em");else{const t="llap"===e.alignment?"-1":"-0.5";s.setAttribute("lspace",t+"width"),"llap"===e.alignment?s.style.position="relative":(s.style.display="flex",s.style.justifyContent="center")}return s.setAttribute("width","0px"),s}}),c({type:"ordgroup",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler({funcName:e,parser:t},r){const n=t.mode;t.switchMode("math");const s="\\("===e?"\\)":"$",o=t.parseExpression(!1,s);return t.expect(s),t.switchMode(n),{type:"ordgroup",mode:t.mode,body:o}}}),c({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,r){throw new e(`Mismatched ${t.funcName}`,r)}});c({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:({parser:e},t)=>({type:"mathchoice",mode:e.mode,display:p(t[0]),text:p(t[1]),script:p(t[2]),scriptscript:p(t[3])}),mathmlBuilder:(e,t)=>{const r=((e,t)=>{switch(t.level){case Ve:return e.display;case _e:return e.text;case We:return e.script;case Xe:return e.scriptscript;default:return e.text}})(e,t);return ce(r,t)}});const Kt=["text","textord","mathord","atom"];function Qt(e,t){let r;const n=ie(e.body,t);if("minner"===e.mclass)r=new T.MathNode("mpadded",n);else if("mord"===e.mclass)e.isCharacterBox||"mathord"===n[0].type?(r=n[0],r.type="mi",1===r.children.length&&r.children[0].text&&"∇"===r.children[0].text&&r.setAttribute("mathvariant","normal")):r=new T.MathNode("mi",n);else{r=new T.MathNode("mrow",n),e.mustPromote?(r=n[0],r.type="mo",e.isCharacterBox&&e.body[0].text&&/[A-Za-z]/.test(e.body[0].text)&&r.setAttribute("mathvariant","italic")):r=new T.MathNode("mrow",n);const s=t.level<2;"mrow"===r.type?s&&("mbin"===e.mclass?(r.children.unshift(Oe(.2222)),r.children.push(Oe(.2222))):"mrel"===e.mclass?(r.children.unshift(Oe(.2778)),r.children.push(Oe(.2778))):"mpunct"===e.mclass?r.children.push(Oe(.1667)):"minner"===e.mclass&&(r.children.unshift(Oe(.0556)),r.children.push(Oe(.0556)))):"mbin"===e.mclass?(r.attributes.lspace=s?"0.2222em":"0",r.attributes.rspace=s?"0.2222em":"0"):"mrel"===e.mclass?(r.attributes.lspace=s?"0.2778em":"0",r.attributes.rspace=s?"0.2778em":"0"):"mpunct"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace=s?"0.1667em":"0"):"mopen"===e.mclass||"mclose"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0em"):"minner"===e.mclass&&s&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em"),"mopen"!==e.mclass&&"mclose"!==e.mclass&&(delete r.attributes.stretchy,delete r.attributes.form)}return r}c({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler({parser:e,funcName:t},r){const n=r[0],s=o.isCharacterBox(n);let a=!0;const l={type:"mathord",text:"",mode:e.mode},i=n.body?n.body:[n];for(const t of i){if(!Kt.includes(t.type)){a=!1;break}$[e.mode][t.text]?l.text+=$[e.mode][t.text].replace:t.text?l.text+=t.text:t.body&&t.body.map((e=>{l.text+=e.text}))}return a&&"\\mathord"===t&&"mathord"===l.type&&l.text.length>1?l:{type:"mclass",mode:e.mode,mclass:"m"+t.slice(5),body:p(a?l:n),isCharacterBox:s,mustPromote:a}},mathmlBuilder:Qt});const er=e=>{const t="ordgroup"===e.type&&e.body.length?e.body[0]:e;return"atom"!==t.type||"bin"!==t.family&&"rel"!==t.family?"mord":"m"+t.family};c({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler:({parser:e},t)=>({type:"mclass",mode:e.mode,mclass:er(t[0]),body:p(t[1]),isCharacterBox:o.isCharacterBox(t[1])})}),c({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler({parser:e,funcName:t},r){const n=r[1],s=r[0],o={type:"op",mode:n.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,stack:!0,suppressBaseShift:"\\stackrel"!==t,body:p(n)};return{type:"supsub",mode:s.mode,base:o,sup:"\\underset"===t?null:s,sub:"\\underset"===t?s:null}},mathmlBuilder:Qt});const tr=(e,t,r)=>{if(!e)return r;const n=de(e,t);return"mrow"===n.type&&0===n.children.length?r:n};c({type:"multiscript",names:["\\sideset","\\pres@cript"],props:{numArgs:3},handler({parser:t,funcName:r,token:n},s){if(0===s[2].body.length)throw new e(r+"cannot parse an empty base.");const o=s[2].body[0];if(t.settings.strict&&"\\sideset"===r&&!o.symbol)throw new e("The base of \\sideset must be a big operator. Try \\prescript.");if(s[0].body.length>0&&"supsub"!==s[0].body[0].type||s[1].body.length>0&&"supsub"!==s[1].body[0].type)throw new e("\\sideset can parse only subscripts and superscripts in its first two arguments",n);const a=s[0].body.length>0?s[0].body[0]:null,l=s[1].body.length>0?s[1].body[0]:null;return a||l?a?{type:"multiscript",mode:t.mode,isSideset:"\\sideset"===r,prescripts:a,postscripts:l,base:o}:{type:"styling",mode:t.mode,scriptLevel:"text",body:[{type:"supsub",mode:t.mode,base:o,sup:l.sup,sub:l.sub}]}:o},mathmlBuilder(e,t){const r=de(e.base,t),n=new T.MathNode("mprescripts"),s=new T.MathNode("none");let o=[];const a=tr(e.prescripts.sub,t,s),l=tr(e.prescripts.sup,t,s);if(e.isSideset&&(a.setAttribute("style","text-align: left;"),l.setAttribute("style","text-align: left;")),e.postscripts){o=[r,tr(e.postscripts.sub,t,s),tr(e.postscripts.sup,t,s),n,a,l]}else o=[r,n,a,l];return new T.MathNode("mmultiscripts",o)}}),c({type:"not",names:["\\not"],props:{numArgs:1,primitive:!0,allowedInText:!1},handler({parser:e},t){const r=o.isCharacterBox(t[0]);let n;if(r)n=p(t[0]),"\\"===n[0].text.charAt(0)&&(n[0].text=$.math[n[0].text].replace),n[0].text=n[0].text.slice(0,1)+"̸"+n[0].text.slice(1);else{n=[{type:"textord",mode:"math",text:"̸"},{type:"kern",mode:"math",dimension:{number:-.6,unit:"em"}},t[0]]}return{type:"not",mode:e.mode,body:n,isCharacterBox:r}},mathmlBuilder(e,t){if(e.isCharacterBox){return ie(e.body,t,!0)[0]}return ce(e.body,t)}});const rr=["textord","mathord","atom"],nr=["\\smallint"],sr=["textord","mathord","ordgroup","close","leftright","font"],or=e=>{e.attributes.lspace="0.1667em",e.attributes.rspace="0.1667em"},ar=(e,t)=>{let r;if(e.symbol)r=new v("mo",[te(e.name,e.mode)]),nr.includes(e.name)?r.setAttribute("largeop","false"):r.setAttribute("movablelimits","false"),e.fromMathOp&&or(r);else if(e.body)r=new v("mo",ie(e.body,t)),e.fromMathOp&&or(r);else if(r=new v("mi",[new A(e.name.slice(1))]),!e.parentIsSupSub){const t=[r,new v("mo",[te("⁡","text")])];if(e.needsLeadingSpace){const e=new v("mspace");e.setAttribute("width","0.1667em"),t.unshift(e)}if(!e.isFollowedByDelimiter){const e=new v("mspace");e.setAttribute("width","0.1667em"),t.push(e)}r=new v("mrow",t)}return r},lr={"∏":"\\prod","∐":"\\coprod","∑":"\\sum","⋀":"\\bigwedge","⋁":"\\bigvee","⋂":"\\bigcap","⋃":"\\bigcup","⨀":"\\bigodot","⨁":"\\bigoplus","⨂":"\\bigotimes","⨄":"\\biguplus","⨅":"\\bigsqcap","⨆":"\\bigsqcup","⨃":"\\bigcupdot","⨇":"\\bigdoublevee","⨈":"\\bigdoublewedge","⨉":"\\bigtimes"};c({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcupplus","\\bigcupdot","\\bigcap","\\bigcup","\\bigdoublevee","\\bigdoublewedge","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcap","\\bigsqcup","\\bigtimes","\\smallint","∏","∐","∑","⋀","⋁","⋂","⋃","⨀","⨁","⨂","⨃","⨄","⨅","⨆","⨇","⨈","⨉"],props:{numArgs:0},handler:({parser:e,funcName:t},r)=>{let n=t;return 1===n.length&&(n=lr[n]),{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!0,stack:!1,name:n}},mathmlBuilder:ar}),c({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:({parser:e},t)=>{const r=t[0],n=r.body?r.body:[r],s=1===n.length&&rr.includes(n[0].type);return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:s,fromMathOp:!0,stack:!1,name:s?n[0].text:null,body:s?null:p(r)}},mathmlBuilder:ar});const ir={"∫":"\\int","∬":"\\iint","∭":"\\iiint","∮":"\\oint","∯":"\\oiint","∰":"\\oiiint","∱":"\\intclockwise","∲":"\\varointclockwise","⨌":"\\iiiint","⨍":"\\intbar","⨎":"\\intBar","⨏":"\\fint","⨒":"\\rppolint","⨓":"\\scpolint","⨕":"\\pointint","⨖":"\\sqint","⨗":"\\intlarhk","⨘":"\\intx","⨙":"\\intcap","⨚":"\\intcup"};c({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\sgn","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler({parser:e,funcName:t}){const r=e.prevAtomType,n=e.gullet.future().text;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,stack:!1,isFollowedByDelimiter:Lt(n),needsLeadingSpace:r.length>0&&sr.includes(r),name:t}},mathmlBuilder:ar}),c({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler({parser:e,funcName:t}){const r=e.prevAtomType,n=e.gullet.future().text;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,stack:!1,isFollowedByDelimiter:Lt(n),needsLeadingSpace:r.length>0&&sr.includes(r),name:t}},mathmlBuilder:ar}),c({type:"op",names:["\\int","\\iint","\\iiint","\\iiiint","\\oint","\\oiint","\\oiiint","\\intclockwise","\\varointclockwise","\\intbar","\\intBar","\\fint","\\rppolint","\\scpolint","\\pointint","\\sqint","\\intlarhk","\\intx","\\intcap","\\intcup","∫","∬","∭","∮","∯","∰","∱","∲","⨌","⨍","⨎","⨏","⨒","⨓","⨕","⨖","⨗","⨘","⨙","⨚"],props:{numArgs:0},handler({parser:e,funcName:t}){let r=t;return 1===r.length&&(r=ir[r]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,stack:!1,name:r}},mathmlBuilder:ar});c({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1,allowedInArgument:!0},handler:({parser:e,funcName:t},r)=>{const n=r[0],s=e.prevAtomType,o=e.gullet.future().text;return{type:"operatorname",mode:e.mode,body:p(n),alwaysHandleSupSub:"\\operatornamewithlimits"===t,limits:!1,parentIsSupSub:!1,isFollowedByDelimiter:Lt(o),needsLeadingSpace:s.length>0&&sr.includes(s)}},mathmlBuilder:(e,t)=>{let r,n=ie(e.body,t.withFont("mathrm")),s=!0;for(let e=0;ee.toText())).join("");n=[new T.TextNode(e)]}else if(1===n.length&&["mover","munder"].includes(n[0].type)&&("mi"===n[0].children[0].type||"mtext"===n[0].children[0].type)){if(n[0].children[0].type="mi",e.parentIsSupSub)return new T.MathNode("mrow",n);{const e=new T.MathNode("mo",[te("⁡","text")]);return T.newDocumentFragment([n[0],e])}}if(s?(r=new T.MathNode("mi",n),1===n[0].text.length&&r.setAttribute("mathvariant","normal")):r=new T.MathNode("mrow",n),!e.parentIsSupSub){const t=[r,new T.MathNode("mo",[te("⁡","text")])];if(e.needsLeadingSpace){const e=new T.MathNode("mspace");e.setAttribute("width","0.1667em"),t.unshift(e)}if(!e.isFollowedByDelimiter){const e=new T.MathNode("mspace");e.setAttribute("width","0.1667em"),t.push(e)}return T.newDocumentFragment(t)}return r}}),Ye("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@"),d({type:"ordgroup",mathmlBuilder:(e,t)=>ce(e.body,t,e.semisimple)}),c({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:({parser:e},t)=>{const r=t[0];return{type:"phantom",mode:e.mode,body:p(r)}},mathmlBuilder:(e,t)=>{const r=ie(e.body,t);return new T.MathNode("mphantom",r)}}),c({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:({parser:e},t)=>{const r=t[0];return{type:"hphantom",mode:e.mode,body:r}},mathmlBuilder:(e,t)=>{const r=ie(p(e.body),t),n=new T.MathNode("mphantom",r),s=new T.MathNode("mpadded",[n]);return s.setAttribute("height","0px"),s.setAttribute("depth","0px"),s}}),c({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:({parser:e},t)=>{const r=t[0];return{type:"vphantom",mode:e.mode,body:r}},mathmlBuilder:(e,t)=>{const r=ie(p(e.body),t),n=new T.MathNode("mphantom",r),s=new T.MathNode("mpadded",[n]);return s.setAttribute("width","0px"),s}}),c({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler:({parser:e},t)=>({type:"pmb",mode:e.mode,body:p(t[0])}),mathmlBuilder(e,t){const r=ie(e.body,t),n=N(r);return n.setAttribute("style","font-weight:bold"),n}});const cr=(e,t)=>{const r=t.withLevel(_e),n=new T.MathNode("mpadded",[de(e.body,r)]),s=qe(e.dy,t);return n.setAttribute("voffset",s.number+s.unit),s.number>0?n.style.padding=s.number+s.unit+" 0 0 0":n.style.padding="0 0 "+Math.abs(s.number)+s.unit+" 0",n};c({type:"raise",names:["\\raise","\\lower"],props:{numArgs:2,argTypes:["size","primitive"],primitive:!0},handler({parser:e,funcName:t},r){const n=Ie(r[0],"size").value;"\\lower"===t&&(n.number*=-1);const s=r[1];return{type:"raise",mode:e.mode,dy:n,body:s}},mathmlBuilder:cr}),c({type:"raise",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler({parser:e,funcName:t},r){const n=Ie(r[0],"size").value,s=r[1];return{type:"raise",mode:e.mode,dy:n,body:s}},mathmlBuilder:cr}),c({type:"ref",names:["\\ref","\\eqref"],props:{numArgs:1,argTypes:["raw"]},handler:({parser:e,funcName:t},r)=>({type:"ref",mode:e.mode,funcName:t,string:r[0].string.replace(Yt,"")}),mathmlBuilder(e,t){const r="\\ref"===e.funcName?["tml-ref"]:["tml-ref","tml-eqref"];return new x("#"+e.string,r,null)}}),c({type:"reflect",names:["\\reflectbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:({parser:e},t)=>({type:"reflect",mode:e.mode,body:t[0]}),mathmlBuilder(e,t){const r=de(e.body,t);return r.style.transform="scaleX(-1)",r}}),c({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler:({parser:e})=>({type:"internal",mode:e.mode})}),c({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler({parser:e},t,r){const n=r[0],s=Ie(t[0],"size"),o=Ie(t[1],"size");return{type:"rule",mode:e.mode,shift:n&&Ie(n,"size").value,width:s.value,height:o.value}},mathmlBuilder(e,t){const r=qe(e.width,t),n=qe(e.height,t),s=e.shift?qe(e.shift,t):{number:0,unit:"em"},o=t.color&&t.getColor()||"black",a=new T.MathNode("mspace");if(r.number>0&&n.number>0&&a.setAttribute("mathbackground",o),a.setAttribute("width",r.number+r.unit),a.setAttribute("height",n.number+n.unit),0===s.number)return a;const l=new T.MathNode("mpadded",[a]);return s.number>=0?l.setAttribute("height","+"+s.number+s.unit):(l.setAttribute("height",s.number+s.unit),l.setAttribute("depth","+"+-s.number+s.unit)),l.setAttribute("voffset",s.number+s.unit),l}});const dr={"\\tiny":.5,"\\sixptsize":.6,"\\Tiny":.6,"\\scriptsize":.7,"\\footnotesize":.8,"\\small":.9,"\\normalsize":1,"\\large":1.2,"\\Large":1.44,"\\LARGE":1.728,"\\huge":2.074,"\\Huge":2.488};c({type:"sizing",names:["\\tiny","\\sixptsize","\\Tiny","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],props:{numArgs:0,allowedInText:!0},handler:({breakOnTokenText:e,funcName:t,parser:r},n)=>{r.settings.strict&&"math"===r.mode&&console.log(`Temml strict-mode warning: Command ${t} is invalid in math mode.`);const s=r.parseExpression(!1,e,!0);return{type:"sizing",mode:r.mode,funcName:t,body:s}},mathmlBuilder:(e,t)=>{const r=t.withFontSize(dr[e.funcName]),n=ie(e.body,r),s=N(n),o=(dr[e.funcName]/t.fontSize).toFixed(4);return s.setAttribute("mathsize",o+"em"),s}}),c({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:({parser:e},t,r)=>{let n=!1,s=!1;const o=r[0]&&Ie(r[0],"ordgroup");if(o){let e="";for(let t=0;t{const r=new T.MathNode("mpadded",[de(e.body,t)]);return e.smashHeight&&r.setAttribute("height","0px"),e.smashDepth&&r.setAttribute("depth","0px"),r}}),c({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler({parser:e},t,r){const n=r[0],s=t[0];return{type:"sqrt",mode:e.mode,body:s,index:n}},mathmlBuilder(e,t){const{body:r,index:n}=e;return n?new T.MathNode("mroot",[de(r,t),de(n,t.incrementLevel())]):new T.MathNode("msqrt",[de(r,t)])}});const mr={display:0,text:1,script:2,scriptscript:3},pr={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]};c({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler({breakOnTokenText:e,funcName:t,parser:r},n){const s=r.parseExpression(!0,e,!0),o=t.slice(1,t.length-5);return{type:"styling",mode:r.mode,scriptLevel:o,body:s}},mathmlBuilder(e,t){const r=t.withLevel(mr[e.scriptLevel]),n=ie(e.body,r),s=N(n),o=pr[e.scriptLevel];return s.setAttribute("scriptlevel",o[0]),s.setAttribute("displaystyle",o[1]),s}});const ur=/^m(over|under|underover)$/;d({type:"supsub",mathmlBuilder(e,t){let r,n,s=!1,o=!1,a=!1,l=!1;e.base&&"horizBrace"===e.base.type&&(n=!!e.sup,n===e.base.isOver&&(s=!0,r=e.base.isOver)),!e.base||e.base.stack||"op"!==e.base.type&&"operatorname"!==e.base.type||(e.base.parentIsSupSub=!0,o=!e.base.symbol,a=o&&!e.isFollowedByDelimiter,l=e.base.needsLeadingSpace);const i=e.base&&e.base.stack?[de(e.base.body[0],t)]:[de(e.base,t)],c=t.inSubOrSup();if(e.sub){const r=de(e.sub,c);3===t.level&&r.setAttribute("scriptlevel","2"),i.push(r)}if(e.sup){const r=de(e.sup,c);3===t.level&&r.setAttribute("scriptlevel","2");const n="mrow"===r.type?r.children[0]:r;n&&"mo"===n.type&&n.classes.includes("tml-prime")&&e.base&&e.base.text&&"fF".indexOf(e.base.text)>-1&&n.classes.push("prime-pad"),i.push(r)}let d;if(s)d=r?"mover":"munder";else if(e.sub)if(e.sup){const r=e.base;d=r&&("op"===r.type&&r.limits||"multiscript"===r.type)&&(t.level===Ve||r.alwaysHandleSupSub)||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(t.level===Ve||r.limits)?"munderover":"msubsup"}else{const r=e.base;d=r&&"op"===r.type&&r.limits&&(t.level===Ve||r.alwaysHandleSupSub)||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(r.limits||t.level===Ve)?"munder":"msub"}else{const r=e.base;d=r&&"op"===r.type&&r.limits&&(t.level===Ve||r.alwaysHandleSupSub)||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(r.limits||t.level===Ve)?"mover":"msup"}let m=new T.MathNode(d,i);if(o){const e=new T.MathNode("mo",[te("⁡","text")]);if(l){const t=new T.MathNode("mspace");t.setAttribute("width","0.1667em"),m=T.newDocumentFragment([t,m,e])}else m=T.newDocumentFragment([m,e]);if(a){const e=new T.MathNode("mspace");e.setAttribute("width","0.1667em"),m.children.push(e)}}else ur.test(d)&&(m=new T.MathNode("mrow",[m]));return m}});const hr=["\\shortmid","\\nshortmid","\\shortparallel","\\nshortparallel","\\smallsetminus"],gr=["\\Rsh","\\Lsh","\\restriction"];d({type:"atom",mathmlBuilder(e,t){const r=new T.MathNode("mo",[te(e.text,e.mode)]);if("punct"===e.family)r.setAttribute("separator","true");else if("open"===e.family||"close"===e.family)"open"===e.family?(r.setAttribute("form","prefix"),r.setAttribute("stretchy","false")):"close"===e.family&&(r.setAttribute("form","postfix"),r.setAttribute("stretchy","false"));else if("\\mid"===e.text)r.setAttribute("lspace","0.22em"),r.setAttribute("rspace","0.22em"),r.setAttribute("stretchy","false");else if("rel"===e.family&&(e=>{if(1===e.length){const t=e.codePointAt(0);return 8591-1||e.indexOf("harpoon")>-1||gr.includes(e)})(e.text))r.setAttribute("stretchy","false");else if(hr.includes(e.text))r.setAttribute("mathsize","70%");else if(":"===e.text)r.attributes.lspace="0.2222em",r.attributes.rspace="0.2222em";else if(e.needsSpacing)return"bin"===e.family?new T.MathNode("mrow",[Oe(.222),r,Oe(.222)]):new T.MathNode("mrow",[Oe(.2778),r,Oe(.2778)]);return r}});const fr={mathbf:"bold",mathrm:"normal",textit:"italic",mathit:"italic",mathnormal:"italic",mathbb:"double-struck",mathcal:"script",mathfrak:"fraktur",mathscr:"script",mathsf:"sans-serif",mathtt:"monospace"},br=function(e,t){if("texttt"===t.fontFamily)return"monospace";if("textsc"===t.fontFamily)return"normal";if("textsf"===t.fontFamily)return"textit"===t.fontShape&&"textbf"===t.fontWeight?"sans-serif-bold-italic":"textit"===t.fontShape?"sans-serif-italic":"textbf"===t.fontWeight?"sans-serif-bold":"sans-serif";if("textit"===t.fontShape&&"textbf"===t.fontWeight)return"bold-italic";if("textit"===t.fontShape)return"italic";if("textbf"===t.fontWeight)return"bold";const r=t.font;if(!r||"mathnormal"===r)return null;const n=e.mode;switch(r){case"mathit":case"greekItalic":return"italic";case"mathrm":{const t=e.text.codePointAt(0);return 9390,bold:e=>119743,italic:e=>119795,"bold-italic":e=>119847,script:e=>yr[e]||119899,"script-bold":e=>119951,fraktur:e=>wr[e]||120003,"fraktur-bold":e=>120107,"double-struck":e=>xr[e]||120055,"sans-serif":e=>120159,"sans-serif-bold":e=>120211,"sans-serif-italic":e=>120263,"sans-serif-bold-italic":e=>120380,monospace:e=>120367},lowerCaseLatin:{normal:e=>0,bold:e=>119737,italic:e=>"h"===e?8358:119789,"bold-italic":e=>119841,script:e=>yr[e]||119893,"script-bold":e=>119945,fraktur:e=>119997,"fraktur-bold":e=>120101,"double-struck":e=>120049,"sans-serif":e=>120153,"sans-serif-bold":e=>120205,"sans-serif-italic":e=>120257,"sans-serif-bold-italic":e=>120309,monospace:e=>120361},upperCaseGreek:{normal:e=>0,bold:e=>119575,italic:e=>119633,"bold-italic":e=>119575,script:e=>0,"script-bold":e=>0,fraktur:e=>0,"fraktur-bold":e=>0,"double-struck":e=>0,"sans-serif":e=>119749,"sans-serif-bold":e=>119749,"sans-serif-italic":e=>0,"sans-serif-bold-italic":e=>119807,monospace:e=>0},lowerCaseGreek:{normal:e=>0,bold:e=>119569,italic:e=>119627,"bold-italic":e=>"ϕ"===e?119678:119685,script:e=>0,"script-bold":e=>0,fraktur:e=>0,"fraktur-bold":e=>0,"double-struck":e=>0,"sans-serif":e=>119743,"sans-serif-bold":e=>119743,"sans-serif-italic":e=>0,"sans-serif-bold-italic":e=>119801,monospace:e=>0},varGreek:{normal:e=>0,bold:e=>kr[e]||-51,italic:e=>0,"bold-italic":e=>vr[e]||58,script:e=>0,"script-bold":e=>0,fraktur:e=>0,"fraktur-bold":e=>0,"double-struck":e=>0,"sans-serif":e=>Ar[e]||116,"sans-serif-bold":e=>Ar[e]||116,"sans-serif-italic":e=>0,"sans-serif-bold-italic":e=>Nr[e]||174,monospace:e=>0},numeral:{normal:e=>0,bold:e=>120734,italic:e=>0,"bold-italic":e=>0,script:e=>0,"script-bold":e=>0,fraktur:e=>0,"fraktur-bold":e=>0,"double-struck":e=>120744,"sans-serif":e=>120754,"sans-serif-bold":e=>120764,"sans-serif-italic":e=>0,"sans-serif-bold-italic":e=>0,monospace:e=>120774}}),Sr=(e,t)=>{const r=e.codePointAt(0),n=64{const n=new T.MathNode(r,[e]),s=new T.MathNode("mstyle",[n]);return s.style["font-style"]="italic",s.style["font-family"]="Cambria, 'Times New Roman', serif","bold-italic"===t&&(s.style["font-weight"]="bold"),s})(s,o,t);"normal"!==o&&(s.text=s.text.split("").map((e=>Sr(e,o))).join("")),a=new T.MathNode(t,[s])}else if("text"===e.mode)"normal"!==o&&(s.text=Sr(s.text,o)),a=new T.MathNode("mtext",[s]);else if(Br.has(e.text))a=new T.MathNode("mo",[s]),a.classes.push("tml-prime");else{const e=s.text;"italic"!==o&&(s.text=Sr(s.text,o)),a=new T.MathNode("mi",[s]),s.text===e&&Mr.test(e)&&a.setAttribute("mathvariant","italic")}return a}});const Cr={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},zr={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};d({type:"spacing",mathmlBuilder(t,r){let n;if(Object.prototype.hasOwnProperty.call(zr,t.text))n=new T.MathNode("mtext",[new T.TextNode(" ")]);else{if(!Object.prototype.hasOwnProperty.call(Cr,t.text))throw new e(`Unknown type of space "${t.text}"`);n=new T.MathNode("mo"),"\\nobreak"===t.text&&n.setAttribute("linebreak","nobreak")}return n}}),d({type:"tag"});const Er={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm","\\textsc":"textsc"},$r={"\\textbf":"textbf","\\textmd":"textmd"},Ir={"\\textit":"textit","\\textup":"textup"};c({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textsc","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler({parser:e,funcName:t},r){const n=r[0];return{type:"text",mode:e.mode,body:p(n),font:t}},mathmlBuilder(e,t){const r=((e,t)=>{const r=e.font;return r?Er[r]?t.withTextFontFamily(Er[r]):$r[r]?t.withTextFontWeight($r[r]):"\\emph"===r?"textit"===t.fontShape?t.withTextFontShape("textup"):t.withTextFontShape("textit"):t.withTextFontShape(Ir[r]):t})(e,t),n=ce(e.body,r);return ne(n)}}),c({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler:({parser:e},t)=>({type:"vcenter",mode:e.mode,body:t[0]}),mathmlBuilder(e,t){const r=new T.MathNode("mtd",[de(e.body,t)]);r.style.padding="0";const n=new T.MathNode("mtr",[r]);return new T.MathNode("mtable",[n])}}),c({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(t,r,n){throw new e("\\verb ended by end of line instead of matching delimiter")},mathmlBuilder(e,t){const r=new T.TextNode(Lr(e)),n=new T.MathNode("mtext",[r]);return n.setAttribute("mathvariant","monospace"),n}});const Lr=e=>e.body.replace(/ /g,e.star?"␣":" "),Fr=l,Dr="[ \r\n\t]",Gr=`(\\\\[a-zA-Z@]+)${Dr}*`,jr="[̀-ͯ]",Pr=new RegExp(`${jr}+$`),Rr=`(${Dr}+)|\\\\(\n|[ \r\t]+\n?)[ \r\t]*|([!-\\[\\]-‧‪-퟿豈-ï¿¿]${jr}*|[\ud800-\udbff][\udc00-\udfff]${jr}*|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5|${Gr}|\\\\[^\ud800-\udfff])`;class Ur{constructor(e,t){this.input=e,this.settings=t,this.tokenRegex=new RegExp(Rr,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,t){this.catcodes[e]=t}lex(){const t=this.input,r=this.tokenRegex.lastIndex;if(r===t.length)return new He("EOF",new Ue(this,r,r));const n=this.tokenRegex.exec(t);if(null===n||n.index!==r)throw new e(`Unexpected character: '${t[r]}'`,new He(t[r],new Ue(this,r,r+1)));const s=n[6]||n[3]||(n[2]?"\\ ":" ");if(14===this.catcodes[s]){const r=t.indexOf("\n",this.tokenRegex.lastIndex);if(-1===r){if(this.tokenRegex.lastIndex=t.length,this.settings.strict)throw new e("% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode")}else this.tokenRegex.lastIndex=r+1;return this.lex()}return new He(s,new Ue(this,r,this.tokenRegex.lastIndex))}}class Hr{constructor(e={},t={}){this.current=t,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(0===this.undefStack.length)throw new e("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");const t=this.undefStack.pop();for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(void 0===t[e]?delete this.current[e]:this.current[e]=t[e])}has(e){return Object.prototype.hasOwnProperty.call(this.current,e)||Object.prototype.hasOwnProperty.call(this.builtins,e)}get(e){return Object.prototype.hasOwnProperty.call(this.current,e)?this.current[e]:this.builtins[e]}set(e,t,r=!1){if(r){for(let t=0;t0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{const t=this.undefStack[this.undefStack.length-1];t&&!Object.prototype.hasOwnProperty.call(t,e)&&(t[e]=this.current[e])}this.current[e]=t}}const Vr={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class _r{constructor(e,t,r){this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new Hr(Je,t.macros),this.mode=r,this.stack=[]}feed(e){this.lexer=new Ur(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}future(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){let t,r,n;if(e){if(this.consumeSpaces(),"["!==this.future().text)return null;t=this.popToken(),({tokens:n,end:r}=this.consumeArg(["]"]))}else({tokens:n,start:t,end:r}=this.consumeArg());return this.pushToken(new He("EOF",r.loc)),this.pushTokens(n),t.range(r,"")}consumeSpaces(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}}consumeArg(t){const r=[],n=t&&t.length>0;n||this.consumeSpaces();const s=this.future();let o,a=0,l=0;do{if(o=this.popToken(),r.push(o),"{"===o.text)++a;else if("}"===o.text){if(--a,-1===a)throw new e("Extra }",o)}else if("EOF"===o.text)throw new e("Unexpected end of input in a macro argument, expected '"+(t&&n?t[l]:"}")+"'",o);if(t&&n)if((0===a||1===a&&"{"===t[l])&&o.text===t[l]){if(++l,l===t.length){r.splice(-l,l);break}}else l=0}while(0!==a||n);return"{"===s.text&&"}"===r[r.length-1].text&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:s,end:o}}consumeArgs(t,r){if(r){if(r.length!==t+1)throw new e("The length of delimiters doesn't match the number of args!");const n=r[0];for(let t=0;tthis.settings.maxExpand)throw new e("Too many expansions: infinite loop or need to increase maxExpand setting");let o=s.tokens;const a=this.consumeArgs(s.numArgs,s.delimiters);if(s.numArgs){o=o.slice();for(let t=o.length-1;t>=0;--t){let r=o[t];if("#"===r.text){if(0===t)throw new e("Incomplete placeholder at end of macro body",r);if(r=o[--t],"#"===r.text)o.splice(t+1,1);else{if(!/^[1-9]$/.test(r.text))throw new e("Not a valid argument number",r);o.splice(t,2,...a[+r.text-1])}}}}return this.pushTokens(o),o.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(!1===this.expandOnce()){const e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new He(e)]):void 0}expandTokens(e){const t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;)if(!1===this.expandOnce(!0)){const e=this.stack.pop();e.treatAsRelax&&(e.noexpand=!1,e.treatAsRelax=!1),t.push(e)}return t}expandMacroAsText(e){const t=this.expandMacro(e);return t?t.map((e=>e.text)).join(""):t}_getExpansion(e){const t=this.macros.get(e);if(null==t)return t;if(1===e.length){const t=this.lexer.catcodes[e];if(null!=t&&13!==t)return}const r="function"==typeof t?t(this):t;if("string"==typeof r){let e=0;if(-1!==r.indexOf("#")){const t=r.replace(/##/g,"");for(;-1!==t.indexOf("#"+(e+1));)++e}const t=new Ur(r,this.settings),n=[];let s=t.lex();for(;"EOF"!==s.text;)n.push(s),s=t.lex();n.reverse();return{tokens:n,numArgs:e}}return r}isDefined(e){return this.macros.has(e)||Object.prototype.hasOwnProperty.call(Fr,e)||Object.prototype.hasOwnProperty.call($.math,e)||Object.prototype.hasOwnProperty.call($.text,e)||Object.prototype.hasOwnProperty.call(Vr,e)}isExpandable(e){const t=this.macros.get(e);return null!=t?"string"==typeof t||"function"==typeof t||!t.unexpandable:Object.prototype.hasOwnProperty.call(Fr,e)&&!Fr[e].primitive}}const Wr=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,Xr=Object.freeze({"₊":"+","₋":"-","₌":"=","₍":"(","₎":")","₀":"0","₁":"1","₂":"2","₃":"3","₄":"4","₅":"5","₆":"6","₇":"7","₈":"8","₉":"9","ₐ":"a","ₑ":"e","ₕ":"h","áµ¢":"i","â±¼":"j","ₖ":"k","ₗ":"l","ₘ":"m","ₙ":"n","ₒ":"o","ₚ":"p","áµ£":"r","ₛ":"s","ₜ":"t","ᵤ":"u","áµ¥":"v","ₓ":"x","ᵦ":"β","áµ§":"γ","ᵨ":"ρ","ᵩ":"ϕ","ᵪ":"χ","⁺":"+","⁻":"-","⁼":"=","⁽":"(","⁾":")","⁰":"0","¹":"1","²":"2","³":"3","⁴":"4","⁵":"5","⁶":"6","⁷":"7","⁸":"8","⁹":"9","á´¬":"A","á´®":"B","á´°":"D","á´±":"E","á´³":"G","á´´":"H","á´µ":"I","á´¶":"J","á´·":"K","á´¸":"L","á´¹":"M","á´º":"N","á´¼":"O","á´¾":"P","á´¿":"R","ᵀ":"T","ᵁ":"U","â±½":"V","ᵂ":"W","ᵃ":"a","ᵇ":"b","ᶜ":"c","ᵈ":"d","ᵉ":"e","á¶ ":"f","ᵍ":"g","ʰ":"h","ⁱ":"i","ʲ":"j","ᵏ":"k","Ë¡":"l","ᵐ":"m","ⁿ":"n","ᵒ":"o","ᵖ":"p","ʳ":"r","Ë¢":"s","ᵗ":"t","ᵘ":"u","ᵛ":"v","Ê·":"w","Ë£":"x","ʸ":"y","á¶»":"z","ᵝ":"β","ᵞ":"γ","ᵟ":"δ","áµ ":"ϕ","ᵡ":"χ","á¶¿":"θ"}),Zr=Object.freeze({"𝒜":"A","ℬ":"B","𝒞":"C","𝒟":"D","ℰ":"E","ℱ":"F","𝒢":"G","ℋ":"H","ℐ":"I","𝒥":"J","𝒦":"K","ℒ":"L","ℳ":"M","𝒩":"N","𝒪":"O","𝒫":"P","𝒬":"Q","ℛ":"R","𝒮":"S","𝒯":"T","𝒰":"U","𝒱":"V","𝒲":"W","𝒳":"X","𝒴":"Y","𝒵":"Z"});var Yr={"́":{text:"\\'",math:"\\acute"},"̀":{text:"\\`",math:"\\grave"},"̈":{text:'\\"',math:"\\ddot"},"̃":{text:"\\~",math:"\\tilde"},"̄":{text:"\\=",math:"\\bar"},"̆":{text:"\\u",math:"\\breve"},"̌":{text:"\\v",math:"\\check"},"̂":{text:"\\^",math:"\\hat"},"̇":{text:"\\.",math:"\\dot"},"̊":{text:"\\r",math:"\\mathring"},"̋":{text:"\\H"},"̧":{text:"\\c"}},Jr={"á":"á","à":"à","ä":"ä","ǟ":"ǟ","ã":"ã","ā":"ā","ă":"ă","ắ":"ắ","ằ":"ằ","ẵ":"ẵ","ǎ":"ǎ","â":"â","ấ":"ấ","ầ":"ầ","ẫ":"ẫ","ȧ":"ȧ","Ç¡":"ǡ","Ã¥":"å","Ç»":"ǻ","ḃ":"ḃ","ć":"ć","č":"č","ĉ":"ĉ","ċ":"ċ","ď":"ď","ḋ":"ḋ","é":"é","è":"è","ë":"ë","ẽ":"ẽ","ē":"ē","ḗ":"ḗ","ḕ":"ḕ","ĕ":"ĕ","ě":"ě","ê":"ê","ế":"ế","ề":"ề","ễ":"ễ","ė":"ė","ḟ":"ḟ","ǵ":"ǵ","ḡ":"ḡ","ğ":"ğ","ǧ":"ǧ","ĝ":"ĝ","Ä¡":"ġ","ḧ":"ḧ","ȟ":"ȟ","Ä¥":"ĥ","ḣ":"ḣ","í":"í","ì":"ì","ï":"ï","ḯ":"ḯ","Ä©":"ĩ","Ä«":"ī","Ä­":"ĭ","ǐ":"ǐ","î":"î","ǰ":"ǰ","ĵ":"ĵ","ḱ":"ḱ","Ç©":"ǩ","ĺ":"ĺ","ľ":"ľ","ḿ":"ḿ","ṁ":"ṁ","ń":"ń","ǹ":"ǹ","ñ":"ñ","ň":"ň","ṅ":"ṅ","ó":"ó","ò":"ò","ö":"ö","È«":"ȫ","õ":"õ","ṍ":"ṍ","ṏ":"ṏ","È­":"ȭ","ō":"ō","ṓ":"ṓ","ṑ":"ṑ","ŏ":"ŏ","ǒ":"ǒ","ô":"ô","ố":"ố","ồ":"ồ","ỗ":"ỗ","ȯ":"ȯ","ȱ":"ȱ","ő":"ő","ṕ":"ṕ","ṗ":"ṗ","ŕ":"ŕ","ř":"ř","ṙ":"ṙ","ś":"ś","á¹¥":"ṥ","Å¡":"š","á¹§":"ṧ","ŝ":"ŝ","ṡ":"ṡ","ẗ":"ẗ","Å¥":"ť","ṫ":"ṫ","ú":"ú","ù":"ù","ü":"ü","ǘ":"ǘ","ǜ":"ǜ","ǖ":"ǖ","ǚ":"ǚ","Å©":"ũ","á¹¹":"ṹ","Å«":"ū","á¹»":"ṻ","Å­":"ŭ","ǔ":"ǔ","û":"û","ů":"ů","ű":"ű","á¹½":"ṽ","ẃ":"ẃ","ẁ":"ẁ","ẅ":"ẅ","ŵ":"ŵ","ẇ":"ẇ","ẘ":"ẘ","ẍ":"ẍ","ẋ":"ẋ","ý":"ý","ỳ":"ỳ","ÿ":"ÿ","ỹ":"ỹ","ȳ":"ȳ","Å·":"ŷ","ẏ":"ẏ","ẙ":"ẙ","ź":"ź","ž":"ž","ẑ":"ẑ","ż":"ż","Á":"Á","À":"À","Ä":"Ä","Ǟ":"Ǟ","Ã":"Ã","Ā":"Ā","Ă":"Ă","Ắ":"Ắ","Ằ":"Ằ","Ẵ":"Ẵ","Ǎ":"Ǎ","Â":"Â","Ấ":"Ấ","Ầ":"Ầ","Ẫ":"Ẫ","Ȧ":"Ȧ","Ç ":"Ǡ","Å":"Å","Ǻ":"Ǻ","Ḃ":"Ḃ","Ć":"Ć","Č":"Č","Ĉ":"Ĉ","Ċ":"Ċ","Ď":"Ď","Ḋ":"Ḋ","É":"É","È":"È","Ë":"Ë","Ẽ":"Ẽ","Ē":"Ē","Ḗ":"Ḗ","Ḕ":"Ḕ","Ĕ":"Ĕ","Ě":"Ě","Ê":"Ê","Ế":"Ế","Ề":"Ề","Ễ":"Ễ","Ė":"Ė","Ḟ":"Ḟ","Ç´":"Ǵ","Ḡ":"Ḡ","Ğ":"Ğ","Ǧ":"Ǧ","Ĝ":"Ĝ","Ä ":"Ġ","Ḧ":"Ḧ","Ȟ":"Ȟ","Ĥ":"Ĥ","Ḣ":"Ḣ","Í":"Í","Ì":"Ì","Ï":"Ï","Ḯ":"Ḯ","Ĩ":"Ĩ","Ī":"Ī","Ĭ":"Ĭ","Ǐ":"Ǐ","Î":"Î","İ":"İ","Ä´":"Ĵ","Ḱ":"Ḱ","Ǩ":"Ǩ","Ĺ":"Ĺ","Ľ":"Ľ","Ḿ":"Ḿ","Ṁ":"Ṁ","Ń":"Ń","Ǹ":"Ǹ","Ñ":"Ñ","Ň":"Ň","Ṅ":"Ṅ","Ó":"Ó","Ò":"Ò","Ö":"Ö","Ȫ":"Ȫ","Õ":"Õ","Ṍ":"Ṍ","Ṏ":"Ṏ","Ȭ":"Ȭ","Ō":"Ō","Ṓ":"Ṓ","Ṑ":"Ṑ","Ŏ":"Ŏ","Ǒ":"Ǒ","Ô":"Ô","Ố":"Ố","Ồ":"Ồ","Ỗ":"Ỗ","È®":"Ȯ","Ȱ":"Ȱ","Ő":"Ő","Ṕ":"Ṕ","Ṗ":"Ṗ","Ŕ":"Ŕ","Ř":"Ř","Ṙ":"Ṙ","Ś":"Ś","Ṥ":"Ṥ","Å ":"Š","Ṧ":"Ṧ","Ŝ":"Ŝ","á¹ ":"Ṡ","Ť":"Ť","Ṫ":"Ṫ","Ú":"Ú","Ù":"Ù","Ü":"Ü","Ǘ":"Ǘ","Ǜ":"Ǜ","Ǖ":"Ǖ","Ǚ":"Ǚ","Ũ":"Ũ","Ṹ":"Ṹ","Ū":"Ū","Ṻ":"Ṻ","Ŭ":"Ŭ","Ǔ":"Ǔ","Û":"Û","Å®":"Ů","Ű":"Ű","á¹¼":"Ṽ","Ẃ":"Ẃ","Ẁ":"Ẁ","Ẅ":"Ẅ","Å´":"Ŵ","Ẇ":"Ẇ","Ẍ":"Ẍ","Ẋ":"Ẋ","Ý":"Ý","Ỳ":"Ỳ","Ÿ":"Ÿ","Ỹ":"Ỹ","Ȳ":"Ȳ","Ŷ":"Ŷ","Ẏ":"Ẏ","Ź":"Ź","Ž":"Ž","Ẑ":"Ẑ","Å»":"Ż","ά":"ά","á½°":"ὰ","á¾±":"ᾱ","á¾°":"ᾰ","έ":"έ","á½²":"ὲ","ή":"ή","á½´":"ὴ","ί":"ί","á½¶":"ὶ","ϊ":"ϊ","ΐ":"ΐ","ῒ":"ῒ","ῑ":"ῑ","ῐ":"ῐ","ό":"ό","ὸ":"ὸ","ύ":"ύ","ὺ":"ὺ","ϋ":"ϋ","ΰ":"ΰ","á¿¢":"ῢ","á¿¡":"ῡ","á¿ ":"ῠ","ώ":"ώ","á½¼":"ὼ","Ύ":"Ύ","Ὺ":"Ὺ","Ϋ":"Ϋ","á¿©":"Ῡ","Ῠ":"Ῠ","Ώ":"Ώ","Ὼ":"Ὼ"};const Kr=["bin","op","open","punct","rel"],Qr=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/,en=/^ *\\text/;class tn{constructor(e,t,r=!1){this.mode="math",this.gullet=new _r(e,t,this.mode),this.settings=t,this.isPreamble=r,this.leftrightDepth=0,this.prevAtomType=""}expect(t,r=!0){if(this.fetch().text!==t)throw new e(`Expected '${t}', got '${this.fetch().text}'`,this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");const e=this.parseExpression(!1);if(this.expect("EOF"),this.isPreamble){const e=Object.create(null);return Object.entries(this.gullet.macros.current).forEach((([t,r])=>{e[t]=r})),this.gullet.endGroup(),e}const t=this.gullet.macros.get("\\df@tag");return this.gullet.endGroup(),t&&(this.gullet.macros.current["\\df@tag"]=t),e}static get endOfExpression(){return["}","\\endgroup","\\end","\\right","\\endtoggle","&"]}subparse(e){const t=this.nextToken;this.consume(),this.gullet.pushToken(new He("}")),this.gullet.pushTokens(e);const r=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,r}parseExpression(e,t,r){const n=[];for(this.prevAtomType="";;){"math"===this.mode&&this.consumeSpaces();const s=this.fetch();if(-1!==tn.endOfExpression.indexOf(s.text))break;if(t&&s.text===t)break;if(r&&"\\middle"===s.text)break;if(e&&Fr[s.text]&&Fr[s.text].infix)break;const o=this.parseAtom(t);if(!o)break;"internal"!==o.type&&(n.push(o),this.prevAtomType="atom"===o.type?o.family:o.type)}return"text"===this.mode&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(t){let r,n=-1;for(let s=0;s=128||Pr.exec(r)))return null;if(this.settings.strict&&"math"===this.mode)throw new e(`Unicode text character "${r[0]}" used in math mode`,t);s={type:"textord",mode:"text",loc:Ue.range(t),text:r}}if(this.consume(),n)for(let r=0;r0&&s[0].type&&"array"===s[0].type&&s[0].addEqnNum)&&n.gullet.macros.get("\\df@tag")){if(!r.displayMode)throw new e("\\tag works only in display mode");n.gullet.feed("\\df@tag"),s=[{type:"tag",mode:"text",body:s,tag:n.parse()}]}return s},nn=[2,2,3,3];class sn{constructor(e){this.level=e.level,this.color=e.color,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontSize=e.fontSize||1,this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.maxSize=e.maxSize}extend(e){const t={level:this.level,color:this.color,font:this.font,fontFamily:this.fontFamily,fontSize:this.fontSize,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize};for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return new sn(t)}withLevel(e){return this.extend({level:e})}incrementLevel(){return this.extend({level:Math.min(this.level+1,3)})}inSubOrSup(){return this.extend({level:nn[this.level]})}withColor(e){return this.extend({color:e})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withFontSize(e){return this.extend({fontSize:e})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}getColor(){return this.color}}function on(e){const t={};let r=0;const n=document.getElementsByClassName("tml-eqn");for(let e of n)for(r+=1,e.setAttribute("id","tml-eqn-"+String(r));"mtable"!==e.tagName;){if(e.getElementsByClassName("tml-label").length>0){const n=e.attributes.id.value;t[n]=String(r);break}e=e.parentElement}const s=document.getElementsByClassName("tml-tageqn");for(const e of s){if(e.getElementsByClassName("tml-label").length>0){const r=e.getElementsByClassName("tml-tag");if(r.length>0){const n=e.attributes.id.value;t[n]=r[0].textContent}}}[...e.getElementsByClassName("tml-ref")].forEach((e=>{const r=e.getAttribute("href");let n=t[r.slice(1)];-1===e.className.indexOf("tml-eqref")?(n=n.replace(/^\(/,""),n=n.replace(/\)$/,"")):("("!==n.charAt(0)&&(n="("+n),")"!==n.slice(-1)&&(n+=")"));const s=document.createElementNS("http://www.w3.org/1998/Math/MathML","mtext");s.appendChild(document.createTextNode(n));const o=document.createElementNS("http://www.w3.org/1998/Math/MathML","math");o.appendChild(s),e.textContent="",e.appendChild(o)}))}const an=function(e,t,r){let n=r,s=0;const o=e.length;for(;ne.left.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"))).join("|")+")");for(;r=e.search(s),-1!==r;){r>0&&(n.push({type:"text",data:e.slice(0,r)}),e=e.slice(r));const s=t.findIndex((t=>e.startsWith(t.left)));if(r=an(t[s].right,e,t[s].left.length),-1===r)break;const o=e.slice(0,r+t[s].right.length),a=ln.test(o)?o:e.slice(t[s].left.length,r);n.push({type:"math",data:a,rawData:o,display:t[s].display}),e=e.slice(r+t[s].right.length)}return""!==e&&n.push({type:"text",data:e}),n}(t,r.delimiters);if(1===n.length&&"text"===n[0].type)return null;const s=document.createDocumentFragment();for(let t=0;t-1===e.indexOf(" "+t+" ")))&&un(n,t)}}};let hn=function(e,t,r={}){t.textContent="";const n="math"===t.tagName.toLowerCase();n&&(r.wrap="none");const s=gn(e,r);n||s.children.length>1?(t.textContent="",s.children.forEach((e=>{t.appendChild(e.toNode())}))):t.appendChild(s.toNode())};"undefined"!=typeof document&&"CSS1Compat"!==document.compatMode&&("undefined"!=typeof console&&console.warn("Warning: Temml doesn't work in quirks mode. Make sure your website has a suitable doctype."),hn=function(){throw new e("Temml doesn't work in quirks mode.")});const gn=function(t,r){const n=new a(r);try{const e=rn(t,n);return he(e,t,new sn({level:n.displayMode?Ve:_e,maxSize:n.maxSize}),n)}catch(r){return function(t,r,n){if(n.throwOnError||!(t instanceof e))throw t;const s=new y(["temml-error"],[new w(r+"\n\n"+t.toString())]);return s.style.color=n.errorColor,s.style.whiteSpace="pre-line",s}(r,t,n)}};return{version:"0.11.04",render:hn,renderToString:function(e,t){return gn(e,t).toMarkup()},renderMathInElement:function(e,t){if(!e)throw new Error("No element provided to render");const r={};for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(r[e]=t[e]);r.fences?r.delimiters=(e=>{if("$"===e||"("===e)return dn[e];if("$+"===e||"(+"===e)return dn[e.slice(0,1)].concat(mn);return"ams"===e?mn:"all"===e?dn["("].concat(dn.$).concat(mn):cn})(r.fences):r.delimiters=r.delimiters||cn,r.ignoredTags=r.ignoredTags||["script","noscript","style","textarea","pre","code","option"],r.ignoredClasses=r.ignoredClasses||[],r.errorCallback=r.errorCallback||console.error,r.macros=r.macros||{},un(e,r),on(e)},postProcess:on,ParseError:e,definePreamble:function(e,t){const r=new a(t);if(r.macros={},!("string"==typeof e||e instanceof String))throw new TypeError("Temml can only parse string typed expression");const n=new tn(e,r,!0);delete n.gullet.macros.current["\\df@tag"];return n.parse()},__parse:function(e,t){const r=new a(t);return rn(e,r)},__renderToMathMLTree:gn,__defineSymbol:I,__defineMacro:Ye}}(); \ No newline at end of file diff --git a/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/.gitattributes b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/.gitignore b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/.gitignore new file mode 100644 index 0000000..755aa68 --- /dev/null +++ b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/.gitignore @@ -0,0 +1,6 @@ +.zig-cache +zig-out +.zigmod +deps.zig +files.zig +zigmod.lock diff --git a/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/LICENSE b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/LICENSE new file mode 100644 index 0000000..f1db97e --- /dev/null +++ b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/LICENSE @@ -0,0 +1,20 @@ +MIT License + +Copyright (c) 2021 Meghan Denny + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/README.md b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/README.md new file mode 100644 index 0000000..1772b1e --- /dev/null +++ b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/README.md @@ -0,0 +1,17 @@ +# zig-time + +![loc](https://sloc.xyz/github/nektro/zig-time) +[![license](https://img.shields.io/github/license/nektro/zig-time.svg)](https://github.com/nektro/zig-time/blob/master/LICENSE) +[![nektro @ github sponsors](https://img.shields.io/badge/sponsors-nektro-purple?logo=github)](https://github.com/sponsors/nektro) +[![Zig](https://img.shields.io/badge/Zig-0.14-f7a41d)](https://ziglang.org/) +[![Zigmod](https://img.shields.io/badge/Zigmod-latest-f7a41d)](https://github.com/nektro/zigmod) + +Exposes a `DateTime` structure that can be initialized and acted upon using various methods. All public methods return a new structure. + +Currently handles dates and times based on the [Proleptic Gregorian calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar) in adherence to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601). + +Does not currently support time zones outside of UTC. + +Does not handle leap seconds. + +See the `FormatSeq` structure for display information on what to pass as a `fmt` string. diff --git a/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/build.zig b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/build.zig new file mode 100644 index 0000000..59036c2 --- /dev/null +++ b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/build.zig @@ -0,0 +1,24 @@ +const std = @import("std"); +const deps = @import("./deps.zig"); + +pub fn build(b: *std.Build) void { + const target = b.standardTargetOptions(.{}); + const mode = b.option(std.builtin.Mode, "mode", "") orelse .Debug; + const disable_llvm = b.option(bool, "disable_llvm", "use the non-llvm zig codegen") orelse false; + + const t = b.addTest(.{ + .root_source_file = b.path("test.zig"), + .target = target, + .optimize = mode, + }); + deps.addAllTo(t); + t.use_llvm = !disable_llvm; + t.use_lld = !disable_llvm; + + const run_t = b.addRunArtifact(t); + run_t.setCwd(b.path(".")); + run_t.has_side_effects = true; + + const t_step = b.step("test", "Run all library tests"); + t_step.dependOn(&run_t.step); +} diff --git a/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/licenses.txt b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/licenses.txt new file mode 100644 index 0000000..e2f2f1f --- /dev/null +++ b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/licenses.txt @@ -0,0 +1,9 @@ +MIT: += https://spdx.org/licenses/MIT +- This +- git https://github.com/nektro/zig-expect +- git https://github.com/nektro/zig-extras +- git https://github.com/nektro/zig-sys-linux + +Unspecified: +- system_lib c diff --git a/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/test.zig b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/test.zig new file mode 100644 index 0000000..8d89c07 --- /dev/null +++ b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/test.zig @@ -0,0 +1,161 @@ +const std = @import("std"); +const string = []const u8; +const time = @import("time"); +const expect = @import("expect").expect; + +pub fn main() !void { + std.log.info("All your codebase are belong to us.", .{}); +} + +fn harness(comptime seed: u64, comptime expects: []const [2]string) void { + for (0..expects.len) |i| { + _ = Case(seed, expects[i][0], expects[i][1]); + } +} + +fn Case(comptime seed: u64, comptime fmt: string, comptime expected: string) type { + return struct { + test { + const alloc = std.testing.allocator; + const instant = time.DateTime.initUnixMs(seed); + const actual = try instant.formatAlloc(alloc, fmt); + defer alloc.free(actual); + std.testing.expectEqualStrings(expected, actual) catch return error.SkipZigTest; + } + }; +} + +fn expectFmt(instant: time.DateTime, comptime fmt: string, comptime expected: string) !void { + const alloc = std.testing.allocator; + const actual = try instant.formatAlloc(alloc, fmt); + defer alloc.free(actual); + std.testing.expectEqualStrings(expected, actual) catch return error.SkipZigTest; +} + +comptime { + harness(0, &.{.{ "YYYY-MM-DD HH:mm:ss", "1970-01-01 00:00:00" }}); + harness(1257894000000, &.{.{ "YYYY-MM-DD HH:mm:ss", "2009-11-10 23:00:00" }}); + harness(1634858430000, &.{.{ "YYYY-MM-DD HH:mm:ss", "2021-10-21 23:20:30" }}); + harness(1634858430023, &.{.{ "YYYY-MM-DD HH:mm:ss.SSS", "2021-10-21 23:20:30.023" }}); + harness(1144509852789, &.{.{ "YYYY-MM-DD HH:mm:ss.SSS", "2006-04-08 15:24:12.789" }}); + + harness(1635033600000, &.{ + .{ "H", "0" }, .{ "HH", "00" }, + .{ "h", "12" }, .{ "hh", "12" }, + .{ "k", "24" }, .{ "kk", "24" }, + }); + + harness(1635037200000, &.{ + .{ "H", "1" }, .{ "HH", "01" }, + .{ "h", "1" }, .{ "hh", "01" }, + .{ "k", "1" }, .{ "kk", "01" }, + }); + + harness(1635076800000, &.{ + .{ "H", "12" }, .{ "HH", "12" }, + .{ "h", "12" }, .{ "hh", "12" }, + .{ "k", "12" }, .{ "kk", "12" }, + }); + harness(1635080400000, &.{ + .{ "H", "13" }, .{ "HH", "13" }, + .{ "h", "1" }, .{ "hh", "01" }, + .{ "k", "13" }, .{ "kk", "13" }, + }); + + harness(1144509852789, &.{ + .{ "M", "4" }, + .{ "Mo", "4th" }, + .{ "MM", "04" }, + .{ "MMM", "Apr" }, + .{ "MMMM", "April" }, + + .{ "Q", "2" }, + .{ "Qo", "2nd" }, + + .{ "D", "8" }, + .{ "Do", "8th" }, + .{ "DD", "08" }, + + .{ "DDD", "98" }, + .{ "DDDo", "98th" }, + .{ "DDDD", "098" }, + + .{ "d", "6" }, + .{ "do", "6th" }, + .{ "dd", "Sa" }, + .{ "ddd", "Sat" }, + .{ "dddd", "Saturday" }, + .{ "e", "6" }, + .{ "E", "7" }, + + .{ "w", "14" }, + .{ "wo", "14th" }, + .{ "ww", "14" }, + + .{ "Y", "12006" }, + .{ "YY", "06" }, + .{ "YYY", "2006" }, + .{ "YYYY", "2006" }, + + .{ "N", "AD" }, + .{ "NN", "Anno Domini" }, + + .{ "A", "PM" }, + .{ "a", "pm" }, + + .{ "H", "15" }, + .{ "HH", "15" }, + .{ "h", "3" }, + .{ "hh", "03" }, + .{ "k", "15" }, + .{ "kk", "15" }, + + .{ "m", "24" }, + .{ "mm", "24" }, + + .{ "s", "12" }, + .{ "ss", "12" }, + + .{ "S", "7" }, + .{ "SS", "78" }, + .{ "SSS", "789" }, + + .{ "z", "UTC" }, + .{ "Z", "+00:00" }, + .{ "ZZ", "+0000" }, + + .{ "x", "1144509852789" }, + .{ "X", "1144509852" }, + + .{ time.format.LT, "3:24 PM" }, + + .{ time.format.LTS, "3:24:12 PM" }, + + .{ time.format.L, "04/08/2006" }, + + .{ time.format.l, "4/8/2006" }, + + .{ time.format.LL, "April 8, 2006" }, + + .{ time.format.ll, "Apr 8, 2006" }, + + .{ time.format.LLL, "April 8, 2006 3:24 PM" }, + + .{ time.format.lll, "Apr 8, 2006 3:24 PM" }, + + .{ time.format.LLLL, "Saturday, April 8, 2006 3:24 PM" }, + + .{ time.format.llll, "Sat, Apr 8, 2006 3:24 PM" }, + }); + + // https://github.com/nektro/zig-time/issues/3 + harness(1144509852789, &.{.{ "YYYYMM", "200604" }}); +} + +// https://github.com/nektro/zig-time/issues/9 +test { + var t = time.DateTime.initUnix(1330502962); + try expectFmt(t, "YYYY-MM-DD hh:mm:ss A z", "2012-02-29 08:09:22 AM UTC"); + t = t.addYears(1); + try expectFmt(t, "YYYY-MM-DD hh:mm:ss A z", "2013-03-01 08:09:22 AM UTC"); +} diff --git a/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/time.zig b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/time.zig new file mode 100644 index 0000000..20a95f3 --- /dev/null +++ b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/time.zig @@ -0,0 +1,583 @@ +const std = @import("std"); +const builtin = @import("builtin"); +const string = []const u8; +const extras = @import("extras"); +const sys_linux = @import("sys-linux"); +const time = @This(); + +const sys = switch (builtin.target.os.tag) { + .linux => sys_linux, + else => unreachable, // TODO: +}; + +pub const DateTime = struct { + ms: u16, + seconds: u8, + minutes: u8, + hours: u8, + days: u8, + months: u8, + years: u16, + timezone: TimeZone, + + pub fn initUnixMs(unix: u64) DateTime { + return epoch_unix.addMs(unix); + } + + pub fn initUnix(unix: u64) DateTime { + return epoch_unix.addSecs(unix); + } + + /// Caller asserts that this is > epoch + pub fn init(year: u16, month: u16, day: u16, hr: u16, min: u16, sec: u16, ms: u16) DateTime { + return epoch_unix + .addYears(year - epoch_unix.years) + .addMonths(month) + .addDays(day) + .addHours(hr) + .addMins(min) + .addSecs(sec) + .addMs(ms); + } + + pub fn now() DateTime { + return initUnixMs(@intCast(milliTimestamp())); + } + + pub const epoch_unix = DateTime{ + .ms = 0, + .seconds = 0, + .minutes = 0, + .hours = 0, + .days = 0, + .months = 0, + .years = 1970, + .timezone = .UTC, + }; + + pub fn toISOString(self: DateTime) [20]u8 { + // "2021-10-21T23:20:30Z" + var result: [20]u8 = @splat(0); + var fbs = std.io.fixedBufferStream(&result); + self.format("YYYY-MM-DD HH:mm:ss", .{}, fbs.writer()) catch unreachable; + result[10] = 'T'; + result[19] = 'Z'; + return result; + } + + pub fn eql(self: DateTime, other: DateTime) bool { + return self.ms == other.ms and + self.seconds == other.seconds and + self.minutes == other.minutes and + self.hours == other.hours and + self.days == other.days and + self.months == other.months and + self.years == other.years and + self.timezone == other.timezone and + self.weekday == other.weekday; + } + + pub fn addMs(self: DateTime, count: u64) DateTime { + if (count == 0) return self; + var result = self; + result.ms += @intCast(count % 1000); + return result.addSecs(count / 1000); + } + + pub fn addSecs(self: DateTime, count: u64) DateTime { + if (count == 0) return self; + var result = self; + result.seconds += @intCast(count % 60); + return result.addMins(count / 60); + } + + pub fn addMins(self: DateTime, count: u64) DateTime { + if (count == 0) return self; + var result = self; + result.minutes += @intCast(count % 60); + return result.addHours(count / 60); + } + + pub fn addHours(self: DateTime, count: u64) DateTime { + if (count == 0) return self; + var result = self; + result.hours += @intCast(count % 24); + return result.addDays(count / 24); + } + + pub fn addDays(self: DateTime, count: u64) DateTime { + if (count == 0) return self; + var result = self; + var input = count; + + while (true) { + const year_len = result.daysThisYear(); + if (input >= year_len) { + result.years += 1; + input -= year_len; + continue; + } + break; + } + while (true) { + const month_len = result.daysThisMonth(); + if (input >= month_len) { + result.months += 1; + input -= month_len; + + if (result.months == 12) { + result.years += 1; + result.months = 0; + } + continue; + } + break; + } + { + const month_len = result.daysThisMonth(); + if (result.days + input > month_len) { + const left = month_len -| result.days; + input -= left; + result.months += 1; + result.days = 0; + } + result.days += @intCast(input); + + if (result.days == result.daysThisMonth()) { + result.months += 1; + result.days = 0; + } + if (result.months == 12) { + result.years += 1; + result.months = 0; + } + } + + std.debug.assert(result.ms < 1000); + std.debug.assert(result.seconds < 60); + std.debug.assert(result.minutes < 60); + std.debug.assert(result.hours < 24); + std.debug.assert(result.days < result.daysThisMonth()); + std.debug.assert(result.months < 12); + return result; + } + + pub fn addWeeks(self: DateTime, count: u64) DateTime { + if (count == 0) return self; + return self.addDays(7).addWeeks(count - 1); + } + + pub fn addMonths(self: DateTime, count: u64) DateTime { + if (count == 0) return self; + var result = self; + var input = count; + result.years += @intCast(input / 12); + input %= 12; + result.months += @intCast(input); + if (result.months >= 12) result.years += 1; + result.months %= 12; + result.days = @min(result.days, result.daysInMonth(result.months) - 1); + return result; + } + + pub fn addYears(self: DateTime, count: u64) DateTime { + var result = self; + for (0..count) |_| { + result = result.addDays(result.daysThisYear()); + } + return result; + } + + pub fn addQuarters(self: DateTime, count: u64) DateTime { + if (count == 0) return self; + return self.addMonths(3).addQuarters(count - 1); + } + + pub fn isLeapYear(self: DateTime) bool { + return time.isLeapYear(self.years); + } + + pub fn daysThisYear(self: DateTime) u16 { + return time.daysInYear(self.years); + } + + pub fn daysThisMonth(self: DateTime) u16 { + return self.daysInMonth(self.months); + } + + fn daysInMonth(self: DateTime, month: u16) u16 { + return time.daysInMonth(self.years, month); + } + + pub fn dayOfThisYear(self: DateTime) u16 { + var ret: u16 = 0; + for (0..self.months) |item| { + ret += self.daysInMonth(@intCast(item)); + } + ret += self.days; + return ret; + } + + pub fn toUnix(self: DateTime) u64 { + const x = self.toUnixMilli(); + return x / 1000; + } + + pub fn toUnixMilli(self: DateTime) u64 { + var res: u64 = 0; + res += self.ms; + res += @as(u64, self.seconds) * ms_per_s; + res += @as(u64, self.minutes) * ms_per_min; + res += @as(u64, self.hours) * ms_per_hour; + res += self.daysSinceEpoch() * ms_per_day; + return res; + } + + pub fn to_timespec(self: DateTime) sys.struct_timespec { + return .{ + .sec = @intCast(self.toUnix()), + .nsec = @as(isize, self.ms) * ns_per_ms, + }; + } + + fn daysSinceEpoch(self: DateTime) u64 { + var res: u64 = 0; + res += self.days; + for (0..self.years - epoch_unix.years) |i| res += time.daysInYear(@intCast(i)); + for (0..self.months) |i| res += self.daysInMonth(@intCast(i)); + return res; + } + + /// fmt is based on https://momentjs.com/docs/#/displaying/format/ + pub fn format(self: DateTime, comptime fmt: string, options: std.fmt.FormatOptions, writer: anytype) !void { + _ = options; + + if (fmt.len == 0) @compileError("DateTime: format string can't be empty"); + + @setEvalBranchQuota(100000); + + comptime var s = 0; + comptime var e = 0; + comptime var next: ?FormatSeq = null; + inline for (fmt, 0..) |c, i| { + e = i + 1; + + if (comptime std.meta.stringToEnum(FormatSeq, fmt[s..e])) |tag| { + next = tag; + if (i < fmt.len - 1) continue; + } + + if (next) |tag| { + switch (tag) { + .MM => try writer.print("{:0>2}", .{self.months + 1}), + .M => try writer.print("{}", .{self.months + 1}), + .Mo => try printOrdinal(writer, self.months + 1), + .MMM => try printLongName(writer, self.months, &[_]string{ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }), + .MMMM => try printLongName(writer, self.months, &[_]string{ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }), + + .Q => try writer.print("{}", .{self.months / 3 + 1}), + .Qo => try printOrdinal(writer, self.months / 3 + 1), + + .D => try writer.print("{}", .{self.days + 1}), + .Do => try printOrdinal(writer, self.days + 1), + .DD => try writer.print("{:0>2}", .{self.days + 1}), + + .DDD => try writer.print("{}", .{self.dayOfThisYear() + 1}), + .DDDo => try printOrdinal(writer, self.dayOfThisYear() + 1), + .DDDD => try writer.print("{:0>3}", .{self.dayOfThisYear() + 1}), + + .d => try writer.print("{}", .{@intFromEnum(self.weekday())}), + .do => try printOrdinal(writer, @intFromEnum(self.weekday())), + .dd => try writer.writeAll(@tagName(self.weekday())[0..2]), + .ddd => try writer.writeAll(@tagName(self.weekday())), + .dddd => try printLongName(writer, @intFromEnum(self.weekday()), &[_]string{ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }), + .e => try writer.print("{}", .{@intFromEnum(self.weekday())}), + .E => try writer.print("{}", .{@intFromEnum(self.weekday()) + 1}), + + .w => try writer.print("{}", .{self.dayOfThisYear() / 7 + 1}), + .wo => try printOrdinal(writer, self.dayOfThisYear() / 7 + 1), + .ww => try writer.print("{:0>2}", .{self.dayOfThisYear() / 7 + 1}), + + .Y => try writer.print("{}", .{self.years + 10000}), + .YY => try writer.print("{:0>2}", .{self.years % 100}), + .YYY => try writer.print("{}", .{self.years}), + .YYYY => try writer.print("{:0>4}", .{self.years}), + + .N => try writer.writeAll(@tagName(self.era())), + .NN => try writer.writeAll("Anno Domini"), + + .A => try printLongName(writer, self.hours / 12, &[_]string{ "AM", "PM" }), + .a => try printLongName(writer, self.hours / 12, &[_]string{ "am", "pm" }), + + .H => try writer.print("{}", .{self.hours}), + .HH => try writer.print("{:0>2}", .{self.hours}), + .h => try writer.print("{}", .{wrap(self.hours, 12)}), + .hh => try writer.print("{:0>2}", .{wrap(self.hours, 12)}), + .k => try writer.print("{}", .{wrap(self.hours, 24)}), + .kk => try writer.print("{:0>2}", .{wrap(self.hours, 24)}), + + .m => try writer.print("{}", .{self.minutes}), + .mm => try writer.print("{:0>2}", .{self.minutes}), + + .s => try writer.print("{}", .{self.seconds}), + .ss => try writer.print("{:0>2}", .{self.seconds}), + + .S => try writer.print("{}", .{self.ms / 100}), + .SS => try writer.print("{:0>2}", .{self.ms / 10}), + .SSS => try writer.print("{:0>3}", .{self.ms}), + + .z => try writer.writeAll(@tagName(self.timezone)), + .Z => try writer.writeAll("+00:00"), + .ZZ => try writer.writeAll("+0000"), + + .x => try writer.print("{}", .{self.toUnixMilli()}), + .X => try writer.print("{}", .{self.toUnix()}), + } + next = null; + s = i; + } + + switch (c) { + ',', + ' ', + ':', + '-', + '.', + 'T', + 'W', + '/', + => { + try writer.writeAll(&.{c}); + s = i + 1; + continue; + }, + else => {}, + } + } + } + + pub fn formatAlloc(self: DateTime, alloc: std.mem.Allocator, comptime fmt: string) !string { + var list = std.ArrayList(u8).init(alloc); + defer list.deinit(); + + try self.format(fmt, .{}, list.writer()); + return list.toOwnedSlice(); + } + + const FormatSeq = enum { + M, // 1 2 ... 11 12 + Mo, // 1st 2nd ... 11th 12th + MM, // 01 02 ... 11 12 + MMM, // Jan Feb ... Nov Dec + MMMM, // January February ... November December + Q, // 1 2 3 4 + Qo, // 1st 2nd 3rd 4th + D, // 1 2 ... 30 31 + Do, // 1st 2nd ... 30th 31st + DD, // 01 02 ... 30 31 + DDD, // 1 2 ... 364 365 + DDDo, // 1st 2nd ... 364th 365th + DDDD, // 001 002 ... 364 365 + d, // 0 1 ... 5 6 + do, // 0th 1st ... 5th 6th + dd, // Su Mo ... Fr Sa + ddd, // Sun Mon ... Fri Sat + dddd, // Sunday Monday ... Friday Saturday + e, // 0 1 ... 5 6 (locale) + E, // 1 2 ... 6 7 (ISO) + w, // 1 2 ... 52 53 + wo, // 1st 2nd ... 52nd 53rd + ww, // 01 02 ... 52 53 + Y, // 11970 11971 ... 19999 20000 20001 (Holocene calendar) + YY, // 70 71 ... 29 30 + YYY, // 1 2 ... 1970 1971 ... 2029 2030 + YYYY, // 0001 0002 ... 1970 1971 ... 2029 2030 + N, // BC AD + NN, // Before Christ ... Anno Domini + A, // AM PM + a, // am pm + H, // 0 1 ... 22 23 + HH, // 00 01 ... 22 23 + h, // 1 2 ... 11 12 + hh, // 01 02 ... 11 12 + k, // 1 2 ... 23 24 + kk, // 01 02 ... 23 24 + m, // 0 1 ... 58 59 + mm, // 00 01 ... 58 59 + s, // 0 1 ... 58 59 + ss, // 00 01 ... 58 59 + S, // 0 1 ... 8 9 (second fraction) + SS, // 00 01 ... 98 99 + SSS, // 000 001 ... 998 999 + z, // EST CST ... MST PST + Z, // -07:00 -06:00 ... +06:00 +07:00 + ZZ, // -0700 -0600 ... +0600 +0700 + x, // unix milli + X, // unix + }; + + pub fn since(self: DateTime, other_in_the_past: DateTime) Duration { + return Duration{ + .ms = self.toUnixMilli() - other_in_the_past.toUnixMilli(), + }; + } + + pub fn era(self: DateTime) Era { + if (self.years >= 0) return .AD; + @compileError("TODO"); + } + + pub fn weekday(self: DateTime) WeekDay { + var i = self.daysSinceEpoch() % 7; + var result = WeekDay.Thu; // weekday of epoch_unix + while (i > 0) : (i -= 1) { + result = result.next(); + } + return result; + } +}; + +pub const format = struct { + pub const LT = "h:mm A"; + pub const LTS = "h:mm:ss A"; + pub const L = "MM/DD/YYYY"; + pub const l = "M/D/YYY"; + pub const LL = "MMMM D, YYYY"; + pub const ll = "MMM D, YYY"; + pub const LLL = LL ++ " " ++ LT; + pub const lll = ll ++ " " ++ LT; + pub const LLLL = "dddd, " ++ LLL; + pub const llll = "ddd, " ++ lll; +}; + +pub const TimeZone = enum { + UTC, + + pub fn jsonStringify(self: @This(), json_stream: anytype) !void { + try json_stream.write(@tagName(self)); + } +}; + +pub const WeekDay = enum { + Sun, + Mon, + Tue, + Wed, + Thu, + Fri, + Sat, + + pub fn next(self: WeekDay) WeekDay { + return switch (self) { + .Sun => .Mon, + .Mon => .Tue, + .Tue => .Wed, + .Wed => .Thu, + .Thu => .Fri, + .Fri => .Sat, + .Sat => .Sun, + }; + } + + pub fn jsonStringify(self: @This(), json_stream: anytype) !void { + try json_stream.write(@tagName(self)); + } +}; + +pub const Era = enum { + // BC, + AD, + + pub fn jsonStringify(self: @This(), json_stream: anytype) !void { + try json_stream.write(@tagName(self)); + } +}; + +pub fn isLeapYear(year: u16) bool { + var ret = false; + if (year % 4 == 0) ret = true; + if (year % 100 == 0) ret = false; + if (year % 400 == 0) ret = true; + return ret; +} + +pub fn daysInYear(year: u16) u16 { + return if (isLeapYear(year)) 366 else 365; +} + +fn daysInMonth(year: u16, month: u16) u16 { + const norm = [12]u16{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; + const leap = [12]u16{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; + const month_days = if (!isLeapYear(year)) norm else leap; + return month_days[month]; +} + +fn printOrdinal(writer: anytype, num: u16) !void { + try writer.print("{}", .{num}); + try writer.writeAll(switch (num) { + 1 => "st", + 2 => "nd", + 3 => "rd", + else => "th", + }); +} + +fn printLongName(writer: anytype, index: u16, names: []const string) !void { + try writer.writeAll(names[index]); +} + +fn wrap(val: u16, at: u16) u16 { + const tmp = val % at; + return if (tmp == 0) at else tmp; +} + +pub const Duration = struct { + ms: u64, +}; + +// Divisions of a nanosecond. +pub const ns_per_us = 1000; +pub const ns_per_ms = 1000 * ns_per_us; +pub const ns_per_s = 1000 * ns_per_ms; +pub const ns_per_min = 60 * ns_per_s; +pub const ns_per_hour = 60 * ns_per_min; +pub const ns_per_day = 24 * ns_per_hour; +pub const ns_per_week = 7 * ns_per_day; + +// Divisions of a microsecond. +pub const us_per_ms = 1000; +pub const us_per_s = 1000 * us_per_ms; +pub const us_per_min = 60 * us_per_s; +pub const us_per_hour = 60 * us_per_min; +pub const us_per_day = 24 * us_per_hour; +pub const us_per_week = 7 * us_per_day; + +// Divisions of a millisecond. +pub const ms_per_s = 1000; +pub const ms_per_min = 60 * ms_per_s; +pub const ms_per_hour = 60 * ms_per_min; +pub const ms_per_day = 24 * ms_per_hour; +pub const ms_per_week = 7 * ms_per_day; + +// Divisions of a second. +pub const s_per_min = 60; +pub const s_per_hour = s_per_min * 60; +pub const s_per_day = s_per_hour * 24; +pub const s_per_week = s_per_day * 7; + +pub fn nanoTimestamp() i128 { + const ts = sys.clock_gettime(sys.CLOCK.REALTIME) catch return 0; + var result: i128 = 0; + result += ts.sec; + result *= ns_per_s; + result += ts.nsec; + return result; +} + +pub fn microTimestamp() i64 { + return @as(i64, @intCast(@divFloor(nanoTimestamp(), ns_per_us))); +} + +pub fn milliTimestamp() i64 { + return @as(i64, @intCast(@divFloor(nanoTimestamp(), ns_per_ms))); +} diff --git a/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/zig.mod b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/zig.mod new file mode 100644 index 0000000..7c26948 --- /dev/null +++ b/bin/blog-processor/zig-pkg/N-V-__8AANVnAAAiJ9MueCqJrhoTljbeCp3MUDdop1rHjEZ7/zig.mod @@ -0,0 +1,11 @@ +id: iecwp4b3bsfmpp4x99gjo4a5ljv6ix4owy8czip32yanpvlb +name: time +main: time.zig +license: MIT +description: A date and time parsing and formatting library for Zig. +min_zig_version: 0.11.0-dev.1681+0bb178bbb +dependencies: + - src: git https://github.com/nektro/zig-extras + - src: git https://github.com/nektro/zig-sys-linux +root_dependencies: + - src: git https://github.com/nektro/zig-expect diff --git a/posts/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer.md b/content/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer.smd similarity index 87% rename from posts/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer.md rename to content/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer.smd index 7d379d4..ba16b8b 100644 --- a/posts/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer.md +++ b/content/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer.smd @@ -1,7 +1,10 @@ --- -title: One of the best Skills I've learned as a Programmer -date: 19 april 2026 ---- +.title = "One of the best Skills I've learned as a Programmer", +.date = @date("2026-04-19T00:00:00"), +.author = "Sample Author", +.layout = "post.shtml", +.draft = false, +--- There are many different skills one might invest it when getting into programming. There is a plethora of programming languages, each with their unique appeal. diff --git a/posts/2026-04-30-how-i-manage-my-blog.md b/content/2026-04-30-how-i-manage-my-blog.smd similarity index 93% rename from posts/2026-04-30-how-i-manage-my-blog.md rename to content/2026-04-30-how-i-manage-my-blog.smd index 6d6dec4..b6ac3bc 100644 --- a/posts/2026-04-30-how-i-manage-my-blog.md +++ b/content/2026-04-30-how-i-manage-my-blog.smd @@ -1,6 +1,9 @@ --- -title: How I Manage my Blog -date: 30 april 2026 +.title = "How I Manage my Blog", +.date = @date("2026-04-30T00:00:00"), +.author = "Sample Author", +.layout = "post.shtml", +.draft = false, --- There is an accompanying video devlog available on YouTube, where I go more in diff --git a/posts/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot.md b/content/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot.smd similarity index 95% rename from posts/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot.md rename to content/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot.smd index f844192..d0764f9 100644 --- a/posts/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot.md +++ b/content/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot.smd @@ -1,6 +1,9 @@ --- -title: How I cut my expenses by a freaking lot -date: 2 may 2026 +.title = "How I cut my expenses by a freaking lot", +.date = @date("2026-05-02T00:00:00"), +.author = "Sample Author", +.layout = "post.shtml", +.draft = false, --- Let's start with the why. diff --git a/content/index.smd b/content/index.smd new file mode 100644 index 0000000..70d1f1a --- /dev/null +++ b/content/index.smd @@ -0,0 +1,7 @@ +--- +.title = "Programming and Friends", +.date = @date("1990-01-01T00:00:00"), +.author = "Alexander Goussas", +.layout = "index.shtml", +.draft = false, +--- diff --git a/layouts/index.shtml b/layouts/index.shtml new file mode 100644 index 0000000..5a2098f --- /dev/null +++ b/layouts/index.shtml @@ -0,0 +1,18 @@ + + + + +

+
+
+

Posts

+
+
+ + +

+
+
+
+
+ diff --git a/layouts/page.shtml b/layouts/page.shtml new file mode 100644 index 0000000..36efa7f --- /dev/null +++ b/layouts/page.shtml @@ -0,0 +1,7 @@ + + + + +

+
+ diff --git a/layouts/post.shtml b/layouts/post.shtml new file mode 100644 index 0000000..74329a5 --- /dev/null +++ b/layouts/post.shtml @@ -0,0 +1,21 @@ + + + + +

+
+ + diff --git a/layouts/rss.xml b/layouts/rss.xml new file mode 100644 index 0000000..ec985d0 --- /dev/null +++ b/layouts/rss.xml @@ -0,0 +1,21 @@ + + + + + + Zine -- https://zine-ssg.io + en-US + + + + + + + + + + + + + + diff --git a/layouts/templates/base.shtml b/layouts/templates/base.shtml new file mode 100644 index 0000000..337d76e --- /dev/null +++ b/layouts/templates/base.shtml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+ + diff --git a/public/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer/index.html b/public/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer/index.html new file mode 100644 index 0000000..926364f --- /dev/null +++ b/public/2026-04-19-one-of-the-best-skills-ive-learned-as-a-programmer/index.html @@ -0,0 +1,59 @@ + + + + + + + + + + Alexander Goussas + + + + + + + + + + + + + +
+ +
+ +

One of the best Skills I've learned as a Programmer

+

There are many different skills one might invest it when getting into programming. There is a plethora of programming languages, each with their unique appeal. And within each language ecosystem, a plethora of web frameworks and stuff to learn.

But for me, one of the greatest investments came from something else altogether: learning how to touch type.

For those of you that don’t know, touch typing basically means typing without looking at your keyboard. But I include in the definition typing with all your fingers.

Before learning to touch type, I only used both my index fingers. I literally did not use any other finger. One day, I decided to change that and started dedicating a lot of time to acquiring the ability to touch type.

There was a free website I used for this, whose name I have since forgotten. Something like typingrace of something like that.

Anywho, today, I can write at ~120 WPM, which is not a crazy speed, but pretty respectable, if I may say so myself. Sometimes I just like typing whatever to feel the vertigo as my fingers speed through my keyboard.

Also, this is a transferable skill, so if you can’t touch type yet, I encourage you to.

+ + +
+
+
+ + diff --git a/public/2026-04-30-how-i-manage-my-blog/index.html b/public/2026-04-30-how-i-manage-my-blog/index.html new file mode 100644 index 0000000..45c5c96 --- /dev/null +++ b/public/2026-04-30-how-i-manage-my-blog/index.html @@ -0,0 +1,65 @@ + + + + + + + + + + Alexander Goussas + + + + + + + + + + + + + +
+ +
+ +

How I Manage my Blog

+

There is an accompanying video devlog available on YouTube, where I go more in depth about how this stuff is actually implemented: https://www.youtube.com/watch?v=c6z5A_PRodg.

Recently I went down the Kubernetes rabbit-hole and automated my whole blog’s pipeline. From build to deployment. No GitHub actions or any other 3rd party CI provider. All self-hosted, literally. Well, with the sole exception of CloudFlare Tunnels, of course.

How did I do it?

For starters, my blog repository is deployed as static files in a NGINX Docker container. As part of the build process, I execute a little CLI tool I built in Zig to transform my posts from markdown to html.

So, I process the posts, build the image, tag it appropriately and push it to Docker Hub. This is all automated in my git server, as we’ll see in a minute.

Next, my stuff is hosted in a git server that I own. This server is exposed via SSH and cloudflare tunnels. I have it configured to only allow public key authentication and no root login, for example. Also, the SSH port is not publicly exposed and is only accessible via cloudflared.

Now, Git has hooks for both server and client. In this case, we are interested in the post-receive server hook. This hook runs after the changes have been accepted by the server, so we have access to the latest code.

In my case, what the hook does is clone the repository from the bare repo in the server, execute the build script (that is located in the cloned repository), and finally executes a rollout in my Kubernetes cluster to pull the latest image.

So, that’s it. A pretty damn simple configuration, if I may say.

Next steps for me would be to configure redundancy for the disk where my git stuff is. Right now I have the stuff in my local dev machine and on that server, but ideally I’d want to make backups to an external drive periodically.

If you, dear reader, have any tips or tricks for me, please feel free to contact me in whichever way you might deem appropriate.

+ + +
+
+
+ + diff --git a/public/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot/index.html b/public/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot/index.html new file mode 100644 index 0000000..499c828 --- /dev/null +++ b/public/2026-05-01-how-i-cut-my-expenses-by-a-freaking-lot/index.html @@ -0,0 +1,59 @@ + + + + + + + + + + Alexander Goussas + + + + + + + + + + + + + +
+ +
+ +

How I cut my expenses by a freaking lot

+

Let’s start with the why.

I have no family, and, as of the time of writing, no university degree either. This means that were I to be fired from my current job, I’d have a hard time (probably, I don’t really know) finding a new one, and that I’d have no where to go but the street. I could go to a friend’s, but I would not want to bother them like that.

Then, a few months ago I started seriously thinking about the role of AI in my area of work. I do not think AI can replace developers (I’ve seen it try and fail magnificently) but I am also aware of the fact that employers do think so, and, at least in my environment, have already started putting into action plans to cut personnel and replace humans with AI tools.

This led me to have a little crisis. I thought about switching careers and more extreme things as well. As of today, I no longer have these feelings. I love programming and I will continue doing it in whichever way I can. At the same time, I was thinking: what is it that I really need to have a “happy” life? For me, the answer is books, coffee and someplace I can walk in peace while listening to podcasts and stuff.

As you can see, I need barely any money for these things. And right now I am living in a city where I can do the latter. So, this realization led me to make a budget. Write down how much money I actually need in order to live. This resulted in a grand total of about 250 US dollars per month. Let’s break it down.

I spend around 120 USD a month in groceries, 20 USD in laundry, 8 for YouTube premium and … well, that’s it. I am excluding rent because I am in the process of moving, but I am aiming to go somewhere under 200 USD. Right now I am in a 500 USD apartment, but only because I took the first thing I found, since I came fleeing Guayaquil after being almost murdered in the street.

What did I do in order to achieve this?

First, groceries. I started really looking at the prices of stuff I was buying. I did not sacrifice quality for price. I found alternative products, and bought at cheaper replaces. I also set a hard rule of absolutely no eating out. Only in very special ocassions. You might try and gaslight yourself into believing that you need to eat out in order to socialize or whatever, but if you learned to cook well you could have friends at your house for dinner, for example. I say from the bottom of my heart that I like my food way more than a great deal of restaurants I’ve been to.

Next, I stopped smoking. This one is self-explanatory. Cigarrettes are freaking expensive.

The other thing is I started doing as much as I can online. So for example, books and classes for whatever are usually cheaper online. You don’t have to pay for delivery or transportation this way either.

Then, I started using the least amount of clothes possible. A week, I use 12 pieces of underwear, 6 shirts, 2 short and 1 sweater. Also, the cloth needs to be as lightweight as possible. So, no jeans. This way, I took my laundry cost from ~8USD a week to ~3USD. I live in a pretty cold city, but surprisingly I’ve found that my body has adapted pretty well. I barely feel any cold anymore.

That’s basically it. Pretty simple, but effective. I honestly think we’ve gotten too lazy and used to the comforts of modernity, which is exactly what our capitalistic society wants. They want us to cOnSOom.

I hope you got something useful from this, and I really encourage you to try and get out of the trap of consumerism. If you can afford it. And if you have a different perspective, please don’t hesitate to share it.

+ + +
+
+
+ + diff --git a/public/Temml-Local.css b/public/Temml-Local.css new file mode 100644 index 0000000..fe05099 --- /dev/null +++ b/public/Temml-Local.css @@ -0,0 +1,249 @@ +/* +Temml.woff2 is a clone of KaTeX_Script-Regular, except that the code points +have been changed from ASCII to Unicode Mathematical Alphanumeric Symbols Script capitals, +Unicode range 1D49C to 1D4B5. +*/ + +@font-face { + font-family: 'Temml'; + src: url('Temml.woff2') format('woff2'); + font-weight: normal; + font-style: normal; +} + +math { + font-family: "Cambria Math", 'STIXTwoMath-Regular', 'NotoSansMath-Regular', math; + font-style: normal; + font-weight: normal; + line-height: normal; + font-size-adjust: none; + text-indent: 0; + text-transform: none; + letter-spacing: normal; + word-wrap: normal; + direction: ltr; + /* Prevent Firefox from omitting the dot on i or j. */ + font-feature-settings: "dtls" off; +} + +math * { + border-color: currentColor; +} + +/* Next line is active in Firefox and Safari. + * Not in Chromium, which recognizes display: "block math" written inline. */ +math.tml-display { display: block; } + +*.mathcal { + /* NotoSans */ + font-feature-settings: 'ss01'; +} + +math .mathscr { + font-family: "Temml"; +} + +mo.tml-prime { + font-family: Temml; +} + +/* Prevent f' from overlapping in Chromium */ +mo.prime-pad { + padding-left: 0.08em; +} + +/* \cancel & \phase use background images. Get them to print. */ +menclose { + -webkit-print-color-adjust: exact; /* Chrome & Edge */ + print-color-adjust: exact; +} + +/* Array cell justification in Firefox & WebKit */ +.tml-right { + text-align: right; +} +.tml-left { + text-align: left; +} + +/* Styles for Chromium only */ +@supports (not (-webkit-backdrop-filter: blur(1px))) and (not (-moz-appearance: none)) { + /* MathML Core & Chromium do not support the MathML 3.0 element attributes. */ + /* So use styles. */ + menclose { + position: relative; + padding: 0.5ex 0ex; + } + + .tml-overline { + padding: 0.1em 0 0 0; + border-top: 0.065em solid; + } + + .tml-underline { + padding: 0 0 0.1em 0; + border-bottom: 0.065em solid; + } + + .tml-cancel { + display: inline-block; + position: absolute; + left: 0.5px; + bottom: 0; + width: 100%; + height: 100%; + background-color: currentColor; + } + .upstrike { + clip-path: polygon(0.05em 100%, 0em calc(100% - 0.05em), calc(100% - 0.05em) 0em, 100% 0.05em); + } + .downstrike { + clip-path: polygon(0em 0.05em, 0.05em 0em, 100% calc(100% - 0.05em), calc(100% - 0.05em) 100%); + } + .sout { + clip-path: polygon(0em calc(55% + 0.0333em), 0em calc(55% - 0.0333em), 100% calc(55% - 0.0333em), 100% calc(55% + 0.0333em)); + } + .tml-xcancel { + background: linear-gradient(to top left, + rgba(0,0,0,0) 0%, + rgba(0,0,0,0) calc(50% - 0.06em), + rgba(0,0,0,1) 50%, + rgba(0,0,0,0) calc(50% + 0.06em), + rgba(0,0,0,0) 100%), + linear-gradient(to top right, + rgba(0,0,0,0) 0%, + rgba(0,0,0,0) calc(50% - 0.06em), + rgba(0,0,0,1) 50%, + rgba(0,0,0,0) calc(50% + 0.06em), + rgba(0,0,0,0) 100%) + } + + .longdiv-top { + border-top: 0.067em solid; + padding: 0.1em 0.2em 0.2em 0.433em; + } + .longdiv-arc { + position: absolute; + top: 0; + bottom: 0.1em; + left: -0.4em; + width: 0.7em; + border: 0.067em solid; + transform: translateY(-0.067em); + border-radius: 70%; + clip-path: inset(0 0 0 0.4em); + box-sizing: border-box;} + .menclose {display: inline-block; + text-align: left; + position: relative; + } + + .phasor-bottom { + border-bottom: 0.067em solid; + padding: 0.2em 0.2em 0.1em 0.6em; + } + .phasor-angle { + display: inline-block; + position: absolute; + left: 0.5px; + bottom: -0.04em; + height: 100%; + aspect-ratio: 0.5; + background-color: currentColor; + clip-path: polygon(0.05em 100%, 0em calc(100% - 0.05em), calc(100% - 0.05em) 0em, 100% 0.05em); + } + + .tml-box { + padding: 3pt 0 3pt 0; + border: 1px solid; + } + .tml-fbox { + padding: 3pt; + border: 1px solid; + } + + .circle-pad { + padding: 0.267em; + } + .textcircle { + position: absolute; + top: 0; + bottom: 0; + right: 0; + left: 0; + border: 0.067em solid; + border-radius: 50%; + } + + .actuarial { + padding: 0.03889em 0.03889em 0 0.03889em; + border-width: 0.08em 0.08em 0em 0em; + border-style: solid; + margin-right: 0.03889em; + } + + /* Stretch \widetilde */ + .tml-crooked-2 { + transform: scale(2.0, 1.1) + } + .tml-crooked-3 { + transform: scale(3.0, 1.3) + } + .tml-crooked-4 { + transform: scale(4.0, 1.4) + } + /* set array cell justification */ + .tml-right { + text-align: -webkit-right; + } + .tml-left { + text-align: -webkit-left; + } +} + +/* Adjust WebKit accents */ +@supports (-webkit-backdrop-filter: blur(1px)) { + .tml-xshift { transform: translate(0px, 0.45em) } + .tml-capshift { transform: translate(0px, 0.35em) } +} + +/* flex-wrap for line-breaking in Chromium */ +math { + display: inline-flex; + flex-wrap: wrap; + align-items: baseline; +} +math > mrow { + padding: 0.5ex 0ex; +} + +/* Default mtd top padding is 0.5ex per MathML-Core and user-agent CSS */ +/* We adjust for jot and small */ +mtable.tml-jot mtd { + padding-top: 0.7ex; + padding-bottom: 0.7ex; +} +mtable.tml-small mtd { + padding-top: 0.35ex; + padding-bottom: 0.35ex; +} + +/* Firefox */ +@-moz-document url-prefix() { + /* Avoid flex-wrap */ + math { display: inline; } + math > mrow { padding: 0 } + /* Adjust Firefox spacing between array rows */ + mtd, mtable.tml-small mtd { padding-top: 0; padding-bottom: 0; } + mtable.tml-jot mtd { padding-top: 0.2ex; padding-bottom: 0.ex; } +} + +/* AMS environment auto-numbering via CSS counter. */ +.tml-eqn::before { + counter-increment: tmlEqnNo; + content: "(" counter(tmlEqnNo) ")"; +} + +body { + counter-reset: tmlEqnNo; +} diff --git a/public/Temml.woff2 b/public/Temml.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..fccefda4b3a0d812687d62efff0d6a554347ddc8 GIT binary patch literal 9404 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 Cd@~6E literal 0 HcmV?d00001 diff --git a/public/highlight.css b/public/highlight.css new file mode 100644 index 0000000..f2c4c4a --- /dev/null +++ b/public/highlight.css @@ -0,0 +1,37 @@ +:root { + --light-yellow: #e5c07b; + --dark-yellow: #d19a66; + --blue: #61afef; + --cyan: #56b6c2; + --light-red: #e06c75; + --dark-red: #be5046; + --comment-gray: #5c6370; + --magenta: #c678dd; +} + +pre { + border-top: 1px solid white; + border-bottom: 1px solid white; + padding: 10px 5px; +} + +code.ziggy { + color: var(--cyan); +} + +code.ziggy .keyword, +code.ziggy .type { + color: var(--light-yellow); +} + +code.ziggy .string { + color: var(--dark-yellow); +} + +code.ziggy .numeric.constant { + color: var(--magenta); +} + +code.ziggy .function { + color: var(--blue); +} \ No newline at end of file diff --git a/public/index.html b/public/index.html index 769c70b..09d116f 100644 --- a/public/index.html +++ b/public/index.html @@ -1,52 +1,75 @@ + + + + + + + + Alexander Goussas + + + + + + + + - - - Alexander Goussas | Programming & Friends - - - - - - - - - -
- -
- -

Alexander Goussas

-

Blog about programming & friends

- - - - -
-

Posts

- -
- - + + + + +
+ +
+ +

Programming and Friends

+
+ +
+
+
+ diff --git a/public/render-mathtex.js b/public/render-mathtex.js new file mode 100644 index 0000000..b4255ea --- /dev/null +++ b/public/render-mathtex.js @@ -0,0 +1,8 @@ +let eqns = document.querySelectorAll("script[type='math/tex']"); +for (let i=eqns.length-1; i>=0; i--) { + let eqn = eqns[i]; + let src = eqn.text; + let d = eqn.closest('p') == null; + eqn.outerHTML = temml.renderToString(src, { displayMode: d }); +} + diff --git a/public/styles.css b/public/styles.css index 0312ea1..bed9ab0 100644 --- a/public/styles.css +++ b/public/styles.css @@ -88,3 +88,11 @@ nav { inset rgba(0 0 0 / 20%) 0px -5px, inset rgba(255 255 255 / 40%) 0px 5px; } + +.post-preview { + display: flex; + align-items: center; + gap: 0.4rem; + margin-bottom: 0px; + height: fit-content; +} diff --git a/public/temml.min.js b/public/temml.min.js new file mode 100644 index 0000000..68a0e9f --- /dev/null +++ b/public/temml.min.js @@ -0,0 +1 @@ +var temml=function(){"use strict";class e{constructor(t,r){let n,s=" "+t;const o=r&&r.loc;if(o&&o.start<=o.end){const e=o.lexer.input;n=o.start;const t=o.end;n===e.length?s+=" at end of input: ":s+=" at position "+(n+1)+": \n";const r=e.slice(n,t).replace(/[^]/g,"$&̲");let a,l;a=n>15?"…"+e.slice(n-15,n):e.slice(0,n),l=t+15":">","<":"<",'"':""","'":"'"},n=/[&><"']/g;const s=function(e){return"ordgroup"===e.type||"color"===e.type?1===e.body.length?s(e.body[0]):e:"font"===e.type?s(e.body):e};var o={deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(n,(e=>r[e]))},hyphenate:function(e){return e.replace(t,"-$1").toLowerCase()},getBaseElem:s,isCharacterBox:function(e){const t=s(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){const t=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return t?":"!==t[2]?null:/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?t[1].toLowerCase():null:"_relative"},round:function(e){return+e.toFixed(4)}};class a{constructor(e){e=e||{},this.displayMode=o.deflt(e.displayMode,!1),this.annotate=o.deflt(e.annotate,!1),this.leqno=o.deflt(e.leqno,!1),this.throwOnError=o.deflt(e.throwOnError,!1),this.errorColor=o.deflt(e.errorColor,"#b22222"),this.macros=e.macros||{},this.wrap=o.deflt(e.wrap,"tex"),this.xml=o.deflt(e.xml,!1),this.colorIsTextColor=o.deflt(e.colorIsTextColor,!1),this.strict=o.deflt(e.strict,!1),this.trust=o.deflt(e.trust,!1),this.maxSize=void 0===e.maxSize?[1/0,1/0]:Array.isArray(e.maxSize)?e.maxSize:[1/0,1/0],this.maxExpand=Math.max(0,o.deflt(e.maxExpand,1e3))}isTrusted(e){if(e.url&&!e.protocol){const t=o.protocolFromUrl(e.url);if(null==t)return!1;e.protocol=t}const t="function"==typeof this.trust?this.trust(e):this.trust;return Boolean(t)}}const l={},i={};function c({type:e,names:t,props:r,handler:n,mathmlBuilder:s}){const o={type:e,numArgs:r.numArgs,argTypes:r.argTypes,allowedInArgument:!!r.allowedInArgument,allowedInText:!!r.allowedInText,allowedInMath:void 0===r.allowedInMath||r.allowedInMath,numOptionalArgs:r.numOptionalArgs||0,infix:!!r.infix,primitive:!!r.primitive,handler:n};for(let e=0;ee.toText())).join("")}}const h=function(e){return e.filter((e=>e)).join(" ")},g=function(e,t){this.classes=e||[],this.attributes={},this.style=t||{}},f=function(e){const t=document.createElement(e);t.className=h(this.classes);for(const e in this.style)Object.prototype.hasOwnProperty.call(this.style,e)&&(t.style[e]=this.style[e]);for(const e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&t.setAttribute(e,this.attributes[e]);for(let e=0;e`,t};class y{constructor(e,t,r){g.call(this,e,r),this.children=t||[]}setAttribute(e,t){this.attributes[e]=t}toNode(){return f.call(this,"span")}toMarkup(){return b.call(this,"span")}}let w=class{constructor(e){this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return o.escape(this.text)}};class x{constructor(e,t,r){this.href=e,this.classes=t,this.children=r||[]}toNode(){const e=document.createElement("a");e.setAttribute("href",this.href),this.classes.length>0&&(e.className=h(this.classes));for(let t=0;t0&&(e+=` class="${o.escape(h(this.classes))}"`),e+=">";for(let t=0;t0&&(e.className=h(this.classes));for(const t in this.style)Object.prototype.hasOwnProperty.call(this.style,t)&&(e.style[t]=this.style[t]);for(let t=0;t0&&(e+=` class="${o.escape(h(this.classes))}"`);let t="";for(const e in this.style)Object.prototype.hasOwnProperty.call(this.style,e)&&(t+=`${o.hyphenate(e)}:${this.style[e]};`);t&&(e+=` style="${t}"`),e+=">";for(let t=0;t",e}toText(){return this.children.map((e=>e.toText())).join("")}}class A{constructor(e){this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return o.escape(this.toText())}toText(){return this.text}}const N=e=>{let t;return 1===e.length&&"mrow"===e[0].type?(t=e.pop(),t.type="mstyle"):t=new v("mstyle",e),t};var T={MathNode:v,TextNode:A,newDocumentFragment:function(e){return new u(e)}};const S=e=>{let t=0;if(e.body)for(const r of e.body)t+=S(r);else if("supsub"===e.type)t+=S(e.base),e.sub&&(t+=.7*S(e.sub)),e.sup&&(t+=.7*S(e.sup));else if("mathord"===e.type||"textord"===e.type)for(const r of e.text.split("")){const e=r.codePointAt(0);t+=96{const t=O(e.label);if(M.includes(e.label)){const r=S(e.base);1","\\gt",!0),I(L,_,"∈","\\in",!0),I(L,_,"∉","\\notin",!0),I(L,_,"","\\@not"),I(L,_,"⊂","\\subset",!0),I(L,_,"⊃","\\supset",!0),I(L,_,"⊆","\\subseteq",!0),I(L,_,"⊇","\\supseteq",!0),I(L,_,"⊈","\\nsubseteq",!0),I(L,_,"⊈","\\nsubseteqq"),I(L,_,"⊉","\\nsupseteq",!0),I(L,_,"⊉","\\nsupseteqq"),I(L,_,"⊨","\\models"),I(L,_,"←","\\leftarrow",!0),I(L,_,"≤","\\le"),I(L,_,"≤","\\leq",!0),I(L,_,"<","\\lt",!0),I(L,_,"→","\\rightarrow",!0),I(L,_,"→","\\to"),I(L,_,"≱","\\ngeq",!0),I(L,_,"≱","\\ngeqq"),I(L,_,"≱","\\ngeqslant"),I(L,_,"≰","\\nleq",!0),I(L,_,"≰","\\nleqq"),I(L,_,"≰","\\nleqslant"),I(L,_,"â««","\\Perp",!0),I(L,W," ","\\ "),I(L,W," ","\\space"),I(L,W," ","\\nobreakspace"),I(F,W," ","\\ "),I(F,W," "," "),I(F,W," ","\\space"),I(F,W," ","\\nobreakspace"),I(L,W,null,"\\nobreak"),I(L,W,null,"\\allowbreak"),I(L,V,",",","),I(F,V,":",":"),I(L,V,";",";"),I(L,G,"⊼","\\barwedge"),I(L,G,"⊻","\\veebar"),I(L,G,"⊙","\\odot",!0),I(L,G,"⊕︎","\\oplus"),I(L,G,"⊗","\\otimes",!0),I(L,X,"∂","\\partial",!0),I(L,G,"⊘","\\oslash",!0),I(L,G,"⊚","\\circledcirc",!0),I(L,G,"⊡","\\boxdot",!0),I(L,G,"△","\\bigtriangleup"),I(L,G,"▽","\\bigtriangledown"),I(L,G,"†","\\dagger"),I(L,G,"⋄","\\diamond"),I(L,G,"◃","\\triangleleft"),I(L,G,"▹","\\triangleright"),I(L,H,"{","\\{"),I(F,X,"{","\\{"),I(F,X,"{","\\textbraceleft"),I(L,j,"}","\\}"),I(F,X,"}","\\}"),I(F,X,"}","\\textbraceright"),I(L,H,"{","\\lbrace"),I(L,j,"}","\\rbrace"),I(L,H,"[","\\lbrack",!0),I(F,X,"[","\\lbrack",!0),I(L,j,"]","\\rbrack",!0),I(F,X,"]","\\rbrack",!0),I(L,H,"(","\\lparen",!0),I(L,j,")","\\rparen",!0),I(L,H,"⦇","\\llparenthesis",!0),I(L,j,"⦈","\\rrparenthesis",!0),I(F,X,"<","\\textless",!0),I(F,X,">","\\textgreater",!0),I(L,H,"⌊","\\lfloor",!0),I(L,j,"⌋","\\rfloor",!0),I(L,H,"⌈","\\lceil",!0),I(L,j,"⌉","\\rceil",!0),I(L,X,"\\","\\backslash"),I(L,X,"|","|"),I(L,X,"|","\\vert"),I(F,X,"|","\\textbar",!0),I(L,X,"‖","\\|"),I(L,X,"‖","\\Vert"),I(F,X,"‖","\\textbardbl"),I(F,X,"~","\\textasciitilde"),I(F,X,"\\","\\textbackslash"),I(F,X,"^","\\textasciicircum"),I(L,_,"↑","\\uparrow",!0),I(L,_,"⇑","\\Uparrow",!0),I(L,_,"↓","\\downarrow",!0),I(L,_,"⇓","\\Downarrow",!0),I(L,_,"↕","\\updownarrow",!0),I(L,_,"⇕","\\Updownarrow",!0),I(L,U,"∐","\\coprod"),I(L,U,"⋁","\\bigvee"),I(L,U,"⋀","\\bigwedge"),I(L,U,"⨄","\\biguplus"),I(L,U,"⨄","\\bigcupplus"),I(L,U,"⨃","\\bigcupdot"),I(L,U,"⨇","\\bigdoublevee"),I(L,U,"⨈","\\bigdoublewedge"),I(L,U,"⋂","\\bigcap"),I(L,U,"⋃","\\bigcup"),I(L,U,"∫","\\int"),I(L,U,"∫","\\intop"),I(L,U,"∬","\\iint"),I(L,U,"∭","\\iiint"),I(L,U,"∏","\\prod"),I(L,U,"∑","\\sum"),I(L,U,"⨂","\\bigotimes"),I(L,U,"⨁","\\bigoplus"),I(L,U,"⨀","\\bigodot"),I(L,U,"⨉","\\bigtimes"),I(L,U,"∮","\\oint"),I(L,U,"∯","\\oiint"),I(L,U,"∰","\\oiiint"),I(L,U,"∱","\\intclockwise"),I(L,U,"∲","\\varointclockwise"),I(L,U,"⨌","\\iiiint"),I(L,U,"⨍","\\intbar"),I(L,U,"⨎","\\intBar"),I(L,U,"⨏","\\fint"),I(L,U,"⨒","\\rppolint"),I(L,U,"⨓","\\scpolint"),I(L,U,"⨕","\\pointint"),I(L,U,"⨖","\\sqint"),I(L,U,"⨗","\\intlarhk"),I(L,U,"⨘","\\intx"),I(L,U,"⨙","\\intcap"),I(L,U,"⨚","\\intcup"),I(L,U,"⨅","\\bigsqcap"),I(L,U,"⨆","\\bigsqcup"),I(L,U,"∫","\\smallint"),I(F,P,"…","\\textellipsis"),I(L,P,"…","\\mathellipsis"),I(F,P,"…","\\ldots",!0),I(L,P,"…","\\ldots",!0),I(L,P,"⋰","\\iddots",!0),I(L,P,"⋯","\\@cdots",!0),I(L,P,"⋱","\\ddots",!0),I(L,X,"⋮","\\varvdots"),I(F,X,"⋮","\\varvdots"),I(L,D,"ˊ","\\acute"),I(L,D,"`","\\grave"),I(L,D,"¨","\\ddot"),I(L,D,"…","\\dddot"),I(L,D,"….","\\ddddot"),I(L,D,"~","\\tilde"),I(L,D,"‾","\\bar"),I(L,D,"˘","\\breve"),I(L,D,"ˇ","\\check"),I(L,D,"^","\\hat"),I(L,D,"→","\\vec"),I(L,D,"˙","\\dot"),I(L,D,"˚","\\mathring"),I(L,R,"ı","\\imath",!0),I(L,R,"È·","\\jmath",!0),I(L,X,"ı","ı"),I(L,X,"È·","È·"),I(F,X,"ı","\\i",!0),I(F,X,"È·","\\j",!0),I(F,X,"ø","\\o",!0),I(L,R,"ø","\\o",!0),I(F,X,"Ø","\\O",!0),I(L,R,"Ø","\\O",!0),I(F,D,"ˊ","\\'"),I(F,D,"ˋ","\\`"),I(F,D,"ˆ","\\^"),I(F,D,"˜","\\~"),I(F,D,"ˉ","\\="),I(F,D,"˘","\\u"),I(F,D,"˙","\\."),I(F,D,"¸","\\c"),I(F,D,"˚","\\r"),I(F,D,"ˇ","\\v");I(F,D,"¨",'\\"'),I(F,D,"˝","\\H"),I(L,D,"ˊ","\\'"),I(L,D,"ˋ","\\`"),I(L,D,"ˆ","\\^"),I(L,D,"˜","\\~"),I(L,D,"ˉ","\\="),I(L,D,"˘","\\u"),I(L,D,"˙","\\."),I(L,D,"¸","\\c"),I(L,D,"˚","\\r"),I(L,D,"ˇ","\\v"),I(L,D,"¨",'\\"'),I(L,D,"˝","\\H");const Z={"--":!0,"---":!0,"``":!0,"''":!0};I(F,X,"–","--",!0),I(F,X,"–","\\textendash"),I(F,X,"—","---",!0),I(F,X,"—","\\textemdash"),I(F,X,"‘","`",!0),I(F,X,"‘","\\textquoteleft"),I(F,X,"’","'",!0),I(F,X,"’","\\textquoteright"),I(F,X,"“","``",!0),I(F,X,"“","\\textquotedblleft"),I(F,X,"”","''",!0),I(F,X,"”","\\textquotedblright"),I(L,X,"°","\\degree",!0),I(F,X,"°","\\degree"),I(F,X,"°","\\textdegree",!0),I(L,X,"£","\\pounds"),I(L,X,"£","\\mathsterling",!0),I(F,X,"£","\\pounds"),I(F,X,"£","\\textsterling",!0),I(L,X,"✠","\\maltese"),I(F,X,"✠","\\maltese"),I(L,X,"€","\\euro",!0),I(F,X,"€","\\euro",!0),I(F,X,"€","\\texteuro"),I(L,X,"©","\\copyright",!0),I(F,X,"©","\\textcopyright"),I(L,X,"⌀","\\diameter",!0),I(F,X,"⌀","\\diameter"),I(L,X,"𝛤","\\varGamma"),I(L,X,"𝛥","\\varDelta"),I(L,X,"𝛩","\\varTheta"),I(L,X,"𝛬","\\varLambda"),I(L,X,"𝛯","\\varXi"),I(L,X,"𝛱","\\varPi"),I(L,X,"𝛴","\\varSigma"),I(L,X,"𝛶","\\varUpsilon"),I(L,X,"𝛷","\\varPhi"),I(L,X,"𝛹","\\varPsi"),I(L,X,"𝛺","\\varOmega"),I(F,X,"𝛤","\\varGamma"),I(F,X,"𝛥","\\varDelta"),I(F,X,"𝛩","\\varTheta"),I(F,X,"𝛬","\\varLambda"),I(F,X,"𝛯","\\varXi"),I(F,X,"𝛱","\\varPi"),I(F,X,"𝛴","\\varSigma"),I(F,X,"𝛶","\\varUpsilon"),I(F,X,"𝛷","\\varPhi"),I(F,X,"𝛹","\\varPsi"),I(F,X,"𝛺","\\varOmega");const Y='0123456789/@."';for(let e=0;e<14;e++){const t=Y.charAt(e);I(L,X,t,t)}const J='0123456789!@*()-=+";:?/.,';for(let e=0;e<25;e++){const t=J.charAt(e);I(F,X,t,t)}const K="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";for(let e=0;e<52;e++){const t=K.charAt(e);I(L,R,t,t),I(F,X,t,t)}const Q="ÇÐÞçþℂℍℕℙℚℝℤℎℏℊℋℌℐℑℒℓ℘ℛℜℬℰℱℳℭℨ";for(let e=0;e<30;e++){const t=Q.charAt(e);I(L,R,t,t),I(F,X,t,t)}let ee="";for(let e=0;e<52;e++){ee=String.fromCharCode(55349,56320+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56372+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56424+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56580+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56736+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56788+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56840+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56944+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,56632+e),I(L,R,ee,ee),I(F,X,ee,ee);const t=K.charAt(e);ee=String.fromCharCode(55349,56476+e),I(L,R,t,ee),I(F,X,t,ee)}for(let e=0;e<10;e++)ee=String.fromCharCode(55349,57294+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,57314+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,57324+e),I(L,R,ee,ee),I(F,X,ee,ee),ee=String.fromCharCode(55349,57334+e),I(L,R,ee,ee),I(F,X,ee,ee);const te=function(e,t,r){return!$[t][e]||!$[t][e].replace||55349===e.charCodeAt(0)||Object.prototype.hasOwnProperty.call(Z,e)&&r&&(r.fontFamily&&"tt"===r.fontFamily.slice(4,6)||r.font&&"tt"===r.font.slice(4,6))||(e=$[t][e].replace),new T.TextNode(e)},re=(e,t)=>{if(0===e.children.length||"mtext"!==e.children[e.children.length-1].type){const r=new T.MathNode("mtext",[new T.TextNode(t.children[0].text)]);e.children.push(r)}else e.children[e.children.length-1].children[0].text+=t.children[0].text},ne=e=>{if("mrow"!==e.type&&"mstyle"!==e.type)return e;if(0===e.children.length)return e;const t=new T.MathNode("mrow");for(let r=0;r0&&" "===n.children[0].text.charAt(s-1)&&(n.children[0].text=n.children[0].text.slice(0,-1)+" ");for(const[t,r]of Object.entries(e.attributes))n.attributes[t]=r}return 1===t.children.length&&"mtext"===t.children[0].type?t.children[0]:t},se=function(e,t=!1){if(!(1!==e.length||e[0]instanceof u))return e[0];if(!t){e[0]instanceof v&&"mo"===e[0].type&&!e[0].attributes.fence&&(e[0].attributes.lspace="0em",e[0].attributes.rspace="0em");const t=e.length-1;e[t]instanceof v&&"mo"===e[t].type&&!e[t].attributes.fence&&(e[t].attributes.lspace="0em",e[t].attributes.rspace="0em")}return new T.MathNode("mrow",e)};function oe(e){if(!e)return!1;if("mi"===e.type&&1===e.children.length){const t=e.children[0];return t instanceof A&&"."===t.text}if("mtext"===e.type&&1===e.children.length){const t=e.children[0];return t instanceof A&&" "===t.text}if("mo"===e.type&&1===e.children.length&&"true"===e.getAttribute("separator")&&"0em"===e.getAttribute("lspace")&&"0em"===e.getAttribute("rspace")){const t=e.children[0];return t instanceof A&&","===t.text}return!1}const ae=(e,t)=>{const r=e[t],n=e[t+1];return"atom"===r.type&&","===r.text&&r.loc&&n.loc&&r.loc.end===n.loc.start},le=e=>"atom"===e.type&&"rel"===e.family||"mclass"===e.type&&"mrel"===e.mclass,ie=function(e,t,r=!1){if(!r&&1===e.length){const r=de(e[0],t);return r instanceof v&&"mo"===r.type&&(r.setAttribute("lspace","0em"),r.setAttribute("rspace","0em")),[r]}const n=[],s=[];let o;for(let r=0;r0&&le(e[t])&&le(e[t-1])&&r.setAttribute("lspace","0em"),"mn"===r.type&&o&&"mn"===o.type)o.children.push(...r.children);else if(oe(r)&&o&&"mn"===o.type)o.children.push(...r.children);else if(o&&"mn"===o.type&&t=1&&o&&("mn"===o.type||oe(o))){const e=r.children[0];e instanceof v&&"mn"===e.type&&o&&(e.children=[...o.children,...e.children],n.pop())}n.push(r),o=r}}return n},ce=function(e,t,r=!1){return se(ie(e,t,r),r)},de=function(t,r){if(!t)return new T.MathNode("mrow");if(i[t.type]){return i[t.type](t,r)}throw new e("Got group of unknown type: '"+t.type+"'")},me=e=>new T.MathNode("mtd",[],[],{padding:"0",width:"50%"}),pe=["mrow","mtd","mtable","mtr"],ue=e=>{for(const t of e.children)if(t.type&&pe.includes(t.type)){if(t.classes&&"tml-label"===t.classes[0]){return t.label}{const e=ue(t);if(e)return e}}else if(!t.type){const e=ue(t);if(e)return e}};function he(e,t,r,n){let s=null;1===e.length&&"tag"===e[0].type&&(s=e[0].tag,e=e[0].body);const o=ie(e,r);if(1===o.length&&o[0]instanceof x)return o[0];const a=n.displayMode||n.annotate?"none":n.wrap,l=0===o.length?null:o[0];let i=1===o.length&&null===s&&l instanceof v?o[0]:function(e,t,r){const n=[];let s=[],o=[],a=0,l=0,i=0;for(;l0&&s.push(new T.MathNode("mrow",o)),s.push(r),o=[];const e=new T.MathNode("mtd",s);e.style.textAlign="left",n.push(new T.MathNode("mtr",[e])),s=[],l+=1}else{if(o.push(r),r.type&&"mo"===r.type&&1===r.children.length&&!Object.prototype.hasOwnProperty.call(r.attributes,"movablelimits")){const n=r.children[0].text;if("([{⌊⌈⟨⟮⎰⟦⦃".indexOf(n)>-1)i+=1;else if(")]}⌋⌉⟩⟯⎱⟦⦄".indexOf(n)>-1)i-=1;else if(0===i&&"="===t&&"="===n){if(a+=1,a>1){o.pop();const e=new T.MathNode("mrow",o);s.push(e),o=[r]}}else if(0===i&&"tex"===t&&"∇"!==n){const t=l0){const e=new T.MathNode("mrow",o);s.push(e)}if(n.length>0){const e=new T.MathNode("mtd",s);e.style.textAlign="left";const t=new T.MathNode("mtr",[e]);n.push(t);const o=new T.MathNode("mtable",n);return r||(o.setAttribute("columnalign","left"),o.setAttribute("rowspacing","0em")),o}return T.newDocumentFragment(s)}(o,a,n.displayMode);if(s&&(i=((e,t,r,n)=>{t=ce(t[0].body,r),(t=ne(t)).classes.push("tml-tag");const s=ue(e);e=new T.MathNode("mtd",[e]);const o=[me(),e,me()];o[n?0:2].classes.push(n?"tml-left":"tml-right"),o[n?0:2].children.push(t);const a=new T.MathNode("mtr",o,["tml-tageqn"]);s&&a.setAttribute("id",s);const l=new T.MathNode("mtable",[a]);return l.style.width="100%",l.setAttribute("displaystyle","true"),l})(i,s,r,n.leqno)),n.annotate){const e=new T.MathNode("annotation",[new T.TextNode(t)]);e.setAttribute("encoding","application/x-tex"),i=new T.MathNode("semantics",[i,e])}const c=new T.MathNode("math",[i]);return n.xml&&c.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),i.style.width&&(c.style.width="100%"),n.displayMode&&(c.setAttribute("display","block"),c.style.display="block math",c.classes=["tml-display"]),c}const ge="acegıȷmnopqrsuvwxyzαγεηικμνοπρςστυχωϕ𝐚𝐜𝐞𝐠𝐦𝐧𝐨𝐩𝐪𝐫𝐬𝐮𝐯𝐰𝐱𝐲𝐳",fe="ABCDEFGHIJKLMNOPQRSTUVWXYZbdfhkltΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩβδλζφθψ𝐀𝐁𝐂𝐃𝐄𝐅𝐆𝐇𝐈𝐉𝐊𝐋𝐌𝐍𝐎𝐏𝐐𝐑𝐒𝐓𝐔𝐕𝐖𝐗𝐘𝐙𝐛𝐝𝐟𝐡𝐤𝐥𝐭",be=new Set(["\\alpha","\\gamma","\\delta","\\epsilon","\\eta","\\iota","\\kappa","\\mu","\\nu","\\pi","\\rho","\\sigma","\\tau","\\upsilon","\\chi","\\psi","\\omega","\\imath","\\jmath"]),ye=new Set(["\\Gamma","\\Delta","\\Sigma","\\Omega","\\beta","\\delta","\\lambda","\\theta","\\psi"]),we=(e,t)=>{const r=e.isStretchy?C(e):new T.MathNode("mo",[te(e.label,e.mode)]);if("\\vec"===e.label)r.style.transform="scale(0.75) translate(10%, 30%)";else if(r.style.mathStyle="normal",r.style.mathDepth="0",ke.has(e.label)&&o.isCharacterBox(e.base)){let t="";const n=e.base.text;(ge.indexOf(n)>-1||be.has(n))&&(t="tml-xshift"),(fe.indexOf(n)>-1||ye.has(n))&&(t="tml-capshift"),t&&r.classes.push(t)}e.isStretchy||r.setAttribute("stretchy","false");return new T.MathNode("\\c"===e.label?"munder":"mover",[de(e.base,t),r])},xe=new Set(["\\acute","\\grave","\\ddot","\\dddot","\\ddddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"]),ke=new Set(["\\acute","\\bar","\\breve","\\check","\\dot","\\ddot","\\grave","\\hat","\\mathring","\\'","\\^","\\~","\\=","\\u","\\.",'\\"',"\\r","\\H","\\v"]),ve={"\\`":"̀","\\'":"́","\\^":"̂","\\~":"̃","\\=":"̄","\\u":"̆","\\.":"̇",'\\"':"̈","\\r":"̊","\\H":"̋","\\v":"̌"};c({type:"accent",names:["\\acute","\\grave","\\ddot","\\dddot","\\ddddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\overparen","\\widecheck","\\widehat","\\wideparen","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(e,t)=>{const r=m(t[0]),n=!xe.has(e.funcName);return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,base:r}},mathmlBuilder:we}),c({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\c","\\u","\\.",'\\"',"\\r","\\H","\\v"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(e,t)=>{const r=m(t[0]),n=e.parser.mode;return"math"===n&&e.parser.settings.strict&&console.log(`Temml parse error: Command ${e.funcName} is invalid in math mode.`),"text"===n&&r.text&&1===r.text.length&&e.funcName in ve&&ge.indexOf(r.text)>-1?{type:"textord",mode:"text",text:r.text+ve[e.funcName]}:{type:"accent",mode:n,label:e.funcName,isStretchy:!1,base:r}},mathmlBuilder:we}),c({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underparen","\\utilde"],props:{numArgs:1},handler:({parser:e,funcName:t},r)=>{const n=r[0];return{type:"accentUnder",mode:e.mode,label:t,base:n}},mathmlBuilder:(e,t)=>{const r=C(e);r.style["math-depth"]=0;return new T.MathNode("munder",[de(e.base,t),r])}});const Ae={pt:800/803,pc:9600/803,dd:1238/1157*800/803,cc:12.792133216944668,nd:685/642*800/803,nc:1370/107*800/803,sp:1/65536*800/803,mm:25.4/72,cm:2.54/72,in:1/72,px:96/72},Ne=["em","ex","mu","pt","mm","cm","in","px","bp","pc","dd","cc","nd","nc","sp"],Te=function(e){return"string"!=typeof e&&(e=e.unit),Ne.indexOf(e)>-1},Se=e=>[1,.7,.5][Math.max(e-1,0)],qe=function(t,r){let n=t.number;if(r.maxSize[0]<0&&n>0)return{number:0,unit:"em"};const s=t.unit;switch(s){case"mm":case"cm":case"in":case"px":return n*Ae[s]>r.maxSize[1]?{number:r.maxSize[1],unit:"pt"}:{number:n,unit:s};case"em":case"ex":return"ex"===s&&(n*=.431),n=Math.min(n/Se(r.level),r.maxSize[0]),{number:o.round(n),unit:"em"};case"bp":return n>r.maxSize[1]&&(n=r.maxSize[1]),{number:n,unit:"pt"};case"pt":case"pc":case"dd":case"cc":case"nd":case"nc":case"sp":return n=Math.min(n*Ae[s],r.maxSize[1]),{number:o.round(n),unit:"pt"};case"mu":return n=Math.min(n/18,r.maxSize[0]),{number:o.round(n),unit:"em"};default:throw new e("Invalid unit: '"+s+"'")}},Oe=e=>{const t=new T.MathNode("mspace");return t.setAttribute("width",e+"em"),t},Me=(e,t=.3,r=0,n=!1)=>{if(null==e&&0===r)return Oe(t);const s=e?[e]:[];if(0!==t&&s.unshift(Oe(t)),r>0&&s.push(Oe(r)),n){const e=new T.MathNode("mpadded",s);return e.setAttribute("height","0"),e}return new T.MathNode("mrow",s)},Be=(e,t)=>Number(e)/Se(t),Ce=(e,t,r,n)=>{const s=B(e),o="eq"===e.slice(1,3),a="x"===e.charAt(1)?"1.75":"cd"===e.slice(2,4)?"3.0":o?"1.0":"2.0";s.setAttribute("lspace","0"),s.setAttribute("rspace",o?"0.5em":"0");const l=n.withLevel(n.level<2?2:3),i=Be(a,l.level),c=Be(a,3),d=Me(null,i.toFixed(4),0),m=Me(null,c.toFixed(4),0),p=Be(o?0:.3,l.level).toFixed(4);let u,h;const g=t&&t.body&&(t.body.body||t.body.length>0);if(g){let r=de(t,l);r=Me(r,p,p,"\\\\cdrightarrow"===e||"\\\\cdleftarrow"===e),u=new T.MathNode("mover",[r,m])}const f=r&&r.body&&(r.body.body||r.body.length>0);if(f){let e=de(r,l);e=Me(e,p,p),h=new T.MathNode("munder",[e,m])}let b;return b=g||f?g&&f?new T.MathNode("munderover",[s,h,u]):g?new T.MathNode("mover",[s,u]):new T.MathNode("munder",[s,h]):new T.MathNode("mover",[s,d]),"3.0"===a&&(b.style.height="1em"),b.setAttribute("accent","false"),b};c({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\yields","\\yieldsLeft","\\mesomerism","\\longrightharpoonup","\\longleftharpoondown","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler:({parser:e,funcName:t},r,n)=>({type:"xArrow",mode:e.mode,name:t,body:r[0],below:n[0]}),mathmlBuilder(e,t){const r=[Ce(e.name,e.body,e.below,t)];return r.unshift(Oe(.2778)),r.push(Oe(.2778)),new T.MathNode("mrow",r)}});const ze={"\\xtofrom":["\\xrightarrow","\\xleftarrow"],"\\xleftrightharpoons":["\\xleftharpoonup","\\xrightharpoondown"],"\\xrightleftharpoons":["\\xrightharpoonup","\\xleftharpoondown"],"\\yieldsLeftRight":["\\yields","\\yieldsLeft"],"\\equilibrium":["\\longrightharpoonup","\\longleftharpoondown"],"\\equilibriumRight":["\\longrightharpoonup","\\eqleftharpoondown"],"\\equilibriumLeft":["\\eqrightharpoonup","\\longleftharpoondown"]};c({type:"stackedArrow",names:["\\xtofrom","\\xleftrightharpoons","\\xrightleftharpoons","\\yieldsLeftRight","\\equilibrium","\\equilibriumRight","\\equilibriumLeft"],props:{numArgs:1,numOptionalArgs:1},handler({parser:e,funcName:t},r,n){const s=r[0]?{type:"hphantom",mode:e.mode,body:r[0]}:null,o=n[0]?{type:"hphantom",mode:e.mode,body:n[0]}:null;return{type:"stackedArrow",mode:e.mode,name:t,body:r[0],upperArrowBelow:o,lowerArrowBody:s,below:n[0]}},mathmlBuilder(e,t){const r=ze[e.name][0],n=ze[e.name][1],s=Ce(r,e.body,e.upperArrowBelow,t),o=Ce(n,e.lowerArrowBody,e.below,t);let a;const l=new T.MathNode("mpadded",[s]);if(l.setAttribute("voffset","0.3em"),l.setAttribute("height","+0.3em"),l.setAttribute("depth","-0.3em"),"\\equilibriumLeft"===e.name){const e=new T.MathNode("mpadded",[o]);e.setAttribute("width","0.5em"),a=new T.MathNode("mpadded",[Oe(.2778),e,l,Oe(.2778)])}else l.setAttribute("width","\\equilibriumRight"===e.name?"0.5em":"0"),a=new T.MathNode("mpadded",[Oe(.2778),l,o,Oe(.2778)]);return a.setAttribute("voffset","-0.18em"),a.setAttribute("height","-0.18em"),a.setAttribute("depth","+0.18em"),a}});const Ee={};function $e({type:e,names:t,props:r,handler:n,mathmlBuilder:s}){const o={type:e,numArgs:r.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:n};for(let e=0;e":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Ge=e=>"textord"===e.type&&"@"===e.text;function je(e,t,r){const n=De[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":{const e={type:"atom",text:n,mode:"math",family:"rel"},s={type:"ordgroup",mode:"math",body:[r.callFunction("\\\\cdleft",[t[0]],[]),r.callFunction("\\Big",[e],[]),r.callFunction("\\\\cdright",[t[1]],[])],semisimple:!0};return r.callFunction("\\\\cdparent",[s],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{const e={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[e],[])}default:return{type:"textord",text:" ",mode:"math"}}}c({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler:({parser:e,funcName:t},r)=>({type:"cdlabel",mode:e.mode,side:t.slice(4),label:r[0]}),mathmlBuilder(e,t){if(0===e.label.body.length)return new T.MathNode("mrow",t);const r=new T.MathNode("mtd",[de(e.label,t)]);r.style.padding="0";const n=new T.MathNode("mtr",[r]),s=new T.MathNode("mtable",[n]),o=new T.MathNode("mpadded",[s]);return o.setAttribute("width","0"),o.setAttribute("displaystyle","false"),o.setAttribute("scriptlevel","1"),"left"===e.side&&(o.style.display="flex",o.style.justifyContent="flex-end"),o}}),c({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler:({parser:e},t)=>({type:"cdlabelparent",mode:e.mode,fragment:t[0]}),mathmlBuilder:(e,t)=>new T.MathNode("mrow",[de(e.fragment,t)])});const Pe=e=>({type:"ordgroup",mode:"math",body:e,semisimple:!0}),Re=(e,t)=>({type:t,mode:"math",body:Pe(e)});class Ue{constructor(e,t,r){this.lexer=e,this.start=t,this.end=r}static range(e,t){return t?e&&e.loc&&t.loc&&e.loc.lexer===t.loc.lexer?new Ue(e.loc.lexer,e.loc.start,t.loc.end):null:e&&e.loc}}class He{constructor(e,t){this.text=e,this.loc=t}range(e,t){return new He(t,Ue.range(this,e))}}const Ve=0,_e=1,We=2,Xe=3,Ze={};function Ye(e,t){Ze[e]=t}const Je=Ze;Ye("\\noexpand",(function(e){const t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}})),Ye("\\expandafter",(function(e){const t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}})),Ye("\\@firstoftwo",(function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}})),Ye("\\@secondoftwo",(function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}})),Ye("\\@ifnextchar",(function(e){const t=e.consumeArgs(3);e.consumeSpaces();const r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}})),Ye("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),Ye("\\TextOrMath",(function(e){const t=e.consumeArgs(2);return"text"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}}));const Ke=e=>{let t="";for(let r=e.length-1;r>-1;r--)t+=e[r].text;return t},Qe={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15},et=e=>{const t=e.future().text;return"EOF"===t?[null,""]:[Qe[t.charAt(0)],t]},tt=(e,t,r)=>{for(let n=1;n=0;e--){const s=t[e].loc.start;s>n&&(r+=" ",n=s),r+=t[e].text,n+=t[e].text.length}return r}Ye("\\char",(function(t){let r,n=t.popToken(),s="";if("'"===n.text)r=8,n=t.popToken();else if('"'===n.text)r=16,n=t.popToken();else if("`"===n.text)if(n=t.popToken(),"\\"===n.text[0])s=n.text.charCodeAt(1);else{if("EOF"===n.text)throw new e("\\char` missing argument");s=n.text.charCodeAt(0)}else r=10;if(r){let o,a=n.text;if(s=Qe[a.charAt(0)],null==s||s>=r)throw new e(`Invalid base-${r} digit ${n.text}`);for(s=tt(s,a,r),[o,a]=et(t);null!=o&&o":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcap":"\\dotsb","\\bigsqcup":"\\dotsb","\\bigtimes":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};Ye("\\dots",(function(e){let t="\\dotso";const r=e.expandAfterFuture().text;return r in nt?t=nt[r]:("\\not"===r.slice(0,4)||r in $.math&&["bin","rel"].includes($.math[r].group))&&(t="\\dotsb"),t}));const st={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};Ye("\\dotso",(function(e){return e.future().text in st?"\\ldots\\,":"\\ldots"})),Ye("\\dotsc",(function(e){const t=e.future().text;return t in st&&","!==t?"\\ldots\\,":"\\ldots"})),Ye("\\cdots",(function(e){return e.future().text in st?"\\@cdots\\,":"\\@cdots"})),Ye("\\dotsb","\\cdots"),Ye("\\dotsm","\\cdots"),Ye("\\dotsi","\\!\\cdots"),Ye("\\idotsint","\\dotsi"),Ye("\\dotsx","\\ldots\\,"),Ye("\\DOTSI","\\relax"),Ye("\\DOTSB","\\relax"),Ye("\\DOTSX","\\relax"),Ye("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),Ye("\\,","{\\tmspace+{3mu}{.1667em}}"),Ye("\\thinspace","\\,"),Ye("\\>","\\mskip{4mu}"),Ye("\\:","{\\tmspace+{4mu}{.2222em}}"),Ye("\\medspace","\\:"),Ye("\\;","{\\tmspace+{5mu}{.2777em}}"),Ye("\\thickspace","\\;"),Ye("\\!","{\\tmspace-{3mu}{.1667em}}"),Ye("\\negthinspace","\\!"),Ye("\\negmedspace","{\\tmspace-{4mu}{.2222em}}"),Ye("\\negthickspace","{\\tmspace-{5mu}{.277em}}"),Ye("\\enspace","\\kern.5em "),Ye("\\enskip","\\hskip.5em\\relax"),Ye("\\quad","\\hskip1em\\relax"),Ye("\\qquad","\\hskip2em\\relax"),Ye("\\AA","\\TextOrMath{\\Angstrom}{\\mathring{A}}\\relax"),Ye("\\tag","\\@ifstar\\tag@literal\\tag@paren"),Ye("\\tag@paren","\\tag@literal{({#1})}"),Ye("\\tag@literal",(t=>{if(t.macros.get("\\df@tag"))throw new e("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"})),Ye("\\notag","\\nonumber"),Ye("\\nonumber","\\gdef\\@eqnsw{0}"),Ye("\\bmod","\\mathbin{\\text{mod}}"),Ye("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),Ye("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),Ye("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),Ye("\\newline","\\\\\\relax"),Ye("\\TeX","\\textrm{T}\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125em\\textrm{X}"),Ye("\\LaTeX","\\textrm{L}\\kern-.35em\\raisebox{0.2em}{\\scriptstyle A}\\kern-.15em\\TeX"),Ye("\\Temml","\\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}}"),Ye("\\hspace","\\@ifstar\\@hspacer\\@hspace"),Ye("\\@hspace","\\hskip #1\\relax"),Ye("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),Ye("\\colon",'\\mathpunct{\\char"3a}'),Ye("\\prescript","\\pres@cript{_{#1}^{#2}}{}{#3}"),Ye("\\ordinarycolon",'\\char"3a'),Ye("\\vcentcolon","\\mathrel{\\raisebox{0.035em}{\\ordinarycolon}}"),Ye("\\coloneq",'\\mathrel{\\raisebox{0.035em}{\\ordinarycolon}\\char"2212}'),Ye("\\Coloneq",'\\mathrel{\\char"2237\\char"2212}'),Ye("\\Eqqcolon",'\\mathrel{\\char"3d\\char"2237}'),Ye("\\Eqcolon",'\\mathrel{\\char"2212\\char"2237}'),Ye("\\colonapprox",'\\mathrel{\\raisebox{0.035em}{\\ordinarycolon}\\char"2248}'),Ye("\\Colonapprox",'\\mathrel{\\char"2237\\char"2248}'),Ye("\\colonsim",'\\mathrel{\\raisebox{0.035em}{\\ordinarycolon}\\char"223c}'),Ye("\\Colonsim",'\\mathrel{\\raisebox{0.035em}{\\ordinarycolon}\\char"223c}'),Ye("\\ratio","\\vcentcolon"),Ye("\\coloncolon","\\dblcolon"),Ye("\\colonequals","\\coloneqq"),Ye("\\coloncolonequals","\\Coloneqq"),Ye("\\equalscolon","\\eqqcolon"),Ye("\\equalscoloncolon","\\Eqqcolon"),Ye("\\colonminus","\\coloneq"),Ye("\\coloncolonminus","\\Coloneq"),Ye("\\minuscolon","\\eqcolon"),Ye("\\minuscoloncolon","\\Eqcolon"),Ye("\\coloncolonapprox","\\Colonapprox"),Ye("\\coloncolonsim","\\Colonsim"),Ye("\\notni","\\mathrel{\\char`∌}"),Ye("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),Ye("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),Ye("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),Ye("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),Ye("\\varlimsup","\\DOTSB\\operatorname*{\\overline{\\text{lim}}}"),Ye("\\varliminf","\\DOTSB\\operatorname*{\\underline{\\text{lim}}}"),Ye("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{\\text{lim}}}"),Ye("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{\\text{lim}}}"),Ye("\\centerdot","{\\medspace\\rule{0.167em}{0.189em}\\medspace}"),Ye("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),Ye("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),Ye("\\plim","\\DOTSB\\operatorname*{plim}"),Ye("\\leftmodels","\\mathop{\\reflectbox{$\\models$}}"),Ye("\\bra","\\mathinner{\\langle{#1}|}"),Ye("\\ket","\\mathinner{|{#1}\\rangle}"),Ye("\\braket","\\mathinner{\\langle{#1}\\rangle}"),Ye("\\Bra","\\left\\langle#1\\right|"),Ye("\\Ket","\\left|#1\\right\\rangle");const ot=(e,t)=>{const r=`}\\,\\middle${"|"===t[0]?"\\vert":"\\Vert"}\\,{`;return e.slice(0,t.index)+r+e.slice(t.index+t[0].length)};Ye("\\Braket",(function(e){let t=rt(e);const r=/\|\||\||\\\|/g;let n;for(;null!==(n=r.exec(t));)t=ot(t,n);return"\\left\\langle{"+t+"}\\right\\rangle"})),Ye("\\Set",(function(e){let t=rt(e);const r=/\|\||\||\\\|/.exec(t);return r&&(t=ot(t,r)),"\\left\\{\\:{"+t+"}\\:\\right\\}"})),Ye("\\set",(function(e){return"\\{{"+rt(e).replace(/\|/,"}\\mid{")+"}\\}"})),Ye("\\angln","{\\angl n}"),Ye("\\odv","\\@ifstar\\odv@next\\odv@numerator"),Ye("\\odv@numerator","\\frac{\\mathrm{d}#1}{\\mathrm{d}#2}"),Ye("\\odv@next","\\frac{\\mathrm{d}}{\\mathrm{d}#2}#1"),Ye("\\pdv","\\@ifstar\\pdv@next\\pdv@numerator");const at=e=>{const t=e[0][0].text,r=Ke(e[1]).split(","),n=String(r.length),s="1"===n?"\\partial":`\\partial^${n}`;let o="";return r.map((e=>{o+="\\partial "+e.trim()+"\\,"})),[t,s,o.replace(/\\,$/,"")]};function lt(e){const t=[];e.consumeSpaces();let r=e.fetch().text;for("\\relax"===r&&(e.consume(),e.consumeSpaces(),r=e.fetch().text);"\\hline"===r||"\\hdashline"===r;)e.consume(),t.push("\\hdashline"===r),e.consumeSpaces(),r=e.fetch().text;return t}Ye("\\pdv@numerator",(function(e){const[t,r,n]=at(e.consumeArgs(2));return`\\frac{${r} ${t}}{${n}}`})),Ye("\\pdv@next",(function(e){const[t,r,n]=at(e.consumeArgs(2));return`\\frac{${r}}{${n}} ${t}`})),Ye("\\upalpha","\\up@greek{\\alpha}"),Ye("\\upbeta","\\up@greek{\\beta}"),Ye("\\upgamma","\\up@greek{\\gamma}"),Ye("\\updelta","\\up@greek{\\delta}"),Ye("\\upepsilon","\\up@greek{\\epsilon}"),Ye("\\upzeta","\\up@greek{\\zeta}"),Ye("\\upeta","\\up@greek{\\eta}"),Ye("\\uptheta","\\up@greek{\\theta}"),Ye("\\upiota","\\up@greek{\\iota}"),Ye("\\upkappa","\\up@greek{\\kappa}"),Ye("\\uplambda","\\up@greek{\\lambda}"),Ye("\\upmu","\\up@greek{\\mu}"),Ye("\\upnu","\\up@greek{\\nu}"),Ye("\\upxi","\\up@greek{\\xi}"),Ye("\\upomicron","\\up@greek{\\omicron}"),Ye("\\uppi","\\up@greek{\\pi}"),Ye("\\upalpha","\\up@greek{\\alpha}"),Ye("\\uprho","\\up@greek{\\rho}"),Ye("\\upsigma","\\up@greek{\\sigma}"),Ye("\\uptau","\\up@greek{\\tau}"),Ye("\\upupsilon","\\up@greek{\\upsilon}"),Ye("\\upphi","\\up@greek{\\phi}"),Ye("\\upchi","\\up@greek{\\chi}"),Ye("\\uppsi","\\up@greek{\\psi}"),Ye("\\upomega","\\up@greek{\\omega}"),Ye("\\invamp",'\\mathbin{\\char"214b}'),Ye("\\parr",'\\mathbin{\\char"214b}'),Ye("\\with",'\\mathbin{\\char"26}'),Ye("\\multimapinv",'\\mathrel{\\char"27dc}'),Ye("\\multimapboth",'\\mathrel{\\char"29df}'),Ye("\\scoh",'{\\mkern5mu\\char"2322\\mkern5mu}'),Ye("\\sincoh",'{\\mkern5mu\\char"2323\\mkern5mu}'),Ye("\\coh",'{\\mkern5mu\\rule{}{0.7em}\\mathrlap{\\smash{\\raise2mu{\\char"2322}}}\n{\\smash{\\lower4mu{\\char"2323}}}\\mkern5mu}'),Ye("\\incoh",'{\\mkern5mu\\rule{}{0.7em}\\mathrlap{\\smash{\\raise2mu{\\char"2323}}}\n{\\smash{\\lower4mu{\\char"2322}}}\\mkern5mu}'),Ye("\\standardstate","\\text{\\tiny\\char`⦵}");const it=t=>{if(!t.parser.settings.displayMode)throw new e(`{${t.envName}} can be used only in display mode.`)},ct=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/,dt=e=>{let t=e.get("\\arraystretch");"string"!=typeof t&&(t=Ke(t.tokens)),t=isNaN(t)?null:Number(t);let r=e.get("\\arraycolsep");"string"!=typeof r&&(r=Ke(r.tokens));const n=ct.exec(r);return[t,n?{number:+(n[1]+n[2]),unit:n[3]}:null]},mt=t=>{let r="";for(let n=0;n1||!a)&&h.pop(),f.push(mt(r.body)),b.length{const t=new T.MathNode("mtd",[]);return t.style={padding:"0",width:"50%"},e.envClasses.includes("multline")&&(t.style.width="7.5%"),t},bt=function(e,t){const r=[],n=e.body.length,s=e.hLinesBeforeRow;for(let o=0;o0&&(2===s[0].length?d.children.forEach((e=>{e.style.borderTop="0.15em double"})):d.children.forEach((e=>{e.style.borderTop=s[0][0]?"0.06em dashed":"0.06em solid"}))),s[o+1].length>0&&(2===s[o+1].length?d.children.forEach((e=>{e.style.borderBottom="0.15em double"})):d.children.forEach((e=>{e.style.borderBottom=s[o+1][0]?"0.06em dashed":"0.06em solid"})));let p=!0;for(let e=0;e0&&(o=e.envClasses.includes("abut")||e.envClasses.includes("cases")?"0":e.envClasses.includes("small")?"0.1389":e.envClasses.includes("cd")?"0.25":"0.4",a="em"),e.arraycolsep){const r=qe(e.arraycolsep,t);o=r.number.toFixed(4),a=r.unit}if(o){const t=0===r.length?0:r[0].children.length,n=(r,n)=>0===r&&0===n||r===t-1&&1===n?"0":"align"!==e.envClasses[0]?o:1===n?"0":e.autoTag?r%2?"1":"0":r%2?"0":"1";for(let e=0;e0){const t=e.envClasses.includes("align")||e.envClasses.includes("alignat");for(let n=0;n1&&e.envClasses.includes("cases")&&(s.children[1].style.paddingLeft="1em"),e.envClasses.includes("cases")||e.envClasses.includes("subarray"))for(const e of s.children)e.classes.push("tml-left")}}let l=new T.MathNode("mtable",r);e.envClasses.length>0&&(e.envClasses.includes("jot")?l.classes.push("tml-jot"):e.envClasses.includes("small")&&l.classes.push("tml-small")),"display"===e.scriptLevel&&l.setAttribute("displaystyle","true"),(e.autoTag||e.envClasses.includes("multline"))&&(l.style.width="100%");let i="";if(e.cols&&e.cols.length>0){const t=e.cols;let r=!1,n=0,s=t.length;for(;"separator"===t[n].type;)n+=1;for(;"separator"===t[s-1].type;)s-=1;if("separator"===t[0].type){const e="separator"===t[1].type?"0.15em double":"|"===t[0].separator?"0.06em solid ":"0.06em dashed ";for(const t of l.children)t.children[0].style.borderLeft=e}let o=e.autoTag?0:-1;for(let e=n;e0?i:"center ")+"right "),i&&l.setAttribute("columnalign",i.trim()),e.envClasses.includes("small")&&(l=new T.MathNode("mstyle",[l]),l.setAttribute("scriptlevel","1")),l},yt=function(t,r){-1===t.envName.indexOf("ed")&&it(t);const n="split"===t.envName,s=[],o=ut(t.parser,{cols:s,emptySingleRow:!0,autoTag:n?void 0:pt(t.envName),envClasses:["abut","jot"],maxNumCols:"split"===t.envName?2:void 0,leqno:t.parser.settings.leqno},"display");let a,l=0;const i=t.envName.indexOf("at")>-1;if(r[0]&&i){let t="";for(let e=0;e0?new Array(o.body[0].length).fill({type:"align",align:n}):[];const[a,l]=dt(t.parser.gullet.macros);return o.arraystretch=a,!l||6===l&&"pt"===l||(o.arraycolsep=l),r?{type:"leftright",mode:t.mode,body:[o],left:r[0],right:r[1],rightColor:void 0}:o},mathmlBuilder:bt}),$e({type:"array",names:["bordermatrix"],props:{numArgs:0},handler(e){const t=ut(e.parser,{cols:[],envClasses:["bordermatrix"]},"text");return t.cols=t.body.length>0?new Array(t.body[0].length).fill({type:"align",align:"c"}):[],t.envClasses=[],t.arraystretch=1,"matrix"===e.envName?t:((e,t)=>{const r=e.body;r[0].shift();const n=new Array(r.length-1).fill().map((()=>[]));for(let e=1;e[]));for(let e=0;e[])),envClasses:[],scriptLevel:"text",arraystretch:1,labels:new Array(n.length).fill(""),arraycolsep:{number:.04,unit:"em"}},a={type:"styling",mode:"math",scriptLevel:"text",body:[{type:"array",mode:"math",body:s,cols:new Array(s.length).fill({type:"align",align:"c"}),rowGaps:new Array(s.length-1).fill(null),hLinesBeforeRow:new Array(s.length+1).fill().map((()=>[])),envClasses:[],scriptLevel:"text",arraystretch:1,labels:new Array(s.length).fill(""),arraycolsep:null}]},l={type:"leftright",mode:"math",body:[e],left:t?t[0]:"(",right:t?t[1]:")",rightColor:void 0};return Pe([o,{type:"supsub",mode:"math",base:{type:"op",mode:"math",limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!0,symbol:!1,stack:!0,suppressBaseShift:!0,body:[l]},sup:a,sub:null}])})(t,e.delimiters)},mathmlBuilder:bt}),$e({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(e){const t=ut(e.parser,{type:"small"},"script");return t.envClasses=["small"],t},mathmlBuilder:bt}),$e({type:"array",names:["subarray"],props:{numArgs:1},handler(t,r){const n=(Fe(r[0])?[r[0]]:Ie(r[0],"ordgroup").body).map((function(t){const r=Le(t).text;if(-1!=="lc".indexOf(r))return{type:"align",align:r};throw new e("Unknown column alignment: "+r,t)}));if(n.length>1)throw new e("{subarray} can contain only one column");let s={cols:n,envClasses:["small"]};if(s=ut(t.parser,s,"script"),s.body.length>0&&s.body[0].length>1)throw new e("{subarray} can contain only one column");return s},mathmlBuilder:bt}),$e({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(e){const t=ut(e.parser,{cols:[],envClasses:["cases"]},ht(e.envName));return{type:"leftright",mode:e.mode,body:[t],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},mathmlBuilder:bt}),$e({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:yt,mathmlBuilder:bt}),$e({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:yt,mathmlBuilder:bt}),$e({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(e){"gathered"!==e.envName&&it(e);const t={cols:[],envClasses:["abut","jot"],autoTag:pt(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return ut(e.parser,t,"display")},mathmlBuilder:bt}),$e({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(e){it(e);const t={autoTag:pt(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,envClasses:["align"],leqno:e.parser.settings.leqno};return ut(e.parser,t,"display")},mathmlBuilder:bt}),$e({type:"array",names:["multline","multline*"],props:{numArgs:0},handler(e){it(e);const t={autoTag:"multline"===e.envName,maxNumCols:1,envClasses:["jot","multline"],leqno:e.parser.settings.leqno};return ut(e.parser,t,"display")},mathmlBuilder:bt}),$e({type:"array",names:["CD"],props:{numArgs:0},handler:t=>(it(t),function(t){const r=[];for(t.gullet.beginGroup(),t.gullet.macros.set("\\cr","\\\\\\relax"),t.gullet.beginGroup();;){r.push(t.parseExpression(!1,"\\\\")),t.gullet.endGroup(),t.gullet.beginGroup();const n=t.fetch().text;if("&"!==n&&"\\\\"!==n){if("\\end"===n){0===r[r.length-1].length&&r.pop();break}throw new e("Expected \\\\ or \\cr or \\end",t.nextToken)}t.consume()}let n=[];const s=[n];for(let l=0;l-1);else{if(!("<>AV".indexOf(s)>-1))throw new e('Expected one of "<>AV=|." after @.');for(let t=0;t<2;t++){let n=!0;for(let c=r+1;c{let s=["(",")"];if("\\bordermatrix"===t&&n[0]&&n[0].body){const e=n[0].body;2===e.length&&"atom"===e[0].type&&"atom"===e[1].type&&"open"===e[0].family&&"close"===e[1].family&&(s=[e[0].text,e[1].text])}e.consumeSpaces(),e.consume();const o=wt.bordermatrix,a={mode:e.mode,envName:t.slice(1),delimiters:s,parser:e},l=o.handler(a);return e.expect("}",!0),l}}),c({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler({parser:t,token:r},n){const s=Ie(n[0],"ordgroup").body;let o="";for(let e=0;e{let t=e.toString(16);return 1===t.length&&(t="0"+t),t},St=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}'),qt=(t,r)=>{let n="";if("HTML"===t){if(!xt.test(r))throw new e("Invalid HTML input.");n=r}else if("RGB"===t){if(!vt.test(r))throw new e("Invalid RGB input.");r.split(",").map((e=>{n+=Tt(Number(e.trim()))}))}else{if(!At.test(r))throw new e("Invalid rbg input.");r.split(",").map((t=>{const r=Number(t.trim());if(r>1)throw new e("Color rgb input must be < 1.");n+=Tt(Number((255*r).toFixed(0)))}))}return"#"!==n.charAt(0)&&(n="#"+n),n},Ot=(t,r,n)=>{const s=`\\\\color@${t}`;if(!kt.exec(t))throw new e("Invalid color: '"+t+"'",n);return Nt.test(t)?"#"+t:("#"===t.charAt(0)||(r.has(s)?t=r.get(s).tokens[0].text:St[t]&&(t=St[t])),t)},Mt=(e,t)=>{let r=ie(e.body,t.withColor(e.color));return 0===r.length&&r.push(new T.MathNode("mrow")),r=r.map((t=>(t.style.color=e.color,t))),T.newDocumentFragment(r)};c({type:"color",names:["\\textcolor"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,argTypes:["raw","raw","original"]},handler({parser:e,token:t},r,n){const s=n[0]&&Ie(n[0],"raw").string;let o="";if(s){const e=Ie(r[0],"raw").string;o=qt(s,e)}else o=Ot(Ie(r[0],"raw").string,e.gullet.macros,t);const a=r[1];return{type:"color",mode:e.mode,color:o,isTextColor:!0,body:p(a)}},mathmlBuilder:Mt}),c({type:"color",names:["\\color"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0,argTypes:["raw","raw"]},handler({parser:e,breakOnTokenText:t,token:r},n,s){const o=s[0]&&Ie(s[0],"raw").string;let a="";if(o){const e=Ie(n[0],"raw").string;a=qt(o,e)}else a=Ot(Ie(n[0],"raw").string,e.gullet.macros,r);const l=e.parseExpression(!0,t,!0);return{type:"color",mode:e.mode,color:a,isTextColor:!1,body:l}},mathmlBuilder:Mt}),c({type:"color",names:["\\definecolor"],props:{numArgs:3,allowedInText:!0,argTypes:["raw","raw","raw"]},handler({parser:t,funcName:r,token:n},s){const o=Ie(s[0],"raw").string;if(!/^[A-Za-z]+$/.test(o))throw new e("Color name must be latin letters.",n);const a=Ie(s[1],"raw").string;if(!["HTML","RGB","rgb"].includes(a))throw new e("Color model must be HTML, RGB, or rgb.",n);const l=Ie(s[2],"raw").string,i=qt(a,l);return t.gullet.macros.set(`\\\\color@${o}`,{tokens:[{text:i}],numArgs:0}),{type:"internal",mode:t.mode}}}),c({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler({parser:e},t,r){const n="["===e.gullet.future().text?e.parseSizeGroup(!0):null,s=!e.settings.displayMode;return{type:"cr",mode:e.mode,newLine:s,size:n&&Ie(n,"size").value}},mathmlBuilder(e,t){const r=new T.MathNode("mo");if(e.newLine&&(r.setAttribute("linebreak","newline"),e.size)){const n=qe(e.size,t);r.setAttribute("height",n.number+n.unit)}return r}});const Bt={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},Ct=t=>{const r=t.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(r))throw new e("Expected a control sequence",t);return r},zt=(e,t,r,n)=>{let s=e.gullet.macros.get(r.text);null==s&&(r.noexpand=!0,s={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,s,n)};c({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler({parser:t,funcName:r}){t.consumeSpaces();const n=t.fetch();if(Bt[n.text])return"\\global"!==r&&"\\\\globallong"!==r||(n.text=Bt[n.text]),Ie(t.parseFunction(),"internal");throw new e("Invalid token after macro prefix",n)}}),c({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler({parser:t,funcName:r}){let n=t.gullet.popToken();const s=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(s))throw new e("Expected a control sequence",n);let o,a=0;const l=[[]];for(;"{"!==t.gullet.future().text;)if(n=t.gullet.popToken(),"#"===n.text){if("{"===t.gullet.future().text){o=t.gullet.future(),l[a].push("{");break}if(n=t.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new e(`Invalid argument number "${n.text}"`);if(parseInt(n.text)!==a+1)throw new e(`Argument number "${n.text}" out of order`);a++,l.push([])}else{if("EOF"===n.text)throw new e("Expected a macro definition");l[a].push(n.text)}let{tokens:i}=t.gullet.consumeArg();if(o&&i.unshift(o),"\\edef"===r||"\\xdef"===r){if(i=t.gullet.expandTokens(i),i.length>t.gullet.settings.maxExpand)throw new e("Too many expansions in an "+r);i.reverse()}return t.gullet.macros.set(s,{tokens:i,numArgs:a,delimiters:l},r===Bt[r]),{type:"internal",mode:t.mode}}}),c({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler({parser:e,funcName:t}){const r=Ct(e.gullet.popToken());e.gullet.consumeSpaces();const n=(e=>{let t=e.gullet.popToken();return"="===t.text&&(t=e.gullet.popToken()," "===t.text&&(t=e.gullet.popToken())),t})(e);return zt(e,r,n,"\\\\globallet"===t),{type:"internal",mode:e.mode}}}),c({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler({parser:e,funcName:t}){const r=Ct(e.gullet.popToken()),n=e.gullet.popToken(),s=e.gullet.popToken();return zt(e,r,s,"\\\\globalfuture"===t),e.gullet.pushToken(s),e.gullet.pushToken(n),{type:"internal",mode:e.mode}}}),c({type:"internal",names:["\\newcommand","\\renewcommand","\\providecommand"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler({parser:t,funcName:r}){let n="";const s=t.gullet.popToken();"{"===s.text?(n=Ct(t.gullet.popToken()),t.gullet.popToken()):n=Ct(s);const o=t.gullet.isDefined(n);if(o&&"\\newcommand"===r)throw new e(`\\newcommand{${n}} attempting to redefine ${n}; use \\renewcommand`);if(!o&&"\\renewcommand"===r)throw new e(`\\renewcommand{${n}} when command ${n} does not yet exist; use \\newcommand`);let a=0;if("["===t.gullet.future().text){let r=t.gullet.popToken();if(r=t.gullet.popToken(),!/^[0-9]$/.test(r.text))throw new e(`Invalid number of arguments: "${r.text}"`);if(a=parseInt(r.text),r=t.gullet.popToken(),"]"!==r.text)throw new e(`Invalid argument "${r.text}"`)}const{tokens:l}=t.gullet.consumeArg();return"\\providecommand"===r&&t.gullet.macros.has(n)||t.gullet.macros.set(n,{tokens:l,numArgs:a}),{type:"internal",mode:t.mode}}});const Et={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},$t=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","⦇","\\llparenthesis","⦈","\\rrparenthesis","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","<",">","\\langle","⟨","\\rangle","⟩","\\lAngle","⟪","\\rAngle","⟫","\\llangle","⦉","\\rrangle","⦊","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱","\\llbracket","\\rrbracket","⟦","⟦","\\lBrace","\\rBrace","⦃","⦄","/","\\backslash","|","\\vert","\\|","\\Vert","‖","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."],It=["}","\\left","\\middle","\\right"],Lt=e=>e.length>0&&($t.includes(e)||Et[e]||It.includes(e)),Ft=[0,1.2,1.8,2.4,3];function Dt(t,r){const n=Fe(t);if(n&&$t.includes(n.text))return["<","\\lt"].includes(n.text)&&(n.text="⟨"),[">","\\gt"].includes(n.text)&&(n.text="⟩"),n;throw new e(n?`Invalid delimiter '${n.text}' after '${r.funcName}'`:`Invalid delimiter type '${t.type}'`,t)}const Gt=["/","\\","\\backslash","\\vert","|"];c({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(e,t)=>{const r=Dt(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:Et[e.funcName].size,mclass:Et[e.funcName].mclass,delim:r.text}},mathmlBuilder:e=>{const t=[];"."===e.delim&&(e.delim=""),t.push(te(e.delim,e.mode));const r=new T.MathNode("mo",t);return"mopen"===e.mclass||"mclose"===e.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),(Gt.includes(e.delim)||e.delim.indexOf("arrow")>-1)&&r.setAttribute("stretchy","true"),r.setAttribute("symmetric","true"),r.setAttribute("minsize",Ft[e.size]+"em"),r.setAttribute("maxsize",Ft[e.size]+"em"),r}}),c({type:"leftright-right",names:["\\right"],props:{numArgs:1,argTypes:["primitive"]},handler:(e,t)=>({type:"leftright-right",mode:e.parser.mode,delim:Dt(t[0],e).text})}),c({type:"leftright",names:["\\left"],props:{numArgs:1,argTypes:["primitive"]},handler:(t,r)=>{const n=Dt(r[0],t),s=t.parser;++s.leftrightDepth;let o=s.parseExpression(!1,null,!0),a=s.fetch();for(;"\\middle"===a.text;){s.consume();const t=s.fetch().text;if(!$.math[t])throw new e(`Invalid delimiter '${t}' after '\\middle'`);Dt({type:"atom",mode:"math",text:t},{funcName:"\\middle"}),o.push({type:"middle",mode:"math",delim:t}),s.consume(),o=o.concat(s.parseExpression(!1,null,!0)),a=s.fetch()}--s.leftrightDepth,s.expect("\\right",!1);const l=Ie(s.parseFunction(),"leftright-right");return{type:"leftright",mode:s.mode,body:o,left:n.text,right:l.delim}},mathmlBuilder:(e,t)=>{!function(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}(e);const r=ie(e.body,t);"."===e.left&&(e.left="");const n=new T.MathNode("mo",[te(e.left,e.mode)]);n.setAttribute("fence","true"),n.setAttribute("form","prefix"),("/"===e.left||"\\"===e.left||e.left.indexOf("arrow")>-1)&&n.setAttribute("stretchy","true"),r.unshift(n),"."===e.right&&(e.right="");const s=new T.MathNode("mo",[te(e.right,e.mode)]);if(s.setAttribute("fence","true"),s.setAttribute("form","postfix"),("∖"===e.right||e.right.indexOf("arrow")>-1)&&s.setAttribute("stretchy","true"),e.body.length>0){const t=e.body[e.body.length-1];"color"!==t.type||t.isTextColor||s.setAttribute("mathcolor",t.color)}return r.push(s),se(r)}}),c({type:"middle",names:["\\middle"],props:{numArgs:1,argTypes:["primitive"]},handler:(t,r)=>{const n=Dt(r[0],t);if(!t.parser.leftrightDepth)throw new e("\\middle without preceding \\left",n);return{type:"middle",mode:t.parser.mode,delim:n.text}},mathmlBuilder:(e,t)=>{const r=te(e.delim,e.mode),n=new T.MathNode("mo",[r]);return n.setAttribute("fence","true"),e.delim.indexOf("arrow")>-1&&n.setAttribute("stretchy","true"),n.setAttribute("form","prefix"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n}});const jt=e=>{const t=new T.MathNode("mspace");return t.setAttribute("width","3pt"),t},Pt=(e,t)=>{let r;switch(r=e.label.indexOf("colorbox")>-1||"\\boxed"===e.label?new T.MathNode("mrow",[jt(),de(e.body,t),jt()]):new T.MathNode("menclose",[de(e.body,t)]),e.label){case"\\overline":r.setAttribute("notation","top"),r.classes.push("tml-overline");break;case"\\underline":r.setAttribute("notation","bottom"),r.classes.push("tml-underline");break;case"\\cancel":r.setAttribute("notation","updiagonalstrike"),r.children.push(new T.MathNode("mrow",[],["tml-cancel","upstrike"]));break;case"\\bcancel":r.setAttribute("notation","downdiagonalstrike"),r.children.push(new T.MathNode("mrow",[],["tml-cancel","downstrike"]));break;case"\\sout":r.setAttribute("notation","horizontalstrike"),r.children.push(new T.MathNode("mrow",[],["tml-cancel","sout"]));break;case"\\xcancel":r.setAttribute("notation","updiagonalstrike downdiagonalstrike"),r.classes.push("tml-xcancel");break;case"\\longdiv":r.setAttribute("notation","longdiv"),r.classes.push("longdiv-top"),r.children.push(new T.MathNode("mrow",[],["longdiv-arc"]));break;case"\\phase":r.setAttribute("notation","phasorangle"),r.classes.push("phasor-bottom"),r.children.push(new T.MathNode("mrow",[],["phasor-angle"]));break;case"\\textcircled":r.setAttribute("notation","circle"),r.classes.push("circle-pad"),r.children.push(new T.MathNode("mrow",[],["textcircle"]));break;case"\\angl":r.setAttribute("notation","actuarial"),r.classes.push("actuarial");break;case"\\boxed":r.setAttribute("notation","box"),r.classes.push("tml-box"),r.setAttribute("scriptlevel","0"),r.setAttribute("displaystyle","true");break;case"\\fbox":r.setAttribute("notation","box"),r.classes.push("tml-fbox");break;case"\\fcolorbox":case"\\colorbox":{const t={padding:"3pt 0 3pt 0"};"\\fcolorbox"===e.label&&(t.border="0.0667em solid "+String(e.borderColor)),r.style=t;break}}return e.backgroundColor&&r.setAttribute("mathbackground",e.backgroundColor),r};c({type:"enclose",names:["\\colorbox"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,argTypes:["raw","raw","text"]},handler({parser:e,funcName:t},r,n){const s=n[0]&&Ie(n[0],"raw").string;let o="";if(s){const e=Ie(r[0],"raw").string;o=qt(s,e)}else o=Ot(Ie(r[0],"raw").string,e.gullet.macros);const a=r[1];return{type:"enclose",mode:e.mode,label:t,backgroundColor:o,body:a}},mathmlBuilder:Pt}),c({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,numOptionalArgs:1,allowedInText:!0,argTypes:["raw","raw","raw","text"]},handler({parser:e,funcName:t},r,n){const s=n[0]&&Ie(n[0],"raw").string;let o,a="";if(s){const e=Ie(r[0],"raw").string,t=Ie(r[0],"raw").string;a=qt(s,e),o=qt(s,t)}else a=Ot(Ie(r[0],"raw").string,e.gullet.macros),o=Ot(Ie(r[1],"raw").string,e.gullet.macros);const l=r[2];return{type:"enclose",mode:e.mode,label:t,backgroundColor:o,borderColor:a,body:l}},mathmlBuilder:Pt}),c({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:({parser:e},t)=>({type:"enclose",mode:e.mode,label:"\\fbox",body:t[0]})}),c({type:"enclose",names:["\\angl","\\cancel","\\bcancel","\\xcancel","\\sout","\\overline","\\boxed","\\longdiv","\\phase"],props:{numArgs:1},handler({parser:e,funcName:t},r){const n=r[0];return{type:"enclose",mode:e.mode,label:t,body:n}},mathmlBuilder:Pt}),c({type:"enclose",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler({parser:e,funcName:t},r){const n=r[0];return{type:"enclose",mode:e.mode,label:t,body:n}},mathmlBuilder:Pt}),c({type:"enclose",names:["\\textcircled"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler({parser:e,funcName:t},r){const n=r[0];return{type:"enclose",mode:e.mode,label:t,body:n}},mathmlBuilder:Pt}),c({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler({parser:t,funcName:r},n){const s=n[0];if("ordgroup"!==s.type)throw new e("Invalid environment name",s);let o="";for(let e=0;e({type:"envTag",mode:e.mode,body:t[0]}),mathmlBuilder:(e,t)=>new T.MathNode("mrow")}),c({type:"noTag",names:["\\env@notag"],props:{numArgs:0},handler:({parser:e})=>({type:"noTag",mode:e.mode}),mathmlBuilder:(e,t)=>new T.MathNode("mrow")});const Rt=(e,t)=>{const r=e.font,n=t.withFont(r),s=de(e.body,n);if(0===s.children.length)return s;if("boldsymbol"===r&&["mo","mpadded","mrow"].includes(s.type))return s.style.fontWeight="bold",s;if(((e,t)=>{if("mathrm"!==t||"ordgroup"!==e.body.type||1===e.body.body.length)return!1;if("mathord"!==e.body.body[0].type)return!1;for(let t=1;t{const n=m(r[0]);let s=t;return s in Ut&&(s=Ut[s]),{type:"font",mode:e.mode,font:s.slice(1),body:n}},mathmlBuilder:Rt}),c({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:({parser:e,funcName:t,breakOnTokenText:r},n)=>{const{mode:s}=e,o=e.parseExpression(!0,r,!0);return{type:"font",mode:s,font:`math${t.slice(1)}`,body:{type:"ordgroup",mode:e.mode,body:o}}},mathmlBuilder:Rt});const Ht=["display","text","script","scriptscript"],Vt={auto:-1,display:0,text:0,script:1,scriptscript:2},_t=(e,t)=>{const r="auto"===e.scriptLevel?t.incrementLevel():"display"===e.scriptLevel?t.withLevel(_e):"text"===e.scriptLevel?t.withLevel(We):t.withLevel(Xe),n=de(e.numer,r),s=de(e.denom,r);3===t.level&&(n.style.mathDepth="2",n.setAttribute("scriptlevel","2"),s.style.mathDepth="2",s.setAttribute("scriptlevel","2"));let o=new T.MathNode("mfrac",[n,s]);if(e.hasBarLine){if(e.barSize){const r=qe(e.barSize,t);o.setAttribute("linethickness",r.number+r.unit)}}else o.setAttribute("linethickness","0px");if(null!=e.leftDelim||null!=e.rightDelim){const t=[];if(null!=e.leftDelim){const r=new T.MathNode("mo",[new T.TextNode(e.leftDelim.replace("\\",""))]);r.setAttribute("fence","true"),t.push(r)}if(t.push(o),null!=e.rightDelim){const r=new T.MathNode("mo",[new T.TextNode(e.rightDelim.replace("\\",""))]);r.setAttribute("fence","true"),t.push(r)}o=se(t)}return"auto"!==e.scriptLevel&&(o=new T.MathNode("mstyle",[o]),o.setAttribute("displaystyle",String("display"===e.scriptLevel)),o.setAttribute("scriptlevel",Vt[e.scriptLevel])),o};c({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:({parser:e,funcName:t},r)=>{const n=r[0],s=r[1];let o=!1,a=null,l=null,i="auto";switch(t){case"\\dfrac":case"\\frac":case"\\tfrac":o=!0;break;case"\\\\atopfrac":o=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":a="(",l=")";break;case"\\\\bracefrac":a="\\{",l="\\}";break;case"\\\\brackfrac":a="[",l="]";break;default:throw new Error("Unrecognized genfrac command")}switch(t){case"\\dfrac":case"\\dbinom":i="display";break;case"\\tfrac":case"\\tbinom":i="text"}return{type:"genfrac",mode:e.mode,continued:!1,numer:n,denom:s,hasBarLine:o,leftDelim:a,rightDelim:l,scriptLevel:i,barSize:null}},mathmlBuilder:_t}),c({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:({parser:e,funcName:t},r)=>{const n=r[0],s=r[1];return{type:"genfrac",mode:e.mode,continued:!0,numer:n,denom:s,hasBarLine:!0,leftDelim:null,rightDelim:null,scriptLevel:"display",barSize:null}}}),c({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler({parser:e,funcName:t,token:r}){let n;switch(t){case"\\over":n="\\frac";break;case"\\choose":n="\\binom";break;case"\\atop":n="\\\\atopfrac";break;case"\\brace":n="\\\\bracefrac";break;case"\\brack":n="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:n,token:r}}});const Wt=function(e){let t=null;return e.length>0&&(t=e,t="."===t?null:t),t};c({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler({parser:e},t){const r=t[4],n=t[5],s=m(t[0]),o="atom"===s.type&&"open"===s.family?Wt(s.text):null,a=m(t[1]),l="atom"===a.type&&"close"===a.family?Wt(a.text):null,i=Ie(t[2],"size");let c,d=null;i.isBlank?c=!0:(d=i.value,c=d.number>0);let p="auto",u=t[3];if("ordgroup"===u.type){if(u.body.length>0){const e=Ie(u.body[0],"textord");p=Ht[Number(e.text)]}}else u=Ie(u,"textord"),p=Ht[Number(u.text)];return{type:"genfrac",mode:e.mode,numer:r,denom:n,continued:!1,hasBarLine:c,barSize:d,leftDelim:o,rightDelim:l,scriptLevel:p}},mathmlBuilder:_t}),c({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler:({parser:e,funcName:t,token:r},n)=>({type:"infix",mode:e.mode,replaceWith:"\\\\abovefrac",barSize:Ie(n[0],"size").value,token:r})}),c({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:({parser:e,funcName:t},r)=>{const n=r[0],s=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e}(Ie(r[1],"infix").barSize),o=r[2],a=s.number>0;return{type:"genfrac",mode:e.mode,numer:n,denom:o,continued:!1,hasBarLine:a,barSize:s,leftDelim:null,rightDelim:null,scriptLevel:"auto"}},mathmlBuilder:_t}),c({type:"hbox",names:["\\hbox"],props:{numArgs:1,argTypes:["hbox"],allowedInArgument:!0,allowedInText:!1},handler:({parser:e},t)=>({type:"hbox",mode:e.mode,body:p(t[0])}),mathmlBuilder(e,t){const r=t.withLevel(_e),n=ce(e.body,r);return ne(n)}});c({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler:({parser:e,funcName:t},r)=>({type:"horizBrace",mode:e.mode,label:t,isOver:/^\\over/.test(t),base:r[0]}),mathmlBuilder:(e,t)=>{const r=B(e.label);return r.style["math-depth"]=0,new T.MathNode(e.isOver?"mover":"munder",[de(e.base,t),r])}}),c({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:({parser:t,token:r},n)=>{const s=n[1],o=Ie(n[0],"url").url;if(!t.settings.isTrusted({command:"\\href",url:o}))throw new e('Function "\\href" is not trusted',r);return{type:"href",mode:t.mode,href:o,body:p(s)}},mathmlBuilder:(e,t)=>{const r=new v("math",[ce(e.body,t)]);return new x(e.href,[],[r])}}),c({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:({parser:t,token:r},n)=>{const s=Ie(n[0],"url").url;if(!t.settings.isTrusted({command:"\\url",url:s}))throw new e('Function "\\url" is not trusted',r);const o=[];for(let e=0;e{const o=Ie(s[0],"raw").string,a=s[1];if(t.settings.strict)throw new e(`Function "${r}" is disabled in strict mode`,n);let l;const i={};switch(r){case"\\class":i.class=o,l={command:"\\class",class:o};break;case"\\id":i.id=o,l={command:"\\id",id:o};break;case"\\style":i.style=o,l={command:"\\style",style:o};break;case"\\data":{const t=o.split(",");for(let r=0;r{const r=ce(e.body,t),n=[];e.attributes.class&&n.push(...e.attributes.class.trim().split(/\s+/)),r.classes=n;for(const t in e.attributes)"class"!==t&&Object.prototype.hasOwnProperty.call(e.attributes,t)&&r.setAttribute(t,e.attributes[t]);return r}});const Xt=function(t){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(t))return{number:+t,unit:"bp"};{const r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t);if(!r)throw new e("Invalid size: '"+t+"' in \\includegraphics");const n={number:+(r[1]+r[2]),unit:r[3]};if(!Te(n))throw new e("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n}};c({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:({parser:t,token:r},n,s)=>{let o={number:0,unit:"em"},a={number:.9,unit:"em"},l={number:0,unit:"em"},i="";if(s[0]){const t=Ie(s[0],"raw").string.split(",");for(let r=0;r{const r=qe(e.height,t),n={number:0,unit:"em"};e.totalheight.number>0&&e.totalheight.unit===r.unit&&e.totalheight.number>r.number&&(n.number=e.totalheight.number-r.number,n.unit=r.unit);let s=0;e.width.number>0&&(s=qe(e.width,t));const o={height:r.number+n.number+"em"};s.number>0&&(o.width=s.number+s.unit),n.number>0&&(o.verticalAlign=-n.number+n.unit);const a=new k(e.src,e.alt,o);return a.height=r,a.depth=n,new T.MathNode("mtext",[a])}}),c({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler({parser:t,funcName:r,token:n},s){const o=Ie(s[0],"size");if(t.settings.strict){const s="m"===r[1],a="mu"===o.value.unit;if(s){if(!a)throw new e(`LaTeX's ${r} supports only mu units, not ${o.value.unit} units`,n);if("math"!==t.mode)throw new e(`LaTeX's ${r} works only in math mode`,n)}else if(a)throw new e(`LaTeX's ${r} doesn't support mu units`,n)}return{type:"kern",mode:t.mode,dimension:o.value}},mathmlBuilder(e,t){const r=qe(e.dimension,t),n="em"===r.unit?Zt(r.number):"";if("text"===e.mode&&n.length>0){const e=new T.TextNode(n);return new T.MathNode("mtext",[e])}{const e=new T.MathNode("mspace");return e.setAttribute("width",r.number+r.unit),r.number<0&&(e.style.marginLeft=r.number+r.unit),e}}});const Zt=function(e){return e>=.05555&&e<=.05556?" ":e>=.1666&&e<=.1667?" ":e>=.2222&&e<=.2223?" ":e>=.2777&&e<=.2778?"  ":""},Yt=/[^A-Za-z_0-9-]/g;c({type:"label",names:["\\label"],props:{numArgs:1,argTypes:["raw"]},handler:({parser:e},t)=>({type:"label",mode:e.mode,string:t[0].string.replace(Yt,"")}),mathmlBuilder(e,t){const r=new T.MathNode("mrow",[],["tml-label"]);return e.string.length>0&&r.setLabel(e.string),r}});const Jt=["\\clap","\\llap","\\rlap"];c({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap","\\clap","\\llap","\\rlap"],props:{numArgs:1,allowedInText:!0},handler:({parser:t,funcName:r,token:n},s)=>{if(Jt.includes(r)){if(t.settings.strict&&"text"!==t.mode)throw new e(`{${r}} can be used only in text mode.\n Try \\math${r.slice(1)}`,n);r=r.slice(1)}else r=r.slice(5);const o=s[0];return{type:"lap",mode:t.mode,alignment:r,body:o}},mathmlBuilder:(e,t)=>{let r;if("llap"===e.alignment){const n=ie(p(e.body),t),s=new T.MathNode("mphantom",n);r=new T.MathNode("mpadded",[s]),r.setAttribute("width","0px")}const n=de(e.body,t);let s;if("llap"===e.alignment?(n.style.position="absolute",n.style.right="0",n.style.bottom="0",s=new T.MathNode("mpadded",[r,n])):s=new T.MathNode("mpadded",[n]),"rlap"===e.alignment)e.body.body.length>0&&"genfrac"===e.body.body[0].type&&s.setAttribute("lspace","0.16667em");else{const t="llap"===e.alignment?"-1":"-0.5";s.setAttribute("lspace",t+"width"),"llap"===e.alignment?s.style.position="relative":(s.style.display="flex",s.style.justifyContent="center")}return s.setAttribute("width","0px"),s}}),c({type:"ordgroup",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler({funcName:e,parser:t},r){const n=t.mode;t.switchMode("math");const s="\\("===e?"\\)":"$",o=t.parseExpression(!1,s);return t.expect(s),t.switchMode(n),{type:"ordgroup",mode:t.mode,body:o}}}),c({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,r){throw new e(`Mismatched ${t.funcName}`,r)}});c({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:({parser:e},t)=>({type:"mathchoice",mode:e.mode,display:p(t[0]),text:p(t[1]),script:p(t[2]),scriptscript:p(t[3])}),mathmlBuilder:(e,t)=>{const r=((e,t)=>{switch(t.level){case Ve:return e.display;case _e:return e.text;case We:return e.script;case Xe:return e.scriptscript;default:return e.text}})(e,t);return ce(r,t)}});const Kt=["text","textord","mathord","atom"];function Qt(e,t){let r;const n=ie(e.body,t);if("minner"===e.mclass)r=new T.MathNode("mpadded",n);else if("mord"===e.mclass)e.isCharacterBox||"mathord"===n[0].type?(r=n[0],r.type="mi",1===r.children.length&&r.children[0].text&&"∇"===r.children[0].text&&r.setAttribute("mathvariant","normal")):r=new T.MathNode("mi",n);else{r=new T.MathNode("mrow",n),e.mustPromote?(r=n[0],r.type="mo",e.isCharacterBox&&e.body[0].text&&/[A-Za-z]/.test(e.body[0].text)&&r.setAttribute("mathvariant","italic")):r=new T.MathNode("mrow",n);const s=t.level<2;"mrow"===r.type?s&&("mbin"===e.mclass?(r.children.unshift(Oe(.2222)),r.children.push(Oe(.2222))):"mrel"===e.mclass?(r.children.unshift(Oe(.2778)),r.children.push(Oe(.2778))):"mpunct"===e.mclass?r.children.push(Oe(.1667)):"minner"===e.mclass&&(r.children.unshift(Oe(.0556)),r.children.push(Oe(.0556)))):"mbin"===e.mclass?(r.attributes.lspace=s?"0.2222em":"0",r.attributes.rspace=s?"0.2222em":"0"):"mrel"===e.mclass?(r.attributes.lspace=s?"0.2778em":"0",r.attributes.rspace=s?"0.2778em":"0"):"mpunct"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace=s?"0.1667em":"0"):"mopen"===e.mclass||"mclose"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0em"):"minner"===e.mclass&&s&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em"),"mopen"!==e.mclass&&"mclose"!==e.mclass&&(delete r.attributes.stretchy,delete r.attributes.form)}return r}c({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler({parser:e,funcName:t},r){const n=r[0],s=o.isCharacterBox(n);let a=!0;const l={type:"mathord",text:"",mode:e.mode},i=n.body?n.body:[n];for(const t of i){if(!Kt.includes(t.type)){a=!1;break}$[e.mode][t.text]?l.text+=$[e.mode][t.text].replace:t.text?l.text+=t.text:t.body&&t.body.map((e=>{l.text+=e.text}))}return a&&"\\mathord"===t&&"mathord"===l.type&&l.text.length>1?l:{type:"mclass",mode:e.mode,mclass:"m"+t.slice(5),body:p(a?l:n),isCharacterBox:s,mustPromote:a}},mathmlBuilder:Qt});const er=e=>{const t="ordgroup"===e.type&&e.body.length?e.body[0]:e;return"atom"!==t.type||"bin"!==t.family&&"rel"!==t.family?"mord":"m"+t.family};c({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler:({parser:e},t)=>({type:"mclass",mode:e.mode,mclass:er(t[0]),body:p(t[1]),isCharacterBox:o.isCharacterBox(t[1])})}),c({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler({parser:e,funcName:t},r){const n=r[1],s=r[0],o={type:"op",mode:n.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,stack:!0,suppressBaseShift:"\\stackrel"!==t,body:p(n)};return{type:"supsub",mode:s.mode,base:o,sup:"\\underset"===t?null:s,sub:"\\underset"===t?s:null}},mathmlBuilder:Qt});const tr=(e,t,r)=>{if(!e)return r;const n=de(e,t);return"mrow"===n.type&&0===n.children.length?r:n};c({type:"multiscript",names:["\\sideset","\\pres@cript"],props:{numArgs:3},handler({parser:t,funcName:r,token:n},s){if(0===s[2].body.length)throw new e(r+"cannot parse an empty base.");const o=s[2].body[0];if(t.settings.strict&&"\\sideset"===r&&!o.symbol)throw new e("The base of \\sideset must be a big operator. Try \\prescript.");if(s[0].body.length>0&&"supsub"!==s[0].body[0].type||s[1].body.length>0&&"supsub"!==s[1].body[0].type)throw new e("\\sideset can parse only subscripts and superscripts in its first two arguments",n);const a=s[0].body.length>0?s[0].body[0]:null,l=s[1].body.length>0?s[1].body[0]:null;return a||l?a?{type:"multiscript",mode:t.mode,isSideset:"\\sideset"===r,prescripts:a,postscripts:l,base:o}:{type:"styling",mode:t.mode,scriptLevel:"text",body:[{type:"supsub",mode:t.mode,base:o,sup:l.sup,sub:l.sub}]}:o},mathmlBuilder(e,t){const r=de(e.base,t),n=new T.MathNode("mprescripts"),s=new T.MathNode("none");let o=[];const a=tr(e.prescripts.sub,t,s),l=tr(e.prescripts.sup,t,s);if(e.isSideset&&(a.setAttribute("style","text-align: left;"),l.setAttribute("style","text-align: left;")),e.postscripts){o=[r,tr(e.postscripts.sub,t,s),tr(e.postscripts.sup,t,s),n,a,l]}else o=[r,n,a,l];return new T.MathNode("mmultiscripts",o)}}),c({type:"not",names:["\\not"],props:{numArgs:1,primitive:!0,allowedInText:!1},handler({parser:e},t){const r=o.isCharacterBox(t[0]);let n;if(r)n=p(t[0]),"\\"===n[0].text.charAt(0)&&(n[0].text=$.math[n[0].text].replace),n[0].text=n[0].text.slice(0,1)+"̸"+n[0].text.slice(1);else{n=[{type:"textord",mode:"math",text:"̸"},{type:"kern",mode:"math",dimension:{number:-.6,unit:"em"}},t[0]]}return{type:"not",mode:e.mode,body:n,isCharacterBox:r}},mathmlBuilder(e,t){if(e.isCharacterBox){return ie(e.body,t,!0)[0]}return ce(e.body,t)}});const rr=["textord","mathord","atom"],nr=["\\smallint"],sr=["textord","mathord","ordgroup","close","leftright","font"],or=e=>{e.attributes.lspace="0.1667em",e.attributes.rspace="0.1667em"},ar=(e,t)=>{let r;if(e.symbol)r=new v("mo",[te(e.name,e.mode)]),nr.includes(e.name)?r.setAttribute("largeop","false"):r.setAttribute("movablelimits","false"),e.fromMathOp&&or(r);else if(e.body)r=new v("mo",ie(e.body,t)),e.fromMathOp&&or(r);else if(r=new v("mi",[new A(e.name.slice(1))]),!e.parentIsSupSub){const t=[r,new v("mo",[te("⁡","text")])];if(e.needsLeadingSpace){const e=new v("mspace");e.setAttribute("width","0.1667em"),t.unshift(e)}if(!e.isFollowedByDelimiter){const e=new v("mspace");e.setAttribute("width","0.1667em"),t.push(e)}r=new v("mrow",t)}return r},lr={"∏":"\\prod","∐":"\\coprod","∑":"\\sum","⋀":"\\bigwedge","⋁":"\\bigvee","⋂":"\\bigcap","⋃":"\\bigcup","⨀":"\\bigodot","⨁":"\\bigoplus","⨂":"\\bigotimes","⨄":"\\biguplus","⨅":"\\bigsqcap","⨆":"\\bigsqcup","⨃":"\\bigcupdot","⨇":"\\bigdoublevee","⨈":"\\bigdoublewedge","⨉":"\\bigtimes"};c({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcupplus","\\bigcupdot","\\bigcap","\\bigcup","\\bigdoublevee","\\bigdoublewedge","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcap","\\bigsqcup","\\bigtimes","\\smallint","∏","∐","∑","⋀","⋁","⋂","⋃","⨀","⨁","⨂","⨃","⨄","⨅","⨆","⨇","⨈","⨉"],props:{numArgs:0},handler:({parser:e,funcName:t},r)=>{let n=t;return 1===n.length&&(n=lr[n]),{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!0,stack:!1,name:n}},mathmlBuilder:ar}),c({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:({parser:e},t)=>{const r=t[0],n=r.body?r.body:[r],s=1===n.length&&rr.includes(n[0].type);return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:s,fromMathOp:!0,stack:!1,name:s?n[0].text:null,body:s?null:p(r)}},mathmlBuilder:ar});const ir={"∫":"\\int","∬":"\\iint","∭":"\\iiint","∮":"\\oint","∯":"\\oiint","∰":"\\oiiint","∱":"\\intclockwise","∲":"\\varointclockwise","⨌":"\\iiiint","⨍":"\\intbar","⨎":"\\intBar","⨏":"\\fint","⨒":"\\rppolint","⨓":"\\scpolint","⨕":"\\pointint","⨖":"\\sqint","⨗":"\\intlarhk","⨘":"\\intx","⨙":"\\intcap","⨚":"\\intcup"};c({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\sgn","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler({parser:e,funcName:t}){const r=e.prevAtomType,n=e.gullet.future().text;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,stack:!1,isFollowedByDelimiter:Lt(n),needsLeadingSpace:r.length>0&&sr.includes(r),name:t}},mathmlBuilder:ar}),c({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler({parser:e,funcName:t}){const r=e.prevAtomType,n=e.gullet.future().text;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,stack:!1,isFollowedByDelimiter:Lt(n),needsLeadingSpace:r.length>0&&sr.includes(r),name:t}},mathmlBuilder:ar}),c({type:"op",names:["\\int","\\iint","\\iiint","\\iiiint","\\oint","\\oiint","\\oiiint","\\intclockwise","\\varointclockwise","\\intbar","\\intBar","\\fint","\\rppolint","\\scpolint","\\pointint","\\sqint","\\intlarhk","\\intx","\\intcap","\\intcup","∫","∬","∭","∮","∯","∰","∱","∲","⨌","⨍","⨎","⨏","⨒","⨓","⨕","⨖","⨗","⨘","⨙","⨚"],props:{numArgs:0},handler({parser:e,funcName:t}){let r=t;return 1===r.length&&(r=ir[r]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,stack:!1,name:r}},mathmlBuilder:ar});c({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1,allowedInArgument:!0},handler:({parser:e,funcName:t},r)=>{const n=r[0],s=e.prevAtomType,o=e.gullet.future().text;return{type:"operatorname",mode:e.mode,body:p(n),alwaysHandleSupSub:"\\operatornamewithlimits"===t,limits:!1,parentIsSupSub:!1,isFollowedByDelimiter:Lt(o),needsLeadingSpace:s.length>0&&sr.includes(s)}},mathmlBuilder:(e,t)=>{let r,n=ie(e.body,t.withFont("mathrm")),s=!0;for(let e=0;ee.toText())).join("");n=[new T.TextNode(e)]}else if(1===n.length&&["mover","munder"].includes(n[0].type)&&("mi"===n[0].children[0].type||"mtext"===n[0].children[0].type)){if(n[0].children[0].type="mi",e.parentIsSupSub)return new T.MathNode("mrow",n);{const e=new T.MathNode("mo",[te("⁡","text")]);return T.newDocumentFragment([n[0],e])}}if(s?(r=new T.MathNode("mi",n),1===n[0].text.length&&r.setAttribute("mathvariant","normal")):r=new T.MathNode("mrow",n),!e.parentIsSupSub){const t=[r,new T.MathNode("mo",[te("⁡","text")])];if(e.needsLeadingSpace){const e=new T.MathNode("mspace");e.setAttribute("width","0.1667em"),t.unshift(e)}if(!e.isFollowedByDelimiter){const e=new T.MathNode("mspace");e.setAttribute("width","0.1667em"),t.push(e)}return T.newDocumentFragment(t)}return r}}),Ye("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@"),d({type:"ordgroup",mathmlBuilder:(e,t)=>ce(e.body,t,e.semisimple)}),c({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:({parser:e},t)=>{const r=t[0];return{type:"phantom",mode:e.mode,body:p(r)}},mathmlBuilder:(e,t)=>{const r=ie(e.body,t);return new T.MathNode("mphantom",r)}}),c({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:({parser:e},t)=>{const r=t[0];return{type:"hphantom",mode:e.mode,body:r}},mathmlBuilder:(e,t)=>{const r=ie(p(e.body),t),n=new T.MathNode("mphantom",r),s=new T.MathNode("mpadded",[n]);return s.setAttribute("height","0px"),s.setAttribute("depth","0px"),s}}),c({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:({parser:e},t)=>{const r=t[0];return{type:"vphantom",mode:e.mode,body:r}},mathmlBuilder:(e,t)=>{const r=ie(p(e.body),t),n=new T.MathNode("mphantom",r),s=new T.MathNode("mpadded",[n]);return s.setAttribute("width","0px"),s}}),c({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler:({parser:e},t)=>({type:"pmb",mode:e.mode,body:p(t[0])}),mathmlBuilder(e,t){const r=ie(e.body,t),n=N(r);return n.setAttribute("style","font-weight:bold"),n}});const cr=(e,t)=>{const r=t.withLevel(_e),n=new T.MathNode("mpadded",[de(e.body,r)]),s=qe(e.dy,t);return n.setAttribute("voffset",s.number+s.unit),s.number>0?n.style.padding=s.number+s.unit+" 0 0 0":n.style.padding="0 0 "+Math.abs(s.number)+s.unit+" 0",n};c({type:"raise",names:["\\raise","\\lower"],props:{numArgs:2,argTypes:["size","primitive"],primitive:!0},handler({parser:e,funcName:t},r){const n=Ie(r[0],"size").value;"\\lower"===t&&(n.number*=-1);const s=r[1];return{type:"raise",mode:e.mode,dy:n,body:s}},mathmlBuilder:cr}),c({type:"raise",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler({parser:e,funcName:t},r){const n=Ie(r[0],"size").value,s=r[1];return{type:"raise",mode:e.mode,dy:n,body:s}},mathmlBuilder:cr}),c({type:"ref",names:["\\ref","\\eqref"],props:{numArgs:1,argTypes:["raw"]},handler:({parser:e,funcName:t},r)=>({type:"ref",mode:e.mode,funcName:t,string:r[0].string.replace(Yt,"")}),mathmlBuilder(e,t){const r="\\ref"===e.funcName?["tml-ref"]:["tml-ref","tml-eqref"];return new x("#"+e.string,r,null)}}),c({type:"reflect",names:["\\reflectbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:({parser:e},t)=>({type:"reflect",mode:e.mode,body:t[0]}),mathmlBuilder(e,t){const r=de(e.body,t);return r.style.transform="scaleX(-1)",r}}),c({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler:({parser:e})=>({type:"internal",mode:e.mode})}),c({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler({parser:e},t,r){const n=r[0],s=Ie(t[0],"size"),o=Ie(t[1],"size");return{type:"rule",mode:e.mode,shift:n&&Ie(n,"size").value,width:s.value,height:o.value}},mathmlBuilder(e,t){const r=qe(e.width,t),n=qe(e.height,t),s=e.shift?qe(e.shift,t):{number:0,unit:"em"},o=t.color&&t.getColor()||"black",a=new T.MathNode("mspace");if(r.number>0&&n.number>0&&a.setAttribute("mathbackground",o),a.setAttribute("width",r.number+r.unit),a.setAttribute("height",n.number+n.unit),0===s.number)return a;const l=new T.MathNode("mpadded",[a]);return s.number>=0?l.setAttribute("height","+"+s.number+s.unit):(l.setAttribute("height",s.number+s.unit),l.setAttribute("depth","+"+-s.number+s.unit)),l.setAttribute("voffset",s.number+s.unit),l}});const dr={"\\tiny":.5,"\\sixptsize":.6,"\\Tiny":.6,"\\scriptsize":.7,"\\footnotesize":.8,"\\small":.9,"\\normalsize":1,"\\large":1.2,"\\Large":1.44,"\\LARGE":1.728,"\\huge":2.074,"\\Huge":2.488};c({type:"sizing",names:["\\tiny","\\sixptsize","\\Tiny","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],props:{numArgs:0,allowedInText:!0},handler:({breakOnTokenText:e,funcName:t,parser:r},n)=>{r.settings.strict&&"math"===r.mode&&console.log(`Temml strict-mode warning: Command ${t} is invalid in math mode.`);const s=r.parseExpression(!1,e,!0);return{type:"sizing",mode:r.mode,funcName:t,body:s}},mathmlBuilder:(e,t)=>{const r=t.withFontSize(dr[e.funcName]),n=ie(e.body,r),s=N(n),o=(dr[e.funcName]/t.fontSize).toFixed(4);return s.setAttribute("mathsize",o+"em"),s}}),c({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:({parser:e},t,r)=>{let n=!1,s=!1;const o=r[0]&&Ie(r[0],"ordgroup");if(o){let e="";for(let t=0;t{const r=new T.MathNode("mpadded",[de(e.body,t)]);return e.smashHeight&&r.setAttribute("height","0px"),e.smashDepth&&r.setAttribute("depth","0px"),r}}),c({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler({parser:e},t,r){const n=r[0],s=t[0];return{type:"sqrt",mode:e.mode,body:s,index:n}},mathmlBuilder(e,t){const{body:r,index:n}=e;return n?new T.MathNode("mroot",[de(r,t),de(n,t.incrementLevel())]):new T.MathNode("msqrt",[de(r,t)])}});const mr={display:0,text:1,script:2,scriptscript:3},pr={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]};c({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler({breakOnTokenText:e,funcName:t,parser:r},n){const s=r.parseExpression(!0,e,!0),o=t.slice(1,t.length-5);return{type:"styling",mode:r.mode,scriptLevel:o,body:s}},mathmlBuilder(e,t){const r=t.withLevel(mr[e.scriptLevel]),n=ie(e.body,r),s=N(n),o=pr[e.scriptLevel];return s.setAttribute("scriptlevel",o[0]),s.setAttribute("displaystyle",o[1]),s}});const ur=/^m(over|under|underover)$/;d({type:"supsub",mathmlBuilder(e,t){let r,n,s=!1,o=!1,a=!1,l=!1;e.base&&"horizBrace"===e.base.type&&(n=!!e.sup,n===e.base.isOver&&(s=!0,r=e.base.isOver)),!e.base||e.base.stack||"op"!==e.base.type&&"operatorname"!==e.base.type||(e.base.parentIsSupSub=!0,o=!e.base.symbol,a=o&&!e.isFollowedByDelimiter,l=e.base.needsLeadingSpace);const i=e.base&&e.base.stack?[de(e.base.body[0],t)]:[de(e.base,t)],c=t.inSubOrSup();if(e.sub){const r=de(e.sub,c);3===t.level&&r.setAttribute("scriptlevel","2"),i.push(r)}if(e.sup){const r=de(e.sup,c);3===t.level&&r.setAttribute("scriptlevel","2");const n="mrow"===r.type?r.children[0]:r;n&&"mo"===n.type&&n.classes.includes("tml-prime")&&e.base&&e.base.text&&"fF".indexOf(e.base.text)>-1&&n.classes.push("prime-pad"),i.push(r)}let d;if(s)d=r?"mover":"munder";else if(e.sub)if(e.sup){const r=e.base;d=r&&("op"===r.type&&r.limits||"multiscript"===r.type)&&(t.level===Ve||r.alwaysHandleSupSub)||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(t.level===Ve||r.limits)?"munderover":"msubsup"}else{const r=e.base;d=r&&"op"===r.type&&r.limits&&(t.level===Ve||r.alwaysHandleSupSub)||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(r.limits||t.level===Ve)?"munder":"msub"}else{const r=e.base;d=r&&"op"===r.type&&r.limits&&(t.level===Ve||r.alwaysHandleSupSub)||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(r.limits||t.level===Ve)?"mover":"msup"}let m=new T.MathNode(d,i);if(o){const e=new T.MathNode("mo",[te("⁡","text")]);if(l){const t=new T.MathNode("mspace");t.setAttribute("width","0.1667em"),m=T.newDocumentFragment([t,m,e])}else m=T.newDocumentFragment([m,e]);if(a){const e=new T.MathNode("mspace");e.setAttribute("width","0.1667em"),m.children.push(e)}}else ur.test(d)&&(m=new T.MathNode("mrow",[m]));return m}});const hr=["\\shortmid","\\nshortmid","\\shortparallel","\\nshortparallel","\\smallsetminus"],gr=["\\Rsh","\\Lsh","\\restriction"];d({type:"atom",mathmlBuilder(e,t){const r=new T.MathNode("mo",[te(e.text,e.mode)]);if("punct"===e.family)r.setAttribute("separator","true");else if("open"===e.family||"close"===e.family)"open"===e.family?(r.setAttribute("form","prefix"),r.setAttribute("stretchy","false")):"close"===e.family&&(r.setAttribute("form","postfix"),r.setAttribute("stretchy","false"));else if("\\mid"===e.text)r.setAttribute("lspace","0.22em"),r.setAttribute("rspace","0.22em"),r.setAttribute("stretchy","false");else if("rel"===e.family&&(e=>{if(1===e.length){const t=e.codePointAt(0);return 8591-1||e.indexOf("harpoon")>-1||gr.includes(e)})(e.text))r.setAttribute("stretchy","false");else if(hr.includes(e.text))r.setAttribute("mathsize","70%");else if(":"===e.text)r.attributes.lspace="0.2222em",r.attributes.rspace="0.2222em";else if(e.needsSpacing)return"bin"===e.family?new T.MathNode("mrow",[Oe(.222),r,Oe(.222)]):new T.MathNode("mrow",[Oe(.2778),r,Oe(.2778)]);return r}});const fr={mathbf:"bold",mathrm:"normal",textit:"italic",mathit:"italic",mathnormal:"italic",mathbb:"double-struck",mathcal:"script",mathfrak:"fraktur",mathscr:"script",mathsf:"sans-serif",mathtt:"monospace"},br=function(e,t){if("texttt"===t.fontFamily)return"monospace";if("textsc"===t.fontFamily)return"normal";if("textsf"===t.fontFamily)return"textit"===t.fontShape&&"textbf"===t.fontWeight?"sans-serif-bold-italic":"textit"===t.fontShape?"sans-serif-italic":"textbf"===t.fontWeight?"sans-serif-bold":"sans-serif";if("textit"===t.fontShape&&"textbf"===t.fontWeight)return"bold-italic";if("textit"===t.fontShape)return"italic";if("textbf"===t.fontWeight)return"bold";const r=t.font;if(!r||"mathnormal"===r)return null;const n=e.mode;switch(r){case"mathit":case"greekItalic":return"italic";case"mathrm":{const t=e.text.codePointAt(0);return 9390,bold:e=>119743,italic:e=>119795,"bold-italic":e=>119847,script:e=>yr[e]||119899,"script-bold":e=>119951,fraktur:e=>wr[e]||120003,"fraktur-bold":e=>120107,"double-struck":e=>xr[e]||120055,"sans-serif":e=>120159,"sans-serif-bold":e=>120211,"sans-serif-italic":e=>120263,"sans-serif-bold-italic":e=>120380,monospace:e=>120367},lowerCaseLatin:{normal:e=>0,bold:e=>119737,italic:e=>"h"===e?8358:119789,"bold-italic":e=>119841,script:e=>yr[e]||119893,"script-bold":e=>119945,fraktur:e=>119997,"fraktur-bold":e=>120101,"double-struck":e=>120049,"sans-serif":e=>120153,"sans-serif-bold":e=>120205,"sans-serif-italic":e=>120257,"sans-serif-bold-italic":e=>120309,monospace:e=>120361},upperCaseGreek:{normal:e=>0,bold:e=>119575,italic:e=>119633,"bold-italic":e=>119575,script:e=>0,"script-bold":e=>0,fraktur:e=>0,"fraktur-bold":e=>0,"double-struck":e=>0,"sans-serif":e=>119749,"sans-serif-bold":e=>119749,"sans-serif-italic":e=>0,"sans-serif-bold-italic":e=>119807,monospace:e=>0},lowerCaseGreek:{normal:e=>0,bold:e=>119569,italic:e=>119627,"bold-italic":e=>"ϕ"===e?119678:119685,script:e=>0,"script-bold":e=>0,fraktur:e=>0,"fraktur-bold":e=>0,"double-struck":e=>0,"sans-serif":e=>119743,"sans-serif-bold":e=>119743,"sans-serif-italic":e=>0,"sans-serif-bold-italic":e=>119801,monospace:e=>0},varGreek:{normal:e=>0,bold:e=>kr[e]||-51,italic:e=>0,"bold-italic":e=>vr[e]||58,script:e=>0,"script-bold":e=>0,fraktur:e=>0,"fraktur-bold":e=>0,"double-struck":e=>0,"sans-serif":e=>Ar[e]||116,"sans-serif-bold":e=>Ar[e]||116,"sans-serif-italic":e=>0,"sans-serif-bold-italic":e=>Nr[e]||174,monospace:e=>0},numeral:{normal:e=>0,bold:e=>120734,italic:e=>0,"bold-italic":e=>0,script:e=>0,"script-bold":e=>0,fraktur:e=>0,"fraktur-bold":e=>0,"double-struck":e=>120744,"sans-serif":e=>120754,"sans-serif-bold":e=>120764,"sans-serif-italic":e=>0,"sans-serif-bold-italic":e=>0,monospace:e=>120774}}),Sr=(e,t)=>{const r=e.codePointAt(0),n=64{const n=new T.MathNode(r,[e]),s=new T.MathNode("mstyle",[n]);return s.style["font-style"]="italic",s.style["font-family"]="Cambria, 'Times New Roman', serif","bold-italic"===t&&(s.style["font-weight"]="bold"),s})(s,o,t);"normal"!==o&&(s.text=s.text.split("").map((e=>Sr(e,o))).join("")),a=new T.MathNode(t,[s])}else if("text"===e.mode)"normal"!==o&&(s.text=Sr(s.text,o)),a=new T.MathNode("mtext",[s]);else if(Br.has(e.text))a=new T.MathNode("mo",[s]),a.classes.push("tml-prime");else{const e=s.text;"italic"!==o&&(s.text=Sr(s.text,o)),a=new T.MathNode("mi",[s]),s.text===e&&Mr.test(e)&&a.setAttribute("mathvariant","italic")}return a}});const Cr={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},zr={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};d({type:"spacing",mathmlBuilder(t,r){let n;if(Object.prototype.hasOwnProperty.call(zr,t.text))n=new T.MathNode("mtext",[new T.TextNode(" ")]);else{if(!Object.prototype.hasOwnProperty.call(Cr,t.text))throw new e(`Unknown type of space "${t.text}"`);n=new T.MathNode("mo"),"\\nobreak"===t.text&&n.setAttribute("linebreak","nobreak")}return n}}),d({type:"tag"});const Er={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm","\\textsc":"textsc"},$r={"\\textbf":"textbf","\\textmd":"textmd"},Ir={"\\textit":"textit","\\textup":"textup"};c({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textsc","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler({parser:e,funcName:t},r){const n=r[0];return{type:"text",mode:e.mode,body:p(n),font:t}},mathmlBuilder(e,t){const r=((e,t)=>{const r=e.font;return r?Er[r]?t.withTextFontFamily(Er[r]):$r[r]?t.withTextFontWeight($r[r]):"\\emph"===r?"textit"===t.fontShape?t.withTextFontShape("textup"):t.withTextFontShape("textit"):t.withTextFontShape(Ir[r]):t})(e,t),n=ce(e.body,r);return ne(n)}}),c({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler:({parser:e},t)=>({type:"vcenter",mode:e.mode,body:t[0]}),mathmlBuilder(e,t){const r=new T.MathNode("mtd",[de(e.body,t)]);r.style.padding="0";const n=new T.MathNode("mtr",[r]);return new T.MathNode("mtable",[n])}}),c({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(t,r,n){throw new e("\\verb ended by end of line instead of matching delimiter")},mathmlBuilder(e,t){const r=new T.TextNode(Lr(e)),n=new T.MathNode("mtext",[r]);return n.setAttribute("mathvariant","monospace"),n}});const Lr=e=>e.body.replace(/ /g,e.star?"␣":" "),Fr=l,Dr="[ \r\n\t]",Gr=`(\\\\[a-zA-Z@]+)${Dr}*`,jr="[̀-ͯ]",Pr=new RegExp(`${jr}+$`),Rr=`(${Dr}+)|\\\\(\n|[ \r\t]+\n?)[ \r\t]*|([!-\\[\\]-‧‪-퟿豈-ï¿¿]${jr}*|[\ud800-\udbff][\udc00-\udfff]${jr}*|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5|${Gr}|\\\\[^\ud800-\udfff])`;class Ur{constructor(e,t){this.input=e,this.settings=t,this.tokenRegex=new RegExp(Rr,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,t){this.catcodes[e]=t}lex(){const t=this.input,r=this.tokenRegex.lastIndex;if(r===t.length)return new He("EOF",new Ue(this,r,r));const n=this.tokenRegex.exec(t);if(null===n||n.index!==r)throw new e(`Unexpected character: '${t[r]}'`,new He(t[r],new Ue(this,r,r+1)));const s=n[6]||n[3]||(n[2]?"\\ ":" ");if(14===this.catcodes[s]){const r=t.indexOf("\n",this.tokenRegex.lastIndex);if(-1===r){if(this.tokenRegex.lastIndex=t.length,this.settings.strict)throw new e("% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode")}else this.tokenRegex.lastIndex=r+1;return this.lex()}return new He(s,new Ue(this,r,this.tokenRegex.lastIndex))}}class Hr{constructor(e={},t={}){this.current=t,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(0===this.undefStack.length)throw new e("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");const t=this.undefStack.pop();for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(void 0===t[e]?delete this.current[e]:this.current[e]=t[e])}has(e){return Object.prototype.hasOwnProperty.call(this.current,e)||Object.prototype.hasOwnProperty.call(this.builtins,e)}get(e){return Object.prototype.hasOwnProperty.call(this.current,e)?this.current[e]:this.builtins[e]}set(e,t,r=!1){if(r){for(let t=0;t0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{const t=this.undefStack[this.undefStack.length-1];t&&!Object.prototype.hasOwnProperty.call(t,e)&&(t[e]=this.current[e])}this.current[e]=t}}const Vr={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class _r{constructor(e,t,r){this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new Hr(Je,t.macros),this.mode=r,this.stack=[]}feed(e){this.lexer=new Ur(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}future(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){let t,r,n;if(e){if(this.consumeSpaces(),"["!==this.future().text)return null;t=this.popToken(),({tokens:n,end:r}=this.consumeArg(["]"]))}else({tokens:n,start:t,end:r}=this.consumeArg());return this.pushToken(new He("EOF",r.loc)),this.pushTokens(n),t.range(r,"")}consumeSpaces(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}}consumeArg(t){const r=[],n=t&&t.length>0;n||this.consumeSpaces();const s=this.future();let o,a=0,l=0;do{if(o=this.popToken(),r.push(o),"{"===o.text)++a;else if("}"===o.text){if(--a,-1===a)throw new e("Extra }",o)}else if("EOF"===o.text)throw new e("Unexpected end of input in a macro argument, expected '"+(t&&n?t[l]:"}")+"'",o);if(t&&n)if((0===a||1===a&&"{"===t[l])&&o.text===t[l]){if(++l,l===t.length){r.splice(-l,l);break}}else l=0}while(0!==a||n);return"{"===s.text&&"}"===r[r.length-1].text&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:s,end:o}}consumeArgs(t,r){if(r){if(r.length!==t+1)throw new e("The length of delimiters doesn't match the number of args!");const n=r[0];for(let t=0;tthis.settings.maxExpand)throw new e("Too many expansions: infinite loop or need to increase maxExpand setting");let o=s.tokens;const a=this.consumeArgs(s.numArgs,s.delimiters);if(s.numArgs){o=o.slice();for(let t=o.length-1;t>=0;--t){let r=o[t];if("#"===r.text){if(0===t)throw new e("Incomplete placeholder at end of macro body",r);if(r=o[--t],"#"===r.text)o.splice(t+1,1);else{if(!/^[1-9]$/.test(r.text))throw new e("Not a valid argument number",r);o.splice(t,2,...a[+r.text-1])}}}}return this.pushTokens(o),o.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(!1===this.expandOnce()){const e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new He(e)]):void 0}expandTokens(e){const t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;)if(!1===this.expandOnce(!0)){const e=this.stack.pop();e.treatAsRelax&&(e.noexpand=!1,e.treatAsRelax=!1),t.push(e)}return t}expandMacroAsText(e){const t=this.expandMacro(e);return t?t.map((e=>e.text)).join(""):t}_getExpansion(e){const t=this.macros.get(e);if(null==t)return t;if(1===e.length){const t=this.lexer.catcodes[e];if(null!=t&&13!==t)return}const r="function"==typeof t?t(this):t;if("string"==typeof r){let e=0;if(-1!==r.indexOf("#")){const t=r.replace(/##/g,"");for(;-1!==t.indexOf("#"+(e+1));)++e}const t=new Ur(r,this.settings),n=[];let s=t.lex();for(;"EOF"!==s.text;)n.push(s),s=t.lex();n.reverse();return{tokens:n,numArgs:e}}return r}isDefined(e){return this.macros.has(e)||Object.prototype.hasOwnProperty.call(Fr,e)||Object.prototype.hasOwnProperty.call($.math,e)||Object.prototype.hasOwnProperty.call($.text,e)||Object.prototype.hasOwnProperty.call(Vr,e)}isExpandable(e){const t=this.macros.get(e);return null!=t?"string"==typeof t||"function"==typeof t||!t.unexpandable:Object.prototype.hasOwnProperty.call(Fr,e)&&!Fr[e].primitive}}const Wr=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,Xr=Object.freeze({"₊":"+","₋":"-","₌":"=","₍":"(","₎":")","₀":"0","₁":"1","₂":"2","₃":"3","₄":"4","₅":"5","₆":"6","₇":"7","₈":"8","₉":"9","ₐ":"a","ₑ":"e","ₕ":"h","áµ¢":"i","â±¼":"j","ₖ":"k","ₗ":"l","ₘ":"m","ₙ":"n","ₒ":"o","ₚ":"p","áµ£":"r","ₛ":"s","ₜ":"t","ᵤ":"u","áµ¥":"v","ₓ":"x","ᵦ":"β","áµ§":"γ","ᵨ":"ρ","ᵩ":"ϕ","ᵪ":"χ","⁺":"+","⁻":"-","⁼":"=","⁽":"(","⁾":")","⁰":"0","¹":"1","²":"2","³":"3","⁴":"4","⁵":"5","⁶":"6","⁷":"7","⁸":"8","⁹":"9","á´¬":"A","á´®":"B","á´°":"D","á´±":"E","á´³":"G","á´´":"H","á´µ":"I","á´¶":"J","á´·":"K","á´¸":"L","á´¹":"M","á´º":"N","á´¼":"O","á´¾":"P","á´¿":"R","ᵀ":"T","ᵁ":"U","â±½":"V","ᵂ":"W","ᵃ":"a","ᵇ":"b","ᶜ":"c","ᵈ":"d","ᵉ":"e","á¶ ":"f","ᵍ":"g","ʰ":"h","ⁱ":"i","ʲ":"j","ᵏ":"k","Ë¡":"l","ᵐ":"m","ⁿ":"n","ᵒ":"o","ᵖ":"p","ʳ":"r","Ë¢":"s","ᵗ":"t","ᵘ":"u","ᵛ":"v","Ê·":"w","Ë£":"x","ʸ":"y","á¶»":"z","ᵝ":"β","ᵞ":"γ","ᵟ":"δ","áµ ":"ϕ","ᵡ":"χ","á¶¿":"θ"}),Zr=Object.freeze({"𝒜":"A","ℬ":"B","𝒞":"C","𝒟":"D","ℰ":"E","ℱ":"F","𝒢":"G","ℋ":"H","ℐ":"I","𝒥":"J","𝒦":"K","ℒ":"L","ℳ":"M","𝒩":"N","𝒪":"O","𝒫":"P","𝒬":"Q","ℛ":"R","𝒮":"S","𝒯":"T","𝒰":"U","𝒱":"V","𝒲":"W","𝒳":"X","𝒴":"Y","𝒵":"Z"});var Yr={"́":{text:"\\'",math:"\\acute"},"̀":{text:"\\`",math:"\\grave"},"̈":{text:'\\"',math:"\\ddot"},"̃":{text:"\\~",math:"\\tilde"},"̄":{text:"\\=",math:"\\bar"},"̆":{text:"\\u",math:"\\breve"},"̌":{text:"\\v",math:"\\check"},"̂":{text:"\\^",math:"\\hat"},"̇":{text:"\\.",math:"\\dot"},"̊":{text:"\\r",math:"\\mathring"},"̋":{text:"\\H"},"̧":{text:"\\c"}},Jr={"á":"á","à":"à","ä":"ä","ǟ":"ǟ","ã":"ã","ā":"ā","ă":"ă","ắ":"ắ","ằ":"ằ","ẵ":"ẵ","ǎ":"ǎ","â":"â","ấ":"ấ","ầ":"ầ","ẫ":"ẫ","ȧ":"ȧ","Ç¡":"ǡ","Ã¥":"å","Ç»":"ǻ","ḃ":"ḃ","ć":"ć","č":"č","ĉ":"ĉ","ċ":"ċ","ď":"ď","ḋ":"ḋ","é":"é","è":"è","ë":"ë","ẽ":"ẽ","ē":"ē","ḗ":"ḗ","ḕ":"ḕ","ĕ":"ĕ","ě":"ě","ê":"ê","ế":"ế","ề":"ề","ễ":"ễ","ė":"ė","ḟ":"ḟ","ǵ":"ǵ","ḡ":"ḡ","ğ":"ğ","ǧ":"ǧ","ĝ":"ĝ","Ä¡":"ġ","ḧ":"ḧ","ȟ":"ȟ","Ä¥":"ĥ","ḣ":"ḣ","í":"í","ì":"ì","ï":"ï","ḯ":"ḯ","Ä©":"ĩ","Ä«":"ī","Ä­":"ĭ","ǐ":"ǐ","î":"î","ǰ":"ǰ","ĵ":"ĵ","ḱ":"ḱ","Ç©":"ǩ","ĺ":"ĺ","ľ":"ľ","ḿ":"ḿ","ṁ":"ṁ","ń":"ń","ǹ":"ǹ","ñ":"ñ","ň":"ň","ṅ":"ṅ","ó":"ó","ò":"ò","ö":"ö","È«":"ȫ","õ":"õ","ṍ":"ṍ","ṏ":"ṏ","È­":"ȭ","ō":"ō","ṓ":"ṓ","ṑ":"ṑ","ŏ":"ŏ","ǒ":"ǒ","ô":"ô","ố":"ố","ồ":"ồ","ỗ":"ỗ","ȯ":"ȯ","ȱ":"ȱ","ő":"ő","ṕ":"ṕ","ṗ":"ṗ","ŕ":"ŕ","ř":"ř","ṙ":"ṙ","ś":"ś","á¹¥":"ṥ","Å¡":"š","á¹§":"ṧ","ŝ":"ŝ","ṡ":"ṡ","ẗ":"ẗ","Å¥":"ť","ṫ":"ṫ","ú":"ú","ù":"ù","ü":"ü","ǘ":"ǘ","ǜ":"ǜ","ǖ":"ǖ","ǚ":"ǚ","Å©":"ũ","á¹¹":"ṹ","Å«":"ū","á¹»":"ṻ","Å­":"ŭ","ǔ":"ǔ","û":"û","ů":"ů","ű":"ű","á¹½":"ṽ","ẃ":"ẃ","ẁ":"ẁ","ẅ":"ẅ","ŵ":"ŵ","ẇ":"ẇ","ẘ":"ẘ","ẍ":"ẍ","ẋ":"ẋ","ý":"ý","ỳ":"ỳ","ÿ":"ÿ","ỹ":"ỹ","ȳ":"ȳ","Å·":"ŷ","ẏ":"ẏ","ẙ":"ẙ","ź":"ź","ž":"ž","ẑ":"ẑ","ż":"ż","Á":"Á","À":"À","Ä":"Ä","Ǟ":"Ǟ","Ã":"Ã","Ā":"Ā","Ă":"Ă","Ắ":"Ắ","Ằ":"Ằ","Ẵ":"Ẵ","Ǎ":"Ǎ","Â":"Â","Ấ":"Ấ","Ầ":"Ầ","Ẫ":"Ẫ","Ȧ":"Ȧ","Ç ":"Ǡ","Å":"Å","Ǻ":"Ǻ","Ḃ":"Ḃ","Ć":"Ć","Č":"Č","Ĉ":"Ĉ","Ċ":"Ċ","Ď":"Ď","Ḋ":"Ḋ","É":"É","È":"È","Ë":"Ë","Ẽ":"Ẽ","Ē":"Ē","Ḗ":"Ḗ","Ḕ":"Ḕ","Ĕ":"Ĕ","Ě":"Ě","Ê":"Ê","Ế":"Ế","Ề":"Ề","Ễ":"Ễ","Ė":"Ė","Ḟ":"Ḟ","Ç´":"Ǵ","Ḡ":"Ḡ","Ğ":"Ğ","Ǧ":"Ǧ","Ĝ":"Ĝ","Ä ":"Ġ","Ḧ":"Ḧ","Ȟ":"Ȟ","Ĥ":"Ĥ","Ḣ":"Ḣ","Í":"Í","Ì":"Ì","Ï":"Ï","Ḯ":"Ḯ","Ĩ":"Ĩ","Ī":"Ī","Ĭ":"Ĭ","Ǐ":"Ǐ","Î":"Î","İ":"İ","Ä´":"Ĵ","Ḱ":"Ḱ","Ǩ":"Ǩ","Ĺ":"Ĺ","Ľ":"Ľ","Ḿ":"Ḿ","Ṁ":"Ṁ","Ń":"Ń","Ǹ":"Ǹ","Ñ":"Ñ","Ň":"Ň","Ṅ":"Ṅ","Ó":"Ó","Ò":"Ò","Ö":"Ö","Ȫ":"Ȫ","Õ":"Õ","Ṍ":"Ṍ","Ṏ":"Ṏ","Ȭ":"Ȭ","Ō":"Ō","Ṓ":"Ṓ","Ṑ":"Ṑ","Ŏ":"Ŏ","Ǒ":"Ǒ","Ô":"Ô","Ố":"Ố","Ồ":"Ồ","Ỗ":"Ỗ","È®":"Ȯ","Ȱ":"Ȱ","Ő":"Ő","Ṕ":"Ṕ","Ṗ":"Ṗ","Ŕ":"Ŕ","Ř":"Ř","Ṙ":"Ṙ","Ś":"Ś","Ṥ":"Ṥ","Å ":"Š","Ṧ":"Ṧ","Ŝ":"Ŝ","á¹ ":"Ṡ","Ť":"Ť","Ṫ":"Ṫ","Ú":"Ú","Ù":"Ù","Ü":"Ü","Ǘ":"Ǘ","Ǜ":"Ǜ","Ǖ":"Ǖ","Ǚ":"Ǚ","Ũ":"Ũ","Ṹ":"Ṹ","Ū":"Ū","Ṻ":"Ṻ","Ŭ":"Ŭ","Ǔ":"Ǔ","Û":"Û","Å®":"Ů","Ű":"Ű","á¹¼":"Ṽ","Ẃ":"Ẃ","Ẁ":"Ẁ","Ẅ":"Ẅ","Å´":"Ŵ","Ẇ":"Ẇ","Ẍ":"Ẍ","Ẋ":"Ẋ","Ý":"Ý","Ỳ":"Ỳ","Ÿ":"Ÿ","Ỹ":"Ỹ","Ȳ":"Ȳ","Ŷ":"Ŷ","Ẏ":"Ẏ","Ź":"Ź","Ž":"Ž","Ẑ":"Ẑ","Å»":"Ż","ά":"ά","á½°":"ὰ","á¾±":"ᾱ","á¾°":"ᾰ","έ":"έ","á½²":"ὲ","ή":"ή","á½´":"ὴ","ί":"ί","á½¶":"ὶ","ϊ":"ϊ","ΐ":"ΐ","ῒ":"ῒ","ῑ":"ῑ","ῐ":"ῐ","ό":"ό","ὸ":"ὸ","ύ":"ύ","ὺ":"ὺ","ϋ":"ϋ","ΰ":"ΰ","á¿¢":"ῢ","á¿¡":"ῡ","á¿ ":"ῠ","ώ":"ώ","á½¼":"ὼ","Ύ":"Ύ","Ὺ":"Ὺ","Ϋ":"Ϋ","á¿©":"Ῡ","Ῠ":"Ῠ","Ώ":"Ώ","Ὼ":"Ὼ"};const Kr=["bin","op","open","punct","rel"],Qr=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/,en=/^ *\\text/;class tn{constructor(e,t,r=!1){this.mode="math",this.gullet=new _r(e,t,this.mode),this.settings=t,this.isPreamble=r,this.leftrightDepth=0,this.prevAtomType=""}expect(t,r=!0){if(this.fetch().text!==t)throw new e(`Expected '${t}', got '${this.fetch().text}'`,this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");const e=this.parseExpression(!1);if(this.expect("EOF"),this.isPreamble){const e=Object.create(null);return Object.entries(this.gullet.macros.current).forEach((([t,r])=>{e[t]=r})),this.gullet.endGroup(),e}const t=this.gullet.macros.get("\\df@tag");return this.gullet.endGroup(),t&&(this.gullet.macros.current["\\df@tag"]=t),e}static get endOfExpression(){return["}","\\endgroup","\\end","\\right","\\endtoggle","&"]}subparse(e){const t=this.nextToken;this.consume(),this.gullet.pushToken(new He("}")),this.gullet.pushTokens(e);const r=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,r}parseExpression(e,t,r){const n=[];for(this.prevAtomType="";;){"math"===this.mode&&this.consumeSpaces();const s=this.fetch();if(-1!==tn.endOfExpression.indexOf(s.text))break;if(t&&s.text===t)break;if(r&&"\\middle"===s.text)break;if(e&&Fr[s.text]&&Fr[s.text].infix)break;const o=this.parseAtom(t);if(!o)break;"internal"!==o.type&&(n.push(o),this.prevAtomType="atom"===o.type?o.family:o.type)}return"text"===this.mode&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(t){let r,n=-1;for(let s=0;s=128||Pr.exec(r)))return null;if(this.settings.strict&&"math"===this.mode)throw new e(`Unicode text character "${r[0]}" used in math mode`,t);s={type:"textord",mode:"text",loc:Ue.range(t),text:r}}if(this.consume(),n)for(let r=0;r0&&s[0].type&&"array"===s[0].type&&s[0].addEqnNum)&&n.gullet.macros.get("\\df@tag")){if(!r.displayMode)throw new e("\\tag works only in display mode");n.gullet.feed("\\df@tag"),s=[{type:"tag",mode:"text",body:s,tag:n.parse()}]}return s},nn=[2,2,3,3];class sn{constructor(e){this.level=e.level,this.color=e.color,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontSize=e.fontSize||1,this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.maxSize=e.maxSize}extend(e){const t={level:this.level,color:this.color,font:this.font,fontFamily:this.fontFamily,fontSize:this.fontSize,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize};for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return new sn(t)}withLevel(e){return this.extend({level:e})}incrementLevel(){return this.extend({level:Math.min(this.level+1,3)})}inSubOrSup(){return this.extend({level:nn[this.level]})}withColor(e){return this.extend({color:e})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withFontSize(e){return this.extend({fontSize:e})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}getColor(){return this.color}}function on(e){const t={};let r=0;const n=document.getElementsByClassName("tml-eqn");for(let e of n)for(r+=1,e.setAttribute("id","tml-eqn-"+String(r));"mtable"!==e.tagName;){if(e.getElementsByClassName("tml-label").length>0){const n=e.attributes.id.value;t[n]=String(r);break}e=e.parentElement}const s=document.getElementsByClassName("tml-tageqn");for(const e of s){if(e.getElementsByClassName("tml-label").length>0){const r=e.getElementsByClassName("tml-tag");if(r.length>0){const n=e.attributes.id.value;t[n]=r[0].textContent}}}[...e.getElementsByClassName("tml-ref")].forEach((e=>{const r=e.getAttribute("href");let n=t[r.slice(1)];-1===e.className.indexOf("tml-eqref")?(n=n.replace(/^\(/,""),n=n.replace(/\)$/,"")):("("!==n.charAt(0)&&(n="("+n),")"!==n.slice(-1)&&(n+=")"));const s=document.createElementNS("http://www.w3.org/1998/Math/MathML","mtext");s.appendChild(document.createTextNode(n));const o=document.createElementNS("http://www.w3.org/1998/Math/MathML","math");o.appendChild(s),e.textContent="",e.appendChild(o)}))}const an=function(e,t,r){let n=r,s=0;const o=e.length;for(;ne.left.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"))).join("|")+")");for(;r=e.search(s),-1!==r;){r>0&&(n.push({type:"text",data:e.slice(0,r)}),e=e.slice(r));const s=t.findIndex((t=>e.startsWith(t.left)));if(r=an(t[s].right,e,t[s].left.length),-1===r)break;const o=e.slice(0,r+t[s].right.length),a=ln.test(o)?o:e.slice(t[s].left.length,r);n.push({type:"math",data:a,rawData:o,display:t[s].display}),e=e.slice(r+t[s].right.length)}return""!==e&&n.push({type:"text",data:e}),n}(t,r.delimiters);if(1===n.length&&"text"===n[0].type)return null;const s=document.createDocumentFragment();for(let t=0;t-1===e.indexOf(" "+t+" ")))&&un(n,t)}}};let hn=function(e,t,r={}){t.textContent="";const n="math"===t.tagName.toLowerCase();n&&(r.wrap="none");const s=gn(e,r);n||s.children.length>1?(t.textContent="",s.children.forEach((e=>{t.appendChild(e.toNode())}))):t.appendChild(s.toNode())};"undefined"!=typeof document&&"CSS1Compat"!==document.compatMode&&("undefined"!=typeof console&&console.warn("Warning: Temml doesn't work in quirks mode. Make sure your website has a suitable doctype."),hn=function(){throw new e("Temml doesn't work in quirks mode.")});const gn=function(t,r){const n=new a(r);try{const e=rn(t,n);return he(e,t,new sn({level:n.displayMode?Ve:_e,maxSize:n.maxSize}),n)}catch(r){return function(t,r,n){if(n.throwOnError||!(t instanceof e))throw t;const s=new y(["temml-error"],[new w(r+"\n\n"+t.toString())]);return s.style.color=n.errorColor,s.style.whiteSpace="pre-line",s}(r,t,n)}};return{version:"0.11.04",render:hn,renderToString:function(e,t){return gn(e,t).toMarkup()},renderMathInElement:function(e,t){if(!e)throw new Error("No element provided to render");const r={};for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(r[e]=t[e]);r.fences?r.delimiters=(e=>{if("$"===e||"("===e)return dn[e];if("$+"===e||"(+"===e)return dn[e.slice(0,1)].concat(mn);return"ams"===e?mn:"all"===e?dn["("].concat(dn.$).concat(mn):cn})(r.fences):r.delimiters=r.delimiters||cn,r.ignoredTags=r.ignoredTags||["script","noscript","style","textarea","pre","code","option"],r.ignoredClasses=r.ignoredClasses||[],r.errorCallback=r.errorCallback||console.error,r.macros=r.macros||{},un(e,r),on(e)},postProcess:on,ParseError:e,definePreamble:function(e,t){const r=new a(t);if(r.macros={},!("string"==typeof e||e instanceof String))throw new TypeError("Temml can only parse string typed expression");const n=new tn(e,r,!0);delete n.gullet.macros.current["\\df@tag"];return n.parse()},__parse:function(e,t){const r=new a(t);return rn(e,r)},__renderToMathMLTree:gn,__defineSymbol:I,__defineMacro:Ye}}(); \ No newline at end of file diff --git a/templates/index.html b/templates/index.html deleted file mode 100644 index 695b1be..0000000 --- a/templates/index.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - Alexander Goussas | Programming & Friends {title} - - - - - - - -
- -
- - -
-

{title}

-
- Last updated: {date} -
- {body} -
- - diff --git a/zine.ziggy b/zine.ziggy new file mode 100644 index 0000000..ea44b7a --- /dev/null +++ b/zine.ziggy @@ -0,0 +1,12 @@ +Site { + .title = "Alexander Goussas", + .host_url = "https://frustrated-functor.dev", + .content_dir_path = "content", + .layouts_dir_path = "layouts", + .assets_dir_path = "assets", + .static_assets = [ + "Temml.woff2", + "hornet.png", + "logo.png" + ], +} -- 2.43.0