Fixed: some textile modifiers combinations don't work, eg. bold inside underline (#5045).

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3561 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2010-03-11 19:55:31 +00:00
parent c7c3c0cc7c
commit 4e5078ebb0
2 changed files with 52 additions and 3 deletions

View File

@ -373,17 +373,21 @@ class RedCloth3 < String
['^', 'sup', :limit], ['^', 'sup', :limit],
['~', 'sub', :limit] ['~', 'sub', :limit]
] ]
QTAGS_JOIN = QTAGS.map {|rc, ht, rtype| Regexp::quote rc}.join('|')
QTAGS.collect! do |rc, ht, rtype| QTAGS.collect! do |rc, ht, rtype|
rcq = Regexp::quote rc rcq = Regexp::quote rc
re = re =
case rtype case rtype
when :limit when :limit
/(^|[>\s\(]) /(^|[>\s\(])
(#{QTAGS_JOIN}|)
(#{rcq}) (#{rcq})
(#{C}) (#{C})
(?::(\S+?))? (?::(\S+?))?
(\w|[^\s\-].*?[^\s\-]) (\w|[^\s].*?[^\s])
#{rcq} #{rcq}
(#{QTAGS_JOIN}|)
(?=[[:punct:]]|\s|\)|$)/x (?=[[:punct:]]|\s|\)|$)/x
else else
/(#{rcq}) /(#{rcq})
@ -768,7 +772,7 @@ class RedCloth3 < String
case rtype case rtype
when :limit when :limit
sta,qtag,atts,cite,content = $~[1..5] sta,oqs,qtag,atts,cite,content,oqa = $~[1..7]
else else
qtag,atts,cite,content = $~[1..4] qtag,atts,cite,content = $~[1..4]
sta = '' sta = ''
@ -777,7 +781,7 @@ class RedCloth3 < String
atts << " cite=\"#{ cite }\"" if cite atts << " cite=\"#{ cite }\"" if cite
atts = shelve( atts ) if atts atts = shelve( atts ) if atts
"#{ sta }<#{ ht }#{ atts }>#{ content }</#{ ht }>" "#{ sta }#{ oqs }<#{ ht }#{ atts }>#{ content }</#{ ht }>#{ oqa }"
end end
end end

View File

@ -0,0 +1,45 @@
# Redmine - project management software
# 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
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
require File.dirname(__FILE__) + '/../../../../test_helper'
class Redmine::WikiFormatting::TextileFormatterTest < HelperTestCase
def setup
@formatter = Redmine::WikiFormatting::Textile::Formatter
end
MODIFIERS = {
"*" => 'strong', # bold
"_" => 'em', # italic
"+" => 'ins', # underline
"-" => 'del', # deleted
"^" => 'sup', # superscript
"~" => 'sub' # subscript
}
def test_modifiers_combination
MODIFIERS.each do |m1, tag1|
MODIFIERS.each do |m2, tag2|
next if m1 == m2
text = "#{m2}#{m1}Phrase modifiers#{m1}#{m2}"
html = "<p><#{tag2}><#{tag1}>Phrase modifiers</#{tag1}></#{tag2}></p>"
assert_equal html, @formatter.new(text).to_html
end
end
end
end