module Kramdown::Converter::SyntaxHighlighter::Coderay

def self.prepare_options(converter)

def self.prepare_options(converter)
  return if converter.data.key?(:syntax_highlighter_coderay)
  cache = converter.data[:syntax_highlighter_coderay] = {}
  opts = converter.options[:syntax_highlighter_opts].dup
  span_opts = (opts.delete(:span) || {}).dup
  block_opts = (opts.delete(:block) || {}).dup
  [span_opts, block_opts].each do |hash|
    hash.keys.each do |k|
      hash[k.kind_of?(String) ? Kramdown::Options.str_to_sym(k) : k] = hash.delete(k)
    end
  end
  cache[:default_lang] = converter.options[:coderay_default_lang] || opts.delete(:default_lang)
  cache[:span] = {
    :css => converter.options[:coderay_css]
  }.update(opts).update(span_opts).update(:wrap => :span)
  cache[:block] = {
    :wrap => converter.options[:coderay_wrap],
    :line_numbers => converter.options[:coderay_line_numbers],
    :line_number_start => converter.options[:coderay_line_number_start],
    :tab_width => converter.options[:coderay_tab_width],
    :bold_every => converter.options[:coderay_bold_every],
    :css => converter.options[:coderay_css]
  }.update(opts).update(block_opts)
  [:css, :wrap, :line_numbers].each do |key|
    [:block, :span].each do |type|
      cache[type][key] = cache[type][key].to_sym if cache[type][key].kind_of?(String)
    end
  end
end