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:
parent
0a39c57489
commit
7470938822
32
lib/erb.rb
32
lib/erb.rb
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue