[前][次][番号順一覧][スレッド一覧]

hikidoc:41

From: Kazuhiko <kazuhiko@f...>
Date: Thu, 27 Jul 2006 12:00:13 +0900
Subject: [hikidoc:41] Re: インライン要素の処理に不具合?

こんにちは、かずひこです。

At Wed, 26 Jul 2006 16:29:46 +0900 (JST),
MoonWolf wrote:

> ||foo||
> ||''foo''||
> ||==foo==||
> ||==''foo''==||
> ||''==foo==''||
> 
> 3行目までは正常に表示されますが、4,5行目がおかしい。
> ネストが正しく処理できていないようです。

ご報告ありがとうございます。

確かに、ネストの場合をまったく考慮していませんでした。
以下の差分でコミットしましたがいかがでしょうか?

Index: test/test_hikidoc.rb
===================================================================
--- test/test_hikidoc.rb	(revision 36)
+++ test/test_hikidoc.rb	(revision 37)
@@ -175,6 +175,11 @@
     assert_equal( "<p><em>foo</em> and <em>bar</em></p>\n", HikiDoc.new( "''foo'' and ''bar''" ).to_html )
   end
 
+  def test_nested_modifier
+    assert_equal( "<p><em><del>foo</del></em></p>\n", HikiDoc.new( "''==foo==''" ).to_html )
+    assert_equal( "<p><del><em>foo</em></del></p>\n", HikiDoc.new( "==''foo''==" ).to_html )
+  end
+
   def test_modifier_and_link
     assert_equal( %Q|<p><a href="http://hikiwiki.org/"><strong>Hiki</strong></a></p>\n|, HikiDoc.new( "[['''Hiki'''|http://hikiwiki.org/]]" ).to_html )
   end
Index: lib/hikidoc.rb
===================================================================
--- lib/hikidoc.rb	(revision 36)
+++ lib/hikidoc.rb	(revision 37)
@@ -367,20 +367,17 @@
   STRONG = "'''"
   EM = "''"
   DEL = '=='
-  STRONG_RE = /#{STRONG}(.+?)#{STRONG}/
-  EM_RE = /#{EM}(.+?)#{EM}/
-  DEL_RE = /#{DEL}(.+?)#{DEL}/
-  MODIFIER_RE = /(#{STRONG_RE}|#{EM_RE}|#{DEL_RE})/   
+  MODIFIER_RE = /(#{STRONG}|#{EM}|#{DEL})(.+?)(?:\1)/
 
   def parse_modifier( text )
     text.gsub( MODIFIER_RE ) do |str|
-      case str
-      when STRONG_RE
-        store_block( "<strong>#{$1}</strong>" )
-      when EM_RE
-        store_block( "<em>#{$1}</em>" )
-      when DEL_RE
-        store_block( "<del>#{$1}</del>" )
+      case $1
+      when STRONG
+        store_block( "<strong>#{parse_modifier($2)}</strong>" )
+      when EM
+        store_block( "<em>#{parse_modifier($2)}</em>" )
+      when DEL
+        store_block( "<del>#{parse_modifier($2)}</del>" )
       else
         str
       end
-- 
かずひこ <http://wiki.fdiary.net/kazuhiko/>
  「恋とハックはアジャイルが命!」

--
ML: hikidoc@m...
使い方: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]

        40 2006-07-26 09:29 [moonwolf@m...       ] インライン要素の処理に不具合?           
->      41 2006-07-27 05:00 ┗[kazuhiko@f...       ]                                       
        42 2006-07-28 04:55  ┗[kazuhiko@f...       ]