69 lines
1.6 KiB
Ruby
69 lines
1.6 KiB
Ruby
# -*- coding: utf-8 -*- #
|
|
# frozen_string_literal: true
|
|
|
|
module Rouge
|
|
module Lexers
|
|
class MXML < RegexLexer
|
|
title "MXML"
|
|
desc "MXML"
|
|
tag 'mxml'
|
|
filenames '*.mxml'
|
|
mimetypes 'application/xv+xml'
|
|
|
|
state :root do
|
|
rule /[^<&]+/, Text
|
|
rule /&\S*?;/, Name::Entity
|
|
|
|
rule /<!\[CDATA\[/m do
|
|
token Comment::Preproc
|
|
push :actionscript_content
|
|
end
|
|
|
|
rule /<!--/, Comment, :comment
|
|
rule /<\?.*?\?>/, Comment::Preproc
|
|
rule /<![^>]*>/, Comment::Preproc
|
|
|
|
rule %r(<\s*[\w:.-]+)m, Name::Tag, :tag # opening tags
|
|
rule %r(<\s*/\s*[\w:.-]+\s*>)m, Name::Tag # closing tags
|
|
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, :attribute
|
|
rule %r(/?\s*>), Name::Tag, :root
|
|
end
|
|
|
|
state :attribute do
|
|
rule /\s+/m, Text
|
|
rule /(")({|@{)/m do
|
|
groups Str, Punctuation
|
|
push :actionscript_attribute
|
|
end
|
|
rule /".*?"|'.*?'|[^\s>]+/, Str, :tag
|
|
end
|
|
|
|
state :actionscript_content do
|
|
rule /\]\]\>/m, Comment::Preproc, :pop!
|
|
rule /.*?(?=\]\]\>)/m do
|
|
delegate Actionscript
|
|
end
|
|
end
|
|
|
|
state :actionscript_attribute do
|
|
rule /(})(")/m do
|
|
groups Punctuation, Str
|
|
push :tag
|
|
end
|
|
rule /.*?(?=}")/m do
|
|
delegate Actionscript
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|