diff options
author | knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-06-03 01:18:47 +0000 |
---|---|---|
committer | knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-06-03 01:18:47 +0000 |
commit | 0eb420cc78e5027a2611057a535fd255e87723fb (patch) | |
tree | 5e1228276c1167b664d34ec4512554eced7b666a /lib/erb.rb | |
parent | d16f9a75df7076a69f94c64608aead438f3e7ffe (diff) |
* lib/erb.rb (ERB::Compiler::TrimScanner#scan_line): Fix a bug
where tokens are not yilelded one by one.
(ERB::Compiler::TrimScanner#explicit_trim_line): Fix without-
strscan problems. [ruby_core:17028].
* test/erb/test_erb.rb (TestERBCore#_test_01)
(TestERBCore#test_02_safe_04): The expected value should come
first for assert_equal().
(TestERBCoreWOStrScan): Add test class for without-strscan.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@16764 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/erb.rb')
-rw-r--r-- | lib/erb.rb | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/lib/erb.rb b/lib/erb.rb index 3cfbc11c30..a37832dafe 100644 --- a/lib/erb.rb +++ b/lib/erb.rb @@ -327,16 +327,18 @@ class ERB end def scan_line(line) - line.scan(/(.*?)(<%%|%%>|<%=|<%#|<%|%>|\n|\z)/m) do |token| - next if token.empty? - yield(token) + line.scan(/(.*?)(<%%|%%>|<%=|<%#|<%|%>|\n|\z)/m) do |tokens| + tokens.each do |token| + next if token.empty? + yield(token) + end end end def trim_line1(line) line.scan(/(.*?)(<%%|%%>|<%=|<%#|<%|%>\n|%>|\n|\z)/m) do |tokens| tokens.each do |token| - next if token.empty? + next if token.empty? if token == "%>\n" yield('%>') yield(:cr) @@ -355,7 +357,7 @@ class ERB head = token unless head if token == "%>\n" yield('%>') - if is_erb_stag?(head) + if is_erb_stag?(head) yield(:cr) else yield("\n") @@ -369,21 +371,22 @@ class ERB 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(<%= <%# <%) |