class CodeRay::Scanners::ERB

Scanner for HTML ERB templates.

Constants

KINDS_NOT_LOC

Protected Instance Methods

reset_instance() click to toggle source
# File lib/coderay/scanners/erb.rb, line 38
def reset_instance
  super
  @html_scanner.reset
end
scan_tokens(encoder, options) click to toggle source
# File lib/coderay/scanners/erb.rb, line 43
def scan_tokens encoder, options
  
  until eos?
    
    if (match = scan_until(%r(?=#{START_OF_ERB})/) || scan_rest) and not match.empty?
      @html_scanner.tokenize match, :tokens => encoder
      
    elsif match = scan(%r#{ERB_RUBY_BLOCK}/)
      start_tag = self[1]
      code = self[2]
      end_tag = self[3]
      
      encoder.begin_group :inline
      encoder.text_token start_tag, :inline_delimiter
      
      if start_tag == '<%#'
        encoder.text_token code, :comment
      else
        @ruby_scanner.tokenize code, :tokens => encoder
      end unless code.empty?
      
      encoder.text_token end_tag, :inline_delimiter unless end_tag.empty?
      encoder.end_group :inline
      
    else
      raise_inspect 'else-case reached!', encoder
      
    end
    
  end
  
  encoder
  
end
setup() click to toggle source
# File lib/coderay/scanners/erb.rb, line 33
def setup
  @ruby_scanner = CodeRay.scanner :ruby, :tokens => @tokens, :keep_tokens => true
  @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true
end