1 | package lexers
|
---|
2 |
|
---|
3 | import (
|
---|
4 | . "github.com/alecthomas/chroma/v2" // nolint
|
---|
5 | )
|
---|
6 |
|
---|
7 | // Genshi Text lexer.
|
---|
8 | var GenshiText = Register(MustNewLexer(
|
---|
9 | &Config{
|
---|
10 | Name: "Genshi Text",
|
---|
11 | Aliases: []string{"genshitext"},
|
---|
12 | Filenames: []string{},
|
---|
13 | MimeTypes: []string{"application/x-genshi-text", "text/x-genshi"},
|
---|
14 | },
|
---|
15 | genshiTextRules,
|
---|
16 | ))
|
---|
17 |
|
---|
18 | func genshiTextRules() Rules {
|
---|
19 | return Rules{
|
---|
20 | "root": {
|
---|
21 | {`[^#$\s]+`, Other, nil},
|
---|
22 | {`^(\s*)(##.*)$`, ByGroups(Text, Comment), nil},
|
---|
23 | {`^(\s*)(#)`, ByGroups(Text, CommentPreproc), Push("directive")},
|
---|
24 | Include("variable"),
|
---|
25 | {`[#$\s]`, Other, nil},
|
---|
26 | },
|
---|
27 | "directive": {
|
---|
28 | {`\n`, Text, Pop(1)},
|
---|
29 | {`(?:def|for|if)\s+.*`, Using("Python"), Pop(1)},
|
---|
30 | {`(choose|when|with)([^\S\n]+)(.*)`, ByGroups(Keyword, Text, Using("Python")), Pop(1)},
|
---|
31 | {`(choose|otherwise)\b`, Keyword, Pop(1)},
|
---|
32 | {`(end\w*)([^\S\n]*)(.*)`, ByGroups(Keyword, Text, Comment), Pop(1)},
|
---|
33 | },
|
---|
34 | "variable": {
|
---|
35 | {`(?<!\$)(\$\{)(.+?)(\})`, ByGroups(CommentPreproc, Using("Python"), CommentPreproc), nil},
|
---|
36 | {`(?<!\$)(\$)([a-zA-Z_][\w.]*)`, NameVariable, nil},
|
---|
37 | },
|
---|
38 | }
|
---|
39 | }
|
---|
40 |
|
---|
41 | // Html+Genshi lexer.
|
---|
42 | var GenshiHTMLTemplate = Register(MustNewLexer(
|
---|
43 | &Config{
|
---|
44 | Name: "Genshi HTML",
|
---|
45 | Aliases: []string{"html+genshi", "html+kid"},
|
---|
46 | Filenames: []string{},
|
---|
47 | MimeTypes: []string{"text/html+genshi"},
|
---|
48 | NotMultiline: true,
|
---|
49 | DotAll: true,
|
---|
50 | },
|
---|
51 | genshiMarkupRules,
|
---|
52 | ))
|
---|
53 |
|
---|
54 | // Genshi lexer.
|
---|
55 | var Genshi = Register(MustNewLexer(
|
---|
56 | &Config{
|
---|
57 | Name: "Genshi",
|
---|
58 | Aliases: []string{"genshi", "kid", "xml+genshi", "xml+kid"},
|
---|
59 | Filenames: []string{"*.kid"},
|
---|
60 | MimeTypes: []string{"application/x-genshi", "application/x-kid"},
|
---|
61 | NotMultiline: true,
|
---|
62 | DotAll: true,
|
---|
63 | },
|
---|
64 | genshiMarkupRules,
|
---|
65 | ))
|
---|
66 |
|
---|
67 | func genshiMarkupRules() Rules {
|
---|
68 | return Rules{
|
---|
69 | "root": {
|
---|
70 | {`[^<$]+`, Other, nil},
|
---|
71 | {`(<\?python)(.*?)(\?>)`, ByGroups(CommentPreproc, Using("Python"), CommentPreproc), nil},
|
---|
72 | {`<\s*(script|style)\s*.*?>.*?<\s*/\1\s*>`, Other, nil},
|
---|
73 | {`<\s*py:[a-zA-Z0-9]+`, NameTag, Push("pytag")},
|
---|
74 | {`<\s*[a-zA-Z0-9:.]+`, NameTag, Push("tag")},
|
---|
75 | Include("variable"),
|
---|
76 | {`[<$]`, Other, nil},
|
---|
77 | },
|
---|
78 | "pytag": {
|
---|
79 | {`\s+`, Text, nil},
|
---|
80 | {`[\w:-]+\s*=`, NameAttribute, Push("pyattr")},
|
---|
81 | {`/?\s*>`, NameTag, Pop(1)},
|
---|
82 | },
|
---|
83 | "pyattr": {
|
---|
84 | {`(")(.*?)(")`, ByGroups(LiteralString, Using("Python"), LiteralString), Pop(1)},
|
---|
85 | {`(')(.*?)(')`, ByGroups(LiteralString, Using("Python"), LiteralString), Pop(1)},
|
---|
86 | {`[^\s>]+`, LiteralString, Pop(1)},
|
---|
87 | },
|
---|
88 | "tag": {
|
---|
89 | {`\s+`, Text, nil},
|
---|
90 | {`py:[\w-]+\s*=`, NameAttribute, Push("pyattr")},
|
---|
91 | {`[\w:-]+\s*=`, NameAttribute, Push("attr")},
|
---|
92 | {`/?\s*>`, NameTag, Pop(1)},
|
---|
93 | },
|
---|
94 | "attr": {
|
---|
95 | {`"`, LiteralString, Push("attr-dstring")},
|
---|
96 | {`'`, LiteralString, Push("attr-sstring")},
|
---|
97 | {`[^\s>]*`, LiteralString, Pop(1)},
|
---|
98 | },
|
---|
99 | "attr-dstring": {
|
---|
100 | {`"`, LiteralString, Pop(1)},
|
---|
101 | Include("strings"),
|
---|
102 | {`'`, LiteralString, nil},
|
---|
103 | },
|
---|
104 | "attr-sstring": {
|
---|
105 | {`'`, LiteralString, Pop(1)},
|
---|
106 | Include("strings"),
|
---|
107 | {`'`, LiteralString, nil},
|
---|
108 | },
|
---|
109 | "strings": {
|
---|
110 | {`[^"'$]+`, LiteralString, nil},
|
---|
111 | Include("variable"),
|
---|
112 | },
|
---|
113 | "variable": {
|
---|
114 | {`(?<!\$)(\$\{)(.+?)(\})`, ByGroups(CommentPreproc, Using("Python"), CommentPreproc), nil},
|
---|
115 | {`(?<!\$)(\$)([a-zA-Z_][\w\.]*)`, NameVariable, nil},
|
---|
116 | },
|
---|
117 | }
|
---|
118 | }
|
---|