# frozen_string_literal: true module RailsGuides class Markdown class Renderer < Redcarpet::Render::HTML cattr_accessor :edge, :version def block_code(code, language) <<-HTML
#{ERB::Util.h(code)}
(.*?)
\.?$}
%(Defined in #{$1}
.
#{linkback} #{$2}
) else text = convert_footnotes(text) "#{text}
" end end private def convert_footnotes(text) text.gsub(/\[(\d+)\]<\/sup>/i) do %() + %(#{$1}) end end def class_for(code_type) case code_type when "ruby", "sql", "plain", "js", "yaml" code_type when "erb", "html+erb" "erb" when "html" "xml" # HTML is understood, but there are .xml rules in the CSS when "bash" "shell-session" 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 css_class = \ case $1 when "CAUTION", "IMPORTANT" "warning" when "TIP" "info" else $1.downcase end %(#{$2.strip}