From da4e8f2ee1c557924a775cca3a86943ad5192f70 Mon Sep 17 00:00:00 2001 From: Jonas Pfenniger Date: Fri, 25 May 2012 18:59:26 +0100 Subject: [PATCH 01/13] Front-matter should be at start of file It's the theme of the moment ; regexp checking. Just in case we have two line start with --- in the file, we want to make sure it's not interpreted as a front-matter. --- lib/jekyll/convertible.rb | 2 +- test/fixtures/broken_front_matter1.erb | 5 +++++ test/fixtures/front_matter.erb | 4 ++++ test/test_convertible.rb | 22 ++++++++++++++++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/broken_front_matter1.erb create mode 100644 test/fixtures/front_matter.erb create mode 100644 test/test_convertible.rb diff --git a/lib/jekyll/convertible.rb b/lib/jekyll/convertible.rb index fe25b30e..1d0139d3 100644 --- a/lib/jekyll/convertible.rb +++ b/lib/jekyll/convertible.rb @@ -28,7 +28,7 @@ module Jekyll self.content = File.read(File.join(base, name)) begin - if self.content =~ /^(---\s*\n.*?\n?)^(---\s*$\n?)/m + if self.content =~ /\A(---\s*\n.*?\n?)^(---\s*$\n?)/m self.content = $POSTMATCH self.data = YAML.load($1) end diff --git a/test/fixtures/broken_front_matter1.erb b/test/fixtures/broken_front_matter1.erb new file mode 100644 index 00000000..c18befb6 --- /dev/null +++ b/test/fixtures/broken_front_matter1.erb @@ -0,0 +1,5 @@ +# Some stuff on the first line +--- +test: good +--- +Real content starts here diff --git a/test/fixtures/front_matter.erb b/test/fixtures/front_matter.erb new file mode 100644 index 00000000..96e46a07 --- /dev/null +++ b/test/fixtures/front_matter.erb @@ -0,0 +1,4 @@ +--- +test: good +--- +Real content starts here diff --git a/test/test_convertible.rb b/test/test_convertible.rb new file mode 100644 index 00000000..2032715b --- /dev/null +++ b/test/test_convertible.rb @@ -0,0 +1,22 @@ +require 'helper' +require 'ostruct' + +class TestConvertible < Test::Unit::TestCase + context "yaml front-matter" do + setup do + @convertible = OpenStruct.new + @convertible.extend Jekyll::Convertible + @base = File.expand_path('../fixtures', __FILE__) + end + + should "parse the front-matter correctly" do + ret = @convertible.read_yaml(@base, 'front_matter.erb') + assert_equal({'test' => 'good'}, ret) + end + + should "not parse if the front-matter is not at the start of the file" do + ret = @convertible.read_yaml(@base, 'broken_front_matter1.erb') + assert_equal({}, ret) + end + end +end From 3904fd9257075eaa1b4ca22d43b5927d9eaac622 Mon Sep 17 00:00:00 2001 From: Neil-Smithline Date: Fri, 29 Jun 2012 12:08:57 -0400 Subject: [PATCH 02/13] make yaml parsing errors more informative --- lib/jekyll/post.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/jekyll/post.rb b/lib/jekyll/post.rb index a84c9ab9..3934b977 100644 --- a/lib/jekyll/post.rb +++ b/lib/jekyll/post.rb @@ -38,7 +38,11 @@ module Jekyll self.categories = dir.split('/').reject { |x| x.empty? } self.process(name) - self.read_yaml(@base, name) + begin + self.read_yaml(@base, name) + rescue Exception => msg + raise FatalException.new("#{msg} in #{@base}/#{name}") + end #If we've added a date and time to the yaml, use that instead of the filename date #Means we'll sort correctly. From 7f706f47fc89c65fdfeff5dc65c591750020c18e Mon Sep 17 00:00:00 2001 From: Tom Bell Date: Mon, 13 Aug 2012 15:03:33 +0100 Subject: [PATCH 03/13] Update redcarpet support to version 2 --- jekyll.gemspec | 2 +- lib/jekyll/converters/markdown.rb | 27 ++++++++++++++++++++++----- test/test_redcarpet.rb | 22 ++++++++++++++++++++-- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/jekyll.gemspec b/jekyll.gemspec index 55201ae8..f8734af1 100644 --- a/jekyll.gemspec +++ b/jekyll.gemspec @@ -37,7 +37,7 @@ Gem::Specification.new do |s| s.add_development_dependency('cucumber', "1.1") s.add_development_dependency('RedCloth', "~> 4.2") s.add_development_dependency('rdiscount', "~> 1.6") - s.add_development_dependency('redcarpet', "~> 1.9") + s.add_development_dependency('redcarpet', "~> 2.1.1") # = MANIFEST = s.files = %w[ diff --git a/lib/jekyll/converters/markdown.rb b/lib/jekyll/converters/markdown.rb index cb94c8d0..67f7a06b 100644 --- a/lib/jekyll/converters/markdown.rb +++ b/lib/jekyll/converters/markdown.rb @@ -8,12 +8,28 @@ module Jekyll def setup return if @setup - # Set the Markdown interpreter (and Maruku self.config, if necessary) case @config['markdown'] when 'redcarpet' begin require 'redcarpet' - @redcarpet_extensions = @config['redcarpet']['extensions'].map { |e| e.to_sym } + + @renderer ||= Class.new(Redcarpet::Render::HTML) do + def block_code(code, lang) + lang ||= '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(/
/,'
')
+                code = code.sub(/<\/pre>/,"
") + end + end + + @redcarpet_extensions = {} + @config['redcarpet']['extensions'].each { |e| @redcarpet_extensions[e.to_sym] = true } rescue LoadError STDERR.puts 'You are missing a library required for Markdown. Please run:' STDERR.puts ' $ [sudo] gem install redcarpet' @@ -30,8 +46,6 @@ module Jekyll when 'rdiscount' begin require 'rdiscount' - - # Load rdiscount extensions @rdiscount_extensions = @config['rdiscount']['extensions'].map { |e| e.to_sym } rescue LoadError STDERR.puts 'You are missing a library required for Markdown. Please run:' @@ -88,7 +102,10 @@ module Jekyll setup case @config['markdown'] when 'redcarpet' - Redcarpet.new(content, *@redcarpet_extensions).to_html + @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) when 'kramdown' # Check for use of coderay if @config['kramdown']['use_coderay'] diff --git a/test/test_redcarpet.rb b/test/test_redcarpet.rb index 05596a92..43ec4331 100644 --- a/test/test_redcarpet.rb +++ b/test/test_redcarpet.rb @@ -4,7 +4,7 @@ class TestRedcarpet < Test::Unit::TestCase context "redcarpet" do setup do config = { - 'redcarpet' => { 'extensions' => ['smart'] }, + 'redcarpet' => { 'extensions' => ['smart', 'strikethrough', 'filter_html'] }, 'markdown' => 'redcarpet' } @markdown = MarkdownConverter.new config @@ -14,8 +14,26 @@ class TestRedcarpet < Test::Unit::TestCase assert_equal "

Some Header

", @markdown.convert('# Some Header #').strip end - should "pass redcarpet extensions" do + should "pass redcarpet SmartyPants options" do assert_equal "

“smart”

", @markdown.convert('"smart"').strip end + + should "pass redcarpet extensions" do + assert_equal "

deleted

", @markdown.convert('~~deleted~~').strip + end + + should "pass redcarpet render options" do + assert_equal "

bad code not here: i am bad

", @markdown.convert('**bad code not here**: ').strip + end + + should "render fenced code blocks" do + assert_equal "
puts "Hello world"\n
\n
", @markdown.convert( + <<-EOS +```ruby +puts "Hello world" +``` +EOS + ).strip + end end end From 336ea669835353060e48914408de06409674ee16 Mon Sep 17 00:00:00 2001 From: Will Brady Date: Tue, 14 Aug 2012 17:35:41 -0400 Subject: [PATCH 04/13] Better error reporting on Liquid exceptions --- lib/jekyll/convertible.rb | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/jekyll/convertible.rb b/lib/jekyll/convertible.rb index fe25b30e..e12ecb81 100644 --- a/lib/jekyll/convertible.rb +++ b/lib/jekyll/convertible.rb @@ -76,9 +76,13 @@ module Jekyll payload["pygments_suffix"] = converter.pygments_suffix begin - self.content = Liquid::Template.parse(self.content).render(payload, info) + self.content = Liquid::Template.parse(self.content).render!(payload, info) rescue => e puts "Liquid Exception: #{e.message} in #{self.name}" + e.backtrace.each do |backtrace| + puts backtrace + end + abort("Build Failed") end self.transform @@ -94,9 +98,13 @@ module Jekyll payload = payload.deep_merge({"content" => self.output, "page" => layout.data}) begin - self.output = Liquid::Template.parse(layout.content).render(payload, info) + self.output = Liquid::Template.parse(layout.content).render!(payload, info) rescue => e puts "Liquid Exception: #{e.message} in #{self.data["layout"]}" + e.backtrace.each do |backtrace| + puts backtrace + end + abort("Build Failed") end if layout = layouts[layout.data["layout"]] From a78b587e2515729efc86e0540593ff11ea041bb2 Mon Sep 17 00:00:00 2001 From: Tom Bell Date: Tue, 13 Nov 2012 07:54:53 +0000 Subject: [PATCH 05/13] Update pygments.rb version --- jekyll.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jekyll.gemspec b/jekyll.gemspec index f8734af1..425eab76 100644 --- a/jekyll.gemspec +++ b/jekyll.gemspec @@ -27,7 +27,7 @@ Gem::Specification.new do |s| s.add_runtime_dependency('directory_watcher', "~> 1.1") s.add_runtime_dependency('maruku', "~> 0.5") s.add_runtime_dependency('kramdown', "~> 0.13.4") - s.add_runtime_dependency('pygments.rb', "~> 0.2.12") + s.add_runtime_dependency('pygments.rb', "~> 0.3.2") s.add_development_dependency('rake', "~> 0.9") s.add_development_dependency('rdoc', "~> 3.11") From 38ac55381b6342a3862fe0c353149f2344cdae90 Mon Sep 17 00:00:00 2001 From: Tom Bell Date: Tue, 13 Nov 2012 07:59:36 +0000 Subject: [PATCH 06/13] Only pass first class to Pygments This prevents an exception if something like the following is used: ~~~ {foo bar} some code ~~~ --- lib/jekyll/converters/markdown.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jekyll/converters/markdown.rb b/lib/jekyll/converters/markdown.rb index 67f7a06b..3c6ba539 100644 --- a/lib/jekyll/converters/markdown.rb +++ b/lib/jekyll/converters/markdown.rb @@ -15,7 +15,7 @@ module Jekyll @renderer ||= Class.new(Redcarpet::Render::HTML) do def block_code(code, lang) - lang ||= 'text' + lang = lang && lang.split.first || "text" output = add_code_tags( Pygments.highlight(code, :lexer => lang, :options => { :encoding => 'utf-8' }), lang From a2dd4bf203b412a380b71e130330306a2e6f973c Mon Sep 17 00:00:00 2001 From: petedmarsh Date: Fri, 7 Dec 2012 15:24:33 +0000 Subject: [PATCH 07/13] Add license to gemspec --- jekyll.gemspec | 1 + 1 file changed, 1 insertion(+) diff --git a/jekyll.gemspec b/jekyll.gemspec index 55201ae8..1d39d222 100644 --- a/jekyll.gemspec +++ b/jekyll.gemspec @@ -5,6 +5,7 @@ Gem::Specification.new do |s| s.name = 'jekyll' s.version = '0.11.2' + s.license = 'MIT' s.date = '2011-12-27' s.rubyforge_project = 'jekyll' From db96a88cee1ee326867052a464678375ecd57b58 Mon Sep 17 00:00:00 2001 From: Tom Preston-Werner Date: Sat, 15 Dec 2012 14:25:37 -0800 Subject: [PATCH 08/13] Update history. --- History.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/History.txt b/History.txt index e7e832b1..a2f76067 100644 --- a/History.txt +++ b/History.txt @@ -7,6 +7,7 @@ * Allow multiple plugin dirs to be specified (#438) * Inline TOC token support for RDiscount (#333) * Add the option to specify the paginated url format (#342) + * Support Redcarpet 2 and fenced code blocks (#619) * Bug Fixes * Allow some special characters in highlight names * URL escape category names in URL generation (#360) From 0b62b371225625c04c7c9f31323194cf28fcf711 Mon Sep 17 00:00:00 2001 From: Tom Preston-Werner Date: Sat, 15 Dec 2012 16:34:32 -0800 Subject: [PATCH 09/13] Remove newline to fix failing Redcarpet test. --- test/test_redcarpet.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_redcarpet.rb b/test/test_redcarpet.rb index 43ec4331..05cb0445 100644 --- a/test/test_redcarpet.rb +++ b/test/test_redcarpet.rb @@ -27,7 +27,7 @@ class TestRedcarpet < Test::Unit::TestCase end should "render fenced code blocks" do - assert_equal "
puts "Hello world"\n
\n
", @markdown.convert( + assert_equal "
puts "Hello world"\n
", @markdown.convert( <<-EOS ```ruby puts "Hello world" From e8d68551af986f2c19872bba75d9e5e72c5a0592 Mon Sep 17 00:00:00 2001 From: Tom Preston-Werner Date: Sat, 15 Dec 2012 16:38:20 -0800 Subject: [PATCH 10/13] Update history. --- History.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/History.txt b/History.txt index a2f76067..abdf4ca9 100644 --- a/History.txt +++ b/History.txt @@ -8,6 +8,7 @@ * Inline TOC token support for RDiscount (#333) * Add the option to specify the paginated url format (#342) * Support Redcarpet 2 and fenced code blocks (#619) + * Better reporting of Liquid errors (#624) * Bug Fixes * Allow some special characters in highlight names * URL escape category names in URL generation (#360) From 22f4b12836b25e187cd6684a04911ddcb0c5e52c Mon Sep 17 00:00:00 2001 From: Tom Preston-Werner Date: Sat, 15 Dec 2012 22:09:21 -0800 Subject: [PATCH 11/13] Clean up default config spec. --- lib/jekyll.rb | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/lib/jekyll.rb b/lib/jekyll.rb index 65e16cdb..87984ecf 100644 --- a/lib/jekyll.rb +++ b/lib/jekyll.rb @@ -49,43 +49,46 @@ module Jekyll VERSION = '0.11.2' # Default options. Overriden by values in _config.yml or command-line opts. - # (Strings rather symbols used for compatability with YAML). + # Strings rather than symbols are used for compatability with YAML. DEFAULTS = { 'safe' => false, 'auto' => false, 'server' => false, 'server_port' => 4000, - 'source' => Dir.pwd, - 'destination' => File.join(Dir.pwd, '_site'), - 'plugins' => File.join(Dir.pwd, '_plugins'), - 'layouts' => '_layouts', + 'source' => Dir.pwd, + 'destination' => File.join(Dir.pwd, '_site'), + 'plugins' => File.join(Dir.pwd, '_plugins'), + 'layouts' => '_layouts', - 'future' => true, - 'lsi' => false, - 'pygments' => false, - 'markdown' => 'maruku', - 'permalink' => 'date', - 'include' => ['.htaccess'], + 'future' => true, + 'lsi' => false, + 'pygments' => false, + 'markdown' => 'maruku', + 'permalink' => 'date', + 'include' => ['.htaccess'], 'paginate_path' => 'page:num', - 'markdown_ext' => 'markdown,mkd,mkdn,md', - 'textile_ext' => 'textile', + 'markdown_ext' => 'markdown,mkd,mkdn,md', + 'textile_ext' => 'textile', - 'maruku' => { + 'maruku' => { 'use_tex' => false, 'use_divs' => false, 'png_engine' => 'blahtex', 'png_dir' => 'images/latex', 'png_url' => '/images/latex' }, - 'rdiscount' => { + + 'rdiscount' => { 'extensions' => [] }, - 'redcarpet' => { + + 'redcarpet' => { 'extensions' => [] }, - 'kramdown' => { + + 'kramdown' => { 'auto_ids' => true, 'footnote_nr' => 1, 'entity_output' => 'as_char', @@ -102,8 +105,9 @@ module Jekyll 'coderay_css' => 'style' } }, - 'redcloth' => { - 'hard_breaks' => true + + 'redcloth' => { + 'hard_breaks' => true } } From ffc68bdd48dfa6af9ffec0cfe6f9a840a2169d87 Mon Sep 17 00:00:00 2001 From: Tom Preston-Werner Date: Sat, 15 Dec 2012 22:21:25 -0800 Subject: [PATCH 12/13] Update history. --- History.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/History.txt b/History.txt index abdf4ca9..81840bb3 100644 --- a/History.txt +++ b/History.txt @@ -15,6 +15,7 @@ * Fix error with limit_posts (#442) * Properly select dotfile during directory scan (#363, #431, #377) * Allow setting of Kramdown smart_quotes (#482) + * Ensure front-matter is at start of file (#562) == 0.11.2 / 2011-12-27 * Bug Fixes From d58a0c10885376dd8bfcf01ce242e844b972d85a Mon Sep 17 00:00:00 2001 From: Tom Preston-Werner Date: Sat, 22 Dec 2012 16:46:30 -0700 Subject: [PATCH 13/13] Release 0.12.0 --- History.txt | 2 +- jekyll.gemspec | 12 +++++++++--- lib/jekyll.rb | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/History.txt b/History.txt index 81840bb3..547378f8 100644 --- a/History.txt +++ b/History.txt @@ -1,4 +1,4 @@ -== HEAD +== 0.12.0 / 2012-12-22 * Minor Enhancements * Add ability to explicitly specify included files (#261) * Add --default-mimetype option (#279) diff --git a/jekyll.gemspec b/jekyll.gemspec index cd395683..f88d073e 100644 --- a/jekyll.gemspec +++ b/jekyll.gemspec @@ -4,9 +4,9 @@ Gem::Specification.new do |s| s.rubygems_version = '1.3.5' s.name = 'jekyll' - s.version = '0.11.2' + s.version = '0.12.0' s.license = 'MIT' - s.date = '2011-12-27' + s.date = '2012-12-22' s.rubyforge_project = 'jekyll' s.summary = "A simple, blog aware, static site generator." @@ -75,10 +75,12 @@ Gem::Specification.new do |s| lib/jekyll/migrators/csv.rb lib/jekyll/migrators/drupal.rb lib/jekyll/migrators/enki.rb + lib/jekyll/migrators/joomla.rb lib/jekyll/migrators/marley.rb lib/jekyll/migrators/mephisto.rb lib/jekyll/migrators/mt.rb lib/jekyll/migrators/posterous.rb + lib/jekyll/migrators/rss.rb lib/jekyll/migrators/textpattern.rb lib/jekyll/migrators/tumblr.rb lib/jekyll/migrators/typo.rb @@ -91,6 +93,9 @@ Gem::Specification.new do |s| lib/jekyll/static_file.rb lib/jekyll/tags/highlight.rb lib/jekyll/tags/include.rb + lib/jekyll/tags/post_url.rb + test/fixtures/broken_front_matter1.erb + test/fixtures/front_matter.erb test/helper.rb test/source/.htaccess test/source/_includes/sig.markdown @@ -133,6 +138,7 @@ Gem::Specification.new do |s| test/source/z_category/_posts/2008-9-23-categories.textile test/suite.rb test/test_configuration.rb + test/test_convertible.rb test/test_core_ext.rb test/test_filters.rb test/test_generated_site.rb @@ -142,9 +148,9 @@ Gem::Specification.new do |s| test/test_post.rb test/test_rdiscount.rb test/test_redcarpet.rb + test/test_redcloth.rb test/test_site.rb test/test_tags.rb - test/test_redcloth.rb ] # = MANIFEST = diff --git a/lib/jekyll.rb b/lib/jekyll.rb index 87984ecf..eef5ab1c 100644 --- a/lib/jekyll.rb +++ b/lib/jekyll.rb @@ -46,7 +46,7 @@ require_all 'jekyll/generators' require_all 'jekyll/tags' module Jekyll - VERSION = '0.11.2' + VERSION = '0.12.0' # Default options. Overriden by values in _config.yml or command-line opts. # Strings rather than symbols are used for compatability with YAML.