# File lib/asciidoctor/renderer.rb, line 9
  def initialize(options={})
    @debug = !!options[:debug]

    @views = {}
    @compact = options[:compact]

    backend = options[:backend]
    case backend
    when 'html5', 'docbook45'
      eruby = load_eruby options[:eruby]
      #Helpers.require_library 'asciidoctor/backends/' + backend
      require 'asciidoctor/backends/' + backend
      # Load up all the template classes that we know how to render for this backend
      BaseTemplate.template_classes.each do |tc|
        if tc.to_s.downcase.include?('::' + backend + '::') # optimization
          view_name, view_backend = self.class.extract_view_mapping(tc)
          if view_backend == backend
            @views[view_name] = tc.new(view_name, eruby)
          end
        end
      end
    else
      Debug.debug { "No built-in templates for backend: #{backend}" }
    end

    # If user passed in a template dir, let them override our base templates
    if template_dir = options.delete(:template_dir)
      Helpers.require_library 'tilt'

      template_glob = '*'
      if (engine = options[:template_engine])
        template_glob = "*.#{engine}"
        # example: templates/haml
        if File.directory? File.join(template_dir, engine)
          template_dir = File.join template_dir, engine
        end
      end

      # example: templates/html5 or templates/haml/html5
      if File.directory? File.join(template_dir, options[:backend])
        template_dir = File.join template_dir, options[:backend]
      end

      view_opts = {
        :erb =>  { :trim => '<>' },
        :haml => { :attr_wrapper => '"', :ugly => true, :escape_attrs => false },
        :slim => { :disable_escape => true, :sort_attrs => false, :pretty => false }
      }

      # workaround until we have a proper way to configure
      if {'html5' => true, 'dzslides' => true, 'deckjs' => true, 'revealjs' => true}.has_key? backend
        view_opts[:haml][:format] = view_opts[:slim][:format] = :html5
      end

      slim_loaded = false
      helpers = nil
      
      # Grab the files in the top level of the directory (we're not traversing)
      Dir.glob(File.join(template_dir, template_glob)).
          select{|f| File.file? f }.each do |template|
        basename = File.basename(template)
        if basename == 'helpers.rb'
          helpers = template
          next
        end
        name_parts = basename.split('.')
        next if name_parts.size < 2
        view_name = name_parts.first 
        ext_name = name_parts.last
        if ext_name == 'slim' && !slim_loaded
          # slim doesn't get loaded by Tilt
          Helpers.require_library 'slim'
        end
        next unless Tilt.registered? ext_name
        @views[view_name] = Tilt.new(template, nil, view_opts[ext_name.to_sym])
      end

      require helpers unless helpers.nil?
    end
  end