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