1package x 2 3import ( 4 . "github.com/alecthomas/chroma" // nolint 5 "github.com/alecthomas/chroma/lexers/internal" 6) 7 8// XML lexer. 9var XML = internal.Register(MustNewLazyLexer( 10 &Config{ 11 Name: "XML", 12 Aliases: []string{"xml"}, 13 Filenames: []string{"*.xml", "*.xsl", "*.rss", "*.xslt", "*.xsd", "*.wsdl", "*.wsf", "*.svg"}, 14 MimeTypes: []string{"text/xml", "application/xml", "image/svg+xml", "application/rss+xml", "application/atom+xml"}, 15 DotAll: true, 16 }, 17 xmlRules, 18)) 19 20func xmlRules() Rules { 21 return Rules{ 22 "root": { 23 {`[^<&]+`, Text, nil}, 24 {`&\S*?;`, NameEntity, nil}, 25 {`\<\!\[CDATA\[.*?\]\]\>`, CommentPreproc, nil}, 26 {`<!--`, Comment, Push("comment")}, 27 {`<\?.*?\?>`, CommentPreproc, nil}, 28 {`<![^>]*>`, CommentPreproc, nil}, 29 {`<\s*[\w:.-]+`, NameTag, Push("tag")}, 30 {`<\s*/\s*[\w:.-]+\s*>`, NameTag, nil}, 31 }, 32 "comment": { 33 {`[^-]+`, Comment, nil}, 34 {`-->`, Comment, Pop(1)}, 35 {`-`, Comment, nil}, 36 }, 37 "tag": { 38 {`\s+`, Text, nil}, 39 {`[\w.:-]+\s*=`, NameAttribute, Push("attr")}, 40 {`/?\s*>`, NameTag, Pop(1)}, 41 }, 42 "attr": { 43 {`\s+`, Text, nil}, 44 {`".*?"`, LiteralString, Pop(1)}, 45 {`'.*?'`, LiteralString, Pop(1)}, 46 {`[^\s>]+`, LiteralString, Pop(1)}, 47 }, 48 } 49} 50