aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier Noria <fxn@hashref.com>2011-07-25 14:12:12 -0700
committerXavier Noria <fxn@hashref.com>2011-07-25 14:12:12 -0700
commit598eab90ffb60638a578b5b205388cb755485280 (patch)
tree26323a9190d940594367eb4879840bdfbc583e80
parent50ca6f06c739994329cd936fce5f266bd799b37e (diff)
downloadrails-598eab90ffb60638a578b5b205388cb755485280.tar.gz
rails-598eab90ffb60638a578b5b205388cb755485280.tar.bz2
rails-598eab90ffb60638a578b5b205388cb755485280.zip
let TIP and friends handle a multiline paragraph
Normally I would have done this in master, but there was already a guide with wrapped content, so worked here. I am going to cross-merge now.
-rw-r--r--railties/guides/rails_guides/generator.rb2
-rw-r--r--railties/guides/rails_guides/textile_extensions.rb35
2 files changed, 19 insertions, 18 deletions
diff --git a/railties/guides/rails_guides/generator.rb b/railties/guides/rails_guides/generator.rb
index 14d671c8f3..d304512ff7 100644
--- a/railties/guides/rails_guides/generator.rb
+++ b/railties/guides/rails_guides/generator.rb
@@ -204,7 +204,7 @@ module RailsGuides
t = RedCloth.new(body)
t.hard_breaks = false
t.lite_mode = lite_mode
- t.to_html(:notestuff, :plusplus, :code, :tip)
+ t.to_html(:notestuff, :plusplus, :code)
end
end
diff --git a/railties/guides/rails_guides/textile_extensions.rb b/railties/guides/rails_guides/textile_extensions.rb
index 352c5e91dd..b3e0e32357 100644
--- a/railties/guides/rails_guides/textile_extensions.rb
+++ b/railties/guides/rails_guides/textile_extensions.rb
@@ -3,23 +3,24 @@ require 'active_support/core_ext/object/inclusion'
module RailsGuides
module TextileExtensions
def notestuff(body)
- body.gsub!(/^(IMPORTANT|CAUTION|WARNING|NOTE|INFO)[.:](.*)$/) do |m|
- css_class = $1.downcase
- css_class = 'warning' if css_class.in?(['caution', 'important'])
-
- result = "<div class='#{css_class}'><p>"
- result << $2.strip
- result << '</p></div>'
- result
- end
- end
-
- def tip(body)
- body.gsub!(/^TIP[.:](.*)$/) do |m|
- result = "<div class='info'><p>"
- result << $1.strip
- result << '</p></div>'
- result
+ # 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>)
end
end