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