fix: keep lineno

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4166 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
seki 2003-07-25 22:03:52 +00:00
parent 0a39c57489
commit 7470938822
1 changed files with 21 additions and 11 deletions

View File

@ -13,11 +13,18 @@ end
# ERB::Compiler # ERB::Compiler
class ERB class ERB
class Compiler class Compiler
class PercentLine
def initialize(str)
@value = str
end
attr_reader :value
alias :to_s :value
end
class Scanner class Scanner
SplitRegexp = /(<%%)|(%%>)|(<%=)|(<%#)|(<%)|(%>)|(\n)/ SplitRegexp = /(<%%)|(%%>)|(<%=)|(<%#)|(<%)|(%>)|(\n)/
def initialize(compiler, src) def initialize(src)
@compiler = compiler
@src = src @src = src
@stag = nil @stag = nil
end end
@ -27,10 +34,10 @@ class ERB
end end
class TrimScanner < Scanner class TrimScanner < Scanner
def initialize(compiler, src) def initialize(src, trim_mode, percent)
super(compiler, src) super(src)
@trim_mode = compiler.trim_mode @trim_mode = trim_mode
@percent = compiler.percent @percent = percent
if @trim_mode if @trim_mode
@scan_line = self.method(:trim_line) @scan_line = self.method(:trim_line)
else else
@ -62,9 +69,7 @@ class ERB
if line[0] == ?% if line[0] == ?%
@scan_line.call(line, &block) @scan_line.call(line, &block)
else else
yield('<%') yield(PercentLine.new(line.chomp))
yield(' ' +line.chomp)
yield('%>')
end end
end end
@ -148,6 +153,11 @@ class ERB
scanner.scan do |token| scanner.scan do |token|
if scanner.stag.nil? if scanner.stag.nil?
case token case token
when PercentLine
out.push("#{@put_cmd} #{content.dump}") if content.size > 0
content = ''
out.push(token.to_s)
out.cr
when '<%', '<%=', '<%#' when '<%', '<%=', '<%#'
scanner.stag = token scanner.stag = token
out.push("#{@put_cmd} #{content.dump}") if content.size > 0 out.push("#{@put_cmd} #{content.dump}") if content.size > 0
@ -217,9 +227,9 @@ class ERB
def make_scanner(src) def make_scanner(src)
if @percent || @trim_mode if @percent || @trim_mode
TrimScanner.new(self, src) TrimScanner.new(src, @trim_mode, @percent)
else else
SimpleScanner.new(self, src) SimpleScanner.new(src)
end end
end end