@greppleai/grip-tui 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/autocomplete.d.ts +3 -1
- package/dist/autocomplete.d.ts.map +1 -1
- package/dist/autocomplete.js +16 -8
- package/dist/autocomplete.js.map +1 -1
- package/dist/components/alt-screen-flash.d.ts.map +1 -1
- package/dist/components/alt-screen-flash.js +2 -3
- package/dist/components/alt-screen-flash.js.map +1 -1
- package/dist/components/box.d.ts.map +1 -1
- package/dist/components/box.js +1 -6
- package/dist/components/box.js.map +1 -1
- package/dist/components/cancellable-loader.d.ts.map +1 -1
- package/dist/components/cancellable-loader.js +4 -3
- package/dist/components/cancellable-loader.js.map +1 -1
- package/dist/components/editor.d.ts +1 -0
- package/dist/components/editor.d.ts.map +1 -1
- package/dist/components/editor.js +55 -54
- package/dist/components/editor.js.map +1 -1
- package/dist/components/h-stack.d.ts.map +1 -1
- package/dist/components/h-stack.js +1 -1
- package/dist/components/h-stack.js.map +1 -1
- package/dist/components/image.d.ts.map +1 -1
- package/dist/components/image.js +0 -8
- package/dist/components/image.js.map +1 -1
- package/dist/components/input.d.ts.map +1 -1
- package/dist/components/input.js +14 -14
- package/dist/components/input.js.map +1 -1
- package/dist/components/loader.d.ts.map +1 -1
- package/dist/components/loader.js +8 -10
- package/dist/components/loader.js.map +1 -1
- package/dist/components/markdown.d.ts.map +1 -1
- package/dist/components/markdown.js +0 -11
- package/dist/components/markdown.js.map +1 -1
- package/dist/components/scroll-view.d.ts.map +1 -1
- package/dist/components/scroll-view.js +5 -15
- package/dist/components/scroll-view.js.map +1 -1
- package/dist/components/select-list.d.ts.map +1 -1
- package/dist/components/select-list.js +4 -9
- package/dist/components/select-list.js.map +1 -1
- package/dist/components/settings-list.d.ts.map +1 -1
- package/dist/components/settings-list.js +4 -12
- package/dist/components/settings-list.js.map +1 -1
- package/dist/components/spacer.d.ts.map +1 -1
- package/dist/components/spacer.js +0 -1
- package/dist/components/spacer.js.map +1 -1
- package/dist/components/stack.d.ts.map +1 -1
- package/dist/components/stack.js +1 -3
- package/dist/components/stack.js.map +1 -1
- package/dist/components/text.d.ts.map +1 -1
- package/dist/components/text.js +0 -8
- package/dist/components/text.js.map +1 -1
- package/dist/components/truncated-text.d.ts.map +1 -1
- package/dist/components/truncated-text.js +0 -3
- package/dist/components/truncated-text.js.map +1 -1
- package/dist/components/v-stack.d.ts.map +1 -1
- package/dist/components/v-stack.js +1 -1
- package/dist/components/v-stack.js.map +1 -1
- package/dist/editor-component.d.ts.map +1 -1
- package/dist/fuzzy.d.ts.map +1 -1
- package/dist/fuzzy.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/keybindings.d.ts.map +1 -1
- package/dist/keybindings.js +2 -4
- package/dist/keybindings.js.map +1 -1
- package/dist/keys.d.ts.map +1 -1
- package/dist/keys.js.map +1 -1
- package/dist/kill-ring.d.ts.map +1 -1
- package/dist/kill-ring.js +3 -1
- package/dist/kill-ring.js.map +1 -1
- package/dist/latex.d.ts.map +1 -1
- package/dist/latex.js +3 -7
- package/dist/latex.js.map +1 -1
- package/dist/layout-node.d.ts.map +1 -1
- package/dist/layout-node.js.map +1 -1
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js.map +1 -1
- package/dist/native-modifiers.d.ts.map +1 -1
- package/dist/native-modifiers.js.map +1 -1
- package/dist/stdin-buffer.d.ts.map +1 -1
- package/dist/stdin-buffer.js +4 -6
- package/dist/stdin-buffer.js.map +1 -1
- package/dist/terminal-control.d.ts.map +1 -1
- package/dist/terminal-control.js.map +1 -1
- package/dist/terminal-image.d.ts.map +1 -1
- package/dist/terminal-image.js.map +1 -1
- package/dist/terminal.d.ts.map +1 -1
- package/dist/terminal.js +25 -30
- package/dist/terminal.js.map +1 -1
- package/dist/tui-alt-screen.d.ts.map +1 -1
- package/dist/tui-alt-screen.js +15 -32
- package/dist/tui-alt-screen.js.map +1 -1
- package/dist/tui-main-screen.d.ts.map +1 -1
- package/dist/tui-main-screen.js +12 -9
- package/dist/tui-main-screen.js.map +1 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +17 -20
- package/dist/tui.js.map +1 -1
- package/dist/undo-stack.d.ts.map +1 -1
- package/dist/undo-stack.js +3 -1
- package/dist/undo-stack.js.map +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +14 -12
- package/dist/utils.js.map +1 -1
- package/dist/word-navigation.d.ts.map +1 -1
- package/dist/word-navigation.js.map +1 -1
- package/package.json +7 -7
package/dist/latex.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"latex.js","sourceRoot":"","sources":["../src/latex.ts"],"names":[],"mappings":"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","sourcesContent":["import { visibleWidth } from \"./utils.ts\";\n\nconst SYMBOLS: Readonly<Record<string, string>> = {\n\talpha: \"α\",\n\tbeta: \"β\",\n\tgamma: \"γ\",\n\tdelta: \"δ\",\n\tepsilon: \"ϵ\",\n\tvarepsilon: \"ε\",\n\tzeta: \"ζ\",\n\teta: \"η\",\n\ttheta: \"θ\",\n\tvartheta: \"ϑ\",\n\tiota: \"ι\",\n\tkappa: \"κ\",\n\tvarkappa: \"ϰ\",\n\tlambda: \"λ\",\n\tmu: \"μ\",\n\tnu: \"ν\",\n\txi: \"ξ\",\n\tpi: \"π\",\n\tvarpi: \"ϖ\",\n\trho: \"ρ\",\n\tvarrho: \"ϱ\",\n\tsigma: \"σ\",\n\tvarsigma: \"ς\",\n\ttau: \"τ\",\n\tupsilon: \"υ\",\n\tphi: \"ϕ\",\n\tvarphi: \"φ\",\n\tchi: \"χ\",\n\tpsi: \"ψ\",\n\tomega: \"ω\",\n\tGamma: \"Γ\",\n\tDelta: \"Δ\",\n\tTheta: \"Θ\",\n\tLambda: \"Λ\",\n\tXi: \"Ξ\",\n\tPi: \"Π\",\n\tSigma: \"Σ\",\n\tUpsilon: \"Υ\",\n\tPhi: \"Φ\",\n\tPsi: \"Ψ\",\n\tOmega: \"Ω\",\n\tpm: \"±\",\n\tmp: \"∓\",\n\ttimes: \"×\",\n\tdiv: \"÷\",\n\tcdot: \"·\",\n\tast: \"∗\",\n\tstar: \"⋆\",\n\tcirc: \"∘\",\n\tbullet: \"•\",\n\toplus: \"⊕\",\n\tominus: \"⊖\",\n\totimes: \"⊗\",\n\toslash: \"⊘\",\n\todot: \"⊙\",\n\tbigcirc: \"○\",\n\tdagger: \"†\",\n\tddagger: \"‡\",\n\tamalg: \"⨿\",\n\tuplus: \"⊎\",\n\tsqcap: \"⊓\",\n\tsqcup: \"⊔\",\n\ttriangleleft: \"◁\",\n\ttriangleright: \"▷\",\n\twr: \"≀\",\n\tcap: \"∩\",\n\tcup: \"∪\",\n\tbigcap: \"⋂\",\n\tbigcup: \"⋃\",\n\tbigwedge: \"⋀\",\n\tbigvee: \"⋁\",\n\tbigsqcup: \"⨆\",\n\tbiguplus: \"⨄\",\n\tbigoplus: \"⨁\",\n\tbigotimes: \"⨂\",\n\tbigodot: \"⨀\",\n\tsetminus: \"∖\",\n\tin: \"∈\",\n\tnotin: \"∉\",\n\tni: \"∋\",\n\tsubset: \"⊂\",\n\tsupset: \"⊃\",\n\tsubseteq: \"⊆\",\n\tsupseteq: \"⊇\",\n\tsqsubset: \"⊏\",\n\tsqsupset: \"⊐\",\n\tsqsubseteq: \"⊑\",\n\tsqsupseteq: \"⊒\",\n\tprec: \"≺\",\n\tpreceq: \"≼\",\n\tsucc: \"≻\",\n\tsucceq: \"≽\",\n\tll: \"≪\",\n\tgg: \"≫\",\n\tle: \"≤\",\n\tleq: \"≤\",\n\tleqslant: \"≤\",\n\tge: \"≥\",\n\tgeq: \"≥\",\n\tgeqslant: \"≥\",\n\tne: \"≠\",\n\tneq: \"≠\",\n\tequiv: \"≡\",\n\tapprox: \"≈\",\n\tsim: \"∼\",\n\tsimeq: \"≃\",\n\tcong: \"≅\",\n\tasymp: \"≍\",\n\tdoteq: \"≐\",\n\tpropto: \"∝\",\n\tparallel: \"∥\",\n\tperp: \"⊥\",\n\tmid: \"∣\",\n\tvdash: \"⊢\",\n\tdashv: \"⊣\",\n\tmodels: \"⊨\",\n\tVdash: \"⊩\",\n\tVvdash: \"⊪\",\n\tnvdash: \"⊬\",\n\tnvDash: \"⊭\",\n\tforall: \"∀\",\n\texists: \"∃\",\n\tnexists: \"∄\",\n\tneg: \"¬\",\n\tland: \"∧\",\n\twedge: \"∧\",\n\tlor: \"∨\",\n\tvee: \"∨\",\n\tto: \"→\",\n\trightarrow: \"→\",\n\tlongrightarrow: \"→\",\n\tleftarrow: \"←\",\n\tlongleftarrow: \"←\",\n\tgets: \"←\",\n\tleftrightarrow: \"↔\",\n\tlongleftrightarrow: \"↔\",\n\thookleftarrow: \"↩\",\n\thookrightarrow: \"↪\",\n\ttwoheadleftarrow: \"↞\",\n\ttwoheadrightarrow: \"↠\",\n\tleftharpoonup: \"↼\",\n\tleftharpoondown: \"↽\",\n\trightharpoonup: \"⇀\",\n\trightharpoondown: \"⇁\",\n\trightleftharpoons: \"⇌\",\n\tleftrightharpoons: \"⇋\",\n\tnearrow: \"↗\",\n\tsearrow: \"↘\",\n\tswarrow: \"↙\",\n\tnwarrow: \"↖\",\n\trightsquigarrow: \"⇝\",\n\tleadsto: \"⇝\",\n\tRightarrow: \"⇒\",\n\tLongrightarrow: \"⇒\",\n\tLeftarrow: \"⇐\",\n\tLongleftarrow: \"⇐\",\n\tLeftrightarrow: \"⇔\",\n\tLongleftrightarrow: \"⇔\",\n\timplies: \"⇒\",\n\tiff: \"⇔\",\n\tmapsto: \"↦\",\n\tlongmapsto: \"↦\",\n\tuparrow: \"↑\",\n\tdownarrow: \"↓\",\n\tpartial: \"∂\",\n\tnabla: \"∇\",\n\tint: \"∫\",\n\tiint: \"∬\",\n\tiiint: \"∭\",\n\toint: \"∮\",\n\tsum: \"∑\",\n\tprod: \"∏\",\n\tcoprod: \"∐\",\n\tinfty: \"∞\",\n\temptyset: \"∅\",\n\tvarnothing: \"∅\",\n\tangle: \"∠\",\n\ttherefore: \"∴\",\n\tbecause: \"∵\",\n\taleph: \"ℵ\",\n\tbeth: \"ℶ\",\n\tgimel: \"ℷ\",\n\tdaleth: \"ℸ\",\n\ttop: \"⊤\",\n\tbot: \"⊥\",\n\ttriangle: \"△\",\n\tsquare: \"□\",\n\tlozenge: \"◊\",\n\tcheckmark: \"✓\",\n\tcomplement: \"∁\",\n\twp: \"℘\",\n\tprime: \"′\",\n\tldots: \"…\",\n\tdots: \"…\",\n\tcdots: \"⋯\",\n\tvdots: \"⋮\",\n\tddots: \"⋱\",\n\tell: \"ℓ\",\n\thbar: \"ℏ\",\n\tIm: \"ℑ\",\n\tRe: \"ℜ\",\n\tlangle: \"⟨\",\n\trangle: \"⟩\",\n\tvert: \"|\",\n\tlvert: \"|\",\n\trvert: \"|\",\n\tVert: \"‖\",\n\tlVert: \"‖\",\n\trVert: \"‖\",\n\tlbrace: \"{\",\n\trbrace: \"}\",\n\tbackslash: \"\\\\\",\n\tlfloor: \"⌊\",\n\trfloor: \"⌋\",\n\tlceil: \"⌈\",\n\trceil: \"⌉\",\n\tcolon: \":\",\n};\n\nconst NAMED_OPERATORS = new Set([\n\t\"arccos\",\n\t\"arcsin\",\n\t\"arctan\",\n\t\"arg\",\n\t\"cos\",\n\t\"cosh\",\n\t\"cot\",\n\t\"coth\",\n\t\"csc\",\n\t\"deg\",\n\t\"det\",\n\t\"dim\",\n\t\"exp\",\n\t\"gcd\",\n\t\"hom\",\n\t\"inf\",\n\t\"ker\",\n\t\"lg\",\n\t\"lim\",\n\t\"liminf\",\n\t\"limsup\",\n\t\"ln\",\n\t\"log\",\n\t\"max\",\n\t\"min\",\n\t\"Pr\",\n\t\"sec\",\n\t\"sin\",\n\t\"sinh\",\n\t\"sup\",\n\t\"tan\",\n\t\"tanh\",\n]);\n\nconst LIMIT_OPERATORS = new Set([\n\t\"argmax\",\n\t\"argmin\",\n\t\"inf\",\n\t\"injlim\",\n\t\"lim\",\n\t\"liminf\",\n\t\"limsup\",\n\t\"max\",\n\t\"min\",\n\t\"projlim\",\n\t\"sup\",\n]);\n\nconst DISPLAY_LIMIT_SYMBOLS = new Set([\n\t\"bigcap\",\n\t\"bigcup\",\n\t\"bigodot\",\n\t\"bigoplus\",\n\t\"bigotimes\",\n\t\"bigsqcup\",\n\t\"biguplus\",\n\t\"bigvee\",\n\t\"bigwedge\",\n\t\"coprod\",\n\t\"int\",\n\t\"iint\",\n\t\"iiint\",\n\t\"oint\",\n\t\"prod\",\n\t\"sum\",\n]);\n\nconst RELATION_COMMANDS = new Set([\n\t\"Leftarrow\",\n\t\"Leftrightarrow\",\n\t\"Longleftarrow\",\n\t\"Longleftrightarrow\",\n\t\"Longrightarrow\",\n\t\"Rightarrow\",\n\t\"Vdash\",\n\t\"Vvdash\",\n\t\"approx\",\n\t\"asymp\",\n\t\"cong\",\n\t\"dashv\",\n\t\"doteq\",\n\t\"downarrow\",\n\t\"equiv\",\n\t\"ge\",\n\t\"geq\",\n\t\"geqslant\",\n\t\"gets\",\n\t\"gg\",\n\t\"hookleftarrow\",\n\t\"hookrightarrow\",\n\t\"iff\",\n\t\"implies\",\n\t\"in\",\n\t\"leadsto\",\n\t\"le\",\n\t\"leftarrow\",\n\t\"leftharpoondown\",\n\t\"leftharpoonup\",\n\t\"leftrightarrow\",\n\t\"leftrightharpoons\",\n\t\"leq\",\n\t\"leqslant\",\n\t\"ll\",\n\t\"longleftarrow\",\n\t\"longleftrightarrow\",\n\t\"longmapsto\",\n\t\"longrightarrow\",\n\t\"mapsto\",\n\t\"mid\",\n\t\"models\",\n\t\"ne\",\n\t\"nearrow\",\n\t\"neq\",\n\t\"ni\",\n\t\"notin\",\n\t\"nvdash\",\n\t\"nvDash\",\n\t\"nwarrow\",\n\t\"parallel\",\n\t\"perp\",\n\t\"prec\",\n\t\"preceq\",\n\t\"propto\",\n\t\"rightharpoondown\",\n\t\"rightharpoonup\",\n\t\"rightleftharpoons\",\n\t\"rightarrow\",\n\t\"rightsquigarrow\",\n\t\"searrow\",\n\t\"sim\",\n\t\"simeq\",\n\t\"sqsubset\",\n\t\"sqsubseteq\",\n\t\"sqsupset\",\n\t\"sqsupseteq\",\n\t\"subset\",\n\t\"subseteq\",\n\t\"succ\",\n\t\"succeq\",\n\t\"supset\",\n\t\"supseteq\",\n\t\"swarrow\",\n\t\"to\",\n\t\"triangleleft\",\n\t\"triangleright\",\n\t\"twoheadleftarrow\",\n\t\"twoheadrightarrow\",\n\t\"uparrow\",\n\t\"vdash\",\n]);\n\nconst NEGATED_SYMBOLS: Readonly<Record<string, string>> = {\n\t\"<\": \"≮\",\n\t\">\": \"≯\",\n\t\"=\": \"≠\",\n\t\"∈\": \"∉\",\n\t\"∋\": \"∌\",\n\t\"∣\": \"∤\",\n\t\"∥\": \"∦\",\n\t\"∼\": \"≁\",\n\t\"≃\": \"≄\",\n\t\"≅\": \"≇\",\n\t\"≈\": \"≉\",\n\t\"≡\": \"≢\",\n\t\"≤\": \"≰\",\n\t\"≥\": \"≱\",\n\t\"≺\": \"⊀\",\n\t\"≻\": \"⊁\",\n\t\"⊂\": \"⊄\",\n\t\"⊃\": \"⊅\",\n\t\"⊆\": \"⊈\",\n\t\"⊇\": \"⊉\",\n\t\"⊢\": \"⊬\",\n\t\"⊨\": \"⊭\",\n\t\"↔\": \"↮\",\n\t\"←\": \"↚\",\n\t\"→\": \"↛\",\n\t\"⇒\": \"⇏\",\n\t\"⇐\": \"⇍\",\n\t\"⇔\": \"⇎\",\n\t\"≼\": \"⋠\",\n\t\"≽\": \"⋡\",\n};\n\nconst BLACKBOARD: Readonly<Record<string, string>> = {\n\tC: \"ℂ\",\n\tH: \"ℍ\",\n\tN: \"ℕ\",\n\tP: \"ℙ\",\n\tQ: \"ℚ\",\n\tR: \"ℝ\",\n\tZ: \"ℤ\",\n};\n\nconst SUPERSCRIPTS: Readonly<Record<string, string>> = {\n\t\"0\": \"⁰\",\n\t\"1\": \"¹\",\n\t\"2\": \"²\",\n\t\"3\": \"³\",\n\t\"4\": \"⁴\",\n\t\"5\": \"⁵\",\n\t\"6\": \"⁶\",\n\t\"7\": \"⁷\",\n\t\"8\": \"⁸\",\n\t\"9\": \"⁹\",\n\t\"+\": \"⁺\",\n\t\"-\": \"⁻\",\n\t\"=\": \"⁼\",\n\t\"(\": \"⁽\",\n\t\")\": \"⁾\",\n\ta: \"ᵃ\",\n\tb: \"ᵇ\",\n\tc: \"ᶜ\",\n\td: \"ᵈ\",\n\te: \"ᵉ\",\n\tf: \"ᶠ\",\n\tg: \"ᵍ\",\n\th: \"ʰ\",\n\ti: \"ⁱ\",\n\tj: \"ʲ\",\n\tk: \"ᵏ\",\n\tl: \"ˡ\",\n\tm: \"ᵐ\",\n\tn: \"ⁿ\",\n\to: \"ᵒ\",\n\tp: \"ᵖ\",\n\tr: \"ʳ\",\n\ts: \"ˢ\",\n\tt: \"ᵗ\",\n\tu: \"ᵘ\",\n\tv: \"ᵛ\",\n\tw: \"ʷ\",\n\tx: \"ˣ\",\n\ty: \"ʸ\",\n\tz: \"ᶻ\",\n};\n\nconst SUBSCRIPTS: Readonly<Record<string, string>> = {\n\t\"0\": \"₀\",\n\t\"1\": \"₁\",\n\t\"2\": \"₂\",\n\t\"3\": \"₃\",\n\t\"4\": \"₄\",\n\t\"5\": \"₅\",\n\t\"6\": \"₆\",\n\t\"7\": \"₇\",\n\t\"8\": \"₈\",\n\t\"9\": \"₉\",\n\t\"+\": \"₊\",\n\t\"-\": \"₋\",\n\t\"=\": \"₌\",\n\t\"(\": \"₍\",\n\t\")\": \"₎\",\n\ta: \"ₐ\",\n\te: \"ₑ\",\n\th: \"ₕ\",\n\ti: \"ᵢ\",\n\tj: \"ⱼ\",\n\tk: \"ₖ\",\n\tl: \"ₗ\",\n\tm: \"ₘ\",\n\tn: \"ₙ\",\n\to: \"ₒ\",\n\tp: \"ₚ\",\n\tr: \"ᵣ\",\n\ts: \"ₛ\",\n\tt: \"ₜ\",\n\tu: \"ᵤ\",\n\tv: \"ᵥ\",\n\tx: \"ₓ\",\n};\n\nconst SPACING_COMMANDS = new Set([\n\t\",\",\n\t\":\",\n\t\";\",\n\t\" \",\n\t\">\",\n\t\"enspace\",\n\t\"enskip\",\n\t\"medspace\",\n\t\"quad\",\n\t\"qquad\",\n\t\"thickspace\",\n\t\"thinspace\",\n]);\nconst NEGATIVE_SPACING_COMMANDS = new Set([\"!\", \"negmedspace\", \"negthickspace\", \"negthinspace\"]);\nconst NEGATIVE_SPACE = \"\\u0000\";\nconst IGNORED_COMMANDS = new Set([\n\t\"displaystyle\",\n\t\"limits\",\n\t\"nolimits\",\n\t\"scriptstyle\",\n\t\"scriptscriptstyle\",\n\t\"textstyle\",\n]);\nconst SIZE_COMMANDS = new Set([\n\t\"big\",\n\t\"Big\",\n\t\"bigg\",\n\t\"Bigg\",\n\t\"bigl\",\n\t\"Bigl\",\n\t\"biggl\",\n\t\"Biggl\",\n\t\"bigr\",\n\t\"Bigr\",\n\t\"biggr\",\n\t\"Biggr\",\n]);\nconst LITERAL_COMMANDS = new Set([\"{\", \"}\", \"$\", \"%\", \"#\", \"_\", \"&\"]);\nconst DELIMITER_COMMANDS = new Set([\"left\", \"middle\", \"right\"]);\nconst PLAIN_WRAPPERS = new Set([\n\t\"emph\",\n\t\"mathcal\",\n\t\"mathbf\",\n\t\"mathfrak\",\n\t\"mathit\",\n\t\"mathrm\",\n\t\"mathnormal\",\n\t\"mathscr\",\n\t\"mathsf\",\n\t\"mathtt\",\n\t\"mathup\",\n\t\"mbox\",\n\t\"overbrace\",\n\t\"pmb\",\n\t\"smash\",\n\t\"substack\",\n\t\"text\",\n\t\"textbf\",\n\t\"textit\",\n\t\"textmd\",\n\t\"textnormal\",\n\t\"textrm\",\n\t\"textsc\",\n\t\"textsf\",\n\t\"textsl\",\n\t\"texttt\",\n\t\"textup\",\n\t\"underbrace\",\n\t\"bm\",\n\t\"boldsymbol\",\n]);\nconst ACCENTS: Readonly<Record<string, string>> = {\n\tacute: \"\\u0301\",\n\tbar: \"\\u0305\",\n\tbreve: \"\\u0306\",\n\tcheck: \"\\u030c\",\n\tddot: \"\\u0308\",\n\tdot: \"\\u0307\",\n\tgrave: \"\\u0300\",\n\that: \"\\u0302\",\n\tmathring: \"\\u030a\",\n\toverleftarrow: \"\\u20d6\",\n\toverleftrightarrow: \"\\u20e1\",\n\toverline: \"\\u0305\",\n\toverrightarrow: \"\\u20d7\",\n\ttilde: \"\\u0303\",\n\tunderline: \"\\u0332\",\n\tvec: \"\\u20d7\",\n\twidehat: \"\\u0302\",\n\twidetilde: \"\\u0303\",\n};\n\ntype MathScriptKind = \"sub\" | \"sup\";\ntype OperatorScriptMarker = \"_\" | \"^\";\ntype InlineOperatorLowerStyle = \"bracket\" | \"script\";\n\nfunction replaceCharacters(value: string, replacements: Readonly<Record<string, string>>): string | undefined {\n\tlet result = \"\";\n\tfor (const character of value) {\n\t\tconst replacement = replacements[character];\n\t\tif (replacement === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\t\tresult += replacement;\n\t}\n\treturn result;\n}\n\nfunction formatScript(value: string, kind: MathScriptKind): string {\n\tvalue = value.trim();\n\tconst replacements = kind === \"sub\" ? SUBSCRIPTS : SUPERSCRIPTS;\n\tconst unicode = replaceCharacters(value.replace(/\\s*([=+-])\\s*/g, \"$1\"), replacements);\n\tif (unicode !== undefined) {\n\t\treturn unicode;\n\t}\n\n\tconst prefix = kind === \"sub\" ? \"_\" : \"^\";\n\tif (Array.from(value).length === 1 || (kind === \"sub\" && /^[A-Za-z]+$/.test(value))) {\n\t\treturn `${prefix}${value}`;\n\t}\n\treturn `${prefix}(${value})`;\n}\n\nfunction formatFraction(numerator: string, denominator: string): string {\n\tnumerator = numerator.trim();\n\tdenominator = denominator.trim();\n\tconst simpleNumerator = /^[\\p{L}\\p{N}.]+$/u.test(numerator);\n\tconst simpleDenominator = /^[\\p{N}.]+$/u.test(denominator) || Array.from(denominator).length === 1;\n\treturn `${simpleNumerator ? numerator : `(${numerator})`}/${simpleDenominator ? denominator : `(${denominator})`}`;\n}\n\nfunction formatRoot(value: string, symbol = \"√\"): string {\n\tvalue = value.trim();\n\treturn /^[\\p{L}\\p{N}.]+$/u.test(value) ? `${symbol}${value}` : `${symbol}(${value})`;\n}\n\nconst NAMED_OPERATOR_START = \"\\u{f0004}\";\nconst NAMED_OPERATOR_END = \"\\u{f0005}\";\nconst NAMED_OPERATOR_LEFT_SPACING_PATTERN = /(?<=[\\p{L}\\p{N})\\]}\\u{f0001}])\\u{f0004}/gu;\nconst NAMED_OPERATOR_RIGHT_SPACING_PATTERN = /\\u{f0005}(?=[\\p{L}\\p{N}√\\u{f0000}])/gu;\n\nfunction normalizeOutput(value: string): string {\n\treturn value\n\t\t.replace(NAMED_OPERATOR_LEFT_SPACING_PATTERN, \" \")\n\t\t.replaceAll(NAMED_OPERATOR_START, \"\")\n\t\t.replace(NAMED_OPERATOR_RIGHT_SPACING_PATTERN, \" \")\n\t\t.replaceAll(NAMED_OPERATOR_END, \"\")\n\t\t.split(\"\\n\")\n\t\t.map((line) => line.replace(/[ \\t]+/g, \" \").trim())\n\t\t.filter((line, index, lines) => line.length > 0 || (index > 0 && index < lines.length - 1))\n\t\t.join(\"\\n\")\n\t\t.trim();\n}\n\ninterface FractionNode {\n\ttype: \"fraction\";\n\tnumerator: string;\n\tdenominator: string;\n}\n\ninterface OperatorNode {\n\ttype: \"operator\";\n\toperator: string;\n\tlower?: string;\n\tupper?: string;\n}\n\ninterface ParsedOperatorScripts {\n\tlower?: string;\n\tupper?: string;\n}\n\ninterface MatrixNode {\n\ttype: \"matrix\";\n\tlines: string[];\n\tbaseline: number;\n}\n\ntype LayoutNode = FractionNode | OperatorNode | MatrixNode;\n\ninterface Layout {\n\tlines: string[];\n\twidth: number;\n\tbaseline: number;\n}\n\nconst LAYOUT_MARKER_START = \"\\u{f0000}\";\nconst LAYOUT_MARKER_END = \"\\u{f0001}\";\nconst LAYOUT_MARKER_PATTERN = /\\u{f0000}(\\d+)\\u{f0001}/gu;\nconst TRAILING_LAYOUT_MARKER_PATTERN = /\\u{f0000}(\\d+)\\u{f0001}$/u;\nconst PROTECTED_SPACE = \"\\u{f0002}\";\nconst RESERVED_MARKER_PATTERN = /[\\u{f0000}\\u{f0001}\\u{f0002}\\u{f0004}\\u{f0005}]/u;\nconst MAX_SOURCE_LENGTH = 16 * 1024;\nconst MAX_NESTING_DEPTH = 64;\nconst MAX_LAYOUT_NODES = 256;\nconst MAX_RENDERED_ROWS = 200;\nconst MAX_RENDERED_LINE_WIDTH = 4096;\n\ninterface LatexParseState {\n\tnestingDepth: number;\n}\n\ntype LatexSequenceCharacterKind =\n\t| \"end\"\n\t| \"unexpected-close\"\n\t| \"group\"\n\t| \"command\"\n\t| \"script\"\n\t| \"whitespace\"\n\t| \"relation\"\n\t| \"alignment\"\n\t| \"space\"\n\t| \"period\"\n\t| \"literal\";\n\nfunction classifyLatexSequenceCharacter(character: string, endCharacter?: string): LatexSequenceCharacterKind {\n\tif (endCharacter && character === endCharacter) return \"end\";\n\tswitch (character) {\n\t\tcase \"}\":\n\t\t\treturn \"unexpected-close\";\n\t\tcase \"{\":\n\t\t\treturn \"group\";\n\t\tcase \"\\\\\":\n\t\t\treturn \"command\";\n\t\tcase \"^\":\n\t\tcase \"_\":\n\t\t\treturn \"script\";\n\t\tcase \"=\":\n\t\tcase \"<\":\n\t\tcase \">\":\n\t\t\treturn \"relation\";\n\t\tcase \"&\":\n\t\t\treturn \"alignment\";\n\t\tcase \"~\":\n\t\t\treturn \"space\";\n\t\tcase \".\":\n\t\t\treturn \"period\";\n\t\tdefault:\n\t\t\treturn /\\s/.test(character) ? \"whitespace\" : \"literal\";\n\t}\n}\n\nfunction assertLayoutBounds(width: number, rowCount: number): void {\n\tif (\n\t\t!Number.isSafeInteger(width) ||\n\t\twidth < 0 ||\n\t\twidth > MAX_RENDERED_LINE_WIDTH ||\n\t\t!Number.isSafeInteger(rowCount) ||\n\t\trowCount < 0 ||\n\t\trowCount > MAX_RENDERED_ROWS\n\t) {\n\t\tthrow new RangeError(\"LaTeX layout exceeds renderer bounds\");\n\t}\n}\n\nfunction padLayoutLine(line: string, width: number, centered = false): string {\n\tconst padding = Math.max(0, width - visibleWidth(line));\n\tconst left = centered ? Math.floor(padding / 2) : 0;\n\treturn `${\" \".repeat(left)}${line}${\" \".repeat(padding - left)}`;\n}\n\n// grip-ignore noExcessiveCollectionIterations: Every output row must concatenate every layout segment; rows are capped at 200 and parsed layout nodes at 256.\nfunction joinLayouts(layouts: readonly Layout[]): Layout {\n\tif (layouts.length === 0) {\n\t\treturn { lines: [\"\"], width: 0, baseline: 0 };\n\t}\n\tconst baseline = Math.max(...layouts.map((layout) => layout.baseline));\n\tconst below = Math.max(...layouts.map((layout) => layout.lines.length - layout.baseline - 1));\n\tconst width = layouts.reduce((total, layout) => total + layout.width, 0);\n\tconst rowCount = baseline + below + 1;\n\tassertLayoutBounds(width, rowCount);\n\tconst lines: string[] = [];\n\tfor (let row = 0; row < rowCount; row++) {\n\t\tlet line = \"\";\n\t\tfor (const layout of layouts) {\n\t\t\tconst sourceRow = row - baseline + layout.baseline;\n\t\t\tline +=\n\t\t\t\tsourceRow >= 0 && sourceRow < layout.lines.length\n\t\t\t\t\t? padLayoutLine(layout.lines[sourceRow] ?? \"\", layout.width)\n\t\t\t\t\t: \" \".repeat(layout.width);\n\t\t}\n\t\tlines.push(line.trimEnd());\n\t}\n\treturn { lines, width, baseline };\n}\n\nfunction createTextLayout(text: string): Layout {\n\treturn { lines: [text], width: visibleWidth(text), baseline: 0 };\n}\n\nfunction createInterNodeTextLayout(source: string, previousNode: LayoutNode | undefined, nextNode: LayoutNode): Layout {\n\tconst trimmed = (previousNode ? source.trimStart() : source).trimEnd();\n\tconst preserveLeadingSpace = previousNode?.type === \"matrix\" && /^\\s/.test(source);\n\tconst preserveTrailingSpace = nextNode.type === \"matrix\" && /\\s$/.test(source);\n\tconst text = trimmed\n\t\t? `${preserveLeadingSpace ? \" \" : \"\"}${trimmed}${preserveTrailingSpace ? \" \" : \"\"}`\n\t\t: preserveLeadingSpace || preserveTrailingSpace\n\t\t\t? \" \"\n\t\t\t: \"\";\n\treturn createTextLayout(text);\n}\n\nfunction createTrailingTextLayout(source: string, previousNode: LayoutNode | undefined): Layout {\n\tconst trimmed = previousNode ? source.trimStart() : source;\n\tconst text = previousNode?.type === \"matrix\" && /^\\s/.test(source) ? ` ${trimmed}` : trimmed;\n\treturn createTextLayout(text);\n}\n\nfunction renderFractionNodeLayout(node: FractionNode, nodes: readonly LayoutNode[]): Layout {\n\tconst numerator = renderLayout(node.numerator, nodes);\n\tconst denominator = renderLayout(node.denominator, nodes);\n\tconst contentWidth = Math.max(numerator.width, denominator.width, 1);\n\tconst width = contentWidth + 2;\n\tconst lines = [\n\t\t...numerator.lines.map((line) => padLayoutLine(line, width, true)),\n\t\t` ${\"─\".repeat(contentWidth)} `,\n\t\t...denominator.lines.map((line) => padLayoutLine(line, width, true)),\n\t];\n\tassertLayoutBounds(width, lines.length);\n\treturn { lines, width, baseline: numerator.lines.length };\n}\n\nfunction renderOperatorNodeLayout(node: OperatorNode): Layout {\n\tconst contentWidth = Math.max(\n\t\tvisibleWidth(node.operator),\n\t\tnode.lower === undefined ? 0 : visibleWidth(node.lower),\n\t\tnode.upper === undefined ? 0 : visibleWidth(node.upper),\n\t);\n\tconst lines: string[] = [];\n\tif (node.upper !== undefined) lines.push(`${padLayoutLine(node.upper, contentWidth, true)} `);\n\tlines.push(`${padLayoutLine(node.operator, contentWidth, true)} `);\n\tif (node.lower !== undefined) lines.push(`${padLayoutLine(node.lower, contentWidth, true)} `);\n\tassertLayoutBounds(contentWidth + 1, lines.length);\n\treturn { lines, width: contentWidth + 1, baseline: node.upper === undefined ? 0 : 1 };\n}\n\nfunction renderMatrixNodeLayout(node: MatrixNode): Layout {\n\tconst width = Math.max(0, ...node.lines.map((line) => visibleWidth(line)));\n\tassertLayoutBounds(width, node.lines.length);\n\treturn {\n\t\tlines: node.lines.map((line) => padLayoutLine(line, width)),\n\t\twidth,\n\t\tbaseline: node.baseline,\n\t};\n}\n\nfunction renderLayoutNode(node: LayoutNode, nodes: readonly LayoutNode[]): Layout {\n\tswitch (node.type) {\n\t\tcase \"fraction\":\n\t\t\treturn renderFractionNodeLayout(node, nodes);\n\t\tcase \"operator\":\n\t\t\treturn renderOperatorNodeLayout(node);\n\t\tcase \"matrix\":\n\t\t\treturn renderMatrixNodeLayout(node);\n\t}\n}\n\nfunction renderSourceLineLayout(sourceLine: string, nodes: readonly LayoutNode[]): Layout {\n\tconst layouts: Layout[] = [];\n\tlet position = 0;\n\tlet previousNode: LayoutNode | undefined;\n\tfor (const match of sourceLine.matchAll(LAYOUT_MARKER_PATTERN)) {\n\t\tconst index = match.index;\n\t\tconst node = nodes[Number(match[1])];\n\t\tif (!node) continue;\n\t\tif (index > position) {\n\t\t\tlayouts.push(createInterNodeTextLayout(sourceLine.slice(position, index), previousNode, node));\n\t\t}\n\t\tlayouts.push(renderLayoutNode(node, nodes));\n\t\tposition = index + match[0].length;\n\t\tpreviousNode = node;\n\t}\n\tif (position < sourceLine.length) {\n\t\tlayouts.push(createTrailingTextLayout(sourceLine.slice(position), previousNode));\n\t}\n\treturn joinLayouts(layouts);\n}\n\nfunction renderLayout(source: string, nodes: readonly LayoutNode[]): Layout {\n\tconst renderedLines: string[] = [];\n\tlet firstBaseline = 0;\n\tfor (const sourceLine of source.split(\"\\n\")) {\n\t\tconst lineLayout = renderSourceLineLayout(sourceLine, nodes);\n\t\tif (renderedLines.length === 0) firstBaseline = lineLayout.baseline;\n\t\trenderedLines.push(...lineLayout.lines);\n\t\tassertLayoutBounds(0, renderedLines.length);\n\t}\n\tconst width = Math.max(0, ...renderedLines.map((line) => visibleWidth(line)));\n\tassertLayoutBounds(width, renderedLines.length);\n\treturn { lines: renderedLines, width, baseline: firstBaseline };\n}\n\nclass LatexParser {\n\tprivate readonly source: string;\n\tprivate readonly layoutNodes: LayoutNode[];\n\tprivate readonly display: boolean;\n\tprivate readonly state: LatexParseState;\n\tprivate position = 0;\n\tprivate supported = true;\n\tprivate stackFractions = true;\n\n\tconstructor(\n\t\tsource: string,\n\t\tlayoutNodes: LayoutNode[],\n\t\tdisplay: boolean,\n\t\tstate: LatexParseState = { nestingDepth: 0 },\n\t) {\n\t\tthis.source = source;\n\t\tthis.layoutNodes = layoutNodes;\n\t\tthis.display = display;\n\t\tthis.state = state;\n\t}\n\n\trender(): string | undefined {\n\t\tconst rendered = this.parseSequence();\n\t\tif (!this.supported || this.position !== this.source.length) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn normalizeOutput(rendered);\n\t}\n\n\tprivate appendParsedCommand(result: string): string {\n\t\tconst command = this.parseCommand();\n\t\tif (command !== NEGATIVE_SPACE) return result + command;\n\t\tconst trimmed = result.trimEnd();\n\t\treturn trimmed.endsWith(NAMED_OPERATOR_END) ? trimmed.slice(0, -NAMED_OPERATOR_END.length) : trimmed;\n\t}\n\n\tprivate appendParsedScript(result: string, character: string): string {\n\t\tthis.position++;\n\t\tconst trimmed = result.trimEnd();\n\t\tconst script = formatScript(this.parseRequiredArgument(false), character === \"_\" ? \"sub\" : \"sup\");\n\t\treturn trimmed.endsWith(NAMED_OPERATOR_END)\n\t\t\t? `${trimmed.slice(0, -NAMED_OPERATOR_END.length)}${script}${NAMED_OPERATOR_END}`\n\t\t\t: trimmed + script;\n\t}\n\n\tprivate appendPeriod(result: string): string {\n\t\tconst marker = TRAILING_LAYOUT_MARKER_PATTERN.exec(result);\n\t\tconst node = marker ? this.layoutNodes[Number(marker[1])] : undefined;\n\t\tif (node?.type === \"matrix\") {\n\t\t\tconst lastLine = node.lines.length - 1;\n\t\t\tnode.lines[lastLine] = `${node.lines[lastLine] ?? \"\"}.`;\n\t\t\tthis.position++;\n\t\t\treturn result;\n\t\t}\n\t\tthis.position++;\n\t\treturn `${result}.`;\n\t}\n\n\tprivate parseSequence(endCharacter?: string): string {\n\t\tlet result = \"\";\n\t\twhile (this.position < this.source.length) {\n\t\t\tconst character = this.source[this.position];\n\t\t\tswitch (classifyLatexSequenceCharacter(character, endCharacter)) {\n\t\t\t\tcase \"end\":\n\t\t\t\t\tthis.position++;\n\t\t\t\t\treturn result;\n\t\t\t\tcase \"unexpected-close\":\n\t\t\t\t\tthis.supported = false;\n\t\t\t\t\treturn result;\n\t\t\t\tcase \"group\":\n\t\t\t\t\tthis.position++;\n\t\t\t\t\tresult += this.parseNestedSequence(\"}\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"command\":\n\t\t\t\t\tresult = this.appendParsedCommand(result);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"script\":\n\t\t\t\t\tresult = this.appendParsedScript(result, character);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"whitespace\":\n\t\t\t\t\tresult += this.parseWhitespace();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"relation\":\n\t\t\t\t\tresult = `${result.trimEnd()} ${character} `;\n\t\t\t\t\tthis.position++;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"alignment\":\n\t\t\t\t\tthis.position++;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"space\":\n\t\t\t\t\tthis.position++;\n\t\t\t\t\tresult += \" \";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"period\":\n\t\t\t\t\tresult = this.appendPeriod(result);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"literal\":\n\t\t\t\t\tresult += character;\n\t\t\t\t\tthis.position++;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (endCharacter) this.supported = false;\n\t\treturn result;\n\t}\n\n\tprivate parseWhitespace(): string {\n\t\twhile (this.position < this.source.length && /\\s/.test(this.source[this.position] ?? \"\")) {\n\t\t\tthis.position++;\n\t\t}\n\t\treturn \" \";\n\t}\n\n\tprivate readCommandName(): string | undefined {\n\t\tthis.position++;\n\t\tif (this.position >= this.source.length) {\n\t\t\tthis.supported = false;\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst first = this.source[this.position] ?? \"\";\n\t\tif (!/[A-Za-z]/.test(first)) {\n\t\t\tthis.position++;\n\t\t\treturn first;\n\t\t}\n\t\tconst start = this.position;\n\t\twhile (this.position < this.source.length && /[A-Za-z]/.test(this.source[this.position] ?? \"\")) {\n\t\t\tthis.position++;\n\t\t}\n\t\treturn this.source.slice(start, this.position);\n\t}\n\n\tprivate parsePredefinedCommand(command: string): string | undefined {\n\t\tif (command === \"\\\\\") return \"\\n\";\n\t\tif (SPACING_COMMANDS.has(command)) return \" \";\n\t\tif (NEGATIVE_SPACING_COMMANDS.has(command)) return NEGATIVE_SPACE;\n\t\tif (IGNORED_COMMANDS.has(command)) return \"\";\n\t\tif (LITERAL_COMMANDS.has(command)) return command;\n\t\tif (command === \"|\") return \"‖\";\n\t\treturn undefined;\n\t}\n\n\tprivate parseNegatedCommand(): string {\n\t\tconst value = this.parseRequiredArgument(false).trim();\n\t\tconst negated = NEGATED_SYMBOLS[value];\n\t\tif (negated !== undefined) return ` ${negated} `;\n\n\t\tconst characters = Array.from(value);\n\t\tif (characters.length === 0) {\n\t\t\tthis.supported = false;\n\t\t\treturn \"\";\n\t\t}\n\t\treturn ` ${characters[0]}\\u0338${characters.slice(1).join(\"\")} `;\n\t}\n\n\tprivate parseSymbolCommand(command: string): string | undefined {\n\t\tconst symbol = SYMBOLS[command];\n\t\tif (symbol === undefined) return undefined;\n\t\tif (DISPLAY_LIMIT_SYMBOLS.has(command)) return this.parseOperator(symbol, \"script\", true);\n\t\treturn command === \"cdot\" || command === \"times\" || RELATION_COMMANDS.has(command) ? ` ${symbol} ` : symbol;\n\t}\n\n\tprivate parseNamedOrDelimiterCommand(command: string): string | undefined {\n\t\tif (NAMED_OPERATORS.has(command)) return `${NAMED_OPERATOR_START}${command}${NAMED_OPERATOR_END}`;\n\t\tif (SIZE_COMMANDS.has(command)) return \"\";\n\t\tif (!DELIMITER_COMMANDS.has(command)) return undefined;\n\t\tif (this.source[this.position] === \".\") this.position++;\n\t\treturn \"\";\n\t}\n\n\tprivate parseFractionCommand(command: string): string {\n\t\tconst shouldStack = this.display && this.stackFractions && command !== \"tfrac\";\n\t\tconst numerator = this.parseRequiredArgument(!shouldStack);\n\t\tconst denominator = this.parseRequiredArgument(!shouldStack);\n\t\tif (!shouldStack) return formatFraction(numerator, denominator);\n\n\t\tconst index = this.addLayoutNode({\n\t\t\ttype: \"fraction\",\n\t\t\tnumerator: normalizeOutput(numerator),\n\t\t\tdenominator: normalizeOutput(denominator),\n\t\t});\n\t\treturn index === undefined ? \"\" : `${LAYOUT_MARKER_START}${index}${LAYOUT_MARKER_END}`;\n\t}\n\n\tprivate parseRootCommand(): string {\n\t\tconst degree = this.parseOptionalArgument()?.trim();\n\t\tconst value = this.parseRequiredArgument();\n\t\tif (degree === undefined || degree === \"2\") return formatRoot(value);\n\t\tif (degree === \"3\") return formatRoot(value, \"∛\");\n\t\tif (degree === \"4\") return formatRoot(value, \"∜\");\n\t\treturn `${formatScript(degree, \"sup\")}${formatRoot(value)}`;\n\t}\n\n\tprivate parseAccentCommand(command: string, accent: string): string {\n\t\tconst value = this.parseRequiredArgument();\n\t\treturn Array.from(value).length === 1 ? `${value}${accent}` : `${command}(${value})`;\n\t}\n\n\tprivate parseOperatorNameCommand(): string {\n\t\tconst starred = this.source[this.position] === \"*\";\n\t\tif (starred) this.position++;\n\t\tconst operator = normalizeOutput(this.parseRequiredArgument()).trim();\n\t\treturn this.parseOperator(operator, \"bracket\", starred, true);\n\t}\n\n\tprivate parseArgumentCommand(command: string): string | undefined {\n\t\tswitch (command) {\n\t\t\tcase \"frac\":\n\t\t\tcase \"dfrac\":\n\t\t\tcase \"tfrac\":\n\t\t\t\treturn this.parseFractionCommand(command);\n\t\t\tcase \"sqrt\":\n\t\t\t\treturn this.parseRootCommand();\n\t\t\tcase \"boxed\":\n\t\t\tcase \"fbox\":\n\t\t\t\treturn `[${this.parseRequiredArgument().trim()}]`;\n\t\t\tcase \"binom\":\n\t\t\tcase \"dbinom\":\n\t\t\tcase \"tbinom\":\n\t\t\t\treturn `(${this.parseRequiredArgument()} choose ${this.parseRequiredArgument()})`;\n\t\t\tcase \"mathbb\": {\n\t\t\t\tconst value = this.parseRequiredArgument();\n\t\t\t\treturn Array.from(value, (character) => BLACKBOARD[character] ?? character).join(\"\");\n\t\t\t}\n\t\t\tcase \"operatorname\":\n\t\t\t\treturn this.parseOperatorNameCommand();\n\t\t\tcase \"mod\":\n\t\t\tcase \"bmod\":\n\t\t\t\treturn \" mod \";\n\t\t\tcase \"pmod\":\n\t\t\tcase \"pod\": {\n\t\t\t\tconst value = this.parseRequiredArgument().trim();\n\t\t\t\treturn command === \"pmod\" ? ` (mod ${value})` : ` (${value})`;\n\t\t\t}\n\t\t\tcase \"overset\":\n\t\t\tcase \"stackrel\": {\n\t\t\t\tconst upper = this.parseRequiredArgument();\n\t\t\t\tconst value = this.parseRequiredArgument().trim();\n\t\t\t\treturn `${value}${formatScript(upper, \"sup\")}`;\n\t\t\t}\n\t\t\tcase \"underset\": {\n\t\t\t\tconst lower = this.parseRequiredArgument();\n\t\t\t\tconst value = this.parseRequiredArgument().trim();\n\t\t\t\treturn `${value}${formatScript(lower, \"sub\")}`;\n\t\t\t}\n\t\t\tcase \"begin\":\n\t\t\t\treturn this.parseEnvironment();\n\t\t\tcase \"end\":\n\t\t\t\tthis.supported = false;\n\t\t\t\treturn \"\";\n\t\t}\n\n\t\tconst accent = ACCENTS[command];\n\t\tif (accent !== undefined) return this.parseAccentCommand(command, accent);\n\t\tif (PLAIN_WRAPPERS.has(command)) {\n\t\t\tconst value = this.parseRequiredArgument();\n\t\t\treturn command.startsWith(\"text\") || command === \"mbox\" ? value : value.trim();\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate parseCommand(): string {\n\t\tconst command = this.readCommandName();\n\t\tif (command === undefined) return \"\";\n\n\t\tconst predefined = this.parsePredefinedCommand(command);\n\t\tif (predefined !== undefined) return predefined;\n\t\tif (command === \"not\") return this.parseNegatedCommand();\n\t\tif (LIMIT_OPERATORS.has(command)) return this.parseOperator(command, \"bracket\", true, true);\n\n\t\tconst symbol = this.parseSymbolCommand(command);\n\t\tif (symbol !== undefined) return symbol;\n\t\tconst namedOrDelimiter = this.parseNamedOrDelimiterCommand(command);\n\t\tif (namedOrDelimiter !== undefined) return namedOrDelimiter;\n\t\tconst argumentCommand = this.parseArgumentCommand(command);\n\t\tif (argumentCommand !== undefined) return argumentCommand;\n\n\t\tthis.supported = false;\n\t\treturn `\\\\${command}`;\n\t}\n\n\tprivate assignOperatorScript(scripts: ParsedOperatorScripts, kind: OperatorScriptMarker, value: string): void {\n\t\tconst property = kind === \"_\" ? \"lower\" : \"upper\";\n\t\tif (scripts[property] !== undefined) this.supported = false;\n\t\tscripts[property] = value;\n\t}\n\n\tprivate parseOperatorDisplayLimits(displayLimits: boolean): boolean {\n\t\tlet modifierPosition = this.position;\n\t\twhile (modifierPosition < this.source.length && /[ \\t]/.test(this.source[modifierPosition] ?? \"\")) {\n\t\t\tmodifierPosition++;\n\t\t}\n\t\tconst modifier = /^\\\\(limits|nolimits)(?![A-Za-z])/.exec(this.source.slice(modifierPosition));\n\t\tif (!modifier) return displayLimits;\n\t\tthis.position = modifierPosition + modifier[0].length;\n\t\treturn modifier[1] === \"limits\";\n\t}\n\n\tprivate parseOperatorScripts(): ParsedOperatorScripts {\n\t\tconst scripts: ParsedOperatorScripts = {};\n\t\twhile (true) {\n\t\t\tlet scriptPosition = this.position;\n\t\t\twhile (scriptPosition < this.source.length && /[ \\t]/.test(this.source[scriptPosition] ?? \"\")) {\n\t\t\t\tscriptPosition++;\n\t\t\t}\n\t\t\tconst kind = this.source[scriptPosition];\n\t\t\tif (kind !== \"_\" && kind !== \"^\") break;\n\t\t\tthis.position = scriptPosition + 1;\n\t\t\tconst value = normalizeOutput(this.parseRequiredArgument(false)).replaceAll(\" \", \"\");\n\t\t\tthis.assignOperatorScript(scripts, kind, value);\n\t\t}\n\t\treturn scripts;\n\t}\n\n\tprivate parseOperator(\n\t\toperator: string,\n\t\tinlineLowerStyle: InlineOperatorLowerStyle,\n\t\tdisplayLimits: boolean,\n\t\tspaced = false,\n\t): string {\n\t\tconst useDisplayLimits = this.parseOperatorDisplayLimits(displayLimits);\n\t\tconst { lower, upper } = this.parseOperatorScripts();\n\t\tif (this.display && useDisplayLimits && (lower !== undefined || upper !== undefined)) {\n\t\t\tconst index = this.addLayoutNode({ type: \"operator\", operator, lower, upper });\n\t\t\treturn index === undefined ? \"\" : `${LAYOUT_MARKER_START}${index}${LAYOUT_MARKER_END}`;\n\t\t}\n\n\t\tlet rendered = operator;\n\t\tif (lower !== undefined) {\n\t\t\trendered += inlineLowerStyle === \"bracket\" ? `[${lower}]` : formatScript(lower, \"sub\");\n\t\t}\n\t\tif (upper !== undefined) rendered += formatScript(upper, \"sup\");\n\t\treturn spaced ? ` ${rendered} ` : rendered;\n\t}\n\n\tprivate parseRequiredArgument(stackFractions = true): string {\n\t\tconst previousStackFractions = this.stackFractions;\n\t\tthis.stackFractions = previousStackFractions && stackFractions;\n\t\tconst value = this.parseRequiredArgumentValue();\n\t\tthis.stackFractions = previousStackFractions;\n\t\treturn value;\n\t}\n\n\tprivate parseRequiredArgumentValue(): string {\n\t\twhile (this.position < this.source.length && /[ \\t]/.test(this.source[this.position] ?? \"\")) {\n\t\t\tthis.position++;\n\t\t}\n\t\tif (this.position >= this.source.length) {\n\t\t\tthis.supported = false;\n\t\t\treturn \"\";\n\t\t}\n\t\tif (this.source[this.position] === \"{\") {\n\t\t\tthis.position++;\n\t\t\treturn this.parseNestedSequence(\"}\");\n\t\t}\n\t\tif (this.source[this.position] === \"\\\\\") {\n\t\t\treturn this.parseCommand();\n\t\t}\n\t\tconst value = this.source[this.position] ?? \"\";\n\t\tthis.position++;\n\t\treturn value;\n\t}\n\n\tprivate parseOptionalArgument(): string | undefined {\n\t\twhile (this.position < this.source.length && /[ \\t]/.test(this.source[this.position] ?? \"\")) {\n\t\t\tthis.position++;\n\t\t}\n\t\tif (this.source[this.position] !== \"[\") {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst end = this.source.indexOf(\"]\", this.position + 1);\n\t\tif (end < 0) {\n\t\t\tthis.supported = false;\n\t\t\treturn undefined;\n\t\t}\n\t\tconst value = this.source.slice(this.position + 1, end);\n\t\tthis.position = end + 1;\n\t\treturn this.renderNested(value);\n\t}\n\n\tprivate readRawGroupContents(start: number): string | undefined {\n\t\tlet depth = 1;\n\t\twhile (this.position < this.source.length) {\n\t\t\tconst character = this.source[this.position];\n\t\t\tif (character === \"\\\\\") {\n\t\t\t\tthis.position += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (character === \"{\") {\n\t\t\t\tdepth++;\n\t\t\t\tif (this.state.nestingDepth + depth > MAX_NESTING_DEPTH) {\n\t\t\t\t\tthis.supported = false;\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tthis.position++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (character !== \"}\") {\n\t\t\t\tthis.position++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdepth--;\n\t\t\tif (depth > 0) {\n\t\t\t\tthis.position++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst value = this.source.slice(start, this.position);\n\t\t\tthis.position++;\n\t\t\treturn value;\n\t\t}\n\t\tthis.supported = false;\n\t\treturn undefined;\n\t}\n\n\tprivate readRawGroup(): string | undefined {\n\t\twhile (this.position < this.source.length && /[ \\t]/.test(this.source[this.position] ?? \"\")) {\n\t\t\tthis.position++;\n\t\t}\n\t\tif (this.source[this.position] !== \"{\") {\n\t\t\tthis.supported = false;\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst start = ++this.position;\n\t\tif (this.state.nestingDepth + 1 > MAX_NESTING_DEPTH) {\n\t\t\tthis.supported = false;\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this.readRawGroupContents(start);\n\t}\n\n\tprivate splitEnvironmentRows(body: string): string[] {\n\t\treturn body.split(/\\\\\\\\(?:\\[[^\\]\\n]*\\])?/);\n\t}\n\n\tprivate parseEnvironment(): string {\n\t\tconst environment = this.readRawGroup();\n\t\tif (!environment) {\n\t\t\treturn \"\";\n\t\t}\n\t\tconst endMarker = `\\\\end{${environment}}`;\n\t\tconst end = this.source.indexOf(endMarker, this.position);\n\t\tif (end < 0) {\n\t\t\tthis.supported = false;\n\t\t\treturn \"\";\n\t\t}\n\t\tconst body = this.source.slice(this.position, end);\n\t\tthis.position = end + endMarker.length;\n\n\t\tif (environment === \"equation\" || environment === \"equation*\" || environment === \"displaymath\") {\n\t\t\treturn this.renderNested(body).trim();\n\t\t}\n\n\t\tif (\n\t\t\tenvironment === \"aligned\" ||\n\t\t\tenvironment === \"align\" ||\n\t\t\tenvironment === \"align*\" ||\n\t\t\tenvironment === \"alignedat\" ||\n\t\t\tenvironment === \"alignat\" ||\n\t\t\tenvironment === \"alignat*\" ||\n\t\t\tenvironment === \"gather\" ||\n\t\t\tenvironment === \"gathered\" ||\n\t\t\tenvironment === \"multline\" ||\n\t\t\tenvironment === \"multline*\" ||\n\t\t\tenvironment === \"split\"\n\t\t) {\n\t\t\tconst alignedAt = [\"alignedat\", \"alignat\", \"alignat*\"].includes(environment);\n\t\t\tconst alignedBody = alignedAt ? body.replace(/^\\s*\\{[^}]*\\}/, \"\") : body;\n\t\t\treturn this.splitEnvironmentRows(alignedBody)\n\t\t\t\t.map((row) => {\n\t\t\t\t\tconst cells = row.split(\"&\");\n\t\t\t\t\tconst source = alignedAt\n\t\t\t\t\t\t? Array.from({ length: Math.ceil(cells.length / 2) }, (_, index) =>\n\t\t\t\t\t\t\t\tcells.slice(index * 2, index * 2 + 2).join(\"\"),\n\t\t\t\t\t\t\t).join(\" \")\n\t\t\t\t\t\t: cells.join(\"\");\n\t\t\t\t\treturn this.renderNested(source).trim();\n\t\t\t\t})\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\"\\n\");\n\t\t}\n\n\t\tif (environment === \"cases\" || environment === \"cases*\") {\n\t\t\tconst rows = this.splitEnvironmentRows(body)\n\t\t\t\t.map((row) => row.split(\"&\").map((cell) => this.renderNested(cell, false).trim()))\n\t\t\t\t.filter((row) => row.some(Boolean));\n\t\t\treturn rows\n\t\t\t\t.map((row, index) => {\n\t\t\t\t\tconst value = (row[0] ?? \"\").replace(/,\\s*$/, \"\");\n\t\t\t\t\tconst condition = row[1] ?? \"\";\n\t\t\t\t\tconst delimiter = index === 0 ? \"⎧\" : index === rows.length - 1 ? \"⎩\" : \"⎨\";\n\t\t\t\t\tconst conditionPrefix = /^(?:if|when|for|otherwise)\\b/i.test(condition) ? \" \" : \" if \";\n\t\t\t\t\treturn `${delimiter} ${value}${condition ? `${conditionPrefix}${condition}` : \"\"}`;\n\t\t\t\t})\n\t\t\t\t.join(\"\\n\");\n\t\t}\n\n\t\tif (\n\t\t\t[\"array\", \"matrix\", \"smallmatrix\", \"pmatrix\", \"bmatrix\", \"Bmatrix\", \"vmatrix\", \"Vmatrix\"].includes(environment)\n\t\t) {\n\t\t\tconst matrixBody = environment === \"array\" ? body.replace(/^\\s*\\{[^}]*\\}/, \"\") : body;\n\t\t\treturn this.renderMatrix(environment, matrixBody);\n\t\t}\n\n\t\tthis.supported = false;\n\t\treturn body;\n\t}\n\n\tprivate renderMatrix(environment: string, body: string): string {\n\t\tconst sourceRows = this.splitEnvironmentRows(body).map((row) => row.split(\"&\"));\n\t\tconst sourceColumnCount = Math.max(0, ...sourceRows.map((row) => row.length));\n\t\tif (sourceRows.length > MAX_RENDERED_ROWS || sourceRows.length * sourceColumnCount > MAX_LAYOUT_NODES) {\n\t\t\tthis.supported = false;\n\t\t\treturn \"\";\n\t\t}\n\t\tconst matrix = sourceRows\n\t\t\t.map((row) => row.map((cell) => this.renderNested(cell, false).trim()))\n\t\t\t.filter((row) => row.some(Boolean));\n\t\tconst columnCount = Math.max(0, ...matrix.map((row) => row.length));\n\t\tconst columnWidths = Array.from({ length: columnCount }, (_, column) =>\n\t\t\tMath.max(0, ...matrix.map((row) => visibleWidth(row[column] ?? \"\"))),\n\t\t);\n\t\tconst rows = matrix.map((row) =>\n\t\t\tArray.from({ length: columnCount }, (_, column) => {\n\t\t\t\tconst cell = row[column] ?? \"\";\n\t\t\t\treturn `${cell}${PROTECTED_SPACE.repeat(Math.max(0, (columnWidths[column] ?? 0) - visibleWidth(cell)))}`;\n\t\t\t}).join(\" │ \"),\n\t\t);\n\t\tlet lines: string[];\n\t\tif (environment === \"array\" || environment === \"matrix\" || environment === \"smallmatrix\") {\n\t\t\tlines = rows;\n\t\t} else {\n\t\t\tconst delimiters: Readonly<Record<string, readonly [string, string, string, string, string, string]>> = {\n\t\t\t\tpmatrix: [\"⎛\", \"⎞\", \"⎜\", \"⎟\", \"⎝\", \"⎠\"],\n\t\t\t\tbmatrix: [\"⎡\", \"⎤\", \"⎢\", \"⎥\", \"⎣\", \"⎦\"],\n\t\t\t\tBmatrix: [\"⎧\", \"⎫\", \"⎨\", \"⎬\", \"⎩\", \"⎭\"],\n\t\t\t\tvmatrix: [\"│\", \"│\", \"│\", \"│\", \"│\", \"│\"],\n\t\t\t\tVmatrix: [\"║\", \"║\", \"║\", \"║\", \"║\", \"║\"],\n\t\t\t};\n\t\t\tconst delimiter = delimiters[environment];\n\t\t\tif (!delimiter) {\n\t\t\t\tthis.supported = false;\n\t\t\t\treturn rows.join(\"\\n\");\n\t\t\t}\n\t\t\tlines = rows.map((row, index) => {\n\t\t\t\tconst left = index === 0 ? delimiter[0] : index === rows.length - 1 ? delimiter[4] : delimiter[2];\n\t\t\t\tconst right = index === 0 ? delimiter[1] : index === rows.length - 1 ? delimiter[5] : delimiter[3];\n\t\t\t\treturn `${left} ${row} ${right}`;\n\t\t\t});\n\t\t}\n\n\t\tif (lines.length <= 1) {\n\t\t\treturn lines[0] ?? \"\";\n\t\t}\n\t\tconst index = this.addLayoutNode({ type: \"matrix\", lines, baseline: 0 });\n\t\treturn index === undefined ? \"\" : `${LAYOUT_MARKER_START}${index}${LAYOUT_MARKER_END}`;\n\t}\n\n\tprivate addLayoutNode(node: LayoutNode): number | undefined {\n\t\tif (this.layoutNodes.length >= MAX_LAYOUT_NODES) {\n\t\t\tthis.supported = false;\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this.layoutNodes.push(node) - 1;\n\t}\n\n\tprivate parseNestedSequence(endCharacter: string): string {\n\t\tif (this.state.nestingDepth >= MAX_NESTING_DEPTH) {\n\t\t\tthis.supported = false;\n\t\t\treturn \"\";\n\t\t}\n\t\tthis.state.nestingDepth++;\n\t\ttry {\n\t\t\treturn this.parseSequence(endCharacter);\n\t\t} finally {\n\t\t\tthis.state.nestingDepth--;\n\t\t}\n\t}\n\n\tprivate renderNested(source: string, stackFractions = true): string {\n\t\tif (this.state.nestingDepth >= MAX_NESTING_DEPTH) {\n\t\t\tthis.supported = false;\n\t\t\treturn source;\n\t\t}\n\t\tthis.state.nestingDepth++;\n\t\tlet rendered: string | undefined;\n\t\ttry {\n\t\t\trendered = new LatexParser(source, this.layoutNodes, this.display && stackFractions, this.state).render();\n\t\t} finally {\n\t\t\tthis.state.nestingDepth--;\n\t\t}\n\t\tif (rendered === undefined) {\n\t\t\tthis.supported = false;\n\t\t\treturn source;\n\t\t}\n\t\treturn rendered;\n\t}\n}\n\nexport interface RenderLatexOptions {\n\t/** Stack fractions and operator limits vertically for display math (default: false). */\n\tdisplay?: boolean;\n}\n\n/**\n * Render a basic LaTeX math expression as terminal-friendly Unicode text.\n * Returns undefined when the expression contains unsupported or malformed syntax.\n */\nexport function renderLatex(source: string, options: RenderLatexOptions = {}): string | undefined {\n\tif (source.length > MAX_SOURCE_LENGTH || RESERVED_MARKER_PATTERN.test(source)) {\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\tconst layoutNodes: LayoutNode[] = [];\n\t\tconst rendered = new LatexParser(source, layoutNodes, options.display === true).render();\n\t\tif (rendered === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tlet result: string;\n\t\tif (layoutNodes.length === 0) {\n\t\t\tresult = rendered.replaceAll(PROTECTED_SPACE, \" \");\n\t\t} else {\n\t\t\tconst lines = renderLayout(rendered, layoutNodes).lines;\n\t\t\tconst indentation = Math.min(\n\t\t\t\t...lines.filter((line) => line.trim()).map((line) => line.length - line.trimStart().length),\n\t\t\t);\n\t\t\tresult = lines\n\t\t\t\t.map((line) => line.slice(indentation).trimEnd())\n\t\t\t\t.join(\"\\n\")\n\t\t\t\t.trimEnd()\n\t\t\t\t.replaceAll(PROTECTED_SPACE, \" \");\n\t\t}\n\n\t\tconst resultLines = result.split(\"\\n\");\n\t\tif (\n\t\t\tresultLines.length > MAX_RENDERED_ROWS ||\n\t\t\tresultLines.some((line) => visibleWidth(line) > MAX_RENDERED_LINE_WIDTH)\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn result;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"latex.js","sourceRoot":"","sources":["../src/latex.ts"],"names":[],"mappings":"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","sourcesContent":["import { visibleWidth } from \"./utils.ts\";\n\nconst SYMBOLS: Readonly<Record<string, string>> = {\n\talpha: \"α\",\n\tbeta: \"β\",\n\tgamma: \"γ\",\n\tdelta: \"δ\",\n\tepsilon: \"ϵ\",\n\tvarepsilon: \"ε\",\n\tzeta: \"ζ\",\n\teta: \"η\",\n\ttheta: \"θ\",\n\tvartheta: \"ϑ\",\n\tiota: \"ι\",\n\tkappa: \"κ\",\n\tvarkappa: \"ϰ\",\n\tlambda: \"λ\",\n\tmu: \"μ\",\n\tnu: \"ν\",\n\txi: \"ξ\",\n\tpi: \"π\",\n\tvarpi: \"ϖ\",\n\trho: \"ρ\",\n\tvarrho: \"ϱ\",\n\tsigma: \"σ\",\n\tvarsigma: \"ς\",\n\ttau: \"τ\",\n\tupsilon: \"υ\",\n\tphi: \"ϕ\",\n\tvarphi: \"φ\",\n\tchi: \"χ\",\n\tpsi: \"ψ\",\n\tomega: \"ω\",\n\tGamma: \"Γ\",\n\tDelta: \"Δ\",\n\tTheta: \"Θ\",\n\tLambda: \"Λ\",\n\tXi: \"Ξ\",\n\tPi: \"Π\",\n\tSigma: \"Σ\",\n\tUpsilon: \"Υ\",\n\tPhi: \"Φ\",\n\tPsi: \"Ψ\",\n\tOmega: \"Ω\",\n\tpm: \"±\",\n\tmp: \"∓\",\n\ttimes: \"×\",\n\tdiv: \"÷\",\n\tcdot: \"·\",\n\tast: \"∗\",\n\tstar: \"⋆\",\n\tcirc: \"∘\",\n\tbullet: \"•\",\n\toplus: \"⊕\",\n\tominus: \"⊖\",\n\totimes: \"⊗\",\n\toslash: \"⊘\",\n\todot: \"⊙\",\n\tbigcirc: \"○\",\n\tdagger: \"†\",\n\tddagger: \"‡\",\n\tamalg: \"⨿\",\n\tuplus: \"⊎\",\n\tsqcap: \"⊓\",\n\tsqcup: \"⊔\",\n\ttriangleleft: \"◁\",\n\ttriangleright: \"▷\",\n\twr: \"≀\",\n\tcap: \"∩\",\n\tcup: \"∪\",\n\tbigcap: \"⋂\",\n\tbigcup: \"⋃\",\n\tbigwedge: \"⋀\",\n\tbigvee: \"⋁\",\n\tbigsqcup: \"⨆\",\n\tbiguplus: \"⨄\",\n\tbigoplus: \"⨁\",\n\tbigotimes: \"⨂\",\n\tbigodot: \"⨀\",\n\tsetminus: \"∖\",\n\tin: \"∈\",\n\tnotin: \"∉\",\n\tni: \"∋\",\n\tsubset: \"⊂\",\n\tsupset: \"⊃\",\n\tsubseteq: \"⊆\",\n\tsupseteq: \"⊇\",\n\tsqsubset: \"⊏\",\n\tsqsupset: \"⊐\",\n\tsqsubseteq: \"⊑\",\n\tsqsupseteq: \"⊒\",\n\tprec: \"≺\",\n\tpreceq: \"≼\",\n\tsucc: \"≻\",\n\tsucceq: \"≽\",\n\tll: \"≪\",\n\tgg: \"≫\",\n\tle: \"≤\",\n\tleq: \"≤\",\n\tleqslant: \"≤\",\n\tge: \"≥\",\n\tgeq: \"≥\",\n\tgeqslant: \"≥\",\n\tne: \"≠\",\n\tneq: \"≠\",\n\tequiv: \"≡\",\n\tapprox: \"≈\",\n\tsim: \"∼\",\n\tsimeq: \"≃\",\n\tcong: \"≅\",\n\tasymp: \"≍\",\n\tdoteq: \"≐\",\n\tpropto: \"∝\",\n\tparallel: \"∥\",\n\tperp: \"⊥\",\n\tmid: \"∣\",\n\tvdash: \"⊢\",\n\tdashv: \"⊣\",\n\tmodels: \"⊨\",\n\tVdash: \"⊩\",\n\tVvdash: \"⊪\",\n\tnvdash: \"⊬\",\n\tnvDash: \"⊭\",\n\tforall: \"∀\",\n\texists: \"∃\",\n\tnexists: \"∄\",\n\tneg: \"¬\",\n\tland: \"∧\",\n\twedge: \"∧\",\n\tlor: \"∨\",\n\tvee: \"∨\",\n\tto: \"→\",\n\trightarrow: \"→\",\n\tlongrightarrow: \"→\",\n\tleftarrow: \"←\",\n\tlongleftarrow: \"←\",\n\tgets: \"←\",\n\tleftrightarrow: \"↔\",\n\tlongleftrightarrow: \"↔\",\n\thookleftarrow: \"↩\",\n\thookrightarrow: \"↪\",\n\ttwoheadleftarrow: \"↞\",\n\ttwoheadrightarrow: \"↠\",\n\tleftharpoonup: \"↼\",\n\tleftharpoondown: \"↽\",\n\trightharpoonup: \"⇀\",\n\trightharpoondown: \"⇁\",\n\trightleftharpoons: \"⇌\",\n\tleftrightharpoons: \"⇋\",\n\tnearrow: \"↗\",\n\tsearrow: \"↘\",\n\tswarrow: \"↙\",\n\tnwarrow: \"↖\",\n\trightsquigarrow: \"⇝\",\n\tleadsto: \"⇝\",\n\tRightarrow: \"⇒\",\n\tLongrightarrow: \"⇒\",\n\tLeftarrow: \"⇐\",\n\tLongleftarrow: \"⇐\",\n\tLeftrightarrow: \"⇔\",\n\tLongleftrightarrow: \"⇔\",\n\timplies: \"⇒\",\n\tiff: \"⇔\",\n\tmapsto: \"↦\",\n\tlongmapsto: \"↦\",\n\tuparrow: \"↑\",\n\tdownarrow: \"↓\",\n\tpartial: \"∂\",\n\tnabla: \"∇\",\n\tint: \"∫\",\n\tiint: \"∬\",\n\tiiint: \"∭\",\n\toint: \"∮\",\n\tsum: \"∑\",\n\tprod: \"∏\",\n\tcoprod: \"∐\",\n\tinfty: \"∞\",\n\temptyset: \"∅\",\n\tvarnothing: \"∅\",\n\tangle: \"∠\",\n\ttherefore: \"∴\",\n\tbecause: \"∵\",\n\taleph: \"ℵ\",\n\tbeth: \"ℶ\",\n\tgimel: \"ℷ\",\n\tdaleth: \"ℸ\",\n\ttop: \"⊤\",\n\tbot: \"⊥\",\n\ttriangle: \"△\",\n\tsquare: \"□\",\n\tlozenge: \"◊\",\n\tcheckmark: \"✓\",\n\tcomplement: \"∁\",\n\twp: \"℘\",\n\tprime: \"′\",\n\tldots: \"…\",\n\tdots: \"…\",\n\tcdots: \"⋯\",\n\tvdots: \"⋮\",\n\tddots: \"⋱\",\n\tell: \"ℓ\",\n\thbar: \"ℏ\",\n\tIm: \"ℑ\",\n\tRe: \"ℜ\",\n\tlangle: \"⟨\",\n\trangle: \"⟩\",\n\tvert: \"|\",\n\tlvert: \"|\",\n\trvert: \"|\",\n\tVert: \"‖\",\n\tlVert: \"‖\",\n\trVert: \"‖\",\n\tlbrace: \"{\",\n\trbrace: \"}\",\n\tbackslash: \"\\\\\",\n\tlfloor: \"⌊\",\n\trfloor: \"⌋\",\n\tlceil: \"⌈\",\n\trceil: \"⌉\",\n\tcolon: \":\",\n};\n\nconst NAMED_OPERATORS = new Set([\n\t\"arccos\",\n\t\"arcsin\",\n\t\"arctan\",\n\t\"arg\",\n\t\"cos\",\n\t\"cosh\",\n\t\"cot\",\n\t\"coth\",\n\t\"csc\",\n\t\"deg\",\n\t\"det\",\n\t\"dim\",\n\t\"exp\",\n\t\"gcd\",\n\t\"hom\",\n\t\"inf\",\n\t\"ker\",\n\t\"lg\",\n\t\"lim\",\n\t\"liminf\",\n\t\"limsup\",\n\t\"ln\",\n\t\"log\",\n\t\"max\",\n\t\"min\",\n\t\"Pr\",\n\t\"sec\",\n\t\"sin\",\n\t\"sinh\",\n\t\"sup\",\n\t\"tan\",\n\t\"tanh\",\n]);\n\nconst LIMIT_OPERATORS = new Set([\n\t\"argmax\",\n\t\"argmin\",\n\t\"inf\",\n\t\"injlim\",\n\t\"lim\",\n\t\"liminf\",\n\t\"limsup\",\n\t\"max\",\n\t\"min\",\n\t\"projlim\",\n\t\"sup\",\n]);\n\nconst DISPLAY_LIMIT_SYMBOLS = new Set([\n\t\"bigcap\",\n\t\"bigcup\",\n\t\"bigodot\",\n\t\"bigoplus\",\n\t\"bigotimes\",\n\t\"bigsqcup\",\n\t\"biguplus\",\n\t\"bigvee\",\n\t\"bigwedge\",\n\t\"coprod\",\n\t\"int\",\n\t\"iint\",\n\t\"iiint\",\n\t\"oint\",\n\t\"prod\",\n\t\"sum\",\n]);\n\nconst RELATION_COMMANDS = new Set([\n\t\"Leftarrow\",\n\t\"Leftrightarrow\",\n\t\"Longleftarrow\",\n\t\"Longleftrightarrow\",\n\t\"Longrightarrow\",\n\t\"Rightarrow\",\n\t\"Vdash\",\n\t\"Vvdash\",\n\t\"approx\",\n\t\"asymp\",\n\t\"cong\",\n\t\"dashv\",\n\t\"doteq\",\n\t\"downarrow\",\n\t\"equiv\",\n\t\"ge\",\n\t\"geq\",\n\t\"geqslant\",\n\t\"gets\",\n\t\"gg\",\n\t\"hookleftarrow\",\n\t\"hookrightarrow\",\n\t\"iff\",\n\t\"implies\",\n\t\"in\",\n\t\"leadsto\",\n\t\"le\",\n\t\"leftarrow\",\n\t\"leftharpoondown\",\n\t\"leftharpoonup\",\n\t\"leftrightarrow\",\n\t\"leftrightharpoons\",\n\t\"leq\",\n\t\"leqslant\",\n\t\"ll\",\n\t\"longleftarrow\",\n\t\"longleftrightarrow\",\n\t\"longmapsto\",\n\t\"longrightarrow\",\n\t\"mapsto\",\n\t\"mid\",\n\t\"models\",\n\t\"ne\",\n\t\"nearrow\",\n\t\"neq\",\n\t\"ni\",\n\t\"notin\",\n\t\"nvdash\",\n\t\"nvDash\",\n\t\"nwarrow\",\n\t\"parallel\",\n\t\"perp\",\n\t\"prec\",\n\t\"preceq\",\n\t\"propto\",\n\t\"rightharpoondown\",\n\t\"rightharpoonup\",\n\t\"rightleftharpoons\",\n\t\"rightarrow\",\n\t\"rightsquigarrow\",\n\t\"searrow\",\n\t\"sim\",\n\t\"simeq\",\n\t\"sqsubset\",\n\t\"sqsubseteq\",\n\t\"sqsupset\",\n\t\"sqsupseteq\",\n\t\"subset\",\n\t\"subseteq\",\n\t\"succ\",\n\t\"succeq\",\n\t\"supset\",\n\t\"supseteq\",\n\t\"swarrow\",\n\t\"to\",\n\t\"triangleleft\",\n\t\"triangleright\",\n\t\"twoheadleftarrow\",\n\t\"twoheadrightarrow\",\n\t\"uparrow\",\n\t\"vdash\",\n]);\n\nconst NEGATED_SYMBOLS: Readonly<Record<string, string>> = {\n\t\"<\": \"≮\",\n\t\">\": \"≯\",\n\t\"=\": \"≠\",\n\t\"∈\": \"∉\",\n\t\"∋\": \"∌\",\n\t\"∣\": \"∤\",\n\t\"∥\": \"∦\",\n\t\"∼\": \"≁\",\n\t\"≃\": \"≄\",\n\t\"≅\": \"≇\",\n\t\"≈\": \"≉\",\n\t\"≡\": \"≢\",\n\t\"≤\": \"≰\",\n\t\"≥\": \"≱\",\n\t\"≺\": \"⊀\",\n\t\"≻\": \"⊁\",\n\t\"⊂\": \"⊄\",\n\t\"⊃\": \"⊅\",\n\t\"⊆\": \"⊈\",\n\t\"⊇\": \"⊉\",\n\t\"⊢\": \"⊬\",\n\t\"⊨\": \"⊭\",\n\t\"↔\": \"↮\",\n\t\"←\": \"↚\",\n\t\"→\": \"↛\",\n\t\"⇒\": \"⇏\",\n\t\"⇐\": \"⇍\",\n\t\"⇔\": \"⇎\",\n\t\"≼\": \"⋠\",\n\t\"≽\": \"⋡\",\n};\n\nconst BLACKBOARD: Readonly<Record<string, string>> = {\n\tC: \"ℂ\",\n\tH: \"ℍ\",\n\tN: \"ℕ\",\n\tP: \"ℙ\",\n\tQ: \"ℚ\",\n\tR: \"ℝ\",\n\tZ: \"ℤ\",\n};\n\nconst SUPERSCRIPTS: Readonly<Record<string, string>> = {\n\t\"0\": \"⁰\",\n\t\"1\": \"¹\",\n\t\"2\": \"²\",\n\t\"3\": \"³\",\n\t\"4\": \"⁴\",\n\t\"5\": \"⁵\",\n\t\"6\": \"⁶\",\n\t\"7\": \"⁷\",\n\t\"8\": \"⁸\",\n\t\"9\": \"⁹\",\n\t\"+\": \"⁺\",\n\t\"-\": \"⁻\",\n\t\"=\": \"⁼\",\n\t\"(\": \"⁽\",\n\t\")\": \"⁾\",\n\ta: \"ᵃ\",\n\tb: \"ᵇ\",\n\tc: \"ᶜ\",\n\td: \"ᵈ\",\n\te: \"ᵉ\",\n\tf: \"ᶠ\",\n\tg: \"ᵍ\",\n\th: \"ʰ\",\n\ti: \"ⁱ\",\n\tj: \"ʲ\",\n\tk: \"ᵏ\",\n\tl: \"ˡ\",\n\tm: \"ᵐ\",\n\tn: \"ⁿ\",\n\to: \"ᵒ\",\n\tp: \"ᵖ\",\n\tr: \"ʳ\",\n\ts: \"ˢ\",\n\tt: \"ᵗ\",\n\tu: \"ᵘ\",\n\tv: \"ᵛ\",\n\tw: \"ʷ\",\n\tx: \"ˣ\",\n\ty: \"ʸ\",\n\tz: \"ᶻ\",\n};\n\nconst SUBSCRIPTS: Readonly<Record<string, string>> = {\n\t\"0\": \"₀\",\n\t\"1\": \"₁\",\n\t\"2\": \"₂\",\n\t\"3\": \"₃\",\n\t\"4\": \"₄\",\n\t\"5\": \"₅\",\n\t\"6\": \"₆\",\n\t\"7\": \"₇\",\n\t\"8\": \"₈\",\n\t\"9\": \"₉\",\n\t\"+\": \"₊\",\n\t\"-\": \"₋\",\n\t\"=\": \"₌\",\n\t\"(\": \"₍\",\n\t\")\": \"₎\",\n\ta: \"ₐ\",\n\te: \"ₑ\",\n\th: \"ₕ\",\n\ti: \"ᵢ\",\n\tj: \"ⱼ\",\n\tk: \"ₖ\",\n\tl: \"ₗ\",\n\tm: \"ₘ\",\n\tn: \"ₙ\",\n\to: \"ₒ\",\n\tp: \"ₚ\",\n\tr: \"ᵣ\",\n\ts: \"ₛ\",\n\tt: \"ₜ\",\n\tu: \"ᵤ\",\n\tv: \"ᵥ\",\n\tx: \"ₓ\",\n};\n\nconst SPACING_COMMANDS = new Set([\n\t\",\",\n\t\":\",\n\t\";\",\n\t\" \",\n\t\">\",\n\t\"enspace\",\n\t\"enskip\",\n\t\"medspace\",\n\t\"quad\",\n\t\"qquad\",\n\t\"thickspace\",\n\t\"thinspace\",\n]);\nconst NEGATIVE_SPACING_COMMANDS = new Set([\"!\", \"negmedspace\", \"negthickspace\", \"negthinspace\"]);\nconst NEGATIVE_SPACE = \"\\u0000\";\nconst IGNORED_COMMANDS = new Set([\n\t\"displaystyle\",\n\t\"limits\",\n\t\"nolimits\",\n\t\"scriptstyle\",\n\t\"scriptscriptstyle\",\n\t\"textstyle\",\n]);\nconst SIZE_COMMANDS = new Set([\n\t\"big\",\n\t\"Big\",\n\t\"bigg\",\n\t\"Bigg\",\n\t\"bigl\",\n\t\"Bigl\",\n\t\"biggl\",\n\t\"Biggl\",\n\t\"bigr\",\n\t\"Bigr\",\n\t\"biggr\",\n\t\"Biggr\",\n]);\nconst LITERAL_COMMANDS = new Set([\"{\", \"}\", \"$\", \"%\", \"#\", \"_\", \"&\"]);\nconst DELIMITER_COMMANDS = new Set([\"left\", \"middle\", \"right\"]);\nconst PLAIN_WRAPPERS = new Set([\n\t\"emph\",\n\t\"mathcal\",\n\t\"mathbf\",\n\t\"mathfrak\",\n\t\"mathit\",\n\t\"mathrm\",\n\t\"mathnormal\",\n\t\"mathscr\",\n\t\"mathsf\",\n\t\"mathtt\",\n\t\"mathup\",\n\t\"mbox\",\n\t\"overbrace\",\n\t\"pmb\",\n\t\"smash\",\n\t\"substack\",\n\t\"text\",\n\t\"textbf\",\n\t\"textit\",\n\t\"textmd\",\n\t\"textnormal\",\n\t\"textrm\",\n\t\"textsc\",\n\t\"textsf\",\n\t\"textsl\",\n\t\"texttt\",\n\t\"textup\",\n\t\"underbrace\",\n\t\"bm\",\n\t\"boldsymbol\",\n]);\nconst ACCENTS: Readonly<Record<string, string>> = {\n\tacute: \"\\u0301\",\n\tbar: \"\\u0305\",\n\tbreve: \"\\u0306\",\n\tcheck: \"\\u030c\",\n\tddot: \"\\u0308\",\n\tdot: \"\\u0307\",\n\tgrave: \"\\u0300\",\n\that: \"\\u0302\",\n\tmathring: \"\\u030a\",\n\toverleftarrow: \"\\u20d6\",\n\toverleftrightarrow: \"\\u20e1\",\n\toverline: \"\\u0305\",\n\toverrightarrow: \"\\u20d7\",\n\ttilde: \"\\u0303\",\n\tunderline: \"\\u0332\",\n\tvec: \"\\u20d7\",\n\twidehat: \"\\u0302\",\n\twidetilde: \"\\u0303\",\n};\n\ntype MathScriptKind = \"sub\" | \"sup\";\ntype OperatorScriptMarker = \"_\" | \"^\";\ntype InlineOperatorLowerStyle = \"bracket\" | \"script\";\n\nfunction replaceCharacters(value: string, replacements: Readonly<Record<string, string>>): string | undefined {\n\tlet result = \"\";\n\tfor (const character of value) {\n\t\tconst replacement = replacements[character];\n\t\tif (replacement === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\t\tresult += replacement;\n\t}\n\treturn result;\n}\n\nfunction formatScript(value: string, kind: MathScriptKind): string {\n\tvalue = value.trim();\n\tconst replacements = kind === \"sub\" ? SUBSCRIPTS : SUPERSCRIPTS;\n\tconst unicode = replaceCharacters(value.replace(/\\s*([=+-])\\s*/g, \"$1\"), replacements);\n\tif (unicode !== undefined) {\n\t\treturn unicode;\n\t}\n\n\tconst prefix = kind === \"sub\" ? \"_\" : \"^\";\n\tif (Array.from(value).length === 1 || (kind === \"sub\" && /^[A-Za-z]+$/.test(value))) {\n\t\treturn `${prefix}${value}`;\n\t}\n\treturn `${prefix}(${value})`;\n}\n\nfunction formatFraction(numerator: string, denominator: string): string {\n\tnumerator = numerator.trim();\n\tdenominator = denominator.trim();\n\tconst simpleNumerator = /^[\\p{L}\\p{N}.]+$/u.test(numerator);\n\tconst simpleDenominator = /^[\\p{N}.]+$/u.test(denominator) || Array.from(denominator).length === 1;\n\treturn `${simpleNumerator ? numerator : `(${numerator})`}/${simpleDenominator ? denominator : `(${denominator})`}`;\n}\n\nfunction formatRoot(value: string, symbol = \"√\"): string {\n\tvalue = value.trim();\n\treturn /^[\\p{L}\\p{N}.]+$/u.test(value) ? `${symbol}${value}` : `${symbol}(${value})`;\n}\n\nconst NAMED_OPERATOR_START = \"\\u{f0004}\";\nconst NAMED_OPERATOR_END = \"\\u{f0005}\";\nconst NAMED_OPERATOR_LEFT_SPACING_PATTERN = /(?<=[\\p{L}\\p{N})\\]}\\u{f0001}])\\u{f0004}/gu;\nconst NAMED_OPERATOR_RIGHT_SPACING_PATTERN = /\\u{f0005}(?=[\\p{L}\\p{N}√\\u{f0000}])/gu;\n\nfunction normalizeOutput(value: string): string {\n\treturn value\n\t\t.replace(NAMED_OPERATOR_LEFT_SPACING_PATTERN, \" \")\n\t\t.replaceAll(NAMED_OPERATOR_START, \"\")\n\t\t.replace(NAMED_OPERATOR_RIGHT_SPACING_PATTERN, \" \")\n\t\t.replaceAll(NAMED_OPERATOR_END, \"\")\n\t\t.split(\"\\n\")\n\t\t.map((line) => line.replace(/[ \\t]+/g, \" \").trim())\n\t\t.filter((line, index, lines) => line.length > 0 || (index > 0 && index < lines.length - 1))\n\t\t.join(\"\\n\")\n\t\t.trim();\n}\n\ninterface FractionNode {\n\ttype: \"fraction\";\n\tnumerator: string;\n\tdenominator: string;\n}\n\ninterface OperatorNode {\n\ttype: \"operator\";\n\toperator: string;\n\tlower?: string;\n\tupper?: string;\n}\n\ninterface ParsedOperatorScripts {\n\tlower?: string;\n\tupper?: string;\n}\n\ninterface MatrixNode {\n\ttype: \"matrix\";\n\tlines: string[];\n\tbaseline: number;\n}\n\ntype LayoutNode = FractionNode | OperatorNode | MatrixNode;\n\ninterface Layout {\n\tlines: string[];\n\twidth: number;\n\tbaseline: number;\n}\n\nconst LAYOUT_MARKER_START = \"\\u{f0000}\";\nconst LAYOUT_MARKER_END = \"\\u{f0001}\";\nconst LAYOUT_MARKER_PATTERN = /\\u{f0000}(\\d+)\\u{f0001}/gu;\nconst TRAILING_LAYOUT_MARKER_PATTERN = /\\u{f0000}(\\d+)\\u{f0001}$/u;\nconst PROTECTED_SPACE = \"\\u{f0002}\";\nconst RESERVED_MARKER_PATTERN = /[\\u{f0000}\\u{f0001}\\u{f0002}\\u{f0004}\\u{f0005}]/u;\nconst MAX_SOURCE_LENGTH = 16 * 1024;\nconst MAX_NESTING_DEPTH = 64;\nconst MAX_LAYOUT_NODES = 256;\nconst MAX_RENDERED_ROWS = 200;\nconst MAX_RENDERED_LINE_WIDTH = 4096;\n\ninterface LatexParseState {\n\tnestingDepth: number;\n}\n\ntype LatexSequenceCharacterKind =\n\t| \"end\"\n\t| \"unexpected-close\"\n\t| \"group\"\n\t| \"command\"\n\t| \"script\"\n\t| \"whitespace\"\n\t| \"relation\"\n\t| \"alignment\"\n\t| \"space\"\n\t| \"period\"\n\t| \"literal\";\n\nfunction classifyLatexSequenceCharacter(character: string, endCharacter?: string): LatexSequenceCharacterKind {\n\tif (endCharacter && character === endCharacter) return \"end\";\n\tswitch (character) {\n\t\tcase \"}\":\n\t\t\treturn \"unexpected-close\";\n\t\tcase \"{\":\n\t\t\treturn \"group\";\n\t\tcase \"\\\\\":\n\t\t\treturn \"command\";\n\t\tcase \"^\":\n\t\tcase \"_\":\n\t\t\treturn \"script\";\n\t\tcase \"=\":\n\t\tcase \"<\":\n\t\tcase \">\":\n\t\t\treturn \"relation\";\n\t\tcase \"&\":\n\t\t\treturn \"alignment\";\n\t\tcase \"~\":\n\t\t\treturn \"space\";\n\t\tcase \".\":\n\t\t\treturn \"period\";\n\t\tdefault:\n\t\t\treturn /\\s/.test(character) ? \"whitespace\" : \"literal\";\n\t}\n}\n\nfunction assertLayoutBounds(width: number, rowCount: number): void {\n\tif (\n\t\t!Number.isSafeInteger(width) ||\n\t\twidth < 0 ||\n\t\twidth > MAX_RENDERED_LINE_WIDTH ||\n\t\t!Number.isSafeInteger(rowCount) ||\n\t\trowCount < 0 ||\n\t\trowCount > MAX_RENDERED_ROWS\n\t) {\n\t\tthrow new RangeError(\"LaTeX layout exceeds renderer bounds\");\n\t}\n}\n\nfunction padLayoutLine(line: string, width: number, centered = false): string {\n\tconst padding = Math.max(0, width - visibleWidth(line));\n\tconst left = centered ? Math.floor(padding / 2) : 0;\n\treturn `${\" \".repeat(left)}${line}${\" \".repeat(padding - left)}`;\n}\n\n// grip-ignore noExcessiveCollectionIterations: Every output row must concatenate every layout segment; rows are capped at 200 and parsed layout nodes at 256.\nfunction joinLayouts(layouts: readonly Layout[]): Layout {\n\tif (layouts.length === 0) {\n\t\treturn { lines: [\"\"], width: 0, baseline: 0 };\n\t}\n\tconst baseline = Math.max(...layouts.map((layout) => layout.baseline));\n\tconst below = Math.max(...layouts.map((layout) => layout.lines.length - layout.baseline - 1));\n\tconst width = layouts.reduce((total, layout) => total + layout.width, 0);\n\tconst rowCount = baseline + below + 1;\n\tassertLayoutBounds(width, rowCount);\n\tconst lines: string[] = [];\n\tfor (let row = 0; row < rowCount; row++) {\n\t\tlet line = \"\";\n\t\tfor (const layout of layouts) {\n\t\t\tconst sourceRow = row - baseline + layout.baseline;\n\t\t\tline +=\n\t\t\t\tsourceRow >= 0 && sourceRow < layout.lines.length\n\t\t\t\t\t? padLayoutLine(layout.lines[sourceRow] ?? \"\", layout.width)\n\t\t\t\t\t: \" \".repeat(layout.width);\n\t\t}\n\t\tlines.push(line.trimEnd());\n\t}\n\treturn { lines, width, baseline };\n}\n\nfunction createTextLayout(text: string): Layout {\n\treturn { lines: [text], width: visibleWidth(text), baseline: 0 };\n}\n\nfunction createInterNodeTextLayout(source: string, previousNode: LayoutNode | undefined, nextNode: LayoutNode): Layout {\n\tconst trimmed = (previousNode ? source.trimStart() : source).trimEnd();\n\tconst preserveLeadingSpace = previousNode?.type === \"matrix\" && /^\\s/.test(source);\n\tconst preserveTrailingSpace = nextNode.type === \"matrix\" && /\\s$/.test(source);\n\tconst text = trimmed\n\t\t? `${preserveLeadingSpace ? \" \" : \"\"}${trimmed}${preserveTrailingSpace ? \" \" : \"\"}`\n\t\t: preserveLeadingSpace || preserveTrailingSpace\n\t\t\t? \" \"\n\t\t\t: \"\";\n\treturn createTextLayout(text);\n}\n\nfunction createTrailingTextLayout(source: string, previousNode: LayoutNode | undefined): Layout {\n\tconst trimmed = previousNode ? source.trimStart() : source;\n\tconst text = previousNode?.type === \"matrix\" && /^\\s/.test(source) ? ` ${trimmed}` : trimmed;\n\treturn createTextLayout(text);\n}\n\nfunction renderFractionNodeLayout(node: FractionNode, nodes: readonly LayoutNode[]): Layout {\n\tconst numerator = renderLayout(node.numerator, nodes);\n\tconst denominator = renderLayout(node.denominator, nodes);\n\tconst contentWidth = Math.max(numerator.width, denominator.width, 1);\n\tconst width = contentWidth + 2;\n\tconst lines = [\n\t\t...numerator.lines.map((line) => padLayoutLine(line, width, true)),\n\t\t` ${\"─\".repeat(contentWidth)} `,\n\t\t...denominator.lines.map((line) => padLayoutLine(line, width, true)),\n\t];\n\tassertLayoutBounds(width, lines.length);\n\treturn { lines, width, baseline: numerator.lines.length };\n}\n\nfunction renderOperatorNodeLayout(node: OperatorNode): Layout {\n\tconst contentWidth = Math.max(\n\t\tvisibleWidth(node.operator),\n\t\tnode.lower === undefined ? 0 : visibleWidth(node.lower),\n\t\tnode.upper === undefined ? 0 : visibleWidth(node.upper),\n\t);\n\tconst lines: string[] = [];\n\tif (node.upper !== undefined) lines.push(`${padLayoutLine(node.upper, contentWidth, true)} `);\n\tlines.push(`${padLayoutLine(node.operator, contentWidth, true)} `);\n\tif (node.lower !== undefined) lines.push(`${padLayoutLine(node.lower, contentWidth, true)} `);\n\tassertLayoutBounds(contentWidth + 1, lines.length);\n\treturn { lines, width: contentWidth + 1, baseline: node.upper === undefined ? 0 : 1 };\n}\n\nfunction renderMatrixNodeLayout(node: MatrixNode): Layout {\n\tconst width = Math.max(0, ...node.lines.map((line) => visibleWidth(line)));\n\tassertLayoutBounds(width, node.lines.length);\n\treturn {\n\t\tlines: node.lines.map((line) => padLayoutLine(line, width)),\n\t\twidth,\n\t\tbaseline: node.baseline,\n\t};\n}\n\nfunction renderLayoutNode(node: LayoutNode, nodes: readonly LayoutNode[]): Layout {\n\tswitch (node.type) {\n\t\tcase \"fraction\":\n\t\t\treturn renderFractionNodeLayout(node, nodes);\n\t\tcase \"operator\":\n\t\t\treturn renderOperatorNodeLayout(node);\n\t\tcase \"matrix\":\n\t\t\treturn renderMatrixNodeLayout(node);\n\t}\n}\n\nfunction renderSourceLineLayout(sourceLine: string, nodes: readonly LayoutNode[]): Layout {\n\tconst layouts: Layout[] = [];\n\tlet position = 0;\n\tlet previousNode: LayoutNode | undefined;\n\tfor (const match of sourceLine.matchAll(LAYOUT_MARKER_PATTERN)) {\n\t\tconst index = match.index;\n\t\tconst node = nodes[Number(match[1])];\n\t\tif (!node) continue;\n\t\tif (index > position) {\n\t\t\tlayouts.push(createInterNodeTextLayout(sourceLine.slice(position, index), previousNode, node));\n\t\t}\n\t\tlayouts.push(renderLayoutNode(node, nodes));\n\t\tposition = index + match[0].length;\n\t\tpreviousNode = node;\n\t}\n\tif (position < sourceLine.length) {\n\t\tlayouts.push(createTrailingTextLayout(sourceLine.slice(position), previousNode));\n\t}\n\treturn joinLayouts(layouts);\n}\n\nfunction renderLayout(source: string, nodes: readonly LayoutNode[]): Layout {\n\tconst renderedLines: string[] = [];\n\tlet firstBaseline = 0;\n\tfor (const sourceLine of source.split(\"\\n\")) {\n\t\tconst lineLayout = renderSourceLineLayout(sourceLine, nodes);\n\t\tif (renderedLines.length === 0) firstBaseline = lineLayout.baseline;\n\t\trenderedLines.push(...lineLayout.lines);\n\t\tassertLayoutBounds(0, renderedLines.length);\n\t}\n\tconst width = Math.max(0, ...renderedLines.map((line) => visibleWidth(line)));\n\tassertLayoutBounds(width, renderedLines.length);\n\treturn { lines: renderedLines, width, baseline: firstBaseline };\n}\n\nclass LatexParser {\n\tprivate readonly source: string;\n\tprivate readonly layoutNodes: LayoutNode[];\n\tprivate readonly display: boolean;\n\tprivate readonly state: LatexParseState;\n\tprivate position = 0;\n\tprivate supported = true;\n\tprivate stackFractions = true;\n\n\tconstructor(\n\t\tsource: string,\n\t\tlayoutNodes: LayoutNode[],\n\t\tdisplay: boolean,\n\t\tstate: LatexParseState = { nestingDepth: 0 },\n\t) {\n\t\tthis.source = source;\n\t\tthis.layoutNodes = layoutNodes;\n\t\tthis.display = display;\n\t\tthis.state = state;\n\t}\n\n\trender(): string | undefined {\n\t\tconst rendered = this.parseSequence();\n\t\tif (!this.supported || this.position !== this.source.length) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn normalizeOutput(rendered);\n\t}\n\n\tprivate appendParsedCommand(result: string): string {\n\t\tconst command = this.parseCommand();\n\t\tif (command !== NEGATIVE_SPACE) return result + command;\n\t\tconst trimmed = result.trimEnd();\n\t\treturn trimmed.endsWith(NAMED_OPERATOR_END) ? trimmed.slice(0, -NAMED_OPERATOR_END.length) : trimmed;\n\t}\n\n\tprivate appendParsedScript(result: string, character: string): string {\n\t\tthis.position++;\n\t\tconst trimmed = result.trimEnd();\n\t\tconst script = formatScript(this.parseRequiredArgument(false), character === \"_\" ? \"sub\" : \"sup\");\n\t\treturn trimmed.endsWith(NAMED_OPERATOR_END)\n\t\t\t? `${trimmed.slice(0, -NAMED_OPERATOR_END.length)}${script}${NAMED_OPERATOR_END}`\n\t\t\t: trimmed + script;\n\t}\n\n\tprivate appendPeriod(result: string): string {\n\t\tconst marker = TRAILING_LAYOUT_MARKER_PATTERN.exec(result);\n\t\tconst node = marker ? this.layoutNodes[Number(marker[1])] : undefined;\n\t\tif (node?.type === \"matrix\") {\n\t\t\tconst lastLine = node.lines.length - 1;\n\t\t\tnode.lines[lastLine] = `${node.lines[lastLine] ?? \"\"}.`;\n\t\t\tthis.position++;\n\t\t\treturn result;\n\t\t}\n\t\tthis.position++;\n\t\treturn `${result}.`;\n\t}\n\n\tprivate parseSequence(endCharacter?: string): string {\n\t\tlet result = \"\";\n\t\twhile (this.position < this.source.length) {\n\t\t\tconst character = this.source[this.position];\n\t\t\tswitch (classifyLatexSequenceCharacter(character, endCharacter)) {\n\t\t\t\tcase \"end\":\n\t\t\t\t\tthis.position++;\n\t\t\t\t\treturn result;\n\t\t\t\tcase \"unexpected-close\":\n\t\t\t\t\tthis.supported = false;\n\t\t\t\t\treturn result;\n\t\t\t\tcase \"group\":\n\t\t\t\t\tthis.position++;\n\t\t\t\t\tresult += this.parseNestedSequence(\"}\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"command\":\n\t\t\t\t\tresult = this.appendParsedCommand(result);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"script\":\n\t\t\t\t\tresult = this.appendParsedScript(result, character);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"whitespace\":\n\t\t\t\t\tresult += this.parseWhitespace();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"relation\":\n\t\t\t\t\tresult = `${result.trimEnd()} ${character} `;\n\t\t\t\t\tthis.position++;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"alignment\":\n\t\t\t\t\tthis.position++;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"space\":\n\t\t\t\t\tthis.position++;\n\t\t\t\t\tresult += \" \";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"period\":\n\t\t\t\t\tresult = this.appendPeriod(result);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"literal\":\n\t\t\t\t\tresult += character;\n\t\t\t\t\tthis.position++;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (endCharacter) this.supported = false;\n\t\treturn result;\n\t}\n\n\tprivate parseWhitespace(): string {\n\t\twhile (this.position < this.source.length && /\\s/.test(this.source[this.position] ?? \"\")) {\n\t\t\tthis.position++;\n\t\t}\n\t\treturn \" \";\n\t}\n\n\tprivate readCommandName(): string | undefined {\n\t\tthis.position++;\n\t\tif (this.position >= this.source.length) {\n\t\t\tthis.supported = false;\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst first = this.source[this.position] ?? \"\";\n\t\tif (!/[A-Za-z]/.test(first)) {\n\t\t\tthis.position++;\n\t\t\treturn first;\n\t\t}\n\t\tconst start = this.position;\n\t\twhile (this.position < this.source.length && /[A-Za-z]/.test(this.source[this.position] ?? \"\")) {\n\t\t\tthis.position++;\n\t\t}\n\t\treturn this.source.slice(start, this.position);\n\t}\n\n\tprivate parsePredefinedCommand(command: string): string | undefined {\n\t\tif (command === \"\\\\\") return \"\\n\";\n\t\tif (SPACING_COMMANDS.has(command)) return \" \";\n\t\tif (NEGATIVE_SPACING_COMMANDS.has(command)) return NEGATIVE_SPACE;\n\t\tif (IGNORED_COMMANDS.has(command)) return \"\";\n\t\tif (LITERAL_COMMANDS.has(command)) return command;\n\t\tif (command === \"|\") return \"‖\";\n\t\treturn undefined;\n\t}\n\n\tprivate parseNegatedCommand(): string {\n\t\tconst value = this.parseRequiredArgument(false).trim();\n\t\tconst negated = NEGATED_SYMBOLS[value];\n\t\tif (negated !== undefined) return ` ${negated} `;\n\n\t\tconst characters = Array.from(value);\n\t\tif (characters.length === 0) {\n\t\t\tthis.supported = false;\n\t\t\treturn \"\";\n\t\t}\n\t\treturn ` ${characters[0]}\\u0338${characters.slice(1).join(\"\")} `;\n\t}\n\n\tprivate parseSymbolCommand(command: string): string | undefined {\n\t\tconst symbol = SYMBOLS[command];\n\t\tif (symbol === undefined) return undefined;\n\t\tif (DISPLAY_LIMIT_SYMBOLS.has(command)) return this.parseOperator(symbol, \"script\", true);\n\t\treturn command === \"cdot\" || command === \"times\" || RELATION_COMMANDS.has(command) ? ` ${symbol} ` : symbol;\n\t}\n\n\tprivate parseNamedOrDelimiterCommand(command: string): string | undefined {\n\t\tif (NAMED_OPERATORS.has(command)) return `${NAMED_OPERATOR_START}${command}${NAMED_OPERATOR_END}`;\n\t\tif (SIZE_COMMANDS.has(command)) return \"\";\n\t\tif (!DELIMITER_COMMANDS.has(command)) return undefined;\n\t\tif (this.source[this.position] === \".\") this.position++;\n\t\treturn \"\";\n\t}\n\n\tprivate parseFractionCommand(command: string): string {\n\t\tconst shouldStack = this.display && this.stackFractions && command !== \"tfrac\";\n\t\tconst numerator = this.parseRequiredArgument(!shouldStack);\n\t\tconst denominator = this.parseRequiredArgument(!shouldStack);\n\t\tif (!shouldStack) return formatFraction(numerator, denominator);\n\n\t\tconst index = this.addLayoutNode({\n\t\t\ttype: \"fraction\",\n\t\t\tnumerator: normalizeOutput(numerator),\n\t\t\tdenominator: normalizeOutput(denominator),\n\t\t});\n\t\treturn index === undefined ? \"\" : `${LAYOUT_MARKER_START}${index}${LAYOUT_MARKER_END}`;\n\t}\n\n\tprivate parseRootCommand(): string {\n\t\tconst degree = this.parseOptionalArgument()?.trim();\n\t\tconst value = this.parseRequiredArgument();\n\t\tif (degree === undefined || degree === \"2\") return formatRoot(value);\n\t\tif (degree === \"3\") return formatRoot(value, \"∛\");\n\t\tif (degree === \"4\") return formatRoot(value, \"∜\");\n\t\treturn `${formatScript(degree, \"sup\")}${formatRoot(value)}`;\n\t}\n\n\tprivate parseAccentCommand(command: string, accent: string): string {\n\t\tconst value = this.parseRequiredArgument();\n\t\treturn Array.from(value).length === 1 ? `${value}${accent}` : `${command}(${value})`;\n\t}\n\n\tprivate parseOperatorNameCommand(): string {\n\t\tconst starred = this.source[this.position] === \"*\";\n\t\tif (starred) this.position++;\n\t\tconst operator = normalizeOutput(this.parseRequiredArgument()).trim();\n\t\treturn this.parseOperator(operator, \"bracket\", starred, true);\n\t}\n\n\tprivate parseArgumentCommand(command: string): string | undefined {\n\t\tswitch (command) {\n\t\t\tcase \"frac\":\n\t\t\tcase \"dfrac\":\n\t\t\tcase \"tfrac\":\n\t\t\t\treturn this.parseFractionCommand(command);\n\t\t\tcase \"sqrt\":\n\t\t\t\treturn this.parseRootCommand();\n\t\t\tcase \"boxed\":\n\t\t\tcase \"fbox\":\n\t\t\t\treturn `[${this.parseRequiredArgument().trim()}]`;\n\t\t\tcase \"binom\":\n\t\t\tcase \"dbinom\":\n\t\t\tcase \"tbinom\":\n\t\t\t\treturn `(${this.parseRequiredArgument()} choose ${this.parseRequiredArgument()})`;\n\t\t\tcase \"mathbb\": {\n\t\t\t\tconst value = this.parseRequiredArgument();\n\t\t\t\treturn Array.from(value, (character) => BLACKBOARD[character] ?? character).join(\"\");\n\t\t\t}\n\t\t\tcase \"operatorname\":\n\t\t\t\treturn this.parseOperatorNameCommand();\n\t\t\tcase \"mod\":\n\t\t\tcase \"bmod\":\n\t\t\t\treturn \" mod \";\n\t\t\tcase \"pmod\":\n\t\t\tcase \"pod\": {\n\t\t\t\tconst value = this.parseRequiredArgument().trim();\n\t\t\t\treturn command === \"pmod\" ? ` (mod ${value})` : ` (${value})`;\n\t\t\t}\n\t\t\tcase \"overset\":\n\t\t\tcase \"stackrel\": {\n\t\t\t\tconst upper = this.parseRequiredArgument();\n\t\t\t\tconst value = this.parseRequiredArgument().trim();\n\t\t\t\treturn `${value}${formatScript(upper, \"sup\")}`;\n\t\t\t}\n\t\t\tcase \"underset\": {\n\t\t\t\tconst lower = this.parseRequiredArgument();\n\t\t\t\tconst value = this.parseRequiredArgument().trim();\n\t\t\t\treturn `${value}${formatScript(lower, \"sub\")}`;\n\t\t\t}\n\t\t\tcase \"begin\":\n\t\t\t\treturn this.parseEnvironment();\n\t\t\tcase \"end\":\n\t\t\t\tthis.supported = false;\n\t\t\t\treturn \"\";\n\t\t}\n\n\t\tconst accent = ACCENTS[command];\n\t\tif (accent !== undefined) return this.parseAccentCommand(command, accent);\n\t\tif (PLAIN_WRAPPERS.has(command)) {\n\t\t\tconst value = this.parseRequiredArgument();\n\t\t\treturn command.startsWith(\"text\") || command === \"mbox\" ? value : value.trim();\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate parseCommand(): string {\n\t\tconst command = this.readCommandName();\n\t\tif (command === undefined) return \"\";\n\n\t\tconst predefined = this.parsePredefinedCommand(command);\n\t\tif (predefined !== undefined) return predefined;\n\t\tif (command === \"not\") return this.parseNegatedCommand();\n\t\tif (LIMIT_OPERATORS.has(command)) return this.parseOperator(command, \"bracket\", true, true);\n\n\t\tconst symbol = this.parseSymbolCommand(command);\n\t\tif (symbol !== undefined) return symbol;\n\t\tconst namedOrDelimiter = this.parseNamedOrDelimiterCommand(command);\n\t\tif (namedOrDelimiter !== undefined) return namedOrDelimiter;\n\t\tconst argumentCommand = this.parseArgumentCommand(command);\n\t\tif (argumentCommand !== undefined) return argumentCommand;\n\n\t\tthis.supported = false;\n\t\treturn `\\\\${command}`;\n\t}\n\n\tprivate assignOperatorScript(scripts: ParsedOperatorScripts, kind: OperatorScriptMarker, value: string): void {\n\t\tconst property = kind === \"_\" ? \"lower\" : \"upper\";\n\t\tif (scripts[property] !== undefined) this.supported = false;\n\t\tscripts[property] = value;\n\t}\n\n\tprivate parseOperatorDisplayLimits(displayLimits: boolean): boolean {\n\t\tlet modifierPosition = this.position;\n\t\twhile (modifierPosition < this.source.length && /[ \\t]/.test(this.source[modifierPosition] ?? \"\")) {\n\t\t\tmodifierPosition++;\n\t\t}\n\t\tconst modifier = /^\\\\(limits|nolimits)(?![A-Za-z])/.exec(this.source.slice(modifierPosition));\n\t\tif (!modifier) return displayLimits;\n\t\tthis.position = modifierPosition + modifier[0].length;\n\t\treturn modifier[1] === \"limits\";\n\t}\n\n\tprivate parseOperatorScripts(): ParsedOperatorScripts {\n\t\tconst scripts: ParsedOperatorScripts = {};\n\t\twhile (true) {\n\t\t\tlet scriptPosition = this.position;\n\t\t\twhile (scriptPosition < this.source.length && /[ \\t]/.test(this.source[scriptPosition] ?? \"\")) {\n\t\t\t\tscriptPosition++;\n\t\t\t}\n\t\t\tconst kind = this.source[scriptPosition];\n\t\t\tif (kind !== \"_\" && kind !== \"^\") break;\n\t\t\tthis.position = scriptPosition + 1;\n\t\t\tconst value = normalizeOutput(this.parseRequiredArgument(false)).replaceAll(\" \", \"\");\n\t\t\tthis.assignOperatorScript(scripts, kind, value);\n\t\t}\n\t\treturn scripts;\n\t}\n\n\tprivate parseOperator(\n\t\toperator: string,\n\t\tinlineLowerStyle: InlineOperatorLowerStyle,\n\t\tdisplayLimits: boolean,\n\t\tspaced = false,\n\t): string {\n\t\tconst useDisplayLimits = this.parseOperatorDisplayLimits(displayLimits);\n\t\tconst { lower, upper } = this.parseOperatorScripts();\n\t\tif (this.display && useDisplayLimits && (lower !== undefined || upper !== undefined)) {\n\t\t\tconst index = this.addLayoutNode({ type: \"operator\", operator, lower, upper });\n\t\t\treturn index === undefined ? \"\" : `${LAYOUT_MARKER_START}${index}${LAYOUT_MARKER_END}`;\n\t\t}\n\n\t\tlet rendered = operator;\n\t\tif (lower !== undefined) {\n\t\t\trendered += inlineLowerStyle === \"bracket\" ? `[${lower}]` : formatScript(lower, \"sub\");\n\t\t}\n\t\tif (upper !== undefined) rendered += formatScript(upper, \"sup\");\n\t\treturn spaced ? ` ${rendered} ` : rendered;\n\t}\n\n\tprivate parseRequiredArgument(stackFractions = true): string {\n\t\tconst previousStackFractions = this.stackFractions;\n\t\tthis.stackFractions = previousStackFractions && stackFractions;\n\t\tconst value = this.parseRequiredArgumentValue();\n\t\tthis.stackFractions = previousStackFractions;\n\t\treturn value;\n\t}\n\n\tprivate parseRequiredArgumentValue(): string {\n\t\twhile (this.position < this.source.length && /[ \\t]/.test(this.source[this.position] ?? \"\")) {\n\t\t\tthis.position++;\n\t\t}\n\t\tif (this.position >= this.source.length) {\n\t\t\tthis.supported = false;\n\t\t\treturn \"\";\n\t\t}\n\t\tif (this.source[this.position] === \"{\") {\n\t\t\tthis.position++;\n\t\t\treturn this.parseNestedSequence(\"}\");\n\t\t}\n\t\tif (this.source[this.position] === \"\\\\\") {\n\t\t\treturn this.parseCommand();\n\t\t}\n\t\tconst value = this.source[this.position] ?? \"\";\n\t\tthis.position++;\n\t\treturn value;\n\t}\n\n\tprivate parseOptionalArgument(): string | undefined {\n\t\twhile (this.position < this.source.length && /[ \\t]/.test(this.source[this.position] ?? \"\")) {\n\t\t\tthis.position++;\n\t\t}\n\t\tif (this.source[this.position] !== \"[\") {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst end = this.source.indexOf(\"]\", this.position + 1);\n\t\tif (end < 0) {\n\t\t\tthis.supported = false;\n\t\t\treturn undefined;\n\t\t}\n\t\tconst value = this.source.slice(this.position + 1, end);\n\t\tthis.position = end + 1;\n\t\treturn this.renderNested(value);\n\t}\n\n\tprivate readRawGroupContents(start: number): string | undefined {\n\t\tlet depth = 1;\n\t\twhile (this.position < this.source.length) {\n\t\t\tconst character = this.source[this.position];\n\t\t\tif (character === \"\\\\\") {\n\t\t\t\tthis.position += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (character === \"{\") {\n\t\t\t\tdepth++;\n\t\t\t\tif (this.state.nestingDepth + depth > MAX_NESTING_DEPTH) {\n\t\t\t\t\tthis.supported = false;\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tthis.position++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (character !== \"}\") {\n\t\t\t\tthis.position++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdepth--;\n\t\t\tif (depth > 0) {\n\t\t\t\tthis.position++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst value = this.source.slice(start, this.position);\n\t\t\tthis.position++;\n\t\t\treturn value;\n\t\t}\n\t\tthis.supported = false;\n\t\treturn undefined;\n\t}\n\n\tprivate readRawGroup(): string | undefined {\n\t\twhile (this.position < this.source.length && /[ \\t]/.test(this.source[this.position] ?? \"\")) {\n\t\t\tthis.position++;\n\t\t}\n\t\tif (this.source[this.position] !== \"{\") {\n\t\t\tthis.supported = false;\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst start = ++this.position;\n\t\tif (this.state.nestingDepth + 1 > MAX_NESTING_DEPTH) {\n\t\t\tthis.supported = false;\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this.readRawGroupContents(start);\n\t}\n\n\tprivate splitEnvironmentRows(body: string): string[] {\n\t\treturn body.split(/\\\\\\\\(?:\\[[^\\]\\n]*\\])?/);\n\t}\n\n\tprivate parseEnvironment(): string {\n\t\tconst environment = this.readRawGroup();\n\t\tif (!environment) {\n\t\t\treturn \"\";\n\t\t}\n\t\tconst endMarker = `\\\\end{${environment}}`;\n\t\tconst end = this.source.indexOf(endMarker, this.position);\n\t\tif (end < 0) {\n\t\t\tthis.supported = false;\n\t\t\treturn \"\";\n\t\t}\n\t\tconst body = this.source.slice(this.position, end);\n\t\tthis.position = end + endMarker.length;\n\n\t\tif (environment === \"equation\" || environment === \"equation*\" || environment === \"displaymath\") {\n\t\t\treturn this.renderNested(body).trim();\n\t\t}\n\n\t\tif (\n\t\t\tenvironment === \"aligned\" ||\n\t\t\tenvironment === \"align\" ||\n\t\t\tenvironment === \"align*\" ||\n\t\t\tenvironment === \"alignedat\" ||\n\t\t\tenvironment === \"alignat\" ||\n\t\t\tenvironment === \"alignat*\" ||\n\t\t\tenvironment === \"gather\" ||\n\t\t\tenvironment === \"gathered\" ||\n\t\t\tenvironment === \"multline\" ||\n\t\t\tenvironment === \"multline*\" ||\n\t\t\tenvironment === \"split\"\n\t\t) {\n\t\t\tconst alignedAt = [\"alignedat\", \"alignat\", \"alignat*\"].includes(environment);\n\t\t\tconst alignedBody = alignedAt ? body.replace(/^\\s*\\{[^}]*\\}/, \"\") : body;\n\t\t\treturn this.splitEnvironmentRows(alignedBody)\n\t\t\t\t.map((row) => {\n\t\t\t\t\tconst cells = row.split(\"&\");\n\t\t\t\t\tconst source = alignedAt\n\t\t\t\t\t\t? Array.from({ length: Math.ceil(cells.length / 2) }, (_, index) =>\n\t\t\t\t\t\t\t\tcells.slice(index * 2, index * 2 + 2).join(\"\"),\n\t\t\t\t\t\t\t).join(\" \")\n\t\t\t\t\t\t: cells.join(\"\");\n\t\t\t\t\treturn this.renderNested(source).trim();\n\t\t\t\t})\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\"\\n\");\n\t\t}\n\n\t\tif (environment === \"cases\" || environment === \"cases*\") {\n\t\t\tconst rows = this.splitEnvironmentRows(body)\n\t\t\t\t.map((row) => row.split(\"&\").map((cell) => this.renderNested(cell, false).trim()))\n\t\t\t\t.filter((row) => row.some(Boolean));\n\t\t\treturn rows\n\t\t\t\t.map((row, index) => {\n\t\t\t\t\tconst value = (row[0] ?? \"\").replace(/,\\s*$/, \"\");\n\t\t\t\t\tconst condition = row[1] ?? \"\";\n\t\t\t\t\tconst delimiter = index === 0 ? \"⎧\" : index === rows.length - 1 ? \"⎩\" : \"⎨\";\n\t\t\t\t\tconst conditionPrefix = /^(?:if|when|for|otherwise)\\b/i.test(condition) ? \" \" : \" if \";\n\t\t\t\t\treturn `${delimiter} ${value}${condition ? `${conditionPrefix}${condition}` : \"\"}`;\n\t\t\t\t})\n\t\t\t\t.join(\"\\n\");\n\t\t}\n\n\t\tif (\n\t\t\t[\"array\", \"matrix\", \"smallmatrix\", \"pmatrix\", \"bmatrix\", \"Bmatrix\", \"vmatrix\", \"Vmatrix\"].includes(environment)\n\t\t) {\n\t\t\tconst matrixBody = environment === \"array\" ? body.replace(/^\\s*\\{[^}]*\\}/, \"\") : body;\n\t\t\treturn this.renderMatrix(environment, matrixBody);\n\t\t}\n\n\t\tthis.supported = false;\n\t\treturn body;\n\t}\n\n\tprivate renderMatrix(environment: string, body: string): string {\n\t\tconst sourceRows = this.splitEnvironmentRows(body).map((row) => row.split(\"&\"));\n\t\tconst sourceColumnCount = Math.max(0, ...sourceRows.map((row) => row.length));\n\t\tif (sourceRows.length > MAX_RENDERED_ROWS || sourceRows.length * sourceColumnCount > MAX_LAYOUT_NODES) {\n\t\t\tthis.supported = false;\n\t\t\treturn \"\";\n\t\t}\n\t\tconst matrix = sourceRows\n\t\t\t.map((row) => row.map((cell) => this.renderNested(cell, false).trim()))\n\t\t\t.filter((row) => row.some(Boolean));\n\t\tconst columnCount = Math.max(0, ...matrix.map((row) => row.length));\n\t\tconst columnWidths = Array.from({ length: columnCount }, (_, column) =>\n\t\t\tMath.max(0, ...matrix.map((row) => visibleWidth(row[column] ?? \"\"))),\n\t\t);\n\t\tconst rows = matrix.map((row) =>\n\t\t\tArray.from({ length: columnCount }, (_, column) => {\n\t\t\t\tconst cell = row[column] ?? \"\";\n\t\t\t\treturn `${cell}${PROTECTED_SPACE.repeat(Math.max(0, (columnWidths[column] ?? 0) - visibleWidth(cell)))}`;\n\t\t\t}).join(\" │ \"),\n\t\t);\n\t\tlet lines: string[];\n\t\tif (environment === \"array\" || environment === \"matrix\" || environment === \"smallmatrix\") {\n\t\t\tlines = rows;\n\t\t} else {\n\t\t\tconst delimiters: Readonly<Record<string, readonly [string, string, string, string, string, string]>> = {\n\t\t\t\tpmatrix: [\"⎛\", \"⎞\", \"⎜\", \"⎟\", \"⎝\", \"⎠\"],\n\t\t\t\tbmatrix: [\"⎡\", \"⎤\", \"⎢\", \"⎥\", \"⎣\", \"⎦\"],\n\t\t\t\tBmatrix: [\"⎧\", \"⎫\", \"⎨\", \"⎬\", \"⎩\", \"⎭\"],\n\t\t\t\tvmatrix: [\"│\", \"│\", \"│\", \"│\", \"│\", \"│\"],\n\t\t\t\tVmatrix: [\"║\", \"║\", \"║\", \"║\", \"║\", \"║\"],\n\t\t\t};\n\t\t\tconst delimiter = delimiters[environment];\n\t\t\tif (!delimiter) {\n\t\t\t\tthis.supported = false;\n\t\t\t\treturn rows.join(\"\\n\");\n\t\t\t}\n\t\t\tlines = rows.map((row, index) => {\n\t\t\t\tconst left = index === 0 ? delimiter[0] : index === rows.length - 1 ? delimiter[4] : delimiter[2];\n\t\t\t\tconst right = index === 0 ? delimiter[1] : index === rows.length - 1 ? delimiter[5] : delimiter[3];\n\t\t\t\treturn `${left} ${row} ${right}`;\n\t\t\t});\n\t\t}\n\n\t\tif (lines.length <= 1) {\n\t\t\treturn lines[0] ?? \"\";\n\t\t}\n\t\tconst index = this.addLayoutNode({ type: \"matrix\", lines, baseline: 0 });\n\t\treturn index === undefined ? \"\" : `${LAYOUT_MARKER_START}${index}${LAYOUT_MARKER_END}`;\n\t}\n\n\tprivate addLayoutNode(node: LayoutNode): number | undefined {\n\t\tif (this.layoutNodes.length >= MAX_LAYOUT_NODES) {\n\t\t\tthis.supported = false;\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this.layoutNodes.push(node) - 1;\n\t}\n\n\tprivate parseNestedSequence(endCharacter: string): string {\n\t\tif (this.state.nestingDepth >= MAX_NESTING_DEPTH) {\n\t\t\tthis.supported = false;\n\t\t\treturn \"\";\n\t\t}\n\t\tthis.state.nestingDepth++;\n\t\ttry {\n\t\t\treturn this.parseSequence(endCharacter);\n\t\t} finally {\n\t\t\tthis.state.nestingDepth--;\n\t\t}\n\t}\n\n\tprivate renderNested(source: string, stackFractions = true): string {\n\t\tif (this.state.nestingDepth >= MAX_NESTING_DEPTH) {\n\t\t\tthis.supported = false;\n\t\t\treturn source;\n\t\t}\n\t\tthis.state.nestingDepth++;\n\t\tlet rendered: string | undefined;\n\t\ttry {\n\t\t\trendered = new LatexParser(source, this.layoutNodes, this.display && stackFractions, this.state).render();\n\t\t} finally {\n\t\t\tthis.state.nestingDepth--;\n\t\t}\n\t\tif (rendered === undefined) {\n\t\t\tthis.supported = false;\n\t\t\treturn source;\n\t\t}\n\t\treturn rendered;\n\t}\n}\n\nexport interface RenderLatexOptions {\n\t/** Stack fractions and operator limits vertically for display math (default: false). */\n\tdisplay?: boolean;\n}\n\n/**\n * Render a basic LaTeX math expression as terminal-friendly Unicode text.\n * Returns undefined when the expression contains unsupported or malformed syntax.\n */\nexport function renderLatex(source: string, options: RenderLatexOptions = {}): string | undefined {\n\tif (source.length > MAX_SOURCE_LENGTH || RESERVED_MARKER_PATTERN.test(source)) {\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\tconst layoutNodes: LayoutNode[] = [];\n\t\tconst rendered = new LatexParser(source, layoutNodes, options.display === true).render();\n\t\tif (rendered === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tlet result: string;\n\t\tif (layoutNodes.length === 0) {\n\t\t\tresult = rendered.replaceAll(PROTECTED_SPACE, \" \");\n\t\t} else {\n\t\t\tconst lines = renderLayout(rendered, layoutNodes).lines;\n\t\t\tconst indentation = Math.min(\n\t\t\t\t...lines.filter((line) => line.trim()).map((line) => line.length - line.trimStart().length),\n\t\t\t);\n\t\t\tresult = lines\n\t\t\t\t.map((line) => line.slice(indentation).trimEnd())\n\t\t\t\t.join(\"\\n\")\n\t\t\t\t.trimEnd()\n\t\t\t\t.replaceAll(PROTECTED_SPACE, \" \");\n\t\t}\n\n\t\tconst resultLines = result.split(\"\\n\");\n\t\tif (\n\t\t\tresultLines.length > MAX_RENDERED_ROWS ||\n\t\t\tresultLines.some((line) => visibleWidth(line) > MAX_RENDERED_LINE_WIDTH)\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn result;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-node.d.ts","sourceRoot":"","sources":["../src/layout-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,eAAO,MAAM,WAAW,eAAgD,CAAC;AAGzE,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,OAAO,CAAC;CAChD;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AACpE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAClD,MAAM,MAAM,4BAA4B,GAAG,OAAO,GAAG,SAAS,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,cAAc,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,4BAA4B,CAAC;IAClD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAC7F;AAED,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,iBAAiB,CAAC;CACzB;AAED,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,gBAAgB,CAAC;AAE5D,MAAM,WAAW,eAAgB,SAAQ,SAAS;IACjD,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC;CAC5B;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAG1E"
|
|
1
|
+
{"version":3,"file":"layout-node.d.ts","sourceRoot":"","sources":["../src/layout-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,eAAO,MAAM,WAAW,eAAgD,CAAC;AAGzE,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,OAAO,CAAC;CAChD;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AACpE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAClD,MAAM,MAAM,4BAA4B,GAAG,OAAO,GAAG,SAAS,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,cAAc,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,4BAA4B,CAAC;IAClD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAC7F;AAED,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,iBAAiB,CAAC;CACzB;AAED,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,gBAAgB,CAAC;AAE5D,MAAM,WAAW,eAAgB,SAAQ,SAAS;IACjD,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC;CAC5B;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAG1E"}
|
package/dist/layout-node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-node.js","sourceRoot":"","sources":["../src/layout-node.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;AAkDzE,MAAM,UAAU,aAAa,CAAC,SAAoB
|
|
1
|
+
{"version":3,"file":"layout-node.js","sourceRoot":"","sources":["../src/layout-node.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;AAkDzE,MAAM,UAAU,aAAa,CAAC,SAAoB;IACjD,MAAM,SAAS,GAAG,SAAqC,CAAC;IACxD,OAAO,OAAO,SAAS,CAAC,WAAW,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5F,CAAC","sourcesContent":["import type { Component } from \"./tui.ts\";\n\nexport const LAYOUT_NODE = Symbol.for(\"@greppleai/grip-tui/layout-node\");\n\n// grip-ignore noNearIdenticalDataStructures: TUI layout viewport constraints and image pixel dimensions evolve independently.\nexport interface LayoutViewport {\n\twidth: number;\n\theight: number;\n}\n\nexport interface StackLayoutEntry {\n\tcomponent: Component;\n\tbasis?: number | \"auto\";\n\tgrow?: number;\n\tshrink?: number;\n\tminSize?: number;\n\tmaxSize?: number;\n\tvisible?: (viewport: LayoutViewport) => boolean;\n}\n\nexport type StackAlignment = \"stretch\" | \"start\" | \"center\" | \"end\";\nexport type StackLayoutType = \"vstack\" | \"hstack\";\nexport type ScrollViewOverscrollBehavior = \"chain\" | \"contain\";\n\nexport interface StackLayoutNode {\n\ttype: StackLayoutType;\n\tentries: readonly StackLayoutEntry[];\n\tgap: number;\n\talign: StackAlignment;\n}\n\nexport interface ScrollLayoutState {\n\treadonly scrollTop: number;\n\treadonly primary: boolean;\n\treadonly overscroll: ScrollViewOverscrollBehavior;\n\treadonly viewportHeight: number;\n\tgetContentWidth(width: number): number;\n\tupdateLayout(contentHeight: number, viewportHeight: number, requestRender: () => void): void;\n}\n\nexport interface ScrollLayoutNode {\n\ttype: \"scroll\";\n\tcomponent: Component;\n\tstate: ScrollLayoutState;\n}\n\nexport type LayoutNode = StackLayoutNode | ScrollLayoutNode;\n\nexport interface LayoutComponent extends Component {\n\t[LAYOUT_NODE](): LayoutNode;\n}\n\nexport function getLayoutNode(component: Component): LayoutNode | undefined {\n\tconst candidate = component as Partial<LayoutComponent>;\n\treturn typeof candidate[LAYOUT_NODE] === \"function\" ? candidate[LAYOUT_NODE]() : undefined;\n}\n"]}
|
package/dist/layout.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAI9D,OAAO,EAAE,KAAK,SAAS,EAAmC,MAAM,UAAU,CAAC;AAK3E,MAAM,WAAW,UAAU;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,iBAAiB,CAAC,EAAE,UAAU,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACrB;AA0PD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,SAAS,GAAG,iBAAiB,GAAG,SAAS,CAwBlF;AA+GD,wBAAgB,iBAAiB,CAChC,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,IAAI,GACvB,WAAW,CAwBb;AAMD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,CAUlG;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAUvF","sourcesContent":["import type { ScrollView } from \"./components/scroll-view.ts\";\nimport { allocateStackSizes, visibleStackEntries } from \"./components/stack.ts\";\nimport { getLayoutNode, type LayoutViewport, type ScrollLayoutNode, type StackLayoutNode } from \"./layout-node.ts\";\nimport { cropKittyImageLine, getKittyImageMetadata, isImageLine } from \"./terminal-image.ts\";\nimport { type Component, CURSOR_MARKER, compositeTuiLine } from \"./tui.ts\";\nimport { extractAnsiCode, getGraphemeCellRange, sliceByColumn, visibleWidth } from \"./utils.ts\";\n\nconst OSC133_ZONE_PREFIX = /^(?:\\x1b\\]133;[ABC](?:\\x07|\\x1b\\\\))+/;\n\nexport interface LayoutRect {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n}\n\nexport interface LayoutBox {\n\tcomponent: Component;\n\trect: LayoutRect;\n\tclip: LayoutRect;\n\tchildren: LayoutBox[];\n\tparent?: LayoutBox;\n\tlines?: readonly string[];\n\tlineOffset?: number;\n\tscrollView?: ScrollView;\n\tscrollContentLines?: readonly string[];\n\tlayer: number;\n}\n\nexport interface LayoutFrame {\n\troot: LayoutBox;\n\twidth: number;\n\theight: number;\n\tlines: string[];\n\tprimaryScrollView?: ScrollView;\n}\n\nexport interface ScrollbarGeometry {\n\tcolumn: number;\n\ttrackTop: number;\n\ttrackHeight: number;\n\tthumbTop: number;\n\tthumbHeight: number;\n\tmaxScrollTop: number;\n}\n\ninterface LayoutContext {\n\tviewport: LayoutViewport;\n\trenderCache: Map<Component, Map<number, string[]>>;\n\trequestRender: () => void;\n\tprimaryScrollView: ScrollView | undefined;\n}\n\ninterface ScrolledKittyImagePaintRequest {\n\tbox: LayoutBox;\n\tscreen: string[];\n\ttotalWidth: number;\n\tscrollTop: number;\n\timageLine: string;\n\timageRow: number;\n\timageRows: number;\n}\n\nfunction intersect(a: LayoutRect, b: LayoutRect): LayoutRect {\n\tconst x = Math.max(a.x, b.x);\n\tconst y = Math.max(a.y, b.y);\n\tconst right = Math.min(a.x + a.width, b.x + b.width);\n\tconst bottom = Math.min(a.y + a.height, b.y + b.height);\n\treturn { x, y, width: Math.max(0, right - x), height: Math.max(0, bottom - y) };\n}\n\nfunction renderCached(context: LayoutContext, component: Component, width: number): string[] {\n\tconst safeWidth = Math.max(1, Math.floor(width));\n\tlet widths = context.renderCache.get(component);\n\tif (!widths) {\n\t\twidths = new Map<number, string[]>();\n\t\tcontext.renderCache.set(component, widths);\n\t}\n\tlet lines = widths.get(safeWidth);\n\tif (!lines) {\n\t\tlines = component.render(safeWidth);\n\t\twidths.set(safeWidth, lines);\n\t}\n\treturn lines;\n}\n\nfunction measureHeight(context: LayoutContext, component: Component, width: number): number {\n\treturn renderCached(context, component, width).length;\n}\n\nfunction measureWidth(context: LayoutContext, component: Component, width: number): number {\n\treturn renderCached(context, component, width).reduce((max, line) => Math.max(max, visibleWidth(line)), 0);\n}\n\nfunction withParent(box: LayoutBox, parent: LayoutBox): LayoutBox {\n\tbox.parent = parent;\n\treturn box;\n}\n\nfunction translateBox(box: LayoutBox, deltaY: number): void {\n\tbox.rect.y += deltaY;\n\tfor (const child of box.children) translateBox(child, deltaY);\n}\n\nfunction updateClips(box: LayoutBox, parentClip: LayoutRect): void {\n\tbox.clip = intersect(parentClip, box.rect);\n\tfor (const child of box.children) updateClips(child, box.clip);\n}\n\ninterface ComponentLayoutRequest {\n\tcontext: LayoutContext;\n\tcomponent: Component;\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number | undefined;\n\tclip: LayoutRect;\n}\n\nfunction layoutLeafComponent(request: ComponentLayoutRequest): LayoutBox {\n\tconst { context, component, x, y, width, height, clip } = request;\n\tconst lines = renderCached(context, component, width);\n\tconst allocatedHeight = height === undefined ? lines.length : Math.max(0, Math.floor(height));\n\tlet lineOffset = 0;\n\tif (lines.length > allocatedHeight && allocatedHeight > 0) {\n\t\tconst cursorLine = lines.findIndex((line) => line.includes(CURSOR_MARKER));\n\t\tif (cursorLine >= allocatedHeight) lineOffset = cursorLine - allocatedHeight + 1;\n\t}\n\treturn {\n\t\tcomponent,\n\t\trect: { x, y, width, height: allocatedHeight },\n\t\tclip: intersect(clip, { x, y, width, height: allocatedHeight }),\n\t\tchildren: [],\n\t\tlines,\n\t\tlineOffset,\n\t\tlayer: 0,\n\t};\n}\n\nfunction layoutScrollComponent(request: ComponentLayoutRequest, node: ScrollLayoutNode): LayoutBox {\n\tconst { context, component, x, y, width, height, clip } = request;\n\tconst previousScrollTop = node.state.scrollTop;\n\tconst contentWidth = node.state.getContentWidth(width);\n\tconst childBox = layoutComponent(context, node.component, x, y - previousScrollTop, contentWidth, undefined, clip);\n\tconst contentHeight = childBox.rect.height;\n\tconst viewportHeight = height === undefined ? contentHeight : Math.max(0, Math.floor(height));\n\tnode.state.updateLayout(contentHeight, viewportHeight, context.requestRender);\n\ttranslateBox(childBox, previousScrollTop - node.state.scrollTop);\n\tconst scrollView = node.state as ScrollView;\n\tif (node.state.primary || !context.primaryScrollView) context.primaryScrollView = scrollView;\n\tconst rect = { x, y, width, height: viewportHeight };\n\tconst childClip = intersect(clip, rect);\n\tconst box: LayoutBox = {\n\t\tcomponent,\n\t\trect,\n\t\tclip: childClip,\n\t\tchildren: [childBox],\n\t\tscrollView,\n\t\tscrollContentLines: renderCached(context, node.component, contentWidth),\n\t\tlayer: 0,\n\t};\n\tchildBox.parent = box;\n\tupdateClips(childBox, childClip);\n\treturn box;\n}\n\nfunction layoutVerticalStack(request: ComponentLayoutRequest, node: StackLayoutNode): LayoutBox {\n\tconst { context, component, x, y, width, height, clip } = request;\n\tconst entries = visibleStackEntries(node.entries, context.viewport);\n\tconst intrinsicHeights = entries.map((entry) =>\n\t\ttypeof entry.basis === \"number\" ? entry.basis : measureHeight(context, entry.component, width),\n\t);\n\tconst sizes = allocateStackSizes(entries, intrinsicHeights, height, node.gap);\n\tconst gapTotal = Math.max(0, entries.length - 1) * node.gap;\n\tconst naturalHeight = sizes.reduce((sum, size) => sum + size, 0) + gapTotal;\n\tconst allocatedHeight = height === undefined ? naturalHeight : Math.max(0, Math.floor(height));\n\tconst rect = { x, y, width, height: allocatedHeight };\n\tconst box: LayoutBox = {\n\t\tcomponent,\n\t\trect,\n\t\tclip: intersect(clip, rect),\n\t\tchildren: [],\n\t\tlayer: 0,\n\t};\n\tlet childY = y;\n\tfor (let index = 0; index < entries.length; index++) {\n\t\tbox.children.push(\n\t\t\twithParent(\n\t\t\t\tlayoutComponent(context, entries[index]!.component, x, childY, width, sizes[index]!, box.clip),\n\t\t\t\tbox,\n\t\t\t),\n\t\t);\n\t\tchildY += sizes[index]! + node.gap;\n\t}\n\treturn box;\n}\n\nfunction layoutHorizontalStack(request: ComponentLayoutRequest, node: StackLayoutNode): LayoutBox {\n\tconst { context, component, x, y, width, height, clip } = request;\n\tconst entries = visibleStackEntries(node.entries, context.viewport);\n\tconst intrinsicWidths = entries.map((entry) =>\n\t\ttypeof entry.basis === \"number\" ? entry.basis : measureWidth(context, entry.component, width),\n\t);\n\tconst widths = allocateStackSizes(entries, intrinsicWidths, width, node.gap);\n\tconst intrinsicHeights = entries.map((entry, index) =>\n\t\tmeasureHeight(context, entry.component, Math.max(1, widths[index]!)),\n\t);\n\tconst allocatedHeight =\n\t\theight === undefined\n\t\t\t? intrinsicHeights.reduce((max, childHeight) => Math.max(max, childHeight), 0)\n\t\t\t: Math.max(0, height);\n\tconst rect = { x, y, width, height: allocatedHeight };\n\tconst box: LayoutBox = {\n\t\tcomponent,\n\t\trect,\n\t\tclip: intersect(clip, rect),\n\t\tchildren: [],\n\t\tlayer: 0,\n\t};\n\tlet childX = x;\n\tfor (let index = 0; index < entries.length; index++) {\n\t\tconst naturalChildHeight = intrinsicHeights[index]!;\n\t\tconst childHeight = node.align === \"stretch\" ? allocatedHeight : Math.min(allocatedHeight, naturalChildHeight);\n\t\tlet childY = y;\n\t\tif (node.align === \"center\") childY += Math.floor((allocatedHeight - childHeight) / 2);\n\t\telse if (node.align === \"end\") childY += allocatedHeight - childHeight;\n\t\tconst childWidth = widths[index]!;\n\t\tif (childWidth === 0) {\n\t\t\tbox.children.push({\n\t\t\t\tcomponent: entries[index]!.component,\n\t\t\t\trect: { x: childX, y: childY, width: 0, height: childHeight },\n\t\t\t\tclip: { x: childX, y: childY, width: 0, height: 0 },\n\t\t\t\tchildren: [],\n\t\t\t\tparent: box,\n\t\t\t\tlayer: 0,\n\t\t\t});\n\t\t} else {\n\t\t\tbox.children.push(\n\t\t\t\twithParent(\n\t\t\t\t\tlayoutComponent(context, entries[index]!.component, childX, childY, childWidth, childHeight, box.clip),\n\t\t\t\t\tbox,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tchildX += childWidth + node.gap;\n\t}\n\treturn box;\n}\n\nfunction layoutComponent(\n\tcontext: LayoutContext,\n\tcomponent: Component,\n\tx: number,\n\ty: number,\n\twidth: number,\n\theight: number | undefined,\n\tclip: LayoutRect,\n): LayoutBox {\n\tconst request = { context, component, x, y, width: Math.max(1, Math.floor(width)), height, clip };\n\tconst node = getLayoutNode(component);\n\tif (!node) return layoutLeafComponent(request);\n\tswitch (node.type) {\n\t\tcase \"scroll\":\n\t\t\treturn layoutScrollComponent(request, node);\n\t\tcase \"vstack\":\n\t\t\treturn layoutVerticalStack(request, node);\n\t\tcase \"hstack\":\n\t\t\treturn layoutHorizontalStack(request, node);\n\t}\n}\n\nfunction styleScrollbarCell(line: string, column: number, totalWidth: number, style: (text: string) => string): string {\n\tif (isImageLine(line)) return line;\n\n\tconst graphemeRange = getGraphemeCellRange(line, column);\n\tconst start = graphemeRange?.start ?? column;\n\tconst end = graphemeRange?.end ?? column + 1;\n\tconst before = sliceByColumn(line, 0, start, true);\n\tconst target = sliceByColumn(line, start, end - start, true);\n\tconst after = sliceByColumn(line, end, Math.max(0, totalWidth - end), true);\n\n\tlet targetPrefix = \"\";\n\tlet targetIndex = 0;\n\twhile (targetIndex < target.length) {\n\t\tconst ansi = extractAnsiCode(target, targetIndex);\n\t\tif (!ansi) break;\n\t\ttargetPrefix += ansi.code;\n\t\ttargetIndex += ansi.length;\n\t}\n\tconst targetText = target.slice(targetIndex) || \" \".repeat(end - start);\n\tconst beforePadding = \" \".repeat(Math.max(0, start - visibleWidth(before)));\n\treturn `${before}${beforePadding}${targetPrefix}${style(targetText)}${after}`;\n}\n\nexport function getScrollbarGeometry(box: LayoutBox): ScrollbarGeometry | undefined {\n\tif (!box.scrollView?.isScrollbarVisible || box.rect.width <= 0 || box.rect.height <= 0) return undefined;\n\n\tconst contentHeight = box.children[0]?.rect.height ?? box.scrollContentLines?.length ?? 0;\n\tconst trackHeight = box.rect.height;\n\tconst minThumbHeight = Math.min(2, trackHeight);\n\tconst thumbHeight = Math.max(\n\t\tminThumbHeight,\n\t\tMath.min(trackHeight, Math.round((trackHeight * trackHeight) / contentHeight)),\n\t);\n\tconst maxScrollTop = Math.max(0, contentHeight - trackHeight);\n\tconst maxThumbTop = trackHeight - thumbHeight;\n\tconst thumbOffset = maxScrollTop === 0 ? 0 : Math.round((box.scrollView.scrollTop / maxScrollTop) * maxThumbTop);\n\tconst column = box.rect.x + box.rect.width - 1;\n\tif (column < box.clip.x || column >= box.clip.x + box.clip.width) return undefined;\n\n\treturn {\n\t\tcolumn,\n\t\ttrackTop: box.rect.y,\n\t\ttrackHeight,\n\t\tthumbTop: box.rect.y + thumbOffset,\n\t\tthumbHeight,\n\t\tmaxScrollTop,\n\t};\n}\n\nfunction paintScrollbar(box: LayoutBox, screen: string[], totalWidth: number): void {\n\tconst geometry = getScrollbarGeometry(box);\n\tif (!geometry || !box.scrollView) return;\n\n\tfor (let offset = 0; offset < geometry.thumbHeight; offset++) {\n\t\tconst row = geometry.thumbTop + offset;\n\t\tif (row < box.clip.y || row >= box.clip.y + box.clip.height || row < 0 || row >= screen.length) continue;\n\t\tscreen[row] = styleScrollbarCell(screen[row] ?? \"\", geometry.column, totalWidth, box.scrollView.scrollbarStyle);\n\t}\n}\n\nfunction boxFillsViewportWidth(box: LayoutBox, totalWidth: number): boolean {\n\treturn box.rect.x === 0 && box.rect.width >= totalWidth && box.clip.x === 0 && box.clip.width >= totalWidth;\n}\n\nfunction cropBoxImageLine(line: string, row: number, box: LayoutBox, screenHeight: number): string {\n\tconst imageMetadata = getKittyImageMetadata(line);\n\tif (!imageMetadata) return line;\n\tconst clipBottom = Math.min(screenHeight, box.clip.y + box.clip.height);\n\tconst visibleRows = Math.min(imageMetadata.rows, clipBottom - row);\n\treturn visibleRows < imageMetadata.rows ? cropKittyImageLine(line, 0, visibleRows) : line;\n}\n\nfunction paintBoxImageLine(box: LayoutBox, screen: string[], row: number, line: string, totalWidth: number): void {\n\tif (boxFillsViewportWidth(box, totalWidth)) {\n\t\tscreen[row] = line;\n\t\treturn;\n\t}\n\tif (box.clip.x !== box.rect.x || box.clip.width !== box.rect.width) return;\n\tscreen[row] = compositeTuiLine(screen[row] ?? \"\", line, box.rect.x, box.rect.width, totalWidth);\n}\n\nfunction paintBoxTextLine(box: LayoutBox, screen: string[], row: number, line: string, totalWidth: number): void {\n\tif (box.clip.width <= 0) return;\n\t// A full-width box painting onto an untouched row can retain the source line\n\t// reference. Recomposition would rebuild the row through ANSI/grapheme\n\t// segmentation on every frame. Keep over-wide sources on the clipping path\n\t// so LayoutFrame rows remain viewport-bounded.\n\tif (boxFillsViewportWidth(box, totalWidth) && !screen[row] && visibleWidth(line) <= totalWidth) {\n\t\tscreen[row] = line;\n\t\treturn;\n\t}\n\tconst sourceStart = Math.max(0, box.clip.x - box.rect.x);\n\tconst clippedLine = sliceByColumn(line, sourceStart, box.clip.width, true);\n\tscreen[row] = compositeTuiLine(screen[row] ?? \"\", clippedLine, box.clip.x, box.clip.width, totalWidth);\n}\n\nfunction paintBoxLine(box: LayoutBox, screen: string[], row: number, sourceLine: string, totalWidth: number): void {\n\tconst line = cropBoxImageLine(sourceLine.replace(OSC133_ZONE_PREFIX, \"\"), row, box, screen.length);\n\tif (isImageLine(line)) {\n\t\tpaintBoxImageLine(box, screen, row, line, totalWidth);\n\t\treturn;\n\t}\n\tpaintBoxTextLine(box, screen, row, line, totalWidth);\n}\n\nfunction paintBoxLines(box: LayoutBox, screen: string[], totalWidth: number): void {\n\tif (!box.lines) return;\n\tconst offset = box.lineOffset ?? 0;\n\tconst firstRow = Math.max(box.rect.y, box.clip.y, 0);\n\tconst lastRow = Math.min(box.rect.y + box.rect.height, box.clip.y + box.clip.height, screen.length);\n\tfor (let row = firstRow; row < lastRow; row++) {\n\t\tconst sourceLine = box.lines[offset + row - box.rect.y];\n\t\tif (sourceLine !== undefined) paintBoxLine(box, screen, row, sourceLine, totalWidth);\n\t}\n}\n\nfunction paintScrolledKittyImagePlacement(request: ScrolledKittyImagePaintRequest): void {\n\tconst { box, screen, totalWidth, scrollTop, imageLine, imageRow, imageRows } = request;\n\tconst targetRow = Math.max(0, box.rect.y, box.clip.y);\n\tconst hiddenRows = scrollTop - imageRow + (targetRow - box.rect.y);\n\tif (hiddenRows >= imageRows) return;\n\tconst clipBottom = Math.min(screen.length, box.rect.y + box.rect.height, box.clip.y + box.clip.height);\n\tconst visibleRows = Math.min(clipBottom - targetRow, imageRows - hiddenRows);\n\tif (visibleRows <= 0) return;\n\tconst cropped = cropKittyImageLine(imageLine, hiddenRows, visibleRows);\n\tif (boxFillsViewportWidth(box, totalWidth)) screen[targetRow] = cropped;\n}\n\nfunction paintScrolledKittyImage(box: LayoutBox, screen: string[], totalWidth: number): void {\n\tconst scrollView = box.scrollView;\n\tconst contentLines = box.scrollContentLines;\n\tif (!scrollView || !contentLines || scrollView.scrollTop <= 0 || box.rect.height <= 0) return;\n\tfor (let imageRow = scrollView.scrollTop - 1; imageRow >= 0; imageRow--) {\n\t\tconst imageLine = contentLines[imageRow] ?? \"\";\n\t\tconst metadata = getKittyImageMetadata(imageLine);\n\t\tif (metadata) {\n\t\t\tpaintScrolledKittyImagePlacement({\n\t\t\t\tbox,\n\t\t\t\tscreen,\n\t\t\t\ttotalWidth,\n\t\t\t\tscrollTop: scrollView.scrollTop,\n\t\t\t\timageLine,\n\t\t\t\timageRow,\n\t\t\t\timageRows: metadata.rows,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (imageLine !== \"\") return;\n\t}\n}\n\nfunction paintBox(box: LayoutBox, screen: string[], totalWidth: number): void {\n\tpaintBoxLines(box, screen, totalWidth);\n\tfor (const child of box.children) paintBox(child, screen, totalWidth);\n\tpaintScrolledKittyImage(box, screen, totalWidth);\n\tpaintScrollbar(box, screen, totalWidth);\n}\n\nexport function renderLayoutFrame(\n\troot: Component,\n\twidth: number,\n\theight: number,\n\trequestRender: () => void,\n): LayoutFrame {\n\tconst safeWidth = Math.max(1, Math.floor(width));\n\tconst safeHeight = Math.max(1, Math.floor(height));\n\tconst context: LayoutContext = {\n\t\tviewport: { width: safeWidth, height: safeHeight },\n\t\trenderCache: new Map(),\n\t\trequestRender,\n\t\tprimaryScrollView: undefined,\n\t};\n\tconst rootBox = layoutComponent(context, root, 0, 0, safeWidth, safeHeight, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: safeWidth,\n\t\theight: safeHeight,\n\t});\n\tconst lines = Array.from({ length: safeHeight }, () => \"\");\n\tpaintBox(rootBox, lines, safeWidth);\n\treturn {\n\t\troot: rootBox,\n\t\twidth: safeWidth,\n\t\theight: safeHeight,\n\t\tlines,\n\t\t...(context.primaryScrollView === undefined ? {} : { primaryScrollView: context.primaryScrollView }),\n\t};\n}\n\nfunction containsPoint(rect: LayoutRect, x: number, y: number): boolean {\n\treturn x >= rect.x && x < rect.x + rect.width && y >= rect.y && y < rect.y + rect.height;\n}\n\nexport function getScrollViewBox(frame: LayoutFrame, scrollView: ScrollView): LayoutBox | undefined {\n\tconst visit = (box: LayoutBox): LayoutBox | undefined => {\n\t\tif (box.scrollView === scrollView) return box;\n\t\tfor (const child of box.children) {\n\t\t\tconst match = visit(child);\n\t\t\tif (match) return match;\n\t\t}\n\t\treturn undefined;\n\t};\n\treturn visit(frame.root);\n}\n\nexport function getScrollViewsAt(frame: LayoutFrame, x: number, y: number): ScrollView[] {\n\tconst result: Array<{ scrollView: ScrollView; depth: number }> = [];\n\tconst visit = (box: LayoutBox, depth: number): void => {\n\t\tif (!containsPoint(box.clip, x, y)) return;\n\t\tif (box.scrollView && containsPoint(box.rect, x, y)) result.push({ scrollView: box.scrollView, depth });\n\t\tfor (const child of box.children) visit(child, depth + 1);\n\t};\n\tvisit(frame.root, 0);\n\tresult.sort((a, b) => b.depth - a.depth);\n\treturn result.map((entry) => entry.scrollView);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAI9D,OAAO,EAAE,KAAK,SAAS,EAAmC,MAAM,UAAU,CAAC;AAK3E,MAAM,WAAW,UAAU;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,iBAAiB,CAAC,EAAE,UAAU,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACrB;AA0PD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,SAAS,GAAG,iBAAiB,GAAG,SAAS,CAwBlF;AA+GD,wBAAgB,iBAAiB,CAChC,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,IAAI,GACvB,WAAW,CAwBb;AAMD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,CAUlG;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAUvF"}
|