cheat/vendor/github.com/alecthomas/chroma/lexers/x/xml.go

50 lines
1.2 KiB
Go

package x
import (
. "github.com/alecthomas/chroma" // nolint
"github.com/alecthomas/chroma/lexers/internal"
)
// XML lexer.
var XML = internal.Register(MustNewLazyLexer(
&Config{
Name: "XML",
Aliases: []string{"xml"},
Filenames: []string{"*.xml", "*.xsl", "*.rss", "*.xslt", "*.xsd", "*.wsdl", "*.wsf", "*.svg", "*.csproj", "*.vcxproj", "*.fsproj"},
MimeTypes: []string{"text/xml", "application/xml", "image/svg+xml", "application/rss+xml", "application/atom+xml"},
DotAll: true,
},
xmlRules,
))
func xmlRules() Rules {
return Rules{
"root": {
{`[^<&]+`, Text, nil},
{`&\S*?;`, NameEntity, nil},
{`\<\!\[CDATA\[.*?\]\]\>`, CommentPreproc, nil},
{`<!--`, Comment, Push("comment")},
{`<\?.*?\?>`, CommentPreproc, nil},
{`<![^>]*>`, CommentPreproc, nil},
{`<\s*[\w:.-]+`, NameTag, Push("tag")},
{`<\s*/\s*[\w:.-]+\s*>`, NameTag, nil},
},
"comment": {
{`[^-]+`, Comment, nil},
{`-->`, Comment, Pop(1)},
{`-`, Comment, nil},
},
"tag": {
{`\s+`, Text, nil},
{`[\w.:-]+\s*=`, NameAttribute, Push("attr")},
{`/?\s*>`, NameTag, Pop(1)},
},
"attr": {
{`\s+`, Text, nil},
{`".*?"`, LiteralString, Pop(1)},
{`'.*?'`, LiteralString, Pop(1)},
{`[^\s>]+`, LiteralString, Pop(1)},
},
}
}