66
|
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 }
|