Skip to content

Commit 098da3d

Browse files
committed
Merge branch 'redcarpet-update' of https://github.com/tombell/jekyll into tombell-redcarpet-update
2 parents 5b5341f + 38ac553 commit 098da3d

File tree

3 files changed

+44
-9
lines changed

3 files changed

+44
-9
lines changed

jekyll.gemspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ Gem::Specification.new do |s|
2828
s.add_runtime_dependency('directory_watcher', "~> 1.1")
2929
s.add_runtime_dependency('maruku', "~> 0.5")
3030
s.add_runtime_dependency('kramdown', "~> 0.13.4")
31-
s.add_runtime_dependency('pygments.rb', "~> 0.2.12")
31+
s.add_runtime_dependency('pygments.rb', "~> 0.3.2")
3232

3333
s.add_development_dependency('rake', "~> 0.9")
3434
s.add_development_dependency('rdoc', "~> 3.11")
@@ -38,7 +38,7 @@ Gem::Specification.new do |s|
3838
s.add_development_dependency('cucumber', "1.1")
3939
s.add_development_dependency('RedCloth', "~> 4.2")
4040
s.add_development_dependency('rdiscount', "~> 1.6")
41-
s.add_development_dependency('redcarpet', "~> 1.9")
41+
s.add_development_dependency('redcarpet', "~> 2.1.1")
4242

4343
# = MANIFEST =
4444
s.files = %w[

lib/jekyll/converters/markdown.rb

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,28 @@ class MarkdownConverter < Converter
88

99
def setup
1010
return if @setup
11-
# Set the Markdown interpreter (and Maruku self.config, if necessary)
1211
case @config['markdown']
1312
when 'redcarpet'
1413
begin
1514
require 'redcarpet'
16-
@redcarpet_extensions = @config['redcarpet']['extensions'].map { |e| e.to_sym }
15+
16+
@renderer ||= Class.new(Redcarpet::Render::HTML) do
17+
def block_code(code, lang)
18+
lang = lang && lang.split.first || "text"
19+
output = add_code_tags(
20+
Pygments.highlight(code, :lexer => lang, :options => { :encoding => 'utf-8' }),
21+
lang
22+
)
23+
end
24+
25+
def add_code_tags(code, lang)
26+
code = code.sub(/<pre>/,'<pre><code class="' + lang + '">')
27+
code = code.sub(/<\/pre>/,"</code></pre>")
28+
end
29+
end
30+
31+
@redcarpet_extensions = {}
32+
@config['redcarpet']['extensions'].each { |e| @redcarpet_extensions[e.to_sym] = true }
1733
rescue LoadError
1834
STDERR.puts 'You are missing a library required for Markdown. Please run:'
1935
STDERR.puts ' $ [sudo] gem install redcarpet'
@@ -30,8 +46,6 @@ def setup
3046
when 'rdiscount'
3147
begin
3248
require 'rdiscount'
33-
34-
# Load rdiscount extensions
3549
@rdiscount_extensions = @config['rdiscount']['extensions'].map { |e| e.to_sym }
3650
rescue LoadError
3751
STDERR.puts 'You are missing a library required for Markdown. Please run:'
@@ -88,7 +102,10 @@ def convert(content)
88102
setup
89103
case @config['markdown']
90104
when 'redcarpet'
91-
Redcarpet.new(content, *@redcarpet_extensions).to_html
105+
@redcarpet_extensions[:fenced_code_blocks] = !@redcarpet_extensions[:no_fenced_code_blocks]
106+
@renderer.send :include, Redcarpet::Render::SmartyPants if @redcarpet_extensions[:smart]
107+
markdown = Redcarpet::Markdown.new(@renderer.new(@redcarpet_extensions), @redcarpet_extensions)
108+
markdown.render(content)
92109
when 'kramdown'
93110
# Check for use of coderay
94111
if @config['kramdown']['use_coderay']

test/test_redcarpet.rb

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ class TestRedcarpet < Test::Unit::TestCase
44
context "redcarpet" do
55
setup do
66
config = {
7-
'redcarpet' => { 'extensions' => ['smart'] },
7+
'redcarpet' => { 'extensions' => ['smart', 'strikethrough', 'filter_html'] },
88
'markdown' => 'redcarpet'
99
}
1010
@markdown = MarkdownConverter.new config
@@ -14,8 +14,26 @@ class TestRedcarpet < Test::Unit::TestCase
1414
assert_equal "<h1>Some Header</h1>", @markdown.convert('# Some Header #').strip
1515
end
1616

17-
should "pass redcarpet extensions" do
17+
should "pass redcarpet SmartyPants options" do
1818
assert_equal "<p>&ldquo;smart&rdquo;</p>", @markdown.convert('"smart"').strip
1919
end
20+
21+
should "pass redcarpet extensions" do
22+
assert_equal "<p><del>deleted</del></p>", @markdown.convert('~~deleted~~').strip
23+
end
24+
25+
should "pass redcarpet render options" do
26+
assert_equal "<p><strong>bad code not here</strong>: i am bad</p>", @markdown.convert('**bad code not here**: <script>i am bad</script>').strip
27+
end
28+
29+
should "render fenced code blocks" do
30+
assert_equal "<div class=\"highlight\"><pre><code class=\"ruby\"><span class=\"nb\">puts</span> <span class=\"s2\">&quot;Hello world&quot;</span>\n</code></pre>\n</div>", @markdown.convert(
31+
<<-EOS
32+
```ruby
33+
puts "Hello world"
34+
```
35+
EOS
36+
).strip
37+
end
2038
end
2139
end

0 commit comments

Comments
 (0)