ruby-changes:6365
From: seki <ko1@a...>
Date: Sat, 5 Jul 2008 00:41:01 +0900 (JST)
Subject: [ruby-changes:6365] Ruby:r17881 (ruby_1_8): fix %% line bug.
seki 2008-07-05 00:40:33 +0900 (Sat, 05 Jul 2008)
New Revision: 17881
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 %% line bug. [ruby-core:17491]
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=17881
Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog (revision 17880)
+++ ruby_1_8/ChangeLog (revision 17881)
@@ -1,3 +1,9 @@
+Sat Jul 5 00:33:08 2008 Masatoshi SEKI <m_seki@m...>
+
+ * lib/erb.rb (PercentScanner#scan): fix %% line bug. [ruby-core:17491]
+
+ * test/erb/test_erb.rb (test_percent): ditto.
+
Sat Jul 5 00:31:53 2008 Masaki Suketa <masaki.suketa@n...>
* ext/win32ole/win32ole.c (d2time): fix the bug of VT_DATE
Index: ruby_1_8/lib/erb.rb
===================================================================
--- ruby_1_8/lib/erb.rb (revision 17880)
+++ ruby_1_8/lib/erb.rb (revision 17881)
@@ -427,7 +427,7 @@
Scanner.regist_scanner(SimpleScanner2, nil, false)
class PercentScanner < Scanner # :nodoc:
- def scan
+ def scan(&blk)
stag_reg = /(.*?)(^%%|^%|<%%|<%=|<%#|<%|\z)/m
etag_reg = /(.*?)(%%>|%>|\z)/m
scanner = StringScanner.new(@src)
@@ -437,13 +437,26 @@
elem = scanner[2]
if elem == '%%'
- elem = '%'
+ yield('%')
+ inline_scan(scanner.scan(/.*?(\n|\z)/), &blk)
elsif elem == '%'
- elem = PercentLine.new(scanner.scan(/.*?(\n|\z)/).chomp)
+ yield(PercentLine.new(scanner.scan(/.*?(\n|\z)/).chomp))
+ else
+ yield(elem)
end
- yield(elem)
end
end
+
+ def inline_scan(line)
+ stag_reg = /(.*?)(<%%|<%=|<%#|<%|\z)/m
+ etag_reg = /(.*?)(%%>|%>|\z)/m
+ scanner = StringScanner.new(line)
+ while ! scanner.eos?
+ scanner.scan(@stag ? etag_reg : stag_reg)
+ yield(scanner[1])
+ yield(scanner[2])
+ end
+ end
end
Scanner.regist_scanner(PercentScanner, nil, true)
Index: ruby_1_8/test/erb/test_erb.rb
===================================================================
--- ruby_1_8/test/erb/test_erb.rb (revision 17880)
+++ ruby_1_8/test/erb/test_erb.rb (revision 17881)
@@ -209,11 +209,13 @@
n.times do |i|%>
%% %%><%%<%= i%><%
end%>
+%%%
EOS
ans = <<EOS
%
% %%><%0
% %%><%1
+%%
EOS
assert_equal(ans, ERB.new(src, nil, '%').result)
end
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/