| module Rouge |
| module Lexers |
| load_lexer 'xml.rb' |
| |
| class BIML < XML |
| title "BIML" |
| desc "BIML, Business Intelligence Markup Language" |
| tag 'biml' |
| filenames '*.biml' |
| |
| def self.analyze_text(text) |
| return 1 if text =~ /<\s*Biml\b/ |
| end |
| |
| prepend :root do |
| rule %r(<#@\s*)m, Name::Tag, :directive_tag |
| |
| rule %r(<#[=]?\s*)m, Name::Tag, :directive_as_csharp |
| end |
| |
| prepend :attr do |
| #TODO: how to deal with embedded <# tags inside a attribute string |
| #rule %r("<#[=]?\s*)m, Name::Tag, :directive_as_csharp |
| end |
| |
| state :directive_as_csharp do |
| rule /\s*#>\s*/m, Name::Tag, :pop! |
| rule %r(.*?(?=\s*#>\s*))m do |
| delegate CSharp |
| end |
| end |
| |
| state :directive_tag do |
| rule /\s+/m, Text |
| rule /[\w.:-]+\s*=/m, Name::Attribute, :attr |
| rule /[\w]+\s*/m, Name::Attribute |
| rule %r(/?\s*#>), Name::Tag, :pop! |
| end |
| end |
| end |
| end |