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))