| TrimSplitRegexp | = | /(<%%)|(%%>)|(<%=)|(<%#)|(<%)|(%>\n)|(%>)|(\n)/ |
| ExplicitTrimRegexp | = | /(^[ \t]*<%-)|(-%>\n?\z)|(<%-)|(-%>)|(<%%)|(%%>)|(<%=)|(<%#)|(<%)|(%>)|(\n)/ |
| ERB_STAG | = | %w(<%= <%# <%) |
| stag | [RW] |
# File erb.rb, line 53 def initialize(src, trim_mode, percent) super @trim_mode = trim_mode @percent = percent if @trim_mode == '>' @scan_line = self.method(:trim_line1) elsif @trim_mode == '<>' @scan_line = self.method(:trim_line2) elsif @trim_mode == '-' @scan_line = self.method(:explicit_trim_line) else @scan_line = self.method(:scan_line) end end
# File erb.rb, line 134 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 end
# File erb.rb, line 83 def percent_line(line, &block) if @stag || line[0] != ?% return @scan_line.call(line, &block) end line[0] = '' if line[0] == ?% @scan_line.call(line, &block) else yield(PercentLine.new(line.chomp)) end end
# File erb.rb, line 69 def scan(&block) @stag = nil if @percent @src.each do |line| percent_line(line, &block) end else @src.each do |line| @scan_line.call(line, &block) end end nil end
# File erb.rb, line 96 def scan_line(line) line.split(SplitRegexp).each do |token| next if token.empty? yield(token) end end
# File erb.rb, line 103 def trim_line1(line) line.split(TrimSplitRegexp).each do |token| next if token.empty? if token == "%>\n" yield('%>') yield(:cr) break end yield(token) end end