diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2010-11-06 17:47:27 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2010-11-06 17:47:27 +0000 |
commit | 024ff96ee27aa7e61ceec25a351f6800461d5cf3 (patch) | |
tree | d0cc3a32d0990d422916caa5ff4793beb5a990e5 /lib | |
parent | 666c54e86c2a8532ff9330d7ce4e9e7d3a44b173 (diff) | |
download | redmine-024ff96ee27aa7e61ceec25a351f6800461d5cf3.tar.gz redmine-024ff96ee27aa7e61ceec25a351f6800461d5cf3.zip |
Extract headings and TOC parsing from the textile formatter.
Fixes #2038 and #3707 and will allow to support TOC with other text formatters.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4376 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'lib')
-rw-r--r-- | lib/redmine/wiki_formatting/macros.rb | 2 | ||||
-rw-r--r-- | lib/redmine/wiki_formatting/textile/formatter.rb | 49 |
2 files changed, 3 insertions, 48 deletions
diff --git a/lib/redmine/wiki_formatting/macros.rb b/lib/redmine/wiki_formatting/macros.rb index 6f8d09d60..63cd2ab8e 100644 --- a/lib/redmine/wiki_formatting/macros.rb +++ b/lib/redmine/wiki_formatting/macros.rb @@ -112,7 +112,7 @@ module Redmine @included_wiki_pages ||= [] raise 'Circular inclusion detected' if @included_wiki_pages.include?(page.title) @included_wiki_pages << page.title - out = textilizable(page.content, :text, :attachments => page.attachments) + out = textilizable(page.content, :text, :attachments => page.attachments, :headings => false) @included_wiki_pages.pop out end diff --git a/lib/redmine/wiki_formatting/textile/formatter.rb b/lib/redmine/wiki_formatting/textile/formatter.rb index 6794f82c7..88d52a6c2 100644 --- a/lib/redmine/wiki_formatting/textile/formatter.rb +++ b/lib/redmine/wiki_formatting/textile/formatter.rb @@ -1,5 +1,5 @@ # Redmine - project management software -# Copyright (C) 2006-2008 Jean-Philippe Lang +# Copyright (C) 2006-2010 Jean-Philippe Lang # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -24,7 +24,7 @@ module Redmine include ActionView::Helpers::TagHelper # auto_link rule after textile rules so that it doesn't break !image_url! tags - RULES = [:textile, :block_markdown_rule, :inline_auto_link, :inline_auto_mailto, :inline_toc] + RULES = [:textile, :block_markdown_rule, :inline_auto_link, :inline_auto_mailto] def initialize(*args) super @@ -61,51 +61,6 @@ module Redmine end end - # Patch to add 'table of content' support to RedCloth - def textile_p_withtoc(tag, atts, cite, content) - # removes wiki links from the item - toc_item = content.gsub(/(\[\[([^\]\|]*)(\|([^\]]*))?\]\])/) { $4 || $2 } - # sanitizes titles from links - # see redcloth3.rb, same as "#{pre}#{text}#{post}" - toc_item.gsub!(LINK_RE) { [$2, $4, $9].join } - # sanitizes image links from titles - toc_item.gsub!(IMAGE_RE) { [$5].join } - # removes styles - # eg. %{color:red}Triggers% => Triggers - toc_item.gsub! %r[%\{[^\}]*\}([^%]+)%], '\\1' - - # replaces non word caracters by dashes - anchor = toc_item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-') - - unless anchor.blank? - if tag =~ /^h(\d)$/ - @toc << [$1.to_i, anchor, toc_item] - end - atts << " id=\"#{anchor}\"" - content = content + "<a href=\"##{anchor}\" class=\"wiki-anchor\">¶</a>" - end - textile_p(tag, atts, cite, content) - end - - alias :textile_h1 :textile_p_withtoc - alias :textile_h2 :textile_p_withtoc - alias :textile_h3 :textile_p_withtoc - - def inline_toc(text) - text.gsub!(/<p>\{\{([<>]?)toc\}\}<\/p>/i) do - div_class = 'toc' - div_class << ' right' if $1 == '>' - div_class << ' left' if $1 == '<' - out = "<ul class=\"#{div_class}\">" - @toc.each do |heading| - level, anchor, toc_item = heading - out << "<li class=\"heading#{level}\"><a href=\"##{anchor}\">#{toc_item}</a></li>\n" - end - out << '</ul>' - out - end - end - AUTO_LINK_RE = %r{ ( # leading text <\w+.*?>| # leading HTML tag, or |