Files
sjy01-image-proc/vendor/github.com/go-latex/latex/mtex/macros.go
2024-10-24 15:46:01 +08:00

359 lines
11 KiB
Go

// Copyright ©2020 The go-latex Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package mtex
import (
"strings"
"github.com/go-latex/latex/ast"
"github.com/go-latex/latex/tex"
)
type handlerFunc func(p *parser, node ast.Node, state tex.State, math bool) tex.Node
func (h handlerFunc) Handle(p *parser, node ast.Node, state tex.State, math bool) tex.Node {
return h(p, node, state, math)
}
type handler interface {
Handle(p *parser, node ast.Node, state tex.State, math bool) tex.Node
}
var (
builtinMacros = map[string]handler{
// binary operators
`\amalg`: builtinMacro(""),
`\ast`: builtinMacro(""),
`\bigcirc`: builtinMacro(""),
`\bigtriangledown`: builtinMacro(""),
`\bigtriangleup`: builtinMacro(""),
`\bullet`: builtinMacro(""),
`\cdot`: builtinMacro(""),
`\circ`: builtinMacro(""),
`\cap`: builtinMacro(""),
`\cup`: builtinMacro(""),
`\dagger`: builtinMacro(""),
`\ddagger`: builtinMacro(""),
`\diamond`: builtinMacro(""),
`\div`: builtinMacro(""),
`\lhd`: builtinMacro(""),
`\mp`: builtinMacro(""),
`\odot`: builtinMacro(""),
`\ominus`: builtinMacro(""),
`\oplus`: builtinMacro(""),
`\oslash`: builtinMacro(""),
`\otimes`: builtinMacro(""),
`\pm`: builtinMacro(""),
`\rhd`: builtinMacro(""),
`\setminus`: builtinMacro(""),
`\sqcap`: builtinMacro(""),
`\sqcup`: builtinMacro(""),
`\star`: builtinMacro(""),
`\times`: builtinMacro(""),
`\triangleleft`: builtinMacro(""),
`\triangleright`: builtinMacro(""),
`\uplus`: builtinMacro(""),
`\unlhd`: builtinMacro(""),
`\unrhd`: builtinMacro(""),
`\vee`: builtinMacro(""),
`\wedge`: builtinMacro(""),
`\wr`: builtinMacro(""),
// arithmetic operators
`\binom`: builtinMacro("AA"),
`\dfrac`: builtinMacro("AA"),
`\frac`: builtinMacro("AA"),
`\stackrel`: builtinMacro("AA"),
`\tfrac`: builtinMacro("AA"),
`\genfrac`: nil, // FIXME(sbinet)
// relation symbols
`\approx`: builtinMacro(""),
`\asymp`: builtinMacro(""),
`\bowtie`: builtinMacro(""),
`\cong`: builtinMacro(""),
`\dashv`: builtinMacro(""),
`\doteq`: builtinMacro(""),
`\doteqdot`: builtinMacro(""),
`\dotplus`: builtinMacro(""),
`\dots`: builtinMacro(""),
`\equiv`: builtinMacro(""),
`\frown`: builtinMacro(""),
`\geq`: builtinMacro(""),
`\gg`: builtinMacro(""),
`\in`: builtinMacro(""),
`\leq`: builtinMacro(""),
`\ll`: builtinMacro(""),
`\mid`: builtinMacro(""),
`\models`: builtinMacro(""),
`\neq`: builtinMacro(""),
`\ni`: builtinMacro(""),
`\parallel`: builtinMacro(""),
`\perp`: builtinMacro(""),
`\prec`: builtinMacro(""),
`\preceq`: builtinMacro(""),
`\propto`: builtinMacro(""),
`\sim`: builtinMacro(""),
`\simeq`: builtinMacro(""),
`\smile`: builtinMacro(""),
`\sqsubset`: builtinMacro(""),
`\sqsubseteq`: builtinMacro(""),
`\sqsupset`: builtinMacro(""),
`\sqsupseteq`: builtinMacro(""),
`\subset`: builtinMacro(""),
`\subseteq`: builtinMacro(""),
`\succ`: builtinMacro(""),
`\succeq`: builtinMacro(""),
`\supset`: builtinMacro(""),
`\supseteq`: builtinMacro(""),
`\vdash`: builtinMacro(""),
`\Join`: builtinMacro(""),
// arrow symbols
`\downarrow`: builtinMacro(""),
`\hookleftarrow`: builtinMacro(""),
`\hookrightarrow`: builtinMacro(""),
`\leadsto`: builtinMacro(""),
`\leftarrow`: builtinMacro(""),
`\leftharpoondown`: builtinMacro(""),
`\leftharpoonup`: builtinMacro(""),
`\leftrightarrow`: builtinMacro(""),
`\longleftarrow`: builtinMacro(""),
`\longleftrightarrow`: builtinMacro(""),
`\longmapsto`: builtinMacro(""),
`\longrightarrow`: builtinMacro(""),
`\rightarrow`: builtinMacro(""),
`\mapsto`: builtinMacro(""),
`\nearrow`: builtinMacro(""),
`\nwarrow`: builtinMacro(""),
`\rightharpoondown`: builtinMacro(""),
`\rightharpoonup`: builtinMacro(""),
`\rightleftharpoons`: builtinMacro(""),
`\searrow`: builtinMacro(""),
`\swarrow`: builtinMacro(""),
`\uparrow`: builtinMacro(""),
`\updownarrow`: builtinMacro(""),
`\Downarrow`: builtinMacro(""),
`\Leftarrow`: builtinMacro(""),
`\Leftrightarrow`: builtinMacro(""),
`\Longleftarrow`: builtinMacro(""),
`\Longleftrightarrow`: builtinMacro(""),
`\Longrightarrow`: builtinMacro(""),
`\Rightarrow`: builtinMacro(""),
`\Uparrow`: builtinMacro(""),
`\Updownarrow`: builtinMacro(""),
// punctuation symbols
`\ldotp`: builtinMacro(""),
`\cdotp`: builtinMacro(""),
// over-under symbols
`\bigcap`: builtinMacro(""),
`\bigcup`: builtinMacro(""),
`\bigodot`: builtinMacro(""),
`\bigoplus`: builtinMacro(""),
`\bigotimes`: builtinMacro(""),
`\bigsqcup`: builtinMacro(""),
`\biguplus`: builtinMacro(""),
`\bigvee`: builtinMacro(""),
`\bigwedge`: builtinMacro(""),
`\coprod`: builtinMacro(""),
`\prod`: builtinMacro(""),
`\sum`: builtinMacro(""),
// over-under functions
`\lim`: builtinMacro(""),
`\liminf`: builtinMacro(""),
`\limsup`: builtinMacro(""),
`\max`: builtinMacro(""),
`\min`: builtinMacro(""),
`\sup`: builtinMacro(""),
// dropsub symbols
`\int`: builtinMacro(""),
`\oint`: builtinMacro(""),
// font names
`\rm`: builtinMacro(""),
`\cal`: builtinMacro(""),
`\it`: builtinMacro(""),
`\tt`: builtinMacro(""),
`\sf`: builtinMacro(""),
`\bf`: builtinMacro(""),
`\default`: builtinMacro(""),
`\bb`: builtinMacro(""),
`\frak`: builtinMacro(""),
`\scr`: builtinMacro(""),
`\regular`: builtinMacro(""),
// function names
`\arccos`: builtinMacro(""),
`\arcsin`: builtinMacro(""),
`\arctan`: builtinMacro(""),
`\arg`: builtinMacro(""),
`\cos`: builtinMacro(""),
`\cosh`: builtinMacro(""),
`\cot`: builtinMacro(""),
`\coth`: builtinMacro(""),
`\csc`: builtinMacro(""),
`\deg`: builtinMacro(""),
`\det`: builtinMacro(""),
`\dim`: builtinMacro(""),
`\exp`: builtinMacro("A"),
`\gcd`: builtinMacro(""),
`\hom`: builtinMacro(""),
`\inf`: builtinMacro(""),
`\ker`: builtinMacro(""),
`\lg`: builtinMacro(""),
`\ln`: builtinMacro(""),
`\log`: builtinMacro(""),
`\sec`: builtinMacro(""),
`\sin`: builtinMacro(""),
`\sinh`: builtinMacro(""),
`\sqrt`: builtinMacro("OA"),
`\tan`: builtinMacro(""),
`\tanh`: builtinMacro(""),
`\Pr`: builtinMacro(""),
// ambi delim
`\backslash`: builtinMacro(""),
`\vert`: builtinMacro(""),
`\Vert`: builtinMacro(""),
// left delim
`\{`: builtinMacro(""),
`\(`: builtinMacro(""),
`(`: builtinMacro(""),
`\langle`: builtinMacro(""),
`\lceil`: builtinMacro(""),
`\lfloor`: builtinMacro(""),
// right delim
`\}`: builtinMacro(""),
`\)`: builtinMacro(""),
`)`: builtinMacro(""),
`\rangle`: builtinMacro(""),
`\rceil`: builtinMacro(""),
`\rfloor`: builtinMacro(""),
// symbols
`\alpha`: builtinMacro(""),
`\beta`: builtinMacro(""),
`\gamma`: builtinMacro(""),
`\delta`: builtinMacro(""),
`\iota`: builtinMacro(""),
`\epsilon`: builtinMacro(""),
`\eta`: builtinMacro(""),
`\kappa`: builtinMacro(""),
`\lambda`: builtinMacro(""),
`\mu`: builtinMacro(""),
`\nu`: builtinMacro(""),
`\omicron`: builtinMacro(""),
`\pi`: builtinMacro(""),
`\theta`: builtinMacro(""),
`\xi`: builtinMacro(""),
`\rho`: builtinMacro(""),
`\sigma`: builtinMacro(""),
`\tau`: builtinMacro(""),
`\upsilon`: builtinMacro(""),
`\phi`: builtinMacro(""),
`\chi`: builtinMacro(""),
`\psi`: builtinMacro(""),
`\omega`: builtinMacro(""),
`\zeta`: builtinMacro(""),
`\Alpha`: builtinMacro(""),
`\Beta`: builtinMacro(""),
`\Gamma`: builtinMacro(""),
`\Delta`: builtinMacro(""),
`\Epsilon`: builtinMacro(""),
`\Zeta`: builtinMacro(""),
`\Eta`: builtinMacro(""),
`\Theta`: builtinMacro(""),
`\Iota`: builtinMacro(""),
`\Kappa`: builtinMacro(""),
`\Lambda`: builtinMacro(""),
`\Mu`: builtinMacro(""),
`\Nu`: builtinMacro(""),
`\Xi`: builtinMacro(""),
`\Omicron`: builtinMacro(""),
`\Pi`: builtinMacro(""),
`\Rho`: builtinMacro(""),
`\Sigma`: builtinMacro(""),
`\Tau`: builtinMacro(""),
`\Upsilon`: builtinMacro(""),
`\Phi`: builtinMacro(""),
`\Chi`: builtinMacro(""),
`\Psi`: builtinMacro(""),
`\Omega`: builtinMacro(""),
`\hbar`: builtinMacro(""),
`\nabla`: builtinMacro(""),
// math font
`\mathbf`: builtinMacro("A"),
`\mathit`: builtinMacro("A"),
`\mathsf`: builtinMacro("A"),
`\mathtt`: builtinMacro("A"),
`\mathcal`: builtinMacro("A"),
`\mathdefault`: builtinMacro("A"),
`\mathbb`: builtinMacro("A"),
`\mathfrak`: builtinMacro("A"),
`\mathscr`: builtinMacro("A"),
`\mathregular`: builtinMacro("A"),
// text
`\textbf`: builtinMacro("A"),
`\textit`: builtinMacro("A"),
`\textsf`: builtinMacro("A"),
`\texttt`: builtinMacro("A"),
`\textcal`: builtinMacro("A"),
`\textdefault`: builtinMacro("A"),
`\textbb`: builtinMacro("A"),
`\textfrak`: builtinMacro("A"),
`\textscr`: builtinMacro("A"),
`\textregular`: builtinMacro("A"),
// space, symbols
`\ `: builtinMacro(""),
`\,`: builtinMacro(""),
`\;`: builtinMacro(""),
`\!`: builtinMacro(""),
`\quad`: builtinMacro(""),
`\qquad`: builtinMacro(""),
`\:`: builtinMacro(""),
`\cdots`: builtinMacro(""),
`\ddots`: builtinMacro(""),
`\ldots`: builtinMacro(""),
`\vdots`: builtinMacro(""),
`\hspace`: builtinMacro("A"),
// catch-all
//
`\overline`: builtinMacro("A"),
`\operatorname`: builtinMacro("A"),
}
)
type builtinMacro string
func (m builtinMacro) Handle(p *parser, n ast.Node, state tex.State, math bool) tex.Node {
node := n.(*ast.Macro)
if m == "" {
return tex.NewChar(node.Name.Name, state, math)
}
for _, typ := range strings.ToLower(string(m)) {
switch typ {
case 'a':
panic("not implemented")
case 'o':
panic("not implemented")
case 'v':
panic("not implemented")
}
}
return nil
}