/usr/lib/ruby/vendor_ruby/rugments/lexers/xml.rb is in ruby-rugments 1.0.0~beta8-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | module Rugments
module Lexers
class XML < RegexLexer
title 'XML'
desc '<desc for="this-lexer">XML</desc>'
tag 'xml'
filenames *%w(*.xml *.xsl *.rss *.xslt *.xsd *.wsdl)
mimetypes *%w(
text/xml
application/xml
image/svg+xml
application/rss+xml
application/atom+xml
)
def self.analyze_text(text)
return 0.9 if text.doctype?
return 0.8 if text =~ /\A<\?xml\b/
start = text[0..1000]
return 0.6 if start =~ %r{<xml\b}
return 0.3 if start =~ %r{<.+?>.*?</.+?>}m
end
state :root do
rule /[^<&]+/, Text
rule /&\S*?;/, Name::Entity
rule /<!\[CDATA\[.*?\]\]\>/, Comment::Preproc
rule /<!--/, Comment, :comment
rule /<\?.*?\?>/, Comment::Preproc
rule /<![^>]*>/, Comment::Preproc
# open tags
rule %r{<\s*[\w:.-]+}m, Name::Tag, :tag
# self-closing tags
rule %r{<\s*/\s*[\w:.-]+\s*>}m, Name::Tag
end
state :comment do
rule /[^-]+/m, Comment
rule /-->/, Comment, :pop!
rule /-/, Comment
end
state :tag do
rule /\s+/m, Text
rule /[\w.:-]+\s*=/m, Name::Attribute, :attr
rule %r{/?\s*>}, Name::Tag, :pop!
end
state :attr do
rule /\s+/m, Text
rule /".*?"|'.*?'|[^\s>]+/, Str, :pop!
end
end
end
end
|