class Moft::Converters::Markdown::RedcarpetParser

Public Class Methods

new(config) click to toggle source
# File lib/moft/converters/markdown/redcarpet_parser.rb, line 5
def initialize(config)
  require 'redcarpet'
  @config = config
  @redcarpet_extensions = {}
  @config['redcarpet']['extensions'].each { |e| @redcarpet_extensions[e.to_sym] = true }

  @renderer ||= Class.new(Redcarpet::Render::HTML) do
    def block_code(code, lang)
      lang = lang && lang.split.first || "text"
      output = add_code_tags(
        Pygments.highlight(code, :lexer => lang, :options => { :encoding => 'utf-8' }),
        lang
      )
    end

    def add_code_tags(code, lang)
      code = code.sub(/<pre>/,'<pre><code class="' + lang + '">')
      code = code.sub(/<\/pre>/,"</code></pre>")
    end
  end
rescue LoadError
  STDERR.puts 'You are missing a library required for Markdown. Please run:'
  STDERR.puts '  $ [sudo] gem install redcarpet'
  raise FatalException.new("Missing dependency: redcarpet")
end

Public Instance Methods

add_code_tags(code, lang) click to toggle source
# File lib/moft/converters/markdown/redcarpet_parser.rb, line 20
def add_code_tags(code, lang)
  code = code.sub(/<pre>/,'<pre><code class="' + lang + '">')
  code = code.sub(/<\/pre>/,"</code></pre>")
end
block_code(code, lang) click to toggle source
# File lib/moft/converters/markdown/redcarpet_parser.rb, line 12
def block_code(code, lang)
  lang = lang && lang.split.first || "text"
  output = add_code_tags(
    Pygments.highlight(code, :lexer => lang, :options => { :encoding => 'utf-8' }),
    lang
  )
end
convert(content) click to toggle source
# File lib/moft/converters/markdown/redcarpet_parser.rb, line 31
def convert(content)
  @redcarpet_extensions[:fenced_code_blocks] = !@redcarpet_extensions[:no_fenced_code_blocks]
  @renderer.send :include, Redcarpet::Render::SmartyPants if @redcarpet_extensions[:smart]
  markdown = Redcarpet::Markdown.new(@renderer.new(@redcarpet_extensions), @redcarpet_extensions)
  markdown.render(content)
end