class Nanoc::Filters::Redcarpet

@api private

Public Instance Methods

run(content, params = {}) click to toggle source
# File lib/nanoc/filters/redcarpet.rb, line 10
def run(content, params = {})
  options          = params.fetch(:options,          {})
  renderer_class   = params.fetch(:renderer,         ::Redcarpet::Render::HTML)
  renderer_options = params.fetch(:renderer_options, {})
  with_toc         = params.fetch(:with_toc,         false)

  # Setup TOC
  if with_toc
    unless renderer_class <= ::Redcarpet::Render::HTML
      raise "Unexpected renderer: #{renderer_class}"
    end

    # `with_toc` implies `with_toc_data` for the HTML renderer
    renderer_options[:with_toc_data] = true
  end

  # Create renderer
  renderer =
    if renderer_class == ::Redcarpet::Render::HTML_TOC
      renderer_class.new
    else
      renderer_class.new(renderer_options)
    end

  # Render
  if with_toc
    renderer_toc = ::Redcarpet::Render::HTML_TOC.new
    toc = ::Redcarpet::Markdown.new(renderer_toc, options).render(content)
    body = ::Redcarpet::Markdown.new(renderer, options).render(content)
    toc + body
  else
    ::Redcarpet::Markdown.new(renderer, options).render(content)
  end
end