OSDN Git Service

Fixed: some textile modifiers combinations don't work, eg. bold inside underline...
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Thu, 11 Mar 2010 19:55:31 +0000 (19:55 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Thu, 11 Mar 2010 19:55:31 +0000 (19:55 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3561 e93f8b46-1217-0410-a6f0-8f06a7374b81

lib/redcloth3.rb
test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb [new file with mode: 0644]

index 79dd0b6..37816a0 100644 (file)
@@ -373,17 +373,21 @@ class RedCloth3 < String
         ['^', 'sup', :limit],
         ['~', 'sub', :limit]
     ] 
+    QTAGS_JOIN = QTAGS.map {|rc, ht, rtype| Regexp::quote rc}.join('|')
+    
     QTAGS.collect! do |rc, ht, rtype|
         rcq = Regexp::quote rc
         re =
             case rtype
             when :limit
                 /(^|[>\s\(])
+                (#{QTAGS_JOIN}|)
                 (#{rcq})
                 (#{C})
                 (?::(\S+?))?
-                (\w|[^\s\-].*?[^\s\-])
+                (\w|[^\s].*?[^\s])
                 #{rcq}
+                (#{QTAGS_JOIN}|)
                 (?=[[:punct:]]|\s|\)|$)/x
             else
                 /(#{rcq})
@@ -768,7 +772,7 @@ class RedCloth3 < String
              
                 case rtype
                 when :limit
-                    sta,qtag,atts,cite,content = $~[1..5]
+                    sta,oqs,qtag,atts,cite,content,oqa = $~[1..7]
                 else
                     qtag,atts,cite,content = $~[1..4]
                     sta = ''
@@ -777,7 +781,7 @@ class RedCloth3 < String
                 atts << " cite=\"#{ cite }\"" if cite
                 atts = shelve( atts ) if atts
 
-                "#{ sta }<#{ ht }#{ atts }>#{ content }</#{ ht }>"
+                "#{ sta }#{ oqs }<#{ ht }#{ atts }>#{ content }</#{ ht }>#{ oqa }"
 
             end
         end
diff --git a/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb b/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb
new file mode 100644 (file)
index 0000000..49a75cd
--- /dev/null
@@ -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