ruby-changes:5264
From: seki <ko1@a...>
Date: Tue, 3 Jun 2008 04:07:55 +0900 (JST)
Subject: [ruby-changes:5264] Ruby:r16763 (ruby_1_8): Fix without strscan problems. .
seki 2008-06-03 04:07:45 +0900 (Tue, 03 Jun 2008) New Revision: 16763 Modified files: branches/ruby_1_8/ChangeLog branches/ruby_1_8/lib/erb.rb branches/ruby_1_8/test/erb/test_erb.rb Log: Fix without strscan problems. [ruby_core:17028]. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=16763&r2=16762&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/lib/erb.rb?r1=16763&r2=16762&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/test/erb/test_erb.rb?r1=16763&r2=16762&diff_format=u Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 16762) +++ ruby_1_8/ChangeLog (revision 16763) @@ -1,3 +1,11 @@ +Tue Jun 3 03:52:41 2008 Masatoshi SEKI <m_seki@m...> + + * lib/erb.rb (ERB::Compiler::TrimScanner#explicit_trim_line): Fix + without strscan problems. [ruby_core:17028]. + + * test/erb/test_erb.rb (TestERBCoreWOStrScan): Add test class for + without strscan. + Mon Jun 2 16:30:17 2008 Akinori MUSHA <knu@i...> * lib/delegate.rb (DelegateClass, Delegator#respond_to?): Index: ruby_1_8/lib/erb.rb =================================================================== --- ruby_1_8/lib/erb.rb (revision 16762) +++ ruby_1_8/lib/erb.rb (revision 16763) @@ -357,7 +357,7 @@ head = token unless head if token == "%>\n" yield('%>') - if is_erb_stag?(head) + if is_erb_stag?(head) yield(:cr) else yield("\n") @@ -371,21 +371,22 @@ end end - ExplicitTrimRegexp = /(^[ \t]*<%-)|(-%>\n?\z)|(<%-)|(-%>)|(<%%)|(%%>)|(<%=)|(<%#)|(<%)|(%>)|(\n)/ def explicit_trim_line(line) - line.split(ExplicitTrimRegexp).each do |token| - next if token.empty? - if @stag.nil? && /[ \t]*<%-/ =~ token - yield('<%') - elsif @stag && /-%>\n/ =~ token - yield('%>') - yield(:cr) - elsif @stag && token == '-%>' - yield('%>') - else - yield(token) - end - end + line.scan(/(.*?)(^[ \t]*<%\-|<%\-|<%%|%%>|<%=|<%#|<%|-%>\n|-%>|%>|\z)/m) do |tokens| + tokens.each do |token| + next if token.empty? + if @stag.nil? && /[ \t]*<%-/ =~ token + yield('<%') + elsif @stag && token == "-%>\n" + yield('%>') + yield(:cr) + elsif @stag && token == '-%>' + yield('%>') + else + yield(token) + end + end + end end ERB_STAG = %w(<%= <%# <%) Index: ruby_1_8/test/erb/test_erb.rb =================================================================== --- ruby_1_8/test/erb/test_erb.rb (revision 16762) +++ ruby_1_8/test/erb/test_erb.rb (revision 16763) @@ -44,15 +44,15 @@ @erb = ERB end - def test_01 - _test_01(nil) - _test_01(0) - _test_01(1) - _test_01(2) - _test_01(3) + def test_core + _test_core(nil) + _test_core(0) + _test_core(1) + _test_core(2) + _test_core(3) end - def _test_01(safe) + def _test_core(safe) erb = @erb.new("hello") assert_equal("hello", erb.result) @@ -157,14 +157,14 @@ assert_equal(ans, erb.result) end - def test_02_safe_04 + def test_safe_04 erb = @erb.new('<%=$SAFE%>', 4) assert_equal('4', erb.result(TOPLEVEL_BINDING.taint)) end class Foo; end - def test_03_def_class + def test_def_class erb = @erb.new('hello') cls = erb.def_class assert_equal(Object, cls.superclass) @@ -177,7 +177,7 @@ assert(cls.new.respond_to?('erb')) end - def test_04_percent + def test_percent src = <<EOS %n = 1 <%= n%> @@ -218,26 +218,24 @@ assert_equal(ans, ERB.new(src, nil, '%').result) end - class Bar; end - - def test_05_def_method - assert(! Bar.new.respond_to?('hello')) - Bar.module_eval do + def test_def_method + klass = Class.new + klass.module_eval do extend ERB::DefMethod fname = File.join(File.dirname(File.expand_path(__FILE__)), 'hello.erb') def_erb_method('hello', fname) end - assert(Bar.new.respond_to?('hello')) + assert(klass.new.respond_to?('hello')) - assert(! Bar.new.respond_to?('hello_world')) + assert(! klass.new.respond_to?('hello_world')) erb = @erb.new('hello, world') - Bar.module_eval do + klass.module_eval do def_erb_method('hello_world', erb) end - assert(Bar.new.respond_to?('hello_world')) + assert(klass.new.respond_to?('hello_world')) end - def test_06_escape + def test_escape src = <<EOS 1.<%% : <%="<%%"%> 2.%%> : <%="%%>"%> @@ -274,7 +272,7 @@ assert_equal(ans, ERB.new(src, nil, '%').result) end - def test_07_keep_lineno + def test_keep_lineno src = <<EOS Hello, % x = "World" @@ -378,7 +376,7 @@ end end - def test_08_explicit + def test_explicit src = <<EOS <% x = %w(hello world) -%> NotSkip <%- y = x -%> NotSkip @@ -411,3 +409,16 @@ assert_equal(ans, ERB.new(src, nil, '-%').result) end end + +class TestERBCoreWOStrScan < TestERBCore + def setup + @save_map = ERB::Compiler::Scanner.instance_variable_get('@scanner_map') + map = {[nil, false]=>ERB::Compiler::SimpleScanner} + ERB::Compiler::Scanner.instance_variable_set('@scanner_map', map) + super + end + + def teardown + ERB::Compiler::Scanner.instance_variable_set('@scanner_map', @save_map) + end +end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/