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 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 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 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
# File erb.rb, line 115 def trim_line2(line) head = nil line.split(TrimSplitRegexp).each do |token| next if token.empty? head = token unless head if token == "%>\n" yield('%>') if is_erb_stag?(head) yield(:cr) else yield("\n") end break end yield(token) end end