# 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

      %Q(<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 = %Q(<a href="#footnote-#{$1}-ref"><sup>#{$1}</sup></a>)
        %Q(<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
        %Q(<sup class="footnote" id="footnote-#{$1}-ref">) +
          %Q(<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
        %Q(<div class="#{css_class}"><p>#{$2.strip}</p></div>)
      end
    end