summaryrefslogtreecommitdiff
path: root/lib/erb.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/erb.rb')
-rw-r--r--lib/erb.rb21
1 files changed, 17 insertions, 4 deletions
diff --git a/lib/erb.rb b/lib/erb.rb
index 2ae5a1ab4a..f1661f98cb 100644
--- a/lib/erb.rb
+++ b/lib/erb.rb
@@ -427,7 +427,7 @@ class ERB
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,11 +437,24 @@ class ERB
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