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:
parent
c7c3c0cc7c
commit
4e5078ebb0
|
@ -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
|
||||||
|
|
|
@ -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
|
Loading…
Reference in New Issue