diff --git a/gem_rake_helper.rb b/gem_rake_helper.rb index de2d91a4..109cb0c6 100644 --- a/gem_rake_helper.rb +++ b/gem_rake_helper.rb @@ -19,6 +19,7 @@ require 'cucumber/rake/task' Cucumber::Rake::Task.new do |t| exempt_tags = ["--tags ~@wip"] exempt_tags << "--tags ~@nojava" if RUBY_PLATFORM == "java" + exempt_tags << "--tags ~@no18" if RUBY_VERSION < "1.9" exempt_tags << "--tags ~@encoding" unless Object.const_defined?(:Encoding) exempt_tags << "--tags ~@travishatesme" if ENV["TRAVIS"] == "true" diff --git a/middleman-core/features/markdown_redcarpet.feature b/middleman-core/features/markdown_redcarpet.feature index 54b8dd30..aaf53334 100644 --- a/middleman-core/features/markdown_redcarpet.feature +++ b/middleman-core/features/markdown_redcarpet.feature @@ -12,17 +12,12 @@ Feature: Markdown support :fenced_code_blocks => true, :autolink => true, :strikethrough => true, - :lax_html_blocks => true, :space_after_headers => true, - :with_toc_data => true, :superscript => true, - :smartypants => true, - :hard_wrap => true - + :lax_spacing => true + """ Given the Server is running at "markdown-app" - When I go to "/smarty_pants.html" - Then I should see "“" When I go to "/no_intra_emphasis.html" Then I should not see "" When I go to "/tables.html" @@ -37,36 +32,97 @@ Feature: Markdown support Then I should not see "

" When I go to "/superscript.html" Then I should see "" - When I go to "/with_toc_data.html" - Then I should see "toc_0" - When I go to "/hard_wrap.html" - Then I should see "br" + When I go to "/lax_spacing.html" + Then I should see "

hello

" - Scenario: Redcarpet 2 no_images extension (with overrides) + @no18 + Scenario: Redcarpet 3 extensions Given a fixture app "markdown-app" And a file named "config.rb" with: """ set :markdown_engine, :redcarpet - set :markdown, :no_images => true - + set :markdown, :underline => true, + :highlight => true, + :disable_indented_code_blocks => true """ Given the Server is running at "markdown-app" + When I go to "/underline.html" + Then I should see "underlined" + When I go to "/highlighted.html" + Then I should see "highlighted" + When I go to "/indented_code_blocks.html" + Then I should not see "" + + Scenario: Redcarpet smartypants extension + Given a fixture app "markdown-app" + And a file named "config.rb" with: + """ + set :markdown_engine, :redcarpet + set :markdown, :smartypants => true + """ + Given the Server is running at "markdown-app" + When I go to "/smarty_pants.html" + Then I should see "“" + + Scenario: Redcarpet::Render::HTML options + Given a fixture app "markdown-app" + And a file named "config.rb" with: + """ + set :markdown_engine, :redcarpet + set :markdown, :filter_html => true, + :no_images => true, + :no_links => true, + :with_toc_data => true, + :hard_wrap => true, + :safe_links_only => true, + :prettify => true + + """ + Given the Server is running at "markdown-app" + When I go to "/filter_html.html" + Then I should not see "" When I go to "/img.html" Then I should see "![dust mite](http://dust.mite/image.png)" And I should not see "' - Scenario: Redcarpet 2 no_links extension (with overrides) + Scenario: Redcarpet link_attributes option Given a fixture app "markdown-app" And a file named "config.rb" with: """ set :markdown_engine, :redcarpet - set :markdown, :no_links => true - + set :markdown, :link_attributes => { :target => "_blank" } + """ + And a file named "source/link.html.markdown" with: + """ + [A link](/foo.html) """ Given the Server is running at "markdown-app" When I go to "/link.html" - Then I should see "[This link](http://example.net/) links" - And I should not see " true, + :hard_wrap => true + """ + Given the Server is running at "markdown-app" + When I go to "/hard_wrap.html" + Then I should see "
" Scenario: Redcarpet per-page frontmatter options Given a fixture app "markdown-frontmatter-options-app" @@ -109,4 +165,3 @@ Feature: Markdown support Then I should see 'width="1"' And I should see 'height="1"' And I should see 'src="/images/blank.gif"' - \ No newline at end of file diff --git a/middleman-core/fixtures/markdown-app/source/filter_html.html.markdown b/middleman-core/fixtures/markdown-app/source/filter_html.html.markdown new file mode 100644 index 00000000..e54916a2 --- /dev/null +++ b/middleman-core/fixtures/markdown-app/source/filter_html.html.markdown @@ -0,0 +1 @@ +I shouldn't be emphasised \ No newline at end of file diff --git a/middleman-core/fixtures/markdown-app/source/footnote.html.markdown b/middleman-core/fixtures/markdown-app/source/footnote.html.markdown new file mode 100644 index 00000000..dd14ffd3 --- /dev/null +++ b/middleman-core/fixtures/markdown-app/source/footnote.html.markdown @@ -0,0 +1,3 @@ +This is a footnote.[^1] + +[^1]: It provides additional information. \ No newline at end of file diff --git a/middleman-core/fixtures/markdown-app/source/highlighted.html.markdown b/middleman-core/fixtures/markdown-app/source/highlighted.html.markdown new file mode 100644 index 00000000..11a363bd --- /dev/null +++ b/middleman-core/fixtures/markdown-app/source/highlighted.html.markdown @@ -0,0 +1 @@ +this is ==highlighted== \ No newline at end of file diff --git a/middleman-core/fixtures/markdown-app/source/indented_code_blocks.html.markdown b/middleman-core/fixtures/markdown-app/source/indented_code_blocks.html.markdown new file mode 100644 index 00000000..01c813e6 --- /dev/null +++ b/middleman-core/fixtures/markdown-app/source/indented_code_blocks.html.markdown @@ -0,0 +1,5 @@ +Hello + + Something that would be flagged as code + +World \ No newline at end of file diff --git a/middleman-core/fixtures/markdown-app/source/lax_spacing.html.markdown b/middleman-core/fixtures/markdown-app/source/lax_spacing.html.markdown new file mode 100644 index 00000000..c47785b9 --- /dev/null +++ b/middleman-core/fixtures/markdown-app/source/lax_spacing.html.markdown @@ -0,0 +1,3 @@ +hello +
world
+again \ No newline at end of file diff --git a/middleman-core/fixtures/markdown-app/source/prettify.html.markdown b/middleman-core/fixtures/markdown-app/source/prettify.html.markdown new file mode 100644 index 00000000..fc057a09 --- /dev/null +++ b/middleman-core/fixtures/markdown-app/source/prettify.html.markdown @@ -0,0 +1,3 @@ +``` +code block +``` \ No newline at end of file diff --git a/middleman-core/fixtures/markdown-app/source/quote.html.markdown b/middleman-core/fixtures/markdown-app/source/quote.html.markdown new file mode 100644 index 00000000..928ed5f1 --- /dev/null +++ b/middleman-core/fixtures/markdown-app/source/quote.html.markdown @@ -0,0 +1 @@ +this is "quote" \ No newline at end of file diff --git a/middleman-core/fixtures/markdown-app/source/safe_links.html.markdown b/middleman-core/fixtures/markdown-app/source/safe_links.html.markdown new file mode 100644 index 00000000..655fd33a --- /dev/null +++ b/middleman-core/fixtures/markdown-app/source/safe_links.html.markdown @@ -0,0 +1 @@ +[IRC](irc://chat.freenode.org/#freenode) \ No newline at end of file diff --git a/middleman-core/fixtures/markdown-app/source/underline.html.markdown b/middleman-core/fixtures/markdown-app/source/underline.html.markdown new file mode 100644 index 00000000..baadeda9 --- /dev/null +++ b/middleman-core/fixtures/markdown-app/source/underline.html.markdown @@ -0,0 +1 @@ +hello _underlined_ text \ No newline at end of file diff --git a/middleman-core/fixtures/markdown-app/source/with_toc_data.html.markdown b/middleman-core/fixtures/markdown-app/source/with_toc_data.html.markdown index 2ccb0be5..018d5ef5 100644 --- a/middleman-core/fixtures/markdown-app/source/with_toc_data.html.markdown +++ b/middleman-core/fixtures/markdown-app/source/with_toc_data.html.markdown @@ -1,3 +1,3 @@ -# Header 1 +# First Header -## Header 2 \ No newline at end of file +## Second Header \ No newline at end of file diff --git a/middleman-core/lib/middleman-core/renderers/redcarpet.rb b/middleman-core/lib/middleman-core/renderers/redcarpet.rb index 6c3616f4..a2e75b03 100644 --- a/middleman-core/lib/middleman-core/renderers/redcarpet.rb +++ b/middleman-core/lib/middleman-core/renderers/redcarpet.rb @@ -4,12 +4,21 @@ module Middleman module Renderers class RedcarpetTemplate < ::Tilt::RedcarpetTemplate::Redcarpet2 + + # because tilt has decided to convert these + # in the wrong direction + ALIASES = { + :escape_html => :filter_html + } + # Overwrite built-in Tilt version. # Don't overload :renderer option with smartypants # Support renderer-level options def generate_renderer return options.delete(:renderer) if options.has_key?(:renderer) + covert_options_to_aliases! + # Pick a renderer renderer = MiddlemanRedcarpetHTML @@ -30,6 +39,14 @@ module Middleman renderer.new(render_options) end + + private + + def covert_options_to_aliases! + ALIASES.each do |aka, actual| + options[actual] = options.delete(aka) if options.has_key? aka + end + end end # Custom Redcarpet renderer that uses our helpers for images and links @@ -54,7 +71,10 @@ module Middleman def link(link, title, content) if !@local_options[:no_links] - middleman_app.link_to(content, link, :title => title) + attributes = { :title => title } + attributes.merge!( @local_options[:link_attributes] ) if @local_options[:link_attributes] + + middleman_app.link_to(content, link, attributes ) else link_string = link.dup link_string << %Q{"#{title}"} if title && title.length > 0 && title != alt_text