def initialize(html, options = {})
@options = {:warn_level => Warnings::SAFE,
:line_length => 65,
:link_query_string => nil,
:base_url => nil,
:remove_classes => false,
:remove_ids => false,
:remove_comments => false,
:remove_scripts => true,
:reset_contenteditable => true,
:css => [],
:css_to_attributes => true,
:with_html_string => false,
:css_string => nil,
:preserve_styles => false,
:preserve_reset => true,
:verbose => false,
:debug => false,
:io_exceptions => false,
:include_link_tags => true,
:include_style_tags => true,
:input_encoding => 'ASCII-8BIT',
:output_encoding => nil,
:replace_html_entities => false,
:escape_url_attributes => true,
:unescaped_ampersand => false,
:adapter => Adapter.use,
}.merge(options)
@html_file = html
@is_local_file = @options[:with_html_string] || Premailer.local_data?(html)
@css_files = [@options[:css]].flatten
@css_warnings = []
@base_url = nil
@base_dir = nil
@unmergable_rules = nil
if @options[:base_url]
@base_url = URI.parse(@options.delete(:base_url))
elsif not @is_local_file
@base_url = URI.parse(@html_file)
end
@css_parser = CssParser::Parser.new({
:absolute_paths => true,
:import => true,
:io_exceptions => @options[:io_exceptions]
})
@adapter_class = Adapter.find @options[:adapter]
self.class.send(:include, @adapter_class)
@doc = load_html(@html_file)
@processed_doc = @doc
@processed_doc = convert_inline_links(@processed_doc, @base_url) if @base_url
if options[:link_query_string]
@processed_doc = append_query_string(@processed_doc, options[:link_query_string])
end
load_css_from_options!
load_css_from_html!
end