Add Kramdown support and tests

This commit is contained in:
Jason Graham 2010-10-20 23:35:54 -07:00
parent 53b999418c
commit ac7a0cc95f
5 changed files with 35 additions and 1 deletions

View File

@ -56,6 +56,10 @@ opts = OptionParser.new do |opts|
options['markdown'] = 'rdiscount' options['markdown'] = 'rdiscount'
end end
opts.on("--kramdown", "Use kramdown gem for Markdown") do
options['markdown'] = 'kramdown'
end
opts.on("--time [TIME]", "Time to generate the site for") do |time| opts.on("--time [TIME]", "Time to generate the site for") do |time|
options['time'] = Time.parse(time) options['time'] = Time.parse(time)
end end

View File

@ -48,6 +48,13 @@ Feature: Site configuration
Then the _site directory should exist Then the _site directory should exist
And I should see "<a href="http://google.com">Google</a>" in "_site/index.html" And I should see "<a href="http://google.com">Google</a>" in "_site/index.html"
Scenario: Use Kramdown for markup
Given I have an "index.markdown" page that contains "[Google](http://google.com)"
And I have a configuration file with "markdown" set to "kramdown"
When I run jekyll
Then the _site directory should exist
And I should see "<a href="http://google.com">Google</a>" in "_site/index.html"
Scenario: Use Maruku for markup Scenario: Use Maruku for markup
Given I have an "index.markdown" page that contains "[Google](http://google.com)" Given I have an "index.markdown" page that contains "[Google](http://google.com)"
And I have a configuration file with "markdown" set to "maruku" And I have a configuration file with "markdown" set to "maruku"

View File

@ -10,6 +10,15 @@ module Jekyll
return if @setup return if @setup
# Set the Markdown interpreter (and Maruku self.config, if necessary) # Set the Markdown interpreter (and Maruku self.config, if necessary)
case @config['markdown'] case @config['markdown']
when 'kramdown'
begin
require 'kramdown'
rescue LoadError
STDERR.puts 'You are missing a library required for Markdown. Please run:'
STDERR.puts ' $ [sudo] gem install kramdown'
raise FatalException.new("Missing dependency: kramdown")
end
when 'rdiscount' when 'rdiscount'
begin begin
require 'rdiscount' require 'rdiscount'
@ -52,7 +61,7 @@ module Jekyll
end end
else else
STDERR.puts "Invalid Markdown processor: #{@config['markdown']}" STDERR.puts "Invalid Markdown processor: #{@config['markdown']}"
STDERR.puts " Valid options are [ maruku | rdiscount ]" STDERR.puts " Valid options are [ maruku | rdiscount | kramdown ]"
raise FatalException.new("Invalid Markdown process: #{@config['markdown']}") raise FatalException.new("Invalid Markdown process: #{@config['markdown']}")
end end
@setup = true @setup = true
@ -69,6 +78,8 @@ module Jekyll
def convert(content) def convert(content)
setup setup
case @config['markdown'] case @config['markdown']
when 'kramdown'
Kramdown::Document.new(content).to_html
when 'rdiscount' when 'rdiscount'
RDiscount.new(content, *@rdiscount_extensions).to_html RDiscount.new(content, *@rdiscount_extensions).to_html
when 'maruku' when 'maruku'

View File

@ -5,6 +5,7 @@ require File.join(File.dirname(__FILE__), *%w[.. lib jekyll])
require 'RedCloth' require 'RedCloth'
require 'rdiscount' require 'rdiscount'
require 'kramdown'
require 'test/unit' require 'test/unit'
require 'redgreen' require 'redgreen'

View File

@ -112,5 +112,16 @@ CONTENT
assert_match %r{<em>FINISH HIM</em>}, @result assert_match %r{<em>FINISH HIM</em>}, @result
end end
end end
context "using Kramdown" do
setup do
create_post(@content, 'markdown' => 'kramdown')
end
should "parse correctly" do
assert_match %r{<em>FIGHT!</em>}, @result
assert_match %r{<em>FINISH HIM</em>}, @result
end
end
end end
end end