jungle.go

 1package j
 2
 3import (
 4	. "github.com/alecthomas/chroma" // nolint
 5	"github.com/alecthomas/chroma/lexers/internal"
 6)
 7
 8var Jungle = internal.Register(MustNewLexer(
 9	&Config{
10		Name:      "Jungle",
11		Aliases:   []string{"jungle"},
12		Filenames: []string{"*.jungle"},
13		MimeTypes: []string{"text/x-jungle"},
14	},
15	Rules{
16		"root": {
17			{`[^\S\n]+`, Text, nil},
18			{`\n`, Text, nil},
19			{`#(\n|[\w\W]*?[^#]\n)`, CommentSingle, nil},
20			{`^(?=\S)`, None, Push("instruction")},
21			{`[\.;\[\]\(\)\$]`, Punctuation, nil},
22			{`[a-zA-Z_]\w*`, Name, nil},
23		},
24		"instruction": {
25			{`[^\S\n]+`, Text, nil},
26			{`=`, Operator, Push("value")},
27			{`(?=\S)`, None, Push("var")},
28			Default(Pop(1)),
29		},
30		"value": {
31			{`[^\S\n]+`, Text, nil},
32			{`\$\(`, Punctuation, Push("var")},
33			{`[;\[\]\(\)\$]`, Punctuation, nil},
34			{`#(\n|[\w\W]*?[^#]\n)`, CommentSingle, nil},
35			{`[\w_\-\.\/\\]+`, Text, nil},
36			Default(Pop(1)),
37		},
38		"var": {
39			{`[^\S\n]+`, Text, nil},
40			{`\b(((re)?source|barrel)Path|excludeAnnotations|annotations|lang)\b`, NameBuiltin, nil},
41			{`\bbase\b`, NameConstant, nil},
42			{`\b(ind|zsm|hrv|ces|dan|dut|eng|fin|fre|deu|gre|hun|ita|nob|po[lr]|rus|sl[ov]|spa|swe|ara|heb|zh[st]|jpn|kor|tha|vie|bul|tur)`, NameConstant, nil},
43			{`\b((semi)?round|rectangle)(-\d+x\d+)?\b`, NameConstant, nil},
44			{`[\.;\[\]\(\$]`, Punctuation, nil},
45			{`\)`, Punctuation, Pop(1)},
46			{`[a-zA-Z_]\w*`, Name, nil},
47			Default(Pop(1)),
48		},
49	},
50))