From c437e2d7d416dae73efdea248a34b452d912986e Mon Sep 17 00:00:00 2001 From: Arthur Schreiber Date: Tue, 17 Apr 2012 23:02:21 +0200 Subject: [PATCH] Switch to Redcarpet for Markdown Rendering. This gives us Github Flavored Markdown, which is awesome. --- Gemfile | 4 ++-- Gemfile.lock | 8 ++++---- app/assets/stylesheets/highlight.scss | 4 ++-- app/helpers/application_helper.rb | 13 ++++++++++++- app/helpers/wikis_helper.rb | 3 --- app/views/wikis/show.html.haml | 2 +- lib/redcarpet/render/gitlab_html.rb | 9 +++++++++ 7 files changed, 30 insertions(+), 13 deletions(-) create mode 100644 lib/redcarpet/render/gitlab_html.rb diff --git a/Gemfile b/Gemfile index 24bc650274a..1033bfd21da 100644 --- a/Gemfile +++ b/Gemfile @@ -18,12 +18,12 @@ gem "six" gem "therubyracer" gem "faker" gem "seed-fu" -gem "pygments.rb", "0.2.7" +gem "pygments.rb", "~> 0.2.11" +gem "redcarpet", "~> 2.1.1" gem "thin" gem "unicorn" gem "git" gem "acts_as_list" -gem "rdiscount" gem "acts-as-taggable-on", "~> 2.1.0" gem "drapper" gem "resque", "~> 1.20.0" diff --git a/Gemfile.lock b/Gemfile.lock index 30dc519dd9d..2b6594b988f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -169,7 +169,7 @@ GEM coderay (~> 1.0.5) method_source (~> 0.7) slop (>= 2.4.4, < 3) - pygments.rb (0.2.7) + pygments.rb (0.2.11) rubypython (~> 0.5.3) pyu-ruby-sasl (0.0.3.3) rack (1.4.1) @@ -200,9 +200,9 @@ GEM thor (~> 0.14.6) raindrops (0.8.0) rake (0.9.2.2) - rdiscount (1.6.8) rdoc (3.12) json (~> 1.4) + redcarpet (2.1.1) redis (2.2.2) redis-namespace (1.0.3) redis (< 3.0.0) @@ -330,11 +330,11 @@ DEPENDENCIES mysql2 omniauth-ldap pry - pygments.rb (= 0.2.7) + pygments.rb (~> 0.2.11) rails (= 3.2.1) rails-footnotes rake - rdiscount + redcarpet (~> 2.1.1) resque (~> 1.20.0) rspec-rails sass-rails (= 3.2.3) diff --git a/app/assets/stylesheets/highlight.scss b/app/assets/stylesheets/highlight.scss index 0dbfc0ed964..8f71c4f57f2 100644 --- a/app/assets/stylesheets/highlight.scss +++ b/app/assets/stylesheets/highlight.scss @@ -22,7 +22,7 @@ td.linenos{ vertical-align:top; } -.highlight{ +.highlighttable .highlight{ background:none; padding:10px 0px 0px 10px; margin-left:0px; @@ -31,7 +31,7 @@ td.linenos{ } .linenodiv pre, -.highlight pre{ +.highlighttable .highlight pre{ margin:0; padding:0; background:none; diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 0edd3125ee1..92f1680ef1f 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -72,7 +72,18 @@ module ApplicationHelper end def markdown(text) - RDiscount.new(text, :autolink, :no_pseudo_protocols, :safelink, :smart, :filter_html).to_html.html_safe + @__renderer ||= Redcarpet::Markdown.new(Redcarpet::Render::GitlabHTML.new(filter_html: true), { + no_intra_emphasis: true, + tables: true, + fenced_code_blocks: true, + autolink: true, + strikethrough: true, + lax_html_blocks: true, + space_after_headers: true, + superscript: true + }) + + @__renderer.render(text).html_safe end def search_autocomplete_source diff --git a/app/helpers/wikis_helper.rb b/app/helpers/wikis_helper.rb index 0c24f57add6..bb168351b2a 100644 --- a/app/helpers/wikis_helper.rb +++ b/app/helpers/wikis_helper.rb @@ -1,5 +1,2 @@ module WikisHelper - def markdown_to_html(text) - RDiscount.new(text).to_html.html_safe - end end diff --git a/app/views/wikis/show.html.haml b/app/views/wikis/show.html.haml index 8ac4994a1b3..e7f879f9cec 100644 --- a/app/views/wikis/show.html.haml +++ b/app/views/wikis/show.html.haml @@ -9,7 +9,7 @@ %hr .wiki_content = preserve do - = markdown_to_html @wiki.content + = markdown @wiki.content %p.time Last edited by #{@wiki.user.name}, in #{time_ago_in_words @wiki.created_at} - if can? current_user, :admin_wiki, @project diff --git a/lib/redcarpet/render/gitlab_html.rb b/lib/redcarpet/render/gitlab_html.rb new file mode 100644 index 00000000000..29be478052a --- /dev/null +++ b/lib/redcarpet/render/gitlab_html.rb @@ -0,0 +1,9 @@ +class Redcarpet::Render::GitlabHTML < Redcarpet::Render::HTML + def block_code(code, language) + if Pygments::Lexer.find(language) + Pygments.highlight(code, :lexer => language) + else + Pygments.highlight(code) + end + end +end \ No newline at end of file