class Tilt::Template

def initialize(file=nil, line=1, options={}, &block)

All arguments are optional.

a block is required.
it should read template data and return as a String. When file is nil,
default, template data is read from the file. When a block is given,
Create a new template with the file, line, and options specified. By
def initialize(file=nil, line=1, options={}, &block)
  @file, @line, @options = nil, 1, {}
  [options, line, file].compact.each do |arg|
    case
    when arg.respond_to?(:to_str)  ; @file = arg.to_str
    when arg.respond_to?(:to_int)  ; @line = arg.to_int
    when arg.respond_to?(:to_hash) ; @options = arg.to_hash.dup
    else raise TypeError
    end
  end
  raise ArgumentError, "file or block required" if (@file || block).nil?
  # call the initialize_engine method if this is the very first time
  # an instance of this class has been created.
  if !self.class.engine_initialized?
    initialize_engine
    self.class.engine_initialized = true
  end
  # used to hold compiled template methods
  @compiled_method = {}
  # used on 1.9 to set the encoding if it is not set elsewhere (like a magic comment)
  # currently only used if template compiles to ruby
  @default_encoding = @options.delete :default_encoding
  # load template data and prepare (uses binread to avoid encoding issues)
  @reader = block || lambda { |t| File.respond_to?(:binread) ? File.binread(@file) : File.read(@file) }
  @data = @reader.call(self)
  prepare
end