class RailsGuides::Markdown::Renderer

Public Class Methods

new(options={}) click to toggle source
Calls superclass method
# File guides/rails_guides/markdown/renderer.rb, line 4
def initialize(options={})
  super
end

Public Instance Methods

block_code(code, language) click to toggle source
# File guides/rails_guides/markdown/renderer.rb, line 8
      def block_code(code, language)
        <<-HTML
<div class="code_container">
<pre class="brush: #{brush_for(language)}; gutter: false; toolbar: false">
#{ERB::Util.h(code)}
</pre>
</div>
HTML
      end
header(text, header_level) click to toggle source
# File guides/rails_guides/markdown/renderer.rb, line 18
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
paragraph(text) click to toggle source
# File guides/rails_guides/markdown/renderer.rb, line 25
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 Instance Methods

brush_for(code_type) click to toggle source
# File guides/rails_guides/markdown/renderer.rb, line 46
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
convert_footnotes(text) click to toggle source
# File guides/rails_guides/markdown/renderer.rb, line 39
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
convert_notes(body) click to toggle source
# File guides/rails_guides/markdown/renderer.rb, line 59
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
    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