OSDN Git Service

BugTrack/401:インラインプラグインの処理を修正
authorarino <arino>
Fri, 27 Jun 2003 15:50:07 +0000 (00:50 +0900)
committerarino <arino>
Fri, 27 Jun 2003 15:50:07 +0000 (00:50 +0900)
make_link.php

index 1c2ba6d..4ed8fd6 100644 (file)
@@ -2,7 +2,7 @@
 /////////////////////////////////////////////////
 // PukiWiki - Yet another WikiWikiWeb clone.
 //
-// $Id: make_link.php,v 1.44 2003/06/02 09:58:27 arino Exp $
+// $Id: make_link.php,v 1.45 2003/06/27 15:50:07 arino Exp $
 //
 
 // ¥ê¥ó¥¯¤òÉղ乤ë
@@ -192,7 +192,7 @@ class Link
 // ¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó
 class Link_plugin extends Link
 {
-       var $param,$body;
+       var $param,$body,$plain;
        
        function Link_plugin($start)
        {
@@ -201,15 +201,18 @@ class Link_plugin extends Link
        function get_pattern()
        {
                return <<<EOD
-&(\w+) # (1) plugin name
-(?:
- \(
-  ([^)]*)  # (2) parameter
- \)
-)?
+&
+(           # (1) plain
+ (\w+)      # (2) plugin name
+ (?:
+  \(
+   ([^)]*)  # (3) parameter
+  \)
+ )?
+)
 (?:
  \{
-  (.*)     # (3) body
+  (.*)      # (4) body
  \}
 )?
 ;
@@ -217,35 +220,31 @@ EOD;
        }
        function get_count()
        {
-               return 3;
+               return 4;
        }
        function set($arr,$page)
        {
                $arr = $this->splice($arr);
                
-               $name = $arr[1];
-               $this->param = $arr[2];
-               $this->body = ($arr[3] == '') ? '' : make_link($arr[3]);
-               
-               if (!exist_plugin_inline($name))
-               {
-                       return FALSE;
-               }
+               $this->plain = $arr[1];
+               $name = $arr[2];
+               $this->param = $arr[3];
+               $this->body = ($arr[4] == '') ? '' : make_link($arr[4]);
                
                return parent::setParam($page,$name,'plugin');
        }
        function toString()
        {
-               return $this->make_inline($this->name,$this->param,$this->body);
+               return $this->make_inline($this->plain,$this->name,$this->param,$this->body);
        }
-       function make_inline($func,$param,$body)
+       function make_inline($plain,$func,$param,$body)
        {
                //&hoge(){...}; &fuga(){...}; ¤Îbody¤¬'...}; &fuga(){...'¤È¤Ê¤ë¤Î¤Ç¡¢Á°¸å¤Ëʬ¤±¤ë
                $after = '';
-               if (preg_match("/^ ((?!};).*?) }; (.*?) &amp; (\w+) (?: \( ([^()]*) \) )? { (.+)$/x",$body,$matches))
+               if (preg_match("/^ ((?!};).*?) }; (.*?)  &amp; ( (\w+) (?: \( ([^()]*) \) )? ) { (.+)$/x",$body,$matches))
                {
                        $body = $matches[1];
-                       $after = $matches[2].$this->make_inline($matches[3],$matches[4],$matches[5]);
+                       $after = $matches[2].$this->make_inline($matches[3],$matches[4],$matches[5],$matches[6]);
                }
                
                // ¥×¥é¥°¥¤¥ó¸Æ¤Ó½Ð¤·
@@ -259,7 +258,7 @@ EOD;
                }
                
                // ¥×¥é¥°¥¤¥ó¤¬Â¸ºß¤·¤Ê¤¤¤«¡¢ÊÑ´¹¤Ë¼ºÇÔ
-               return htmlspecialchars($this->text);
+               return make_line_rules(htmlspecialchars('&'.$plain).($body == '' ? ';' : "\{$body};")).$after;
        }
 }
 // Ãí¼á