def initialize(options={})
@debug = !!options[:debug]
@views = {}
@compact = options[:compact]
backend = options[:backend]
case backend
when 'html5', 'docbook45'
eruby = load_eruby options[:eruby]
require 'asciidoctor/backends/' + backend
BaseTemplate.template_classes.each do |tc|
if tc.to_s.downcase.include?('::' + backend + '::')
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 template_dir = options.delete(:template_dir)
Helpers.require_library 'tilt'
template_glob = '*'
if (engine = options[:template_engine])
template_glob = "*.#{engine}"
if File.directory? File.join(template_dir, engine)
template_dir = File.join template_dir, engine
end
end
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 }
}
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
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
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