summaryrefslogtreecommitdiff
path: root/tex/context/base/x-asciimath.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/x-asciimath.lua')
-rw-r--r--tex/context/base/x-asciimath.lua1467
1 files changed, 659 insertions, 808 deletions
diff --git a/tex/context/base/x-asciimath.lua b/tex/context/base/x-asciimath.lua
index ee4fb5134..410479128 100644
--- a/tex/context/base/x-asciimath.lua
+++ b/tex/context/base/x-asciimath.lua
@@ -37,6 +37,7 @@ end
local type, rawget = type, rawget
local concat, insert, remove = table.concat, table.insert, table.remove
local rep, gmatch, gsub, find = string.rep, string.gmatch, string.gsub, string.find
+local utfchar = utf.char
local lpegmatch, patterns = lpeg.match, lpeg.patterns
local S, P, R, C, V, Cc, Ct, Cs = lpeg.S, lpeg.P, lpeg.R, lpeg.C, lpeg.V, lpeg.Cc, lpeg.Ct, lpeg.Cs
@@ -51,643 +52,630 @@ local xmltext = xml.text
local xmlinclusion = xml.inclusion
local xmlcollected = xml.collected
+-- todo: use private unicodes as temporary slots ... easier to compare
+
+local s_lparent = "\\left\\lparent"
+local s_lbrace = "\\left\\lbrace"
+local s_lbracket = "\\left\\lbracket"
+local s_langle = "\\left\\langle"
+local s_lfloor = "\\left\\lfloor"
+local s_lceil = "\\left\\lceil"
+local s_left = "\\left."
+
+local s_rparent = "\\right\\rparent"
+local s_rbrace = "\\right\\rbrace"
+local s_rbracket = "\\right\\rbracket"
+local s_rangle = "\\right\\rangle"
+local s_rfloor = "\\right\\rfloor"
+local s_rceil = "\\right\\rceil"
+local s_right = "\\right."
+
+local s_mslash = "\\middle/"
+
+local s_lbar = "\\left\\|"
+local s_mbar = "\\middle\\|"
+local s_rbar = "\\right\\|"
+
+local s_lnothing = "\\left ." -- space fools checker
+local s_rnothing = "\\right ." -- space fools checker
+
local reserved = {
- -- ["aleph"] = "\\aleph",
- -- ["vdots"] = "\\vdots",
- -- ["ddots"] = "\\ddots",
- -- ["oint"] = "\\oint",
- -- ["grad"] = "\\nabla",
- ["prod"] = "\\prod",
- -- ["prop"] = "\\propto",
- -- ["sube"] = "\\subseteq",
- -- ["supe"] = "\\supseteq",
- ["sinh"] = "\\sinh",
- ["cosh"] = "\\cosh",
- ["tanh"] = "\\tanh",
- ["sum"] = "\\sum",
- -- ["vvv"] = "\\vee",
- -- ["nnn"] = "\\cap",
- -- ["uuu"] = "\\cup",
- -- ["sub"] = "\\subset",
- -- ["sup"] = "\\supset",
- -- ["iff"] = "\\Leftrightarrow",
- ["int"] = "\\int",
- -- ["del"] = "\\partial",
- ["sin"] = "\\sin",
- ["cos"] = "\\cos",
- ["tan"] = "\\tan",
- ["csc"] = "\\csc",
- ["sec"] = "\\sec",
- ["cot"] = "\\cot",
- ["log"] = "\\log",
- ["det"] = "\\det",
- ["lim"] = "\\lim",
- ["mod"] = "\\mod",
- ["gcd"] = "\\gcd",
- -- ["lcm"] = "\\lcm", -- undefined in context
- ["min"] = "\\min",
- ["max"] = "\\max",
- -- ["xx"] = "\\times",
- ["in"] = "\\in",
- -- ["ox"] = "\\otimes",
- -- ["vv"] = "\\vee",
- -- ["nn"] = "\\cap",
- -- ["uu"] = "\\cup",
- -- ["oo"] = "\\infty",
- ["ln"] = "\\ln",
-
- -- ["not"] = "\\not",
- ["and"] = "\\text{and}",
- ["or"] = "\\text{or}",
- ["if"] = "\\text{if}",
-
- -- ["AA"] = "\\forall",
- -- ["EE"] = "\\exists",
- -- ["TT"] = "\\top",
-
- ["sqrt"] = "\\rootradical{}",
- ["root"] = "\\rootradical",
- ["frac"] = "\\frac",
- -- ["stackrel"] = "\\stackrel",
- ["stackrel"] = "\\asciimathstackrel",
- -- ["text"] = "\\asciimathoptext",
- -- ["bb"] = "\\bb",
- ["hat"] = "\\widehat",
- ["bar"] = "\\overbar",
- ["overbar"] = "\\overbar",
- ["underline"] = "\\underline",
- ["vec"] = "\\overrightarrow",
- ["dot"] = "\\dot",
- ["ddot"] = "\\ddot",
+
+ ["prod"] = { false, "\\prod" },
+ ["sinh"] = { false, "\\sinh" },
+ ["cosh"] = { false, "\\cosh" },
+ ["tanh"] = { false, "\\tanh" },
+ ["sum"] = { false, "\\sum" },
+ ["int"] = { false, "\\int" },
+ ["sin"] = { false, "\\sin" },
+ ["cos"] = { false, "\\cos" },
+ ["tan"] = { false, "\\tan" },
+ ["csc"] = { false, "\\csc" },
+ ["sec"] = { false, "\\sec" },
+ ["cot"] = { false, "\\cot" },
+ ["log"] = { false, "\\log" },
+ ["det"] = { false, "\\det" },
+ ["lim"] = { false, "\\lim" },
+ ["mod"] = { false, "\\mod" },
+ ["gcd"] = { false, "\\gcd" },
+ ["min"] = { false, "\\min" },
+ ["max"] = { false, "\\max" },
+ ["in"] = { false, "\\in" },
+ ["ln"] = { false, "\\ln" },
+
+ ["atan"] = { false, "\\atan" }, -- extra
+ ["acos"] = { false, "\\acos" }, -- extra
+ ["asin"] = { false, "\\asin" }, -- extra
+ -- extra
+ ["arctan"] = { false, "\\arctan" }, -- extra
+ ["arccos"] = { false, "\\arccos" }, -- extra
+ ["arcsin"] = { false, "\\arcsin" }, -- extra
+
+ ["and"] = { false, "\\text{and}" },
+ ["or"] = { false, "\\text{or}" },
+ ["if"] = { false, "\\text{if}" },
+
+ ["sqrt"] = { false, "\\rootradical{}", "unary" },
+ ["root"] = { false, "\\rootradical", "binary" },
+ ["frac"] = { false, "\\frac", "binary" },
+ ["stackrel"] = { false, "\\asciimathstackrel", "binary" },
+ ["hat"] = { false, "\\widehat", "unary" },
+ ["bar"] = { false, "\\overbar", "unary" },
+ ["overbar"] = { false, "\\overbar", "unary" },
+ ["underline"] = { false, "\\underline", "unary" },
+ ["vec"] = { false, "\\overrightarrow", "unary" },
+ ["dot"] = { false, "\\dot", "unary" }, -- 0x2D9
+ ["ddot"] = { false, "\\ddot", "unary" }, -- 0xA8
-- binary operators
- -- ["+"] = "+",
- -- ["-"] = "-",
- ["*"] = "⋅",
- ["**"] = "⋆",
- ["//"] = "\\slash",
- ["\\"] = "\\",
- ["xx"] = "×",
- ["times"] = "×",
- ["-:"] = "÷",
- ["@"] = "∘",
- ["o+"] = "⊕",
- ["ox"] = "⊗",
- ["o."] = "⊙",
- ["^^"] = "∧",
- ["vv"] = "∨",
- ["nn"] = "∩",
- ["uu"] = "∪",
+ ["+"] = { true, "+" },
+ ["-"] = { true, "-" },
+ ["*"] = { true, "⋅" },
+ ["**"] = { true, "⋆" },
+ ["//"] = { true, "⁄" }, -- \slash
+ ["\\"] = { true, "\\" },
+ ["xx"] = { true, "×" },
+ ["times"] = { true, "×" },
+ ["-:"] = { true, "÷" },
+ ["@"] = { true, "∘" },
+ ["o+"] = { true, "⊕" },
+ ["ox"] = { true, "⊗" },
+ ["o."] = { true, "⊙" },
+ ["^^"] = { true, "∧" },
+ ["vv"] = { true, "∨" },
+ ["nn"] = { true, "∩" },
+ ["uu"] = { true, "∪" },
-- big operators
- -- ["sum"] = "∑",
- -- ["prod"] = "∏",
- ["^^^"] = "⋀",
- ["vvv"] = "⋁",
- ["nnn"] = "⋂",
- ["uuu"] = "⋃",
- ["int"] = "∫",
- ["oint"] = "∮",
+ ["^^^"] = { true, "⋀" },
+ ["vvv"] = { true, "⋁" },
+ ["nnn"] = { true, "⋂" },
+ ["uuu"] = { true, "⋃" },
+ ["int"] = { true, "∫" },
+ ["oint"] = { true, "∮" },
-- brackets
- -- ["("] = "(,
- -- [")"] = "),
- -- ["["] = "[,
- -- ["]"] = "],
- -- ["{"] = "{,
- -- ["}"] = "},
- -- ["(:"] = "〈",
- -- [":)"] = "〉",
+ ["("] = { true, "(" },
+ [")"] = { true, ")" },
+ ["["] = { true, "[" },
+ ["]"] = { true, "]" },
+ ["{"] = { true, "{" },
+ ["}"] = { true, "}" },
-- binary relations
- ["="] = "=",
- ["eq"] = "=",
- ["!="] = "≠",
- ["ne"] = "≠",
- ["neq"] = "≠",
- ["<"] = "<",
- ["lt"] = "<",
- [">"] = ">",
- ["gt"] = ">",
- ["<="] = "≤",
- ["le"] = "≤",
- ["leq"] = "≤",
- [">="] = "≥",
- ["ge"] = "≥",
- ["geq"] = "≥",
- ["-<"] = "≺",
- [">-"] = "≻",
- ["in"] = "∈",
- ["!in"] = "∉",
- ["sub"] = "⊂",
- ["sup"] = "⊃",
- ["sube"] = "⊆",
- ["supe"] = "⊇",
- ["-="] = "≡",
- ["~="] = "≅",
- ["~~"] = "≈",
- ["prop"] = "∝",
+ ["="] = { true, "=" },
+ ["eq"] = { true, "=" },
+ ["!="] = { true, "≠" },
+ ["ne"] = { true, "≠" },
+ ["neq"] = { true, "≠" },
+ ["<"] = { true, "<" },
+ ["lt"] = { true, "<" },
+ [">"] = { true, ">" },
+ ["gt"] = { true, ">" },
+ ["<="] = { true, "≤" },
+ ["le"] = { true, "≤" },
+ ["leq"] = { true, "≤" },
+ [">="] = { true, "≥" },
+ ["ge"] = { true, "≥" },
+ ["geq"] = { true, "≥" },
+ ["-<"] = { true, "≺" },
+ [">-"] = { true, "≻" },
+ ["in"] = { true, "∈" },
+ ["!in"] = { true, "∉" },
+ ["sub"] = { true, "⊂" },
+ ["sup"] = { true, "⊃" },
+ ["sube"] = { true, "⊆" },
+ ["supe"] = { true, "⊇" },
+ ["-="] = { true, "≡" },
+ ["~="] = { true, "≅" },
+ ["~~"] = { true, "≈" },
+ ["prop"] = { true, "∝" },
-- arrows
- ["rarr"] = "→",
- ["->"] = "→",
- ["larr"] = "←",
- ["harr"] = "↔",
- ["uarr"] = "↑",
- ["darr"] = "↓",
- ["rArr"] = "⇒",
- ["lArr"] = "⇐",
- ["hArr"] = "⇔",
- ["|->"] = "↦",
+ ["rarr"] = { true, "→" },
+ ["->"] = { true, "→" },
+ ["larr"] = { true, "←" },
+ ["harr"] = { true, "↔" },
+ ["uarr"] = { true, "↑" },
+ ["darr"] = { true, "↓" },
+ ["rArr"] = { true, "⇒" },
+ ["lArr"] = { true, "⇐" },
+ ["hArr"] = { true, "⇔" },
+ ["|->"] = { true, "↦" },
-- logical
- -- ["and"] = "and",
- -- ["or"] = "or",
- -- ["if"] = "if",
- ["not"] = "¬",
- ["=>"] = "⇒",
- ["iff"] = "⇔",
- ["AA"] = "∀",
- ["EE"] = "∃",
- ["_|_"] = "⊥",
- ["TT"] = "⊤",
- ["|--"] = "⊢",
- ["|=="] = "⊨",
+ ["not"] = { true, "¬" },
+ ["=>"] = { true, "⇒" },
+ ["iff"] = { true, "⇔" },
+ ["AA"] = { true, "∀" },
+ ["EE"] = { true, "∃" },
+ ["_|_"] = { true, "⊥" },
+ ["TT"] = { true, "⊤" },
+ ["|--"] = { true, "⊢" },
+ ["|=="] = { true, "⊨" },
-- miscellaneous
- ["del"] = "∂",
- ["grad"] = "∇",
- ["+-"] = "±",
- ["O/"] = "∅",
- ["oo"] = "∞",
- ["aleph"] = "ℵ",
- ["angle"] = "∠",
- ["/_"] = "∠",
- [":."] = "∴",
- ["..."] = "...", -- ldots
- ["ldots"] = "...", -- ldots
- ["cdots"] = "⋯",
- ["vdots"] = "⋮",
- ["ddots"] = "⋱",
- ["diamond"] = "⋄",
- ["square"] = "□",
- ["|__"] = "⌊",
- ["__|"] = "⌋",
- ["|~"] = "⌈",
- ["~|"] = "⌉",
+ ["del"] = { true, "∂" },
+ ["grad"] = { true, "∇" },
+ ["+-"] = { true, "±" },
+ ["O/"] = { true, "∅" },
+ ["oo"] = { true, "∞" },
+ ["aleph"] = { true, "ℵ" },
+ ["angle"] = { true, "∠" },
+ ["/_"] = { true, "∠" },
+ [":."] = { true, "∴" },
+ ["..."] = { true, "..." }, -- ldots
+ ["ldots"] = { true, "..." }, -- ldots
+ ["cdots"] = { true, "⋯" },
+ ["vdots"] = { true, "⋮" },
+ ["ddots"] = { true, "⋱" },
+ ["diamond"] = { true, "⋄" },
+ ["square"] = { true, "□" },
+ ["|__"] = { true, "⌊" },
+ ["__|"] = { true, "⌋" },
+ ["|~"] = { true, "⌈" },
+ ["~|"] = { true, "⌉" },
- -- special
+ -- more
- ["%"] = "\\mathpercent",
- ["&"] = "\\mathampersand",
- ["#"] = "\\mathhash",
- ["$"] = "\\mathdollar",
+ ["_="] = { true, "≡" },
- -- more
- ["_="] = "≡",
+ -- bonus
+
+ ["prime"] = { true, "′" }, -- bonus
+ ["'"] = { true, "′" }, -- bonus
+ ["''"] = { true, "″" }, -- bonus
+ ["'''"] = { true, "‴" }, -- bonus
+
+ -- special
+
+ ["%"] = { false, "\\mathpercent" },
+ ["&"] = { false, "\\mathampersand" },
+ ["#"] = { false, "\\mathhash" },
+ ["$"] = { false, "\\mathdollar" },
-- blackboard
- ["CC"] = "ℂ",
- ["NN"] = "ℕ",
- ["QQ"] = "ℚ",
- ["RR"] = "ℝ",
- ["ZZ"] = "ℤ",
+ ["CC"] = { true, "ℂ" },
+ ["NN"] = { true, "ℕ" },
+ ["QQ"] = { true, "ℚ" },
+ ["RR"] = { true, "ℝ" },
+ ["ZZ"] = { true, "ℤ" },
-- greek lowercase
- alpha = "α",
- beta = "β",
- gamma = "γ",
- delta = "δ",
- epsilon = "ε",
- varepsilon = "ɛ",
- zeta = "ζ",
- eta = "η",
- theta = "θ",
- vartheta = "ϑ",
- iota = "ι",
- kappa = "κ",
- lambda = "λ",
- mu = "μ",
- nu = "ν",
- xi = "ξ",
- pi = "π",
- rho = "ρ",
- sigma = "σ",
- tau = "τ",
- upsilon = "υ",
- phi = "φ",
- varphi = "ϕ",
- chi = "χ",
- psi = "ψ",
- omega = "ω",
+ ["alpha"] = { true, "α" },
+ ["beta"] = { true, "β" },
+ ["gamma"] = { true, "γ" },
+ ["delta"] = { true, "δ" },
+ ["epsilon"] = { true, "ε" },
+ ["varepsilon"] = { true, "ɛ" },
+ ["zeta"] = { true, "ζ" },
+ ["eta"] = { true, "η" },
+ ["theta"] = { true, "θ" },
+ ["vartheta"] = { true, "ϑ" },
+ ["iota"] = { true, "ι" },
+ ["kappa"] = { true, "κ" },
+ ["lambda"] = { true, "λ" },
+ ["mu"] = { true, "μ" },
+ ["nu"] = { true, "ν" },
+ ["xi"] = { true, "ξ" },
+ ["pi"] = { true, "π" },
+ ["rho"] = { true, "ρ" },
+ ["sigma"] = { true, "σ" },
+ ["tau"] = { true, "τ" },
+ ["upsilon"] = { true, "υ" },
+ ["phi"] = { true, "φ" },
+ ["varphi"] = { true, "ϕ" },
+ ["chi"] = { true, "χ" },
+ ["psi"] = { true, "ψ" },
+ ["omega"] = { true, "ω" },
-- greek uppercase
- Gamma = "Γ",
- Delta = "Δ",
- Theta = "Θ",
- Lambda = "Λ",
- Xi = "Ξ",
- Pi = "Π",
- Sigma = "Σ",
- Phi = "Φ",
- Psi = "Ψ",
- Omega = "Ω",
-
- -- alternatively we could just inject a style switch + following character
+ ["Gamma"] = { true, "Γ" },
+ ["Delta"] = { true, "Δ" },
+ ["Theta"] = { true, "Θ" },
+ ["Lambda"] = { true, "Λ" },
+ ["Xi"] = { true, "Ξ" },
+ ["Pi"] = { true, "Π" },
+ ["Sigma"] = { true, "Σ" },
+ ["Phi"] = { true, "Φ" },
+ ["Psi"] = { true, "Ψ" },
+ ["Omega"] = { true, "Ω" },
-- blackboard
- ["bbb a"] = "𝕒",
- ["bbb b"] = "𝕓",
- ["bbb c"] = "𝕔",
- ["bbb d"] = "𝕕",
- ["bbb e"] = "𝕖",
- ["bbb f"] = "𝕗",
- ["bbb g"] = "𝕘",
- ["bbb h"] = "𝕙",
- ["bbb i"] = "𝕚",
- ["bbb j"] = "𝕛",
- ["bbb k"] = "𝕜",
- ["bbb l"] = "𝕝",
- ["bbb m"] = "𝕞",
- ["bbb n"] = "𝕟",
- ["bbb o"] = "𝕠",
- ["bbb p"] = "𝕡",
- ["bbb q"] = "𝕢",
- ["bbb r"] = "𝕣",
- ["bbb s"] = "𝕤",
- ["bbb t"] = "𝕥",
- ["bbb u"] = "𝕦",
- ["bbb v"] = "𝕧",
- ["bbb w"] = "𝕨",
- ["bbb x"] = "𝕩",
- ["bbb y"] = "𝕪",
- ["bbb z"] = "𝕫",
-
- ["bbb A"] = "𝔸",
- ["bbb B"] = "𝔹",
- ["bbb C"] = "ℂ",
- ["bbb D"] = "𝔻",
- ["bbb E"] = "𝔼",
- ["bbb F"] = "𝔽",
- ["bbb G"] = "𝔾",
- ["bbb H"] = "ℍ",
- ["bbb I"] = "𝕀",
- ["bbb J"] = "𝕁",
- ["bbb K"] = "𝕂",
- ["bbb L"] = "𝕃",
- ["bbb M"] = "𝕄",
- ["bbb N"] = "ℕ",
- ["bbb O"] = "𝕆",
- ["bbb P"] = "ℙ",
- ["bbb Q"] = "ℚ",
- ["bbb R"] = "ℝ",
- ["bbb S"] = "𝕊",
- ["bbb T"] = "𝕋",
- ["bbb U"] = "𝕌",
- ["bbb V"] = "𝕍",
- ["bbb W"] = "𝕎",
- ["bbb X"] = "𝕏",
- ["bbb Y"] = "𝕐",
- ["bbb Z"] = "ℤ",
+ ["bbb a"] = { true, "𝕒" },
+ ["bbb b"] = { true, "𝕓" },
+ ["bbb c"] = { true, "𝕔" },
+ ["bbb d"] = { true, "𝕕" },
+ ["bbb e"] = { true, "𝕖" },
+ ["bbb f"] = { true, "𝕗" },
+ ["bbb g"] = { true, "𝕘" },
+ ["bbb h"] = { true, "𝕙" },
+ ["bbb i"] = { true, "𝕚" },
+ ["bbb j"] = { true, "𝕛" },
+ ["bbb k"] = { true, "𝕜" },
+ ["bbb l"] = { true, "𝕝" },
+ ["bbb m"] = { true, "𝕞" },
+ ["bbb n"] = { true, "𝕟" },
+ ["bbb o"] = { true, "𝕠" },
+ ["bbb p"] = { true, "𝕡" },
+ ["bbb q"] = { true, "𝕢" },
+ ["bbb r"] = { true, "𝕣" },
+ ["bbb s"] = { true, "𝕤" },
+ ["bbb t"] = { true, "𝕥" },
+ ["bbb u"] = { true, "𝕦" },
+ ["bbb v"] = { true, "𝕧" },
+ ["bbb w"] = { true, "𝕨" },
+ ["bbb x"] = { true, "𝕩" },
+ ["bbb y"] = { true, "𝕪" },
+ ["bbb z"] = { true, "𝕫" },
+
+ ["bbb A"] = { true, "𝔸" },
+ ["bbb B"] = { true, "𝔹" },
+ ["bbb C"] = { true, "ℂ" },
+ ["bbb D"] = { true, "𝔻" },
+ ["bbb E"] = { true, "𝔼" },
+ ["bbb F"] = { true, "𝔽" },
+ ["bbb G"] = { true, "𝔾" },
+ ["bbb H"] = { true, "ℍ" },
+ ["bbb I"] = { true, "𝕀" },
+ ["bbb J"] = { true, "𝕁" },
+ ["bbb K"] = { true, "𝕂" },
+ ["bbb L"] = { true, "𝕃" },
+ ["bbb M"] = { true, "𝕄" },
+ ["bbb N"] = { true, "ℕ" },
+ ["bbb O"] = { true, "𝕆" },
+ ["bbb P"] = { true, "ℙ" },
+ ["bbb Q"] = { true, "ℚ" },
+ ["bbb R"] = { true, "ℝ" },
+ ["bbb S"] = { true, "𝕊" },
+ ["bbb T"] = { true, "𝕋" },
+ ["bbb U"] = { true, "𝕌" },
+ ["bbb V"] = { true, "𝕍" },
+ ["bbb W"] = { true, "𝕎" },
+ ["bbb X"] = { true, "𝕏" },
+ ["bbb Y"] = { true, "𝕐" },
+ ["bbb Z"] = { true, "ℤ" },
-- fraktur
- ["fr a"] = "𝔞",
- ["fr b"] = "𝔟",
- ["fr c"] = "𝔠",
- ["fr d"] = "𝔡",
- ["fr e"] = "𝔢",
- ["fr f"] = "𝔣",
- ["fr g"] = "𝔤",
- ["fr h"] = "𝔥",
- ["fr i"] = "𝔦",
- ["fr j"] = "𝔧",
- ["fr k"] = "𝔨",
- ["fr l"] = "𝔩",
- ["fr m"] = "𝔪",
- ["fr n"] = "𝔫",
- ["fr o"] = "𝔬",
- ["fr p"] = "𝔭",
- ["fr q"] = "𝔮",
- ["fr r"] = "𝔯",
- ["fr s"] = "𝔰",
- ["fr t"] = "𝔱",
- ["fr u"] = "𝔲",
- ["fr v"] = "𝔳",
- ["fr w"] = "𝔴",
- ["fr x"] = "𝔵",
- ["fr y"] = "𝔶",
- ["fr z"] = "𝔷",
-
- ["fr A"] = "𝔄",
- ["fr B"] = "𝔅",
- ["fr C"] = "ℭ",
- ["fr D"] = "𝔇",
- ["fr E"] = "𝔈",
- ["fr F"] = "𝔉",
- ["fr G"] = "𝔊",
- ["fr H"] = "ℌ",
- ["fr I"] = "ℑ",
- ["fr J"] = "𝔍",
- ["fr K"] = "𝔎",
- ["fr L"] = "𝔏",
- ["fr M"] = "𝔐",
- ["fr N"] = "𝔑",
- ["fr O"] = "𝔒",
- ["fr P"] = "𝔓",
- ["fr Q"] = "𝔔",
- ["fr R"] = "ℜ",
- ["fr S"] = "𝔖",
- ["fr T"] = "𝔗",
- ["fr U"] = "𝔘",
- ["fr V"] = "𝔙",
- ["fr W"] = "𝔚",
- ["fr X"] = "𝔛",
- ["fr Y"] = "𝔜",
- ["fr Z"] = "ℨ",
+ ["fr a"] = { true, "𝔞" },
+ ["fr b"] = { true, "𝔟" },
+ ["fr c"] = { true, "𝔠" },
+ ["fr d"] = { true, "𝔡" },
+ ["fr e"] = { true, "𝔢" },
+ ["fr f"] = { true, "𝔣" },
+ ["fr g"] = { true, "𝔤" },
+ ["fr h"] = { true, "𝔥" },
+ ["fr i"] = { true, "𝔦" },
+ ["fr j"] = { true, "𝔧" },
+ ["fr k"] = { true, "𝔨" },
+ ["fr l"] = { true, "𝔩" },
+ ["fr m"] = { true, "𝔪" },
+ ["fr n"] = { true, "𝔫" },
+ ["fr o"] = { true, "𝔬" },
+ ["fr p"] = { true, "𝔭" },
+ ["fr q"] = { true, "𝔮" },
+ ["fr r"] = { true, "𝔯" },
+ ["fr s"] = { true, "𝔰" },
+ ["fr t"] = { true, "𝔱" },
+ ["fr u"] = { true, "𝔲" },
+ ["fr v"] = { true, "𝔳" },
+ ["fr w"] = { true, "𝔴" },
+ ["fr x"] = { true, "𝔵" },
+ ["fr y"] = { true, "𝔶" },
+ ["fr z"] = { true, "𝔷" },
+
+ ["fr A"] = { true, "𝔄" },
+ ["fr B"] = { true, "𝔅" },
+ ["fr C"] = { true, "ℭ" },
+ ["fr D"] = { true, "𝔇" },
+ ["fr E"] = { true, "𝔈" },
+ ["fr F"] = { true, "𝔉" },
+ ["fr G"] = { true, "𝔊" },
+ ["fr H"] = { true, "ℌ" },
+ ["fr I"] = { true, "ℑ" },
+ ["fr J"] = { true, "𝔍" },
+ ["fr K"] = { true, "𝔎" },
+ ["fr L"] = { true, "𝔏" },
+ ["fr M"] = { true, "𝔐" },
+ ["fr N"] = { true, "𝔑" },
+ ["fr O"] = { true, "𝔒" },
+ ["fr P"] = { true, "𝔓" },
+ ["fr Q"] = { true, "𝔔" },
+ ["fr R"] = { true, "ℜ" },
+ ["fr S"] = { true, "𝔖" },
+ ["fr T"] = { true, "𝔗" },
+ ["fr U"] = { true, "𝔘" },
+ ["fr V"] = { true, "𝔙" },
+ ["fr W"] = { true, "𝔚" },
+ ["fr X"] = { true, "𝔛" },
+ ["fr Y"] = { true, "𝔜" },
+ ["fr Z"] = { true, "ℨ" },
-- script
- ["cc a"] = "𝒶",
- ["cc b"] = "𝒷",
- ["cc c"] = "𝒸",
- ["cc d"] = "𝒹",
- ["cc e"] = "ℯ",
- ["cc f"] = "𝒻",
- ["cc g"] = "ℊ",
- ["cc h"] = "𝒽",
- ["cc i"] = "𝒾",
- ["cc j"] = "𝒿",
- ["cc k"] = "𝓀",
- ["cc l"] = "𝓁",
- ["cc m"] = "𝓂",
- ["cc n"] = "𝓃",
- ["cc o"] = "ℴ",
- ["cc p"] = "𝓅",
- ["cc q"] = "𝓆",
- ["cc r"] = "𝓇",
- ["cc s"] = "𝓈",
- ["cc t"] = "𝓉",
- ["cc u"] = "𝓊",
- ["cc v"] = "𝓋",
- ["cc w"] = "𝓌",
- ["cc x"] = "𝓍",
- ["cc y"] = "𝓎",
- ["cc z"] = "𝓏",
-
- ["cc A"] = "𝒜",
- ["cc B"] = "ℬ",
- ["cc C"] = "𝒞",
- ["cc D"] = "𝒟",
- ["cc E"] = "ℰ",
- ["cc F"] = "ℱ",
- ["cc G"] = "𝒢",
- ["cc H"] = "ℋ",
- ["cc I"] = "ℐ",
- ["cc J"] = "𝒥",
- ["cc K"] = "𝒦",
- ["cc L"] = "ℒ",
- ["cc M"] = "ℳ",
- ["cc N"] = "𝒩",
- ["cc O"] = "𝒪",
- ["cc P"] = "𝒫",
- ["cc Q"] = "𝒬",
- ["cc R"] = "ℛ",
- ["cc S"] = "𝒮",
- ["cc T"] = "𝒯",
- ["cc U"] = "𝒰",
- ["cc V"] = "𝒱",
- ["cc W"] = "𝒲",
- ["cc X"] = "𝒳",
- ["cc Y"] = "𝒴",
- ["cc Z"] = "𝒵",
+ ["cc a"] = { true, "𝒶" },
+ ["cc b"] = { true, "𝒷" },
+ ["cc c"] = { true, "𝒸" },
+ ["cc d"] = { true, "𝒹" },
+ ["cc e"] = { true, "ℯ" },
+ ["cc f"] = { true, "𝒻" },
+ ["cc g"] = { true, "ℊ" },
+ ["cc h"] = { true, "𝒽" },
+ ["cc i"] = { true, "𝒾" },
+ ["cc j"] = { true, "𝒿" },
+ ["cc k"] = { true, "𝓀" },
+ ["cc l"] = { true, "𝓁" },
+ ["cc m"] = { true, "𝓂" },
+ ["cc n"] = { true, "𝓃" },
+ ["cc o"] = { true, "ℴ" },
+ ["cc p"] = { true, "𝓅" },
+ ["cc q"] = { true, "𝓆" },
+ ["cc r"] = { true, "𝓇" },
+ ["cc s"] = { true, "𝓈" },
+ ["cc t"] = { true, "𝓉" },
+ ["cc u"] = { true, "𝓊" },
+ ["cc v"] = { true, "𝓋" },
+ ["cc w"] = { true, "𝓌" },
+ ["cc x"] = { true, "𝓍" },
+ ["cc y"] = { true, "𝓎" },
+ ["cc z"] = { true, "𝓏" },
+
+ ["cc A"] = { true, "𝒜" },
+ ["cc B"] = { true, "ℬ" },
+ ["cc C"] = { true, "𝒞" },
+ ["cc D"] = { true, "𝒟" },
+ ["cc E"] = { true, "ℰ" },
+ ["cc F"] = { true, "ℱ" },
+ ["cc G"] = { true, "𝒢" },
+ ["cc H"] = { true, "ℋ" },
+ ["cc I"] = { true, "ℐ" },
+ ["cc J"] = { true, "𝒥" },
+ ["cc K"] = { true, "𝒦" },
+ ["cc L"] = { true, "ℒ" },
+ ["cc M"] = { true, "ℳ" },
+ ["cc N"] = { true, "𝒩" },
+ ["cc O"] = { true, "𝒪" },
+ ["cc P"] = { true, "𝒫" },
+ ["cc Q"] = { true, "𝒬" },
+ ["cc R"] = { true, "ℛ" },
+ ["cc S"] = { true, "𝒮" },
+ ["cc T"] = { true, "𝒯" },
+ ["cc U"] = { true, "𝒰" },
+ ["cc V"] = { true, "𝒱" },
+ ["cc W"] = { true, "𝒲" },
+ ["cc X"] = { true, "𝒳" },
+ ["cc Y"] = { true, "𝒴" },
+ ["cc Z"] = { true, "𝒵" },
-- bold
- ["bb a"] = "𝒂",
- ["bb b"] = "𝒃",
- ["bb c"] = "𝒄",
- ["bb d"] = "𝒅",
- ["bb e"] = "𝒆",
- ["bb f"] = "𝒇",
- ["bb g"] = "𝒈",
- ["bb h"] = "𝒉",
- ["bb i"] = "𝒊",
- ["bb j"] = "𝒋",
- ["bb k"] = "𝒌",
- ["bb l"] = "𝒍",
- ["bb m"] = "𝒎",
- ["bb n"] = "𝒏",
- ["bb o"] = "𝒐",
- ["bb p"] = "𝒑",
- ["bb q"] = "𝒒",
- ["bb r"] = "𝒓",
- ["bb s"] = "𝒔",
- ["bb t"] = "𝒕",
- ["bb u"] = "𝒖",
- ["bb v"] = "𝒗",
- ["bb w"] = "𝒘",
- ["bb x"] = "𝒙",
- ["bb y"] = "𝒚",
- ["bb z"] = "𝒛",
-
- ["bb A"] = "𝑨",
- ["bb B"] = "𝑩",
- ["bb C"] = "𝑪",
- ["bb D"] = "𝑫",
- ["bb E"] = "𝑬",
- ["bb F"] = "𝑭",
- ["bb G"] = "𝑮",
- ["bb H"] = "𝑯",
- ["bb I"] = "𝑰",
- ["bb J"] = "𝑱",
- ["bb K"] = "𝑲",
- ["bb L"] = "𝑳",
- ["bb M"] = "𝑴",
- ["bb N"] = "𝑵",
- ["bb O"] = "𝑶",
- ["bb P"] = "𝑷",
- ["bb Q"] = "𝑸",
- ["bb R"] = "𝑹",
- ["bb S"] = "𝑺",
- ["bb T"] = "𝑻",
- ["bb U"] = "𝑼",
- ["bb V"] = "𝑽",
- ["bb W"] = "𝑾",
- ["bb X"] = "𝑿",
- ["bb Y"] = "𝒀",
- ["bb Z"] = "𝒁",
+ ["bb a"] = { true, "𝒂" },
+ ["bb b"] = { true, "𝒃" },
+ ["bb c"] = { true, "𝒄" },
+ ["bb d"] = { true, "𝒅" },
+ ["bb e"] = { true, "𝒆" },
+ ["bb f"] = { true, "𝒇" },
+ ["bb g"] = { true, "𝒈" },
+ ["bb h"] = { true, "𝒉" },
+ ["bb i"] = { true, "𝒊" },
+ ["bb j"] = { true, "𝒋" },
+ ["bb k"] = { true, "𝒌" },
+ ["bb l"] = { true, "𝒍" },
+ ["bb m"] = { true, "𝒎" },
+ ["bb n"] = { true, "𝒏" },
+ ["bb o"] = { true, "𝒐" },
+ ["bb p"] = { true, "𝒑" },
+ ["bb q"] = { true, "𝒒" },
+ ["bb r"] = { true, "𝒓" },
+ ["bb s"] = { true, "𝒔" },
+ ["bb t"] = { true, "𝒕" },
+ ["bb u"] = { true, "𝒖" },
+ ["bb v"] = { true, "𝒗" },
+ ["bb w"] = { true, "𝒘" },
+ ["bb x"] = { true, "𝒙" },
+ ["bb y"] = { true, "𝒚" },
+ ["bb z"] = { true, "𝒛" },
+
+ ["bb A"] = { true, "𝑨" },
+ ["bb B"] = { true, "𝑩" },
+ ["bb C"] = { true, "𝑪" },
+ ["bb D"] = { true, "𝑫" },
+ ["bb E"] = { true, "𝑬" },
+ ["bb F"] = { true, "𝑭" },
+ ["bb G"] = { true, "𝑮" },
+ ["bb H"] = { true, "𝑯" },
+ ["bb I"] = { true, "𝑰" },
+ ["bb J"] = { true, "𝑱" },
+ ["bb K"] = { true, "𝑲" },
+ ["bb L"] = { true, "𝑳" },
+ ["bb M"] = { true, "𝑴" },
+ ["bb N"] = { true, "𝑵" },
+ ["bb O"] = { true, "𝑶" },
+ ["bb P"] = { true, "𝑷" },
+ ["bb Q"] = { true, "𝑸" },
+ ["bb R"] = { true, "𝑹" },
+ ["bb S"] = { true, "𝑺" },
+ ["bb T"] = { true, "𝑻" },
+ ["bb U"] = { true, "𝑼" },
+ ["bb V"] = { true, "𝑽" },
+ ["bb W"] = { true, "𝑾" },
+ ["bb X"] = { true, "𝑿" },
+ ["bb Y"] = { true, "𝒀" },
+ ["bb Z"] = { true, "𝒁" },
-- sans
- ["sf a"] = "𝖺",
- ["sf b"] = "𝖻",
- ["sf c"] = "𝖼",
- ["sf d"] = "𝖽",
- ["sf e"] = "𝖾",
- ["sf f"] = "𝖿",
- ["sf g"] = "𝗀",
- ["sf h"] = "𝗁",
- ["sf i"] = "𝗂",
- ["sf j"] = "𝗃",
- ["sf k"] = "𝗄",
- ["sf l"] = "𝗅",
- ["sf m"] = "𝗆",
- ["sf n"] = "𝗇",
- ["sf o"] = "𝗈",
- ["sf p"] = "𝗉",
- ["sf q"] = "𝗊",
- ["sf r"] = "𝗋",
- ["sf s"] = "𝗌",
- ["sf t"] = "𝗍",
- ["sf u"] = "𝗎",
- ["sf v"] = "𝗏",
- ["sf w"] = "𝗐",
- ["sf x"] = "𝗑",
- ["sf y"] = "𝗒",
- ["sf z"] = "𝗓",
-
- ["sf A"] = "𝖠",
- ["sf B"] = "𝖡",
- ["sf C"] = "𝖢",
- ["sf D"] = "𝖣",
- ["sf E"] = "𝖤",
- ["sf F"] = "𝖥",
- ["sf G"] = "𝖦",
- ["sf H"] = "𝖧",
- ["sf I"] = "𝖨",
- ["sf J"] = "𝖩",
- ["sf K"] = "𝖪",
- ["sf L"] = "𝖫",
- ["sf M"] = "𝖬",
- ["sf N"] = "𝖭",
- ["sf O"] = "𝖮",
- ["sf P"] = "𝖯",
- ["sf Q"] = "𝖰",
- ["sf R"] = "𝖱",
- ["sf S"] = "𝖲",
- ["sf T"] = "𝖳",
- ["sf U"] = "𝖴",
- ["sf V"] = "𝖵",
- ["sf W"] = "𝖶",
- ["sf X"] = "𝖷",
- ["sf Y"] = "𝖸",
- ["sf Z"] = "𝖹",
+ ["sf a"] = { true, "𝖺" },
+ ["sf b"] = { true, "𝖻" },
+ ["sf c"] = { true, "𝖼" },
+ ["sf d"] = { true, "𝖽" },
+ ["sf e"] = { true, "𝖾" },
+ ["sf f"] = { true, "𝖿" },
+ ["sf g"] = { true, "𝗀" },
+ ["sf h"] = { true, "𝗁" },
+ ["sf i"] = { true, "𝗂" },
+ ["sf j"] = { true, "𝗃" },
+ ["sf k"] = { true, "𝗄" },
+ ["sf l"] = { true, "𝗅" },
+ ["sf m"] = { true, "𝗆" },
+ ["sf n"] = { true, "𝗇" },
+ ["sf o"] = { true, "𝗈" },
+ ["sf p"] = { true, "𝗉" },
+ ["sf q"] = { true, "𝗊" },
+ ["sf r"] = { true, "𝗋" },
+ ["sf s"] = { true, "𝗌" },
+ ["sf t"] = { true, "𝗍" },
+ ["sf u"] = { true, "𝗎" },
+ ["sf v"] = { true, "𝗏" },
+ ["sf w"] = { true, "𝗐" },
+ ["sf x"] = { true, "𝗑" },
+ ["sf y"] = { true, "𝗒" },
+ ["sf z"] = { true, "𝗓" },
+
+ ["sf A"] = { true, "𝖠" },
+ ["sf B"] = { true, "𝖡" },
+ ["sf C"] = { true, "𝖢" },
+ ["sf D"] = { true, "𝖣" },
+ ["sf E"] = { true, "𝖤" },
+ ["sf F"] = { true, "𝖥" },
+ ["sf G"] = { true, "𝖦" },
+ ["sf H"] = { true, "𝖧" },
+ ["sf I"] = { true, "𝖨" },
+ ["sf J"] = { true, "𝖩" },
+ ["sf K"] = { true, "𝖪" },
+ ["sf L"] = { true, "𝖫" },
+ ["sf M"] = { true, "𝖬" },
+ ["sf N"] = { true, "𝖭" },
+ ["sf O"] = { true, "𝖮" },
+ ["sf P"] = { true, "𝖯" },
+ ["sf Q"] = { true, "𝖰" },
+ ["sf R"] = { true, "𝖱" },
+ ["sf S"] = { true, "𝖲" },
+ ["sf T"] = { true, "𝖳" },
+ ["sf U"] = { true, "𝖴" },
+ ["sf V"] = { true, "𝖵" },
+ ["sf W"] = { true, "𝖶" },
+ ["sf X"] = { true, "𝖷" },
+ ["sf Y"] = { true, "𝖸" },
+ ["sf Z"] = { true, "𝖹" },
-- monospace
- ["tt a"] = "𝚊",
- ["tt b"] = "𝚋",
- ["tt c"] = "𝚌",
- ["tt d"] = "𝚍",
- ["tt e"] = "𝚎",
- ["tt f"] = "𝚏",
- ["tt g"] = "𝚐",
- ["tt h"] = "𝚑",
- ["tt i"] = "𝚒",
- ["tt j"] = "𝚓",
- ["tt k"] = "𝚔",
- ["tt l"] = "𝚕",
- ["tt m"] = "𝚖",
- ["tt n"] = "𝚗",
- ["tt o"] = "𝚘",
- ["tt p"] = "𝚙",
- ["tt q"] = "𝚚",
- ["tt r"] = "𝚛",
- ["tt s"] = "𝚜",
- ["tt t"] = "𝚝",
- ["tt u"] = "𝚞",
- ["tt v"] = "𝚟",
- ["tt w"] = "𝚠",
- ["tt x"] = "𝚡",
- ["tt y"] = "𝚢",
- ["tt z"] = "𝚣",
-
- ["tt A"] = "𝙰",
- ["tt B"] = "𝙱",
- ["tt C"] = "𝙲",
- ["tt D"] = "𝙳",
- ["tt E"] = "𝙴",
- ["tt F"] = "𝙵",
- ["tt G"] = "𝙶",
- ["tt H"] = "𝙷",
- ["tt I"] = "𝙸",
- ["tt J"] = "𝙹",
- ["tt K"] = "𝙺",
- ["tt L"] = "𝙻",
- ["tt M"] = "𝙼",
- ["tt N"] = "𝙽",
- ["tt O"] = "𝙾",
- ["tt P"] = "𝙿",
- ["tt Q"] = "𝚀",
- ["tt R"] = "𝚁",
- ["tt S"] = "𝚂",
- ["tt T"] = "𝚃",
- ["tt U"] = "𝚄",
- ["tt V"] = "𝚅",
- ["tt W"] = "𝚆",
- ["tt X"] = "𝚇",
- ["tt Y"] = "𝚈",
- ["tt Z"] = "𝚉",
+ ["tt a"] = { true, "𝚊" },
+ ["tt b"] = { true, "𝚋" },
+ ["tt c"] = { true, "𝚌" },
+ ["tt d"] = { true, "𝚍" },
+ ["tt e"] = { true, "𝚎" },
+ ["tt f"] = { true, "𝚏" },
+ ["tt g"] = { true, "𝚐" },
+ ["tt h"] = { true, "𝚑" },
+ ["tt i"] = { true, "𝚒" },
+ ["tt j"] = { true, "𝚓" },
+ ["tt k"] = { true, "𝚔" },
+ ["tt l"] = { true, "𝚕" },
+ ["tt m"] = { true, "𝚖" },
+ ["tt n"] = { true, "𝚗" },
+ ["tt o"] = { true, "𝚘" },
+ ["tt p"] = { true, "𝚙" },
+ ["tt q"] = { true, "𝚚" },
+ ["tt r"] = { true, "𝚛" },
+ ["tt s"] = { true, "𝚜" },
+ ["tt t"] = { true, "𝚝" },
+ ["tt u"] = { true, "𝚞" },
+ ["tt v"] = { true, "𝚟" },
+ ["tt w"] = { true, "𝚠" },
+ ["tt x"] = { true, "𝚡" },
+ ["tt y"] = { true, "𝚢" },
+ ["tt z"] = { true, "𝚣" },
+
+ ["tt A"] = { true, "𝙰" },
+ ["tt B"] = { true, "𝙱" },
+ ["tt C"] = { true, "𝙲" },
+ ["tt D"] = { true, "𝙳" },
+ ["tt E"] = { true, "𝙴" },
+ ["tt F"] = { true, "𝙵" },
+ ["tt G"] = { true, "𝙶" },
+ ["tt H"] = { true, "𝙷" },
+ ["tt I"] = { true, "𝙸" },
+ ["tt J"] = { true, "𝙹" },
+ ["tt K"] = { true, "𝙺" },
+ ["tt L"] = { true, "𝙻" },
+ ["tt M"] = { true, "𝙼" },
+ ["tt N"] = { true, "𝙽" },
+ ["tt O"] = { true, "𝙾" },
+ ["tt P"] = { true, "𝙿" },
+ ["tt Q"] = { true, "𝚀" },
+ ["tt R"] = { true, "𝚁" },
+ ["tt S"] = { true, "𝚂" },
+ ["tt T"] = { true, "𝚃" },
+ ["tt U"] = { true, "𝚄" },
+ ["tt V"] = { true, "𝚅" },
+ ["tt W"] = { true, "𝚆" },
+ ["tt X"] = { true, "𝚇" },
+ ["tt Y"] = { true, "𝚈" },
+ ["tt Z"] = { true, "𝚉" },
-- some more undocumented
- ["dx"] = { "d", "x" }, -- "{dx}" "\\left(dx\\right)"
- ["dy"] = { "d", "y" }, -- "{dy}" "\\left(dy\\right)"
- ["dz"] = { "d", "z" }, -- "{dz}" "\\left(dz\\right)"
-
- ["atan"] = "\\atan",
- ["acos"] = "\\acos",
- ["asin"] = "\\asin",
+ ["dx"] = { false, { "d", "x" } }, -- "{dx}" "\\left(dx\\right)"
+ ["dy"] = { false, { "d", "y" } }, -- "{dy}" "\\left(dy\\right)"
+ ["dz"] = { false, { "d", "z" } }, -- "{dz}" "\\left(dz\\right)"
- ["arctan"] = "\\arctan",
- ["arccos"] = "\\arccos",
- ["arcsin"] = "\\arcsin",
-
- ["prime"] = "′",
- ["'"] = "′",
- ["''"] = "″",
- ["'''"] = "‴",
}
local isbinary = {
["\\frac"] = true,
- ["\\root"] = true,
["\\rootradical"] = true,
- ["\\stackrel"] = true,
["\\asciimathstackrel"] = true,
}
local isunary = {
- ["\\sqrt"] = true,
- ["\\rootradical{}"] = true,
- -- ["\\bb"] = true,
- ["\\text"] = true, -- mathoptext
- ["\\mathoptext"] = true, -- mathoptext
- ["\\asciimathoptext"]= true, -- mathoptext
- ["\\hat"] = true, -- widehat
- ["\\widehat"] = true, -- widehat
- ["\\bar"] = true, --
- ["\\overbar"] = true, --
- ["\\underline"] = true, --
- ["\\vec"] = true, -- overrightarrow
- ["\\overrightarrow"] = true, -- overrightarrow
- ["\\dot"] = true, --
- ["\\ddot"] = true, --
-
--- ["^"] = true,
--- ["_"] = true,
+ ["\\sqrt"] = true,
+ ["\\rootradical{}"] = true,
+ ["\\text"] = true, -- mathoptext
+ ["\\mathoptext"] = true, -- mathoptext
+ ["\\asciimathoptext"] = true, -- mathoptext
+ ["\\hat"] = true, -- widehat
+ ["\\widehat"] = true, -- widehat
+ ["\\bar"] = true, --
+ ["\\overbar"] = true, --
+ ["\\underline"] = true, --
+ ["\\vec"] = true, -- overrightarrow
+ ["\\overrightarrow"] = true, -- overrightarrow
+ ["\\dot"] = true, --
+ ["\\ddot"] = true, --
}
@@ -701,18 +689,23 @@ local isinfix = {
}
local isleft = {
- ["\\left\\lparent"] = true,
- ["\\left\\lbrace"] = true,
- ["\\left\\lbracket"] = true,
- ["\\left\\langle"] = true,
- ["\\left."] = true,
+ [s_lparent] = true,
+ [s_lbrace] = true,
+ [s_lbracket] = true,
+ [s_langle] = true,
+ [s_lfloor] = true,
+ [s_lceil] = true,
+ [s_left] = true,
}
+
local isright = {
- ["\\right\\rparent"] = true,
- ["\\right\\rbrace"] = true,
- ["\\right\\rbracket"] = true,
- ["\\right\\rangle"] = true,
- ["\\right."] = true,
+ [s_rparent] = true,
+ [s_rbrace] = true,
+ [s_rbracket] = true,
+ [s_rangle] = true,
+ [s_rfloor] = true,
+ [s_rceil] = true,
+ [s_right] = true,
}
local issimplified = {
@@ -722,6 +715,11 @@ local p_number_base = patterns.cpnumber or patterns.cnumber or patterns.number
local p_number = C(p_number_base)
local p_spaces = patterns.whitespace
+local p_utf_base = patterns.utf8character
+local p_utf = C(p_utf_base)
+local p_entity_base = P("&") * ((1-P(";"))^2) * P(";")
+local p_entity = P("&") * (((1-P(";"))^2) / entities) * P(";")
+
----- p_number = Cs((patterns.cpnumber or patterns.cnumber or patterns.number)/function(s) return (gsub(s,",","{,}")) end)
local sign = P("-")^-1
@@ -734,29 +732,9 @@ local float = real * (P("E") * integer)^-1
-- local number = C(float + integer)
local p_number = C(float)
-local p_utf_base =
- patterns.utf8character
-local p_utf =
- C(p_utf_base)
-
-local p_entity_base =
- P("&") * ((1-P(";"))^2) * P(";")
-local p_entity =
- P("&") * (((1-P(";"))^2) / entities) * P(";")
-
--- This is (given the large match):
---
--- local s = sortedkeys(reserved)
--- local p = P(false)
--- for i=#s,1,-1 do
--- local k = s[i]
--- p = p + P(k)
--- end
--- local p_reserved = p / reserved
---
--- twice as slow as:
-
local k_reserved = sortedkeys(reserved)
+local k_commands = { }
+local k_unicode = { }
asciimath.keys = {
reserved = k_reserved
@@ -766,26 +744,25 @@ local k_reserved_different = { }
local k_reserved_words = { }
for k, v in sortedhash(reserved) do
- if k ~= v then
- k_reserved_different[#k_reserved_different+1] = k
+ local replacement = v[2]
+ if v[1] then
+ k_unicode[k] = replacement
+ else
+ if k ~= replacement then
+ k_reserved_different[#k_reserved_different+1] = k
+ end
end
if not find(k,"[^a-zA-Z]") then
k_reserved_words[#k_reserved_words+1] = k
end
+ k_commands[k] = replacement
end
local p_reserved =
- lpeg.utfchartabletopattern(k_reserved_different) / reserved
-
--- local p_text =
--- P("text")
--- * p_spaces^0
--- * Cc("\\mathoptext")
--- * ( -- maybe balanced
--- Cs((P("{") ) * (1-P("}"))^0 * P("}") )
--- + Cs((P("(")/"{") * (1-P(")"))^0 * (P(")")/"}"))
--- )
--- + Cc("\\mathoptext") * Cs(Cc("{") * patterns.undouble * Cc("}"))
+ lpeg.utfchartabletopattern(k_reserved_different) / k_commands
+
+local p_unicode =
+ lpeg.utfchartabletopattern(table.keys(k_unicode)) / k_unicode
local p_text =
P("text")
@@ -797,91 +774,55 @@ local p_text =
)
+ Cc("\\asciimathoptext") * Cs(Cc("{") * patterns.undouble * Cc("}"))
--- either map to \left<utf> or map to \left\name
-
--- local p_open = S("{[") * P(":")
--- local p_close = P(":") * S("]}")
-
--- local p_open_left = (S("{[") * P(":")) / "\\left."
--- local p_close_right = (P(":") * S("]}")) / "\\right."
-
--- local p_left =
--- P("(:") / "\\left\\langle"
--- + P("{:") / "\\left."
--- + P("[:") / "\\left."
--- + P("(") / "\\left\\lparent"
--- + P("[") / "\\left\\lbracket"
--- + P("{") / "\\left\\lbrace"
--- + P("<<") / "\\left\\langle" -- why not <:
--- + P("|_") / "\\left\\lfloor"
--- + P("|~") / "\\left\\lceil"
--- + P("⟨") / "\\left\\langle"
--- + P("〈") / "\\left\\langle"
--- + P("〈") / "\\left\\langle"
-
--- local p_right =
--- P(")") / "\\right\\rparent"
--- + P(":)") / "\\right\\rangle"
--- + P(":}") / "\\right."
--- + P(":]") / "\\right."
--- + P("]") / "\\right\\rbracket"
--- + P("}") / "\\right\\rbrace"
--- + P(">>") / "\\right\\rangle" -- why not :>
--- + P("~|") / "\\right\\rceil"
--- + P("_|") / "\\right\\rfloor"
--- + P("⟩") / "\\right\\rangle"
--- + P("〉") / "\\right\\rangle"
--- + P("〉") / "\\right\\rangle"
-
local m_left = {
- ["(:"] = "\\left\\langle",
- ["{:"] = "\\left.",
- ["[:"] = "\\left.",
- ["("] = "\\left\\lparent",
- ["["] = "\\left\\lbracket",
- ["{"] = "\\left\\lbrace",
- ["<<"] = "\\left\\langle", -- why not <:
- ["|_"] = "\\left\\lfloor",
- ["|~"] = "\\left\\lceil",
- ["⟨"] = "\\left\\langle",
- ["〈"] = "\\left\\langle",
- ["〈"] = "\\left\\langle",
+ ["(:"] = s_langle,
+ ["{:"] = s_left,
+ ["[:"] = s_left,
+ ["("] = s_lparent,
+ ["["] = s_lbracket,
+ ["{"] = s_lbrace,
+ ["<<"] = s_langle, -- why not <:
+ ["|_"] = s_lfloor,
+ ["|~"] = s_lceil,
+ ["⟨"] = s_langle,
+ ["〈"] = s_langle,
+ ["〈"] = s_langle,
--
- ["lparent"] = "\\left\\lparent",
- ["lbracket"] = "\\left\\lbracket",
- ["lbrace"] = "\\left\\lbrace",
- ["langle"] = "\\left\\langle",
- ["lfloor"] = "\\left\\lfloor",
- ["lceil"] = "\\left\\lceil",
+ ["lparent"] = s_lparent,
+ ["lbracket"] = s_lbracket,
+ ["lbrace"] = s_lbrace,
+ ["langle"] = s_langle,
+ ["lfloor"] = s_lfloor,
+ ["lceil"] = s_lceil,
}
local m_right = {
- [")"] = "\\right\\rparent",
- [":)"] = "\\right\\rangle",
- [":}"] = "\\right.",
- [":]"] = "\\right.",
- ["]"] = "\\right\\rbracket",
- ["}"] = "\\right\\rbrace",
- [">>"] = "\\right\\rangle", -- why not :>
- ["~|"] = "\\right\\rceil",
- ["_|"] = "\\right\\rfloor",
- ["⟩"] = "\\right\\rangle",
- ["〉"] = "\\right\\rangle",
- ["〉"] = "\\right\\rangle",
+ [")"] = s_rparent,
+ [":)"] = s_rangle,
+ [":}"] = s_right,
+ [":]"] = s_right,
+ ["]"] = s_rbracket,
+ ["}"] = s_rbrace,
+ [">>"] = s_rangle, -- why not :>
+ ["~|"] = s_rceil,
+ ["_|"] = s_rfloor,
+ ["⟩"] = s_rangle,
+ ["〉"] = s_rangle,
+ ["〉"] = s_rangle,
--
- ["rparent"] = "\\right\\rparent",
- ["rbracket"] = "\\right\\rbracket",
- ["rbrace"] = "\\right\\rbrace",
- ["rangle"] = "\\right\\rangle",
- ["rfloor"] = "\\right\\rfloor",
- ["rceil"] = "\\right\\rceil",
+ ["rparent"] = s_rparent,
+ ["rbracket"] = s_rbracket,
+ ["rbrace"] = s_rbrace,
+ ["rangle"] = s_rangle,
+ ["rfloor"] = s_rfloor,
+ ["rceil"] = s_rceil,
}
local islimits = {
["\\sum"] = true,
- ["∑"] = true,
+ -- ["∑"] = true,
["\\prod"] = true,
- ["∏"] = true,
+ -- ["∏"] = true,
["\\lim"] = true,
}
@@ -898,12 +839,12 @@ local p_right =
-- + P("\\ ") * Cc("\\space")
-- + P("\\\\") * Cc("\\backslash")
-- + P("\\") * (R("az","AZ")^1/entities)
--- + P("|") * Cc("\\|") -- "\\middle\\|" -- maybe always add left / right as in mml ?
+-- + P("|") * Cc("\\|")
--
-- faster bug also uglier:
local p_special =
- P("|") * Cc("\\|") -- "\\middle\\|" -- maybe always add left / right as in mml ?
+ P("|") * Cc("\\|") -- s_mbar -- maybe always add left / right as in mml ?
+ P("\\") * (
(
P(" ") * (
@@ -917,7 +858,14 @@ local p_special =
-- open | close :: {: | :}
-local parser = Ct { "tokenizer",
+local u_parser = Cs ( (
+ patterns.doublequoted +
+ P("text") * p_spaces^0 * P("(") * (1-P(")"))^0 * P(")") + -- -- todo: balanced
+ p_unicode +
+ p_utf_base
+)^0 )
+
+local a_parser = Ct { "tokenizer",
tokenizer = (
p_spaces
+ p_number
@@ -977,7 +925,7 @@ local function collapse_matrices(t)
end
end
if valid then
- local omit = l1 == "\\left." and r1 == "\\right."
+ local omit = l1 == s_left and r1 == s_right
if omit then
t[1] = "\\startmatrix"
else
@@ -1017,8 +965,8 @@ local function collapse_bars(t)
if current == "\\|" then
if l then
m = m + 1
- t[l] = "\\left\\|"
- t[i] = "\\right\\|"
+ t[l] = s_lbar
+ t[i] = s_rbar
t[m] = { unpack(t,l,i) }
l = false
else
@@ -1031,20 +979,20 @@ local function collapse_bars(t)
i = i + 1
end
if l then
- local tt = { "\\left ." } -- space fools final checker
+ local tt = { s_lnothing } -- space fools final checker
local tm = 1
for i=1,m do
tm = tm + 1
tt[tm] = t[i]
end
tm = tm + 1
- tt[tm] = "\\middle\\|"
+ tt[tm] = s_mbar
for i=l+1,n do
tm = tm + 1
tt[tm] = t[i]
end
tm = tm + 1
- tt[tm] = "\\right ." -- space fools final checker
+ tt[tm] = s_rnothing -- space fools final checker
m = tm
t = tt
elseif m < n then
@@ -1413,8 +1361,8 @@ local function collapse_fractions_2(t)
local n, m, i = #t, 0, 1
while i < n do
local current = t[i]
- if current == "\\slash" and i > 1 then
- t[m] = "{\\left." .. t[i-1] .. "\\middle/" .. t[i+1] .. "\\right.}"
+ if current == "⁄" and i > 1 then -- \slash
+ t[m] = "{" .. s_left .. t[i-1] .. s_mslash .. t[i+1] .. s_right .. "}"
i = i + 2
else
m = m + 1
@@ -1436,7 +1384,7 @@ end
local function collapse_result(t)
local n = #t
- if t[1] == "\\left." and t[n] == "\\right." then -- see bar .. space needed there
+ if t[1] == s_left and t[n] == s_right then -- see bar .. space needed there
return concat(t," ",2,n-1)
else
return concat(t," ")
@@ -1482,14 +1430,15 @@ local ctx_type = context and context.type or function() end
local ctx_inleft = context and context.inleft or function() end
local function convert(str,totex)
- local texcode = collapse(lpegmatch(parser,str))
+ local unicoded = lpegmatch(u_parser,str)
+ local texcoded = collapse(lpegmatch(a_parser,unicoded))
if trace_mapping then
- show_result(str,texcode)
+ show_result(str,texcoded)
end
if totex then
- ctx_mathematics(texcode)
+ ctx_mathematics(texcoded)
else
- return texcode
+ return texcoded
end
end
@@ -1497,7 +1446,7 @@ local n = 0
local p = (
(S("{[(") + P("\\left" )) / function() n = n + 1 end
+ (S("}])") + P("\\right")) / function() n = n - 1 end
- + P(1)
+ + p_utf_base
)^0
local function invalidtex(str)
@@ -1636,7 +1585,8 @@ local function convert(str)
if #str == 1 then
ctx_mathematics(str)
else
- local texcode = collapse(lpegmatch(parser,str))
+ local unicode = lpegmatch(u_parser,str)
+ local texcode = collapse(lpegmatch(a_parser,unicode))
if trace_mapping then
show_result(str,texcode)
end
@@ -1872,102 +1822,3 @@ end
function show.save(name)
table.save(name ~= "" and name or "dummy.lua",collected)
end
-
--- maybe:
-
--- \backslash \
--- \times ×
--- \divide ÷
--- \circ ∘
--- \oplus ⊕
--- \otimes ⊗
--- \sum ∑
--- \prod ∏
--- \wedge ∧
--- \bigwedge ⋀
--- \vee ∨
--- \bigvee ⋁
--- \cup ∪
--- \bigcup ⋃
--- \cap ∩
--- \bigcap ⋂
-
--- \ne ≠
--- \le ≤
--- \leq ≤
--- \ge ≥
--- \geq ≥
--- \prec ≺
--- \succ ≻
--- \in ∈
--- \notin ∉
--- \subset ⊂
--- \supset ⊃
--- \subseteq ⊆
--- \supseteq ⊇
--- \equiv ≡
--- \cong ≅
--- \approx ≈
--- \propto ∝
---
--- \neg ¬
--- \implies ⇒
--- \iff ⇔
--- \forall ∀
--- \exists ∃
--- \bot ⊥
--- \top ⊤
--- \vdash ⊢
--- \models ⊨
---
--- \int ∫
--- \oint ∮
--- \partial ∂
--- \nabla ∇
--- \pm ±
--- \emptyset ∅
--- \infty ∞
--- \aleph ℵ
--- \ldots ...
--- \cdots ⋯
--- \quad
--- \diamond ⋄
--- \square □
--- \lfloor ⌊
--- \rfloor ⌋
--- \lceiling ⌈
--- \rceiling ⌉
---
--- \sin sin
--- \cos cos
--- \tan tan
--- \csc csc
--- \sec sec
--- \cot cot
--- \sinh sinh
--- \cosh cosh
--- \tanh tanh
--- \log log
--- \ln ln
--- \det det
--- \dim dim
--- \lim lim
--- \mod mod
--- \gcd gcd
--- \lcm lcm
---
--- \uparrow ↑
--- \downarrow ↓
--- \rightarrow →
--- \to →
--- \leftarrow ←
--- \leftrightarrow ↔
--- \Rightarrow ⇒
--- \Leftarrow ⇐
--- \Leftrightarrow ⇔
---
--- \mathbf
--- \mathbb
--- \mathcal
--- \mathtt
--- \mathfrak