cmake.go

 1package c
 2
 3import (
 4	. "github.com/alecthomas/chroma" // nolint
 5	"github.com/alecthomas/chroma/lexers/internal"
 6)
 7
 8// Cmake lexer.
 9var Cmake = internal.Register(MustNewLexer(
10	&Config{
11		Name:      "CMake",
12		Aliases:   []string{"cmake"},
13		Filenames: []string{"*.cmake", "CMakeLists.txt"},
14		MimeTypes: []string{"text/x-cmake"},
15	},
16	Rules{
17		"root": {
18			{`\b(\w+)([ \t]*)(\()`, ByGroups(NameBuiltin, Text, Punctuation), Push("args")},
19			Include("keywords"),
20			Include("ws"),
21		},
22		"args": {
23			{`\(`, Punctuation, Push()},
24			{`\)`, Punctuation, Pop(1)},
25			{`(\$\{)(.+?)(\})`, ByGroups(Operator, NameVariable, Operator), nil},
26			{`(\$ENV\{)(.+?)(\})`, ByGroups(Operator, NameVariable, Operator), nil},
27			{`(\$<)(.+?)(>)`, ByGroups(Operator, NameVariable, Operator), nil},
28			{`(?s)".*?"`, LiteralStringDouble, nil},
29			{`\\\S+`, LiteralString, nil},
30			{`[^)$"# \t\n]+`, LiteralString, nil},
31			{`\n`, Text, nil},
32			Include("keywords"),
33			Include("ws"),
34		},
35		"string": {},
36		"keywords": {
37			{`\b(WIN32|UNIX|APPLE|CYGWIN|BORLAND|MINGW|MSVC|MSVC_IDE|MSVC60|MSVC70|MSVC71|MSVC80|MSVC90)\b`, Keyword, nil},
38		},
39		"ws": {
40			{`[ \t]+`, Text, nil},
41			{`#.*\n`, Comment, nil},
42		},
43	},
44))