module Sinatra::Capture

def capture(*args, &block)

def capture(*args, &block)
  return block[*args] if ruby?
  if haml? && Tilt[:haml] == Tilt::HamlTemplate && defined?(Haml::Buffer)
    buffer = Haml::Buffer.new(nil, Haml::Options.new.for_buffer)
    with_haml_buffer(buffer) { capture_haml(*args, &block) }
  else
    buf_was = @_out_buf
    @_out_buf = +''
    begin
      raw = block[*args]
      captured = block.binding.eval('@_out_buf')
      captured.empty? ? raw : captured
    ensure
      @_out_buf = buf_was
    end
  end
end

def capture_later(&block)

def capture_later(&block)
  engine = current_engine
  proc { |*a| with_engine(engine) { @capture = capture(*a, &block) } }
end