[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]