summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/alecthomas/chroma/lexers/g/genshi.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/alecthomas/chroma/lexers/g/genshi.go')
-rw-r--r--vendor/github.com/alecthomas/chroma/lexers/g/genshi.go120
1 files changed, 120 insertions, 0 deletions
diff --git a/vendor/github.com/alecthomas/chroma/lexers/g/genshi.go b/vendor/github.com/alecthomas/chroma/lexers/g/genshi.go
new file mode 100644
index 000000000..dc4d4b17d
--- /dev/null
+++ b/vendor/github.com/alecthomas/chroma/lexers/g/genshi.go
@@ -0,0 +1,120 @@
+package g
+
+import (
+ . "github.com/alecthomas/chroma" // nolint
+ "github.com/alecthomas/chroma/lexers/internal"
+ . "github.com/alecthomas/chroma/lexers/p"
+)
+
+// Genshi Text lexer.
+var GenshiText = internal.Register(MustNewLazyLexer(
+ &Config{
+ Name: "Genshi Text",
+ Aliases: []string{"genshitext"},
+ Filenames: []string{},
+ MimeTypes: []string{"application/x-genshi-text", "text/x-genshi"},
+ },
+ genshiTextRules,
+))
+
+func genshiTextRules() Rules {
+ return Rules{
+ "root": {
+ {`[^#$\s]+`, Other, nil},
+ {`^(\s*)(##.*)$`, ByGroups(Text, Comment), nil},
+ {`^(\s*)(#)`, ByGroups(Text, CommentPreproc), Push("directive")},
+ Include("variable"),
+ {`[#$\s]`, Other, nil},
+ },
+ "directive": {
+ {`\n`, Text, Pop(1)},
+ {`(?:def|for|if)\s+.*`, Using(Python), Pop(1)},
+ {`(choose|when|with)([^\S\n]+)(.*)`, ByGroups(Keyword, Text, Using(Python)), Pop(1)},
+ {`(choose|otherwise)\b`, Keyword, Pop(1)},
+ {`(end\w*)([^\S\n]*)(.*)`, ByGroups(Keyword, Text, Comment), Pop(1)},
+ },
+ "variable": {
+ {`(?<!\$)(\$\{)(.+?)(\})`, ByGroups(CommentPreproc, Using(Python), CommentPreproc), nil},
+ {`(?<!\$)(\$)([a-zA-Z_][\w.]*)`, NameVariable, nil},
+ },
+ }
+}
+
+// Html+Genshi lexer.
+var GenshiHTMLTemplate = internal.Register(MustNewLazyLexer(
+ &Config{
+ Name: "Genshi HTML",
+ Aliases: []string{"html+genshi", "html+kid"},
+ Filenames: []string{},
+ MimeTypes: []string{"text/html+genshi"},
+ NotMultiline: true,
+ DotAll: true,
+ },
+ genshiMarkupRules,
+))
+
+// Genshi lexer.
+var Genshi = internal.Register(MustNewLazyLexer(
+ &Config{
+ Name: "Genshi",
+ Aliases: []string{"genshi", "kid", "xml+genshi", "xml+kid"},
+ Filenames: []string{"*.kid"},
+ MimeTypes: []string{"application/x-genshi", "application/x-kid"},
+ NotMultiline: true,
+ DotAll: true,
+ },
+ genshiMarkupRules,
+))
+
+func genshiMarkupRules() Rules {
+ return Rules{
+ "root": {
+ {`[^<$]+`, Other, nil},
+ {`(<\?python)(.*?)(\?>)`, ByGroups(CommentPreproc, Using(Python), CommentPreproc), nil},
+ {`<\s*(script|style)\s*.*?>.*?<\s*/\1\s*>`, Other, nil},
+ {`<\s*py:[a-zA-Z0-9]+`, NameTag, Push("pytag")},
+ {`<\s*[a-zA-Z0-9:.]+`, NameTag, Push("tag")},
+ Include("variable"),
+ {`[<$]`, Other, nil},
+ },
+ "pytag": {
+ {`\s+`, Text, nil},
+ {`[\w:-]+\s*=`, NameAttribute, Push("pyattr")},
+ {`/?\s*>`, NameTag, Pop(1)},
+ },
+ "pyattr": {
+ {`(")(.*?)(")`, ByGroups(LiteralString, Using(Python), LiteralString), Pop(1)},
+ {`(')(.*?)(')`, ByGroups(LiteralString, Using(Python), LiteralString), Pop(1)},
+ {`[^\s>]+`, LiteralString, Pop(1)},
+ },
+ "tag": {
+ {`\s+`, Text, nil},
+ {`py:[\w-]+\s*=`, NameAttribute, Push("pyattr")},
+ {`[\w:-]+\s*=`, NameAttribute, Push("attr")},
+ {`/?\s*>`, NameTag, Pop(1)},
+ },
+ "attr": {
+ {`"`, LiteralString, Push("attr-dstring")},
+ {`'`, LiteralString, Push("attr-sstring")},
+ {`[^\s>]*`, LiteralString, Pop(1)},
+ },
+ "attr-dstring": {
+ {`"`, LiteralString, Pop(1)},
+ Include("strings"),
+ {`'`, LiteralString, nil},
+ },
+ "attr-sstring": {
+ {`'`, LiteralString, Pop(1)},
+ Include("strings"),
+ {`'`, LiteralString, nil},
+ },
+ "strings": {
+ {`[^"'$]+`, LiteralString, nil},
+ Include("variable"),
+ },
+ "variable": {
+ {`(?<!\$)(\$\{)(.+?)(\})`, ByGroups(CommentPreproc, Using(Python), CommentPreproc), nil},
+ {`(?<!\$)(\$)([a-zA-Z_][\w\.]*)`, NameVariable, nil},
+ },
+ }
+}