Sha256: 50e2477e052473104274886ae0b1a2d9874aefd1b39918fa7f98e7df3cd0991a

Contents?: true

Size: 1.4 KB

Versions: 12

Compression:

Stored size: 1.4 KB

Contents

module Rouge
  module Lexers
    class XML < RegexLexer
      desc %q(<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>]+/, 'Literal.String', :pop!
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
rouge-0.4.0 lib/rouge/lexers/xml.rb
rouge-0.3.10 lib/rouge/lexers/xml.rb
rouge-0.3.9 lib/rouge/lexers/xml.rb
rouge-0.3.8 lib/rouge/lexers/xml.rb
rouge-0.3.7 lib/rouge/lexers/xml.rb
rouge-0.3.6 lib/rouge/lexers/xml.rb
rouge-0.3.5 lib/rouge/lexers/xml.rb
rouge-0.3.4 lib/rouge/lexers/xml.rb
rouge-0.3.3 lib/rouge/lexers/xml.rb
rouge-0.3.2 lib/rouge/lexers/xml.rb
rouge-0.3.1 lib/rouge/lexers/xml.rb
rouge-0.3.0 lib/rouge/lexers/xml.rb