class ERB::Compiler
Public Instance Methods
add_insert_escapehtml_cmd(out, content)
click to toggle source
# File lib/erb_safe_ext.rb, line 70 def add_insert_escapehtml_cmd(out, content) out.push("#{@insert_cmd}(ERB::Util.html_escape((#{content})))") end
compile(s)
click to toggle source
# File lib/erb_safe_ext.rb, line 5 def compile(s) enc = s.encoding raise ArgumentError, "#{enc} is not ASCII compatible" if enc.dummy? s = s.dup.force_encoding("ASCII-8BIT") # don't use constant Enoding::ASCII_8BIT for miniruby enc = detect_magic_comment(s) || enc out = Buffer.new(self, enc) content = '' scanner = make_scanner(s) scanner.scan do |token| next if token.nil? next if token == '' if scanner.stag.nil? case token when PercentLine add_put_cmd(out, content) if content.size > 0 content = '' out.push(token.to_s) out.cr when :cr out.cr when '<%', '<%~', '<%=', '<%#' scanner.stag = token add_put_cmd(out, content) if content.size > 0 content = '' when "\n" content << "\n" add_put_cmd(out, content) content = '' when '<%%' content << '<%' else content << token end else case token when '%>' case scanner.stag when '<%' if content[-1] == ?\n content.chop! out.push(content) out.cr else out.push(content) end when '<%=' add_insert_cmd(out, content) when '<%~' add_insert_escapehtml_cmd(out, content) when '<%#' # out.push("# #{content_dump(content)}") end scanner.stag = nil content = '' when '%%>' content << '%>' else content << token end end end add_put_cmd(out, content) if content.size > 0 out.close return out.script, enc end