...
1 package d
2
3 import (
4 . "github.com/alecthomas/chroma"
5 "github.com/alecthomas/chroma/lexers/b"
6 "github.com/alecthomas/chroma/lexers/internal"
7 "github.com/alecthomas/chroma/lexers/j"
8 )
9
10
11 var Docker = internal.Register(MustNewLazyLexer(
12 &Config{
13 Name: "Docker",
14 Aliases: []string{"docker", "dockerfile"},
15 Filenames: []string{"Dockerfile", "*.docker"},
16 MimeTypes: []string{"text/x-dockerfile-config"},
17 CaseInsensitive: true,
18 },
19 dockerRules,
20 ))
21
22 func dockerRules() Rules {
23 return Rules{
24 "root": {
25 {`#.*`, Comment, nil},
26 {`(ONBUILD)((?:\s*\\?\s*))`, ByGroups(Keyword, Using(b.Bash)), nil},
27 {`(HEALTHCHECK)(((?:\s*\\?\s*)--\w+=\w+(?:\s*\\?\s*))*)`, ByGroups(Keyword, Using(b.Bash)), nil},
28 {`(VOLUME|ENTRYPOINT|CMD|SHELL)((?:\s*\\?\s*))(\[.*?\])`, ByGroups(Keyword, Using(b.Bash), Using(j.JSON)), nil},
29 {`(LABEL|ENV|ARG)((?:(?:\s*\\?\s*)\w+=\w+(?:\s*\\?\s*))*)`, ByGroups(Keyword, Using(b.Bash)), nil},
30 {`((?:FROM|MAINTAINER|EXPOSE|WORKDIR|USER|STOPSIGNAL)|VOLUME)\b(.*)`, ByGroups(Keyword, LiteralString), nil},
31 {`((?:RUN|CMD|ENTRYPOINT|ENV|ARG|LABEL|ADD|COPY))`, Keyword, nil},
32 {`(.*\\\n)*.+`, Using(b.Bash), nil},
33 },
34 }
35 }
36
View as plain text