Rubocop: lib/jekyll/converters/markdown/redcarpet_parser.rb

This commit is contained in:
Pat Hawks 2016-05-26 00:53:38 -05:00
parent 0880dc097f
commit d855ec03ba
1 changed files with 102 additions and 96 deletions

View File

@ -1,12 +1,12 @@
module Jekyll class Jekyll::Converters::Markdown::RedcarpetParser
module Converters
class Markdown
class RedcarpetParser
module CommonMethods module CommonMethods
def add_code_tags(code, lang) def add_code_tags(code, lang)
code = code.to_s code = code.to_s
code = code.sub(/<pre>/, "<pre><code class=\"language-#{lang}\" data-lang=\"#{lang}\">") code = code.sub(
code = code.sub(/<\/pre>/, "</code></pre>") /<pre>/,
"<pre><code class=\"language-#{lang}\" data-lang=\"#{lang}\">"
)
code = code.sub(%r!</pre>!, "</code></pre>")
code code
end end
end end
@ -17,19 +17,25 @@ module Jekyll
Jekyll::External.require_with_graceful_fail("pygments") Jekyll::External.require_with_graceful_fail("pygments")
lang = lang && lang.split.first || "text" lang = lang && lang.split.first || "text"
add_code_tags( add_code_tags(
Pygments.highlight(code, :lexer => lang, :options => { :encoding => 'utf-8' }), Pygments.highlight(
code,
{
:lexer => lang,
:options => { :encoding => "utf-8" }
}
),
lang lang
) )
end end
end end
module WithoutHighlighting module WithoutHighlighting
require 'cgi' require "cgi"
include CommonMethods include CommonMethods
def code_wrap(code) def code_wrap(code)
"<figure class=\"highlight\"><pre>#{CGI::escapeHTML(code)}</pre></figure>" "<figure class=\"highlight\"><pre>#{CGI.escapeHTML(code)}</pre></figure>"
end end
def block_code(code, lang) def block_code(code, lang)
@ -54,25 +60,24 @@ module Jekyll
end end
def initialize(config) def initialize(config)
External.require_with_graceful_fail("redcarpet") Jekyll::External.require_with_graceful_fail("redcarpet")
@config = config @config = config
@redcarpet_extensions = {} @redcarpet_extensions = {}
@config['redcarpet']['extensions'].each { |e| @redcarpet_extensions[e.to_sym] = true } @config["redcarpet"]["extensions"].each do |e|
@redcarpet_extensions[e.to_sym] = true
end
@renderer ||= class_with_proper_highlighter(@config['highlighter']) @renderer ||= class_with_proper_highlighter(@config["highlighter"])
end end
def class_with_proper_highlighter(highlighter) def class_with_proper_highlighter(highlighter)
Class.new(Redcarpet::Render::HTML) do
case highlighter case highlighter
when "pygments" when "pygments"
Class.new(Redcarpet::Render::HTML) do
include WithPygments include WithPygments
end
when "rouge" when "rouge"
Class.new(Redcarpet::Render::HTML) do
Jekyll::External.require_with_graceful_fail(%w( Jekyll::External.require_with_graceful_fail(%w(
rouge rouge rouge/plugins/redcarpet
rouge/plugins/redcarpet
)) ))
unless Gem::Version.new(Rouge.version) > Gem::Version.new("1.3.0") unless Gem::Version.new(Rouge.version) > Gem::Version.new("1.3.0")
@ -82,21 +87,22 @@ module Jekyll
include Rouge::Plugins::Redcarpet include Rouge::Plugins::Redcarpet
include CommonMethods include CommonMethods
include WithRouge include WithRouge
end
else else
Class.new(Redcarpet::Render::HTML) do
include WithoutHighlighting include WithoutHighlighting
end end
end end
end end
def convert(content) def convert(content)
@redcarpet_extensions[:fenced_code_blocks] = !@redcarpet_extensions[:no_fenced_code_blocks] @redcarpet_extensions[:fenced_code_blocks] = \
@renderer.send :include, Redcarpet::Render::SmartyPants if @redcarpet_extensions[:smart] !@redcarpet_extensions[:no_fenced_code_blocks]
markdown = Redcarpet::Markdown.new(@renderer.new(@redcarpet_extensions), @redcarpet_extensions) if @redcarpet_extensions[:smart]
@renderer.send :include, Redcarpet::Render::SmartyPants
end
markdown = Redcarpet::Markdown.new(
@renderer.new(@redcarpet_extensions),
@redcarpet_extensions
)
markdown.render(content) markdown.render(content)
end end
end
end
end
end end