diff options
author | Xavier Noria <fxn@hashref.com> | 2012-09-17 13:59:45 -0700 |
---|---|---|
committer | Xavier Noria <fxn@hashref.com> | 2012-09-17 13:59:45 -0700 |
commit | 5f34f12977852ada2186ea451663e98b0f9a8d28 (patch) | |
tree | 35b41a14bcc2d59643d86dcd2e4049e1c225a6bb /guides/rails_guides/markdown | |
parent | a95ddf647580a8cb9347e557b4468c55d81fd026 (diff) | |
parent | 1fa5c3b39f5d0bb23c8c3d60b023613386629946 (diff) | |
download | rails-5f34f12977852ada2186ea451663e98b0f9a8d28.tar.gz rails-5f34f12977852ada2186ea451663e98b0f9a8d28.tar.bz2 rails-5f34f12977852ada2186ea451663e98b0f9a8d28.zip |
Merge pull request #7663 from sikachu/master-guide-markdown
Convert all the guides into GFM
Diffstat (limited to 'guides/rails_guides/markdown')
-rw-r--r-- | guides/rails_guides/markdown/renderer.rb | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/guides/rails_guides/markdown/renderer.rb b/guides/rails_guides/markdown/renderer.rb new file mode 100644 index 0000000000..2f36af1fb3 --- /dev/null +++ b/guides/rails_guides/markdown/renderer.rb @@ -0,0 +1,82 @@ +module RailsGuides + class Markdown + class Renderer < Redcarpet::Render::HTML + def initialize(options={}) + super + end + + def block_code(code, language) + <<-HTML +<div class="code_container"> +<pre class="brush: #{brush_for(language)}; gutter: false; toolbar: false"> +#{ERB::Util.h(code).strip} +</pre> +</div> +HTML + end + + def header(text, header_level) + # Always increase the heading level by, so we can use h1, h2 heading in the document + header_level += 1 + + %(<h#{header_level}>#{text}</h#{header_level}>) + end + + def paragraph(text) + if text =~ /^(TIP|IMPORTANT|CAUTION|WARNING|NOTE|INFO|TODO)[.:](.*?)/ + convert_notes(text) + elsif text =~ /^\[<sup>(\d+)\]:<\/sup> (.+)$/ + linkback = %(<a href="#footnote-#{$1}-ref"><sup>#{$1}</sup></a>) + %(<p class="footnote" id="footnote-#{$1}">#{linkback} #{$2}</p>) + else + text = convert_footnotes(text) + "<p>#{text}</p>" + end + end + + private + + def convert_footnotes(text) + text.gsub(/\[<sup>(\d+)\]<\/sup>/i) do + %(<sup class="footnote" id="footnote-#{$1}-ref">) + + %(<a href="#footnote-#{$1}">#{$1}</a></sup>) + end + end + + def brush_for(code_type) + case code_type + when 'ruby', 'sql', 'plain' + code_type + when 'erb' + 'ruby; html-script: true' + when 'html' + 'xml' # html is understood, but there are .xml rules in the CSS + else + 'plain' + end + end + + def convert_notes(body) + # The following regexp detects special labels followed by a + # paragraph, perhaps at the end of the document. + # + # It is important that we do not eat more than one newline + # because formatting may be wrong otherwise. For example, + # if a bulleted list follows the first item is not rendered + # as a list item, but as a paragraph starting with a plain + # asterisk. + body.gsub(/^(TIP|IMPORTANT|CAUTION|WARNING|NOTE|INFO|TODO)[.:](.*?)(\n(?=\n)|\Z)/m) do |m| + css_class = case $1 + when 'CAUTION', 'IMPORTANT' + 'warning' + when 'TIP' + 'info' + else + $1.downcase + end + %(<div class="#{css_class}"><p>#{$2.strip}</p></div>) + end + end + end + end +end |