diff options
| author | seki <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-07-25 22:03:52 +0000 |
|---|---|---|
| committer | seki <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-07-25 22:03:52 +0000 |
| commit | 83dde075470016ca1fa06aa24556e6a5aaa07525 (patch) | |
| tree | 324efc426f5784e5285e7322464e4d7eb6fad44e /lib | |
| parent | b7b972cc71e8d72441efb11a7b258ac491a14eb8 (diff) | |
| download | ruby-83dde075470016ca1fa06aa24556e6a5aaa07525.tar.gz ruby-83dde075470016ca1fa06aa24556e6a5aaa07525.tar.xz ruby-83dde075470016ca1fa06aa24556e6a5aaa07525.zip | |
fix: keep lineno
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@4166 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/erb.rb | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/lib/erb.rb b/lib/erb.rb index 7fa5f2db1..ec4823ed6 100644 --- a/lib/erb.rb +++ b/lib/erb.rb @@ -13,11 +13,18 @@ end # ERB::Compiler class ERB class Compiler + class PercentLine + def initialize(str) + @value = str + end + attr_reader :value + alias :to_s :value + end + class Scanner SplitRegexp = /(<%%)|(%%>)|(<%=)|(<%#)|(<%)|(%>)|(\n)/ - def initialize(compiler, src) - @compiler = compiler + def initialize(src) @src = src @stag = nil end @@ -27,10 +34,10 @@ class ERB end class TrimScanner < Scanner - def initialize(compiler, src) - super(compiler, src) - @trim_mode = compiler.trim_mode - @percent = compiler.percent + def initialize(src, trim_mode, percent) + super(src) + @trim_mode = trim_mode + @percent = percent if @trim_mode @scan_line = self.method(:trim_line) else @@ -62,9 +69,7 @@ class ERB if line[0] == ?% @scan_line.call(line, &block) else - yield('<%') - yield(' ' +line.chomp) - yield('%>') + yield(PercentLine.new(line.chomp)) end end @@ -148,6 +153,11 @@ class ERB scanner.scan do |token| if scanner.stag.nil? case token + when PercentLine + out.push("#{@put_cmd} #{content.dump}") if content.size > 0 + content = '' + out.push(token.to_s) + out.cr when '<%', '<%=', '<%#' scanner.stag = token out.push("#{@put_cmd} #{content.dump}") if content.size > 0 @@ -217,9 +227,9 @@ class ERB def make_scanner(src) if @percent || @trim_mode - TrimScanner.new(self, src) + TrimScanner.new(src, @trim_mode, @percent) else - SimpleScanner.new(self, src) + SimpleScanner.new(src) end end |
