textile_extensions.rb 1.4 KB
Newer Older
1 2
require 'active_support/core_ext/object/inclusion'

3
module RailsGuides
X
Xavier Noria 已提交
4
  module TextileExtensions
5
    def notestuff(body)
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
      # 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)[.:](.*?)(\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>)
24 25 26 27 28
      end
    end

    def plusplus(body)
      body.gsub!(/\+(.*?)\+/) do |m|
29
        "<notextile><tt>#{$1}</tt></notextile>"
30
      end
31 32 33

      # The real plus sign
      body.gsub!('<plus>', '+')
34 35 36
    end

    def code(body)
37
      body.gsub!(%r{<(yaml|shell|ruby|erb|html|sql|plain)>(.*?)</\1>}m) do |m|
38
        es = ERB::Util.h($2)
39
        css_class = $1.in?(['erb', 'shell']) ? 'html' : $1
40
        %{<notextile><div class="code_container"><code class="#{css_class}">#{es}</code></div></notextile>}
41 42 43 44
      end
    end
  end
end