class EZML::TemplateEngine

Public Instance Methods

compile(template) click to toggle source
# File lib/ezml/template_engine.rb, line 38
def compile(template)
  initialize_encoding(template, options[:encoding])
  @precompiled = call(template)
end
precompiled() click to toggle source
# File lib/ezml/template_engine.rb, line 43
def precompiled
  encoding = Encoding.find(@encoding || '')
  return @precompiled.dup.force_encoding(encoding) if encoding == Encoding::ASCII_8BIT
  return @precompiled.encode(encoding)
end
precompiled_with_ambles(local_names, after_preamble: '') click to toggle source
# File lib/ezml/template_engine.rb, line 53
    def precompiled_with_ambles(local_names, after_preamble: '')
      preamble = <<END.tr("\n", ';')
begin
extend EZML::Helpers
_ezmlout = @ezml_buffer = EZML::Buffer.new(ezml_buffer, #{Options.new(options).for_buffer.inspect})
_erbout = _ezmlout.buffer
#{after_preamble}
END
      postamble = <<END.tr("\n", ';')
#{precompiled_method_return_value}
ensure
@ezml_buffer = @ezml_buffer.upper if @ezml_buffer
end
END
      "#{preamble}#{locals_code(local_names)}#{precompiled}#{postamble}".dup
    end
precompiled_with_return_value() click to toggle source
# File lib/ezml/template_engine.rb, line 49
def precompiled_with_return_value
  "#{precompiled};#{precompiled_method_return_value}".dup
end

Private Instance Methods

initialize_encoding(template, given_value) click to toggle source
# File lib/ezml/template_engine.rb, line 72
def initialize_encoding(template, given_value)
  if given_value
    @encoding = given_value
  else
    @encoding = Encoding.default_internal || template.encoding
  end
end
inspect_obj(obj) click to toggle source
# File lib/ezml/template_engine.rb, line 95
def inspect_obj(obj)
  case obj
  when String
    %Q!"#{obj.gsub(/[\x00-\x7F]+/) {|s| s.inspect[1...-1]}}"!
  when Symbol
    ":#{inspect_obj(obj.to_s)}"
  else
    obj.inspect
  end
end
locals_code(names) click to toggle source
# File lib/ezml/template_engine.rb, line 84
def locals_code(names)
  names = names.keys if Hash === names

  names.map do |name|
    # Can't use || because someone might explicitly pass in false with a symbol
    sym_local = "_ezml_locals[#{inspect_obj(name.to_sym)}]"
    str_local = "_ezml_locals[#{inspect_obj(name.to_s)}]"
    "#{name} = #{sym_local}.nil? ? #{str_local} : #{sym_local};"
  end.join
end
precompiled_method_return_value() click to toggle source
# File lib/ezml/template_engine.rb, line 80
def precompiled_method_return_value
  "_erbout"
end