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/