123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- 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(MustNewLexer(
- &Config{
- Name: "Genshi Text",
- Aliases: []string{"genshitext"},
- Filenames: []string{},
- MimeTypes: []string{"application/x-genshi-text", "text/x-genshi"},
- },
- 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(MustNewLexer(
- &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(MustNewLexer(
- &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,
- ))
-
- var genshiMarkupRules = 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},
- },
- }
|