class Trenni::Template
def self.buffer(binding)
def self.buffer(binding) binding.local_variable_get(OUT) end
def self.capture(*args, &block)
def self.capture(*args, &block) scope = block.binding output_buffer = scope.local_variable_get(OUT) capture_buffer = String.new.force_encoding(output_buffer.encoding) scope.local_variable_set(OUT, capture_buffer) begin block.call(*args) ensure scope.local_variable_set(OUT, output_buffer) end return capture_buffer end
def self.load_file(path, *args)
def self.load_file(path, *args) self.new(FileBuffer.new(path), *args).freeze end
def code
def code @code ||= compile! end
def compile!
def compile! assembler = make_assembler Parsers.parse_template(@buffer, assembler) assembler.code end
def freeze
def freeze return self if frozen? to_proc super end
def initialize(buffer)
def initialize(buffer) @buffer = buffer end
def make_assembler
def make_assembler Assembler.new end
def output_buffer
def output_buffer String.new.force_encoding(code.encoding) end
def to_buffer(scope)
def to_buffer(scope) Buffer.new(to_string(scope), path: @buffer.path) end
def to_proc(scope = nil)
def to_proc(scope = nil) @compiled_proc ||= eval("proc{|#{OUT}|;#{code};#{OUT}}", scope, @buffer.path).freeze end
def to_string(scope = Object.new, output = nil)
def to_string(scope = Object.new, output = nil) output ||= output_buffer scope.instance_exec(output, &to_proc) end