aboutsummaryrefslogtreecommitdiffstats
path: root/guides/rails_guides/markdown
diff options
context:
space:
mode:
authorPrem Sichanugrist <s@sikachu.com>2012-08-31 12:01:06 -0400
committerPrem Sichanugrist <s@sikac.hu>2012-09-17 15:54:21 -0400
commit544f6bcb9095cfc826f892e6bfafee6a9bafa494 (patch)
tree39fd19a2097cd42bbc693707797b60e08fc5cbf8 /guides/rails_guides/markdown
parentfd9867c7dea8f030bd712a2e407de25c43b6c400 (diff)
downloadrails-544f6bcb9095cfc826f892e6bfafee6a9bafa494.tar.gz
rails-544f6bcb9095cfc826f892e6bfafee6a9bafa494.tar.bz2
rails-544f6bcb9095cfc826f892e6bfafee6a9bafa494.zip
Start rewriting 4.0 release note into Markdown
Diffstat (limited to 'guides/rails_guides/markdown')
-rw-r--r--guides/rails_guides/markdown/renderer.rb48
1 files changed, 48 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..ea3b7fc044
--- /dev/null
+++ b/guides/rails_guides/markdown/renderer.rb
@@ -0,0 +1,48 @@
+module RailsGuides
+ class Markdown
+ class Renderer < Redcarpet::Render::HTML
+ def initialize(options={})
+ super
+ 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} id="#{dom_id(text)}">#{text}</h#{header_level}>)
+ end
+
+ def preprocess(full_document)
+ convert_notes(full_document)
+ end
+
+ private
+
+ 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
+ %Q(<div class="#{css_class}"><p>#{$2.strip}</p></div>\n)
+ end
+ end
+
+ def dom_id(text)
+ text.downcase.gsub(/[^a-z0-9]+/, '-').strip
+ end
+ end
+ end
+end