11# frozen_string_literal: true
22
33require_relative 'xml'
4+ require_relative 'csharp'
45
56module Rouge
67 module Lexers
@@ -14,22 +15,48 @@ def self.detect?(text)
1415 return true if text =~ /<\s *Biml\b /
1516 end
1617
18+ start do
19+ @csharp = CSharp . new ( options )
20+ end
21+
22+ state :biml_interp do
23+ rule %r(<#[=]?)m do
24+ token Name ::Tag
25+ push :directive_as_csharp
26+ end
27+ end
28+
1729 prepend :root do
1830 rule %r(<#\@ \s *)m , Name ::Tag , :directive_tag
1931
20- rule %r(<#[=]? \s *)m , Name :: Tag , :directive_as_csharp
32+ mixin :biml_interp
2133 end
2234
2335 prepend :attr do
24- #TODO: how to deal with embedded <# tags inside a attribute string
25- #rule %r("<#[=]?\s*)m, Name::Tag, :directive_as_csharp
36+ rule ( %r/"/ ) { token Str ::Double ; goto :biml_dq }
37+ rule ( %r/'/ ) { token Str ::Double ; goto :biml_sq }
38+
39+ mixin :biml_interp
40+ end
41+
42+ state :biml_dq do
43+ rule %r/[^<"]+/ , Str ::Double
44+ mixin :biml_interp
45+ rule %r/"/ , Str ::Double , :pop!
46+ rule %r/</ , Str ::Double
47+ end
48+
49+ state :biml_sq do
50+ rule %r/[^<']+/ , Str ::Single
51+ mixin :biml_interp
52+ rule %r/'/ , Str ::Single , :pop!
53+ rule %r/</ , Str ::Single
2654 end
2755
2856 state :directive_as_csharp do
29- rule %r/\s *#>\s */m , Name ::Tag , :pop!
30- rule %r(.*?(?=\s *#>\s *))m do
31- delegate CSharp
32- end
57+ rule ( /[^#]+/ ) { delegate @csharp }
58+ rule /#>/ , Name ::Tag , :pop!
59+ rule ( /[#>]/ ) { delegate @csharp }
3360 end
3461
3562 state :directive_tag do
0 commit comments