class Nanoc::Filters::Redcarpet
@since 3.2.0
@api private
Public Instance Methods
run(content, params = {})
click to toggle source
Runs the content through [Redcarpet](github.com/vmg/redcarpet). This method optionally takes processing options to pass on to Redcarpet.
@overload run(content, params={})
For Redcarpet 1.x @param [String] content The content to filter @option params [Array] :options ([]) A list of options to pass on to Redcarpet @return [String] The filtered content
@overload run(content, params={})
For Redcarpet 2.x @since 3.2.4 @param [String] content The content to filter @option params [Hash] :options ({}) A list of options to pass on to Redcarpet itself (not the renderer) @option params [::Redcarpet::Render::Base] :renderer (::Redcarpet::Render::HTML) The class of the renderer to use @option params [Hash] :renderer_options ({}) A list of options to pass on to the Redcarpet renderer @option params [Boolean] :with_toc (false) A boolean to request a table of contents @return [String] The filtered content
# File lib/nanoc/filters/redcarpet.rb, line 43 def run(content, params = {}) if ::Redcarpet::VERSION > '2' 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) if options.is_a?(Array) warn 'WARNING: You are passing an array of options to the :redcarpet filter, but Redcarpet 2.x expects a hash instead. This will likely fail.' end # 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 end