fixed dependencies

This commit is contained in:
nuknal
2024-10-24 15:46:01 +08:00
parent d16a5bd9c0
commit 1161e8d054
2005 changed files with 690883 additions and 0 deletions

266
vendor/github.com/go-latex/latex/ast/ast.go generated vendored Normal file
View File

@@ -0,0 +1,266 @@
// 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 ast declares the types used to represent syntax trees for
// LaTeX documents.
package ast // import "github.com/go-latex/latex/ast"
import (
"fmt"
"io"
"github.com/go-latex/latex/token"
)
// Node is a node in a LaTeX document.
type Node interface {
Pos() token.Pos // position of first character belonging to the node.
End() token.Pos // position of first character immediately after the node.
isNode()
}
// List is a collection of nodes.
type List []Node
func (x List) isNode() {}
func (x List) Pos() token.Pos {
if len(x) == 0 {
return -1
}
return x[0].Pos()
}
func (x List) End() token.Pos {
if len(x) == 0 {
return -1
}
return x[len(x)-1].End()
}
// Macro is a LaTeX macro.
// ex:
// \sqrt{a}
// \frac{num}{den}
type Macro struct {
Name *Ident
Args List
}
func (x *Macro) isNode() {}
func (x *Macro) Pos() token.Pos { return x.Name.Pos() }
func (x *Macro) End() token.Pos {
if len(x.Args) > 0 {
return x.Args[len(x.Args)-1].End()
}
return x.Name.End()
}
// Arg is an argument of a macro.
// ex:
// {a} in \sqrt{a}
type Arg struct {
Lbrace token.Pos // position of '{'
List List // or stmt?
Rbrace token.Pos // position of '}'
}
func (x *Arg) Pos() token.Pos { return x.Lbrace }
func (x *Arg) End() token.Pos { return x.Rbrace }
func (x *Arg) isNode() {}
// OptArg is an optional argument of a macro
// ex:
// [n] in \sqrt[n]{a}
type OptArg struct {
Lbrack token.Pos // position of '['
List List
Rbrack token.Pos // position of ']'
}
func (x *OptArg) Pos() token.Pos { return x.Lbrack }
func (x *OptArg) End() token.Pos { return x.Rbrack }
func (x *OptArg) isNode() {}
type Ident struct {
NamePos token.Pos // identifier position
Name string // identifier name
}
func (x *Ident) Pos() token.Pos { return x.NamePos }
func (x *Ident) End() token.Pos { return token.Pos(int(x.NamePos) + len(x.Name)) }
func (x *Ident) isNode() {}
// MathExpr is a math expression.
// ex:
// $f(x) \doteq \sqrt[n]{x}$
// \[ x^n + y^n = z^n \]
type MathExpr struct {
Delim string // delimiter used for this math expression.
Left token.Pos // position of opening '$', '\(', '\[' or '\begin{math}'
List List
Right token.Pos // position of closing '$', '\)', '\]' or '\end{math}'
}
func (x *MathExpr) isNode() {}
func (x *MathExpr) Pos() token.Pos { return x.Left }
func (x *MathExpr) End() token.Pos { return x.Right }
type Word struct {
WordPos token.Pos
Text string
}
func (x *Word) isNode() {}
func (x *Word) Pos() token.Pos { return x.WordPos }
func (x *Word) End() token.Pos { return token.Pos(int(x.WordPos) + len(x.Text)) }
type Literal struct {
LitPos token.Pos
Text string
}
func (x *Literal) isNode() {}
func (x *Literal) Pos() token.Pos { return x.LitPos }
func (x *Literal) End() token.Pos { return token.Pos(int(x.LitPos) + len(x.Text)) }
type Symbol struct {
SymPos token.Pos
Text string
}
func (x *Symbol) isNode() {}
func (x *Symbol) Pos() token.Pos { return x.SymPos }
func (x *Symbol) End() token.Pos { return token.Pos(int(x.SymPos) + len(x.Text)) }
// Sub is a subscript node.
//
// e.g.: \sum_{i=0}
type Sub struct {
UnderPos token.Pos
Node Node
}
func (x *Sub) isNode() {}
func (x *Sub) Pos() token.Pos { return x.UnderPos }
func (x *Sub) End() token.Pos { return x.Node.End() }
// Sup is a superscript node.
//
// e.g.: \sum^{n}
type Sup struct {
HatPos token.Pos
Node Node
}
func (x *Sup) isNode() {}
func (x *Sup) Pos() token.Pos { return x.HatPos }
func (x *Sup) End() token.Pos { return x.Node.End() }
// Print prints node to w.
func Print(o io.Writer, node Node) {
switch node := node.(type) {
case *Arg:
fmt.Fprintf(o, "{")
for i, n := range node.List {
if i > 0 {
fmt.Fprintf(o, ", ")
}
Print(o, n)
}
fmt.Fprintf(o, "}")
case *Ident:
fmt.Fprintf(o, "ast.Ident{%q}", node.Name)
case *Macro:
fmt.Fprintf(o, "ast.Macro{%q", node.Name.Name)
switch len(node.Args) {
case 0:
// no-op
default:
fmt.Fprintf(o, ", Args:")
for i, n := range node.Args {
if i > 0 {
fmt.Fprintf(o, ", ")
}
Print(o, n)
}
}
fmt.Fprintf(o, "}")
case *MathExpr:
fmt.Fprintf(o, "ast.MathExpr{")
switch len(node.List) {
case 0:
// no-op
default:
fmt.Fprintf(o, "List:")
for i, n := range node.List {
if i > 0 {
fmt.Fprintf(o, ", ")
}
Print(o, n)
}
}
fmt.Fprintf(o, "}")
case *OptArg:
fmt.Fprintf(o, "[")
for i, n := range node.List {
if i > 0 {
fmt.Fprintf(o, ", ")
}
Print(o, n)
}
fmt.Fprintf(o, "]")
case *Word:
fmt.Fprintf(o, "ast.Word{%q}", node.Text)
case *Literal:
fmt.Fprintf(o, "ast.Lit{%q}", node.Text)
case List:
fmt.Fprintf(o, "ast.List{")
for i, n := range node {
if i > 0 {
fmt.Fprintf(o, ", ")
}
Print(o, n)
}
fmt.Fprintf(o, "}")
case *Sub:
fmt.Fprintf(o, "ast.Sub{")
Print(o, node.Node)
fmt.Fprintf(o, "}")
case *Sup:
fmt.Fprintf(o, "ast.Sup{")
Print(o, node.Node)
fmt.Fprintf(o, "}")
case *Symbol:
fmt.Fprintf(o, "ast.Symbol{%q}", node.Text)
// case *Op:
// fmt.Fprintf(o, "ast.Op{%q}", node.Text)
case nil:
fmt.Fprintf(o, "<nil>")
default:
panic(fmt.Errorf("unknown node %T", node))
}
}
var (
_ Node = (*List)(nil)
_ Node = (*Arg)(nil)
_ Node = (*Ident)(nil)
_ Node = (*Macro)(nil)
_ Node = (*MathExpr)(nil)
_ Node = (*OptArg)(nil)
_ Node = (*Word)(nil)
_ Node = (*Literal)(nil)
_ Node = (*Sup)(nil)
_ Node = (*Sub)(nil)
_ Node = (*Symbol)(nil)
)