class Opal::ERB::Compiler
def compile(source, file_name = '(erb)')
def compile(source, file_name = '(erb)') @source, @file_name, @result = source, file_name, source self.fix_quotes self.find_contents self.find_code self.wrap_compiled Opal.compile @result end
def find_code
def find_code @result = @result.gsub(/<%([\s\S]+?)%>/) do "\")\n#{ $1 }\noutput_buffer.append(\"" end end
def find_contents
def find_contents @result = @result.gsub(/<%=([\s\S]+?)%>/) do inner = $1.gsub(/\\'/, "'").gsub(/\\"/, '"') if inner =~ BLOCK_EXPR "\")\noutput_buffer.append= #{ inner }\noutput_buffer.append(\"" else "\")\noutput_buffer.append=(#{ inner })\noutput_buffer.append(\"" end end end
def fix_quotes
def fix_quotes @result = @result.gsub '"', '\\"' end
def wrap_compiled
def wrap_compiled @result = "Template.new('#@file_name') do |output_buffer|\noutput_buffer.append(\"#@result\")\noutput_buffer.join\nend\n" end