Mercurial > hg > soundsoftware-site
view vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/rhtml.rb.svn-base @ 120:cd2282d2aa55 cannam
Merge from the default branch. Note that this is not a valid SVN repository any more (use default, redmine-1.1 etc for SVN updates).
author | Chris Cannam |
---|---|
date | Thu, 13 Jan 2011 14:33:08 +0000 |
parents | 513646585e45 |
children |
line wrap: on
line source
module CodeRay module Scanners load :html load :ruby # RHTML Scanner class RHTML < Scanner include Streamable register_for :rhtml title 'HTML ERB Template' KINDS_NOT_LOC = HTML::KINDS_NOT_LOC ERB_RUBY_BLOCK = / <%(?!%)[=-]? (?> [^\-%]* # normal* (?> # special (?: %(?!>) | -(?!%>) ) [^\-%]* # normal* )* ) (?: -?%> )? /x START_OF_ERB = / <%(?!%) /x private 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 def reset_instance super @html_scanner.reset end def scan_tokens tokens, options until eos? if (match = scan_until(/(?=#{START_OF_ERB})/o) || scan_until(/\z/)) and not match.empty? @html_scanner.tokenize match elsif match = scan(/#{ERB_RUBY_BLOCK}/o) start_tag = match[/\A<%[-=]?/] end_tag = match[/-?%?>?\z/] tokens << [:open, :inline] tokens << [start_tag, :inline_delimiter] code = match[start_tag.size .. -1 - end_tag.size] @ruby_scanner.tokenize code tokens << [end_tag, :inline_delimiter] unless end_tag.empty? tokens << [:close, :inline] else raise_inspect 'else-case reached!', tokens end end tokens end end end end