module Asciidoctor::Extensions::ProcessorDsl

def option key, value

def option key, value
  config[key] = value
end

def process *args, &block

def process *args, &block
  if block_given?
    raise ::ArgumentError, %(wrong number of arguments (given #{args.size}, expected 0)) unless args.empty?
    unless block.binding && self == block.binding.receiver
      # NOTE remap self in process method to processor instance
      context = self
      block.define_singleton_method(:call) {|*m_args| context.instance_exec(*m_args, &block) }
    end
    @process_block = block
  # TODO enable if we want to support passing proc or lambda as argument instead of block
  #elsif ::Proc === args[0]
  #  raise ::ArgumentError, %(wrong number of arguments (given #{args.size - 1}, expected 0)) unless args.size == 1
  #  @process_block = args.shift
  elsif defined? @process_block
    @process_block.call(*args)
  else
    raise ::NotImplementedError, %(#{self.class} ##{__method__} method called before being registered)
  end
end

def process_block_given?

def process_block_given?
  defined? @process_block
end