module Temple::Mixins::Dispatcher

def self.included(base)

def self.included(base)
  base.class_eval { extend ClassMethods }
end

def compile(exp)

def compile(exp)
  compile!(exp)
end

def compile!(exp)

def compile!(exp)
  type, *args = exp
  if respond_to?("on_#{type}")
    send("on_#{type}", *args)
  else
    exp
  end
end

def on_capture(name, exp)

def on_capture(name, exp)
  [:capture, name, compile!(exp)]
end

def on_multi(*exps)

def on_multi(*exps)
  [:multi, *exps.map {|exp| compile!(exp) }]
end