1package t
2
3import (
4	. "github.com/alecthomas/chroma" // nolint
5	"github.com/alecthomas/chroma/lexers/internal"
6)
7
8// Tex lexer.
9var TeX = internal.Register(MustNewLexer(
10	&Config{
11		Name:      "TeX",
12		Aliases:   []string{"tex", "latex"},
13		Filenames: []string{"*.tex", "*.aux", "*.toc"},
14		MimeTypes: []string{"text/x-tex", "text/x-latex"},
15	},
16	Rules{
17		"general": {
18			{`%.*?\n`, Comment, nil},
19			{`[{}]`, NameBuiltin, nil},
20			{`[&_^]`, NameBuiltin, nil},
21		},
22		"root": {
23			{`\\\[`, LiteralStringBacktick, Push("displaymath")},
24			{`\\\(`, LiteralString, Push("inlinemath")},
25			{`\$\$`, LiteralStringBacktick, Push("displaymath")},
26			{`\$`, LiteralString, Push("inlinemath")},
27			{`\\([a-zA-Z]+|.)`, Keyword, Push("command")},
28			{`\\$`, Keyword, nil},
29			Include("general"),
30			{`[^\\$%&_^{}]+`, Text, nil},
31		},
32		"math": {
33			{`\\([a-zA-Z]+|.)`, NameVariable, nil},
34			Include("general"),
35			{`[0-9]+`, LiteralNumber, nil},
36			{`[-=!+*/()\[\]]`, Operator, nil},
37			{`[^=!+*/()\[\]\\$%&_^{}0-9-]+`, NameBuiltin, nil},
38		},
39		"inlinemath": {
40			{`\\\)`, LiteralString, Pop(1)},
41			{`\$`, LiteralString, Pop(1)},
42			Include("math"),
43		},
44		"displaymath": {
45			{`\\\]`, LiteralString, Pop(1)},
46			{`\$\$`, LiteralString, Pop(1)},
47			{`\$`, NameBuiltin, nil},
48			Include("math"),
49		},
50		"command": {
51			{`\[.*?\]`, NameAttribute, nil},
52			{`\*`, Keyword, nil},
53			Default(Pop(1)),
54		},
55	},
56))
57