require 'tilt/template' module Tilt # Markaby # http://github.com/markaby/markaby class MarkabyTemplate < Template def self.builder_class @builder_class ||= Class.new(Markaby::Builder) do def __capture_markaby_tilt__(&block) __run_markaby_tilt__ do text capture(&block) end end end end def self.engine_initialized? defined? ::Markaby end def initialize_engine require_template_library 'markaby' end def prepare end def evaluate(scope, locals, &block) builder = self.class.builder_class.new({}, scope) builder.locals = locals if data.kind_of? Proc (class << builder; self end).send(:define_method, :__run_markaby_tilt__, &data) else builder.instance_eval <<-CODE, __FILE__, __LINE__ def __run_markaby_tilt__ #{data} end CODE end if block builder.__capture_markaby_tilt__(&block) else builder.__run_markaby_tilt__ end builder.to_s end end end