OSDN Git Service

Corrected 1.54
[pukiwiki/pukiwiki.git] / plugin / ls2.inc.php
index 988c81c..6471203 100644 (file)
@@ -2,80 +2,74 @@
 /////////////////////////////////////////////////
 // PukiWiki - Yet another WikiWikiWeb clone.
 //
-// $Id: ls2.inc.php,v 1.15 2003/07/03 05:21:48 arino Exp $
+// $Id: ls2.inc.php,v 1.22 2004/08/12 15:28:58 henoheno Exp $
 //
 
 /*
-*¥×¥é¥°¥¤¥ó ls2
+* ¥×¥é¥°¥¤¥ó ls2
 ÇÛ²¼¤Î¥Ú¡¼¥¸¤Î¸«½Ð¤·(*,**,***)¤Î°ìÍ÷¤òɽ¼¨¤¹¤ë
 
-*Usage
- #ls2(¥Ñ¥¿¡¼¥ó[,¥Ñ¥é¥á¡¼¥¿])
+* Usage
+ #ls2(¥Ñ¥¿¡¼¥ó[,title|include|link|reverse|compact, ...],¥¿¥¤¥È¥ë)
 
-*¥Ñ¥é¥á¡¼¥¿
--¥Ñ¥¿¡¼¥ó(ºÇ½é¤Ë»ØÄê)~
+* ¥Ñ¥é¥á¡¼¥¿
+
+- ¥Ñ¥¿¡¼¥ó(ºÇ½é¤Ë»ØÄê)
 ¾Êά¤¹¤ë¤È¤­¤â¥«¥ó¥Þ¤¬É¬Í×
--title~
+
+- title
 ¸«½Ð¤·¤Î°ìÍ÷¤òɽ¼¨¤¹¤ë
--include~
+
+-include
 ¥¤¥ó¥¯¥ë¡¼¥É¤·¤Æ¤¤¤ë¥Ú¡¼¥¸¤Î¸«½Ð¤·¤òºÆµ¢Åª¤ËÎóµó¤¹¤ë
--link~
+
+-link
 action¥×¥é¥°¥¤¥ó¤ò¸Æ¤Ó½Ð¤¹¥ê¥ó¥¯¤òɽ¼¨
--reverse~
+
+-reverse
 ¥Ú¡¼¥¸¤Îʤӽç¤òȿž¤·¡¢¹ß½ç¤Ë¤¹¤ë
--compact~
+
+- compact
 ¸«½Ð¤·¥ì¥Ù¥ë¤òÄ´À°¤¹¤ë
 LS2_LIST_COMPACT¤¬TRUE¤Î»þ¤Ï̵¸ú(ÊѲ½¤·¤Ê¤¤)
+
+- ¥¿¥¤¥È¥ë
+¸«½Ð¤·¤Î¥¿¥¤¥È¥ë¤ò»ØÄꤹ¤ë (link¤ò»ØÄꤷ¤¿»þ¤Î¤ß)
+
 */
 
 //¸«½Ð¤·¥¢¥ó¥«¡¼¤Î½ñ¼°
-define('LS2_CONTENT_HEAD','#content_1_');
+define('LS2_CONTENT_HEAD', '#content_1_');
 
 //¸«½Ð¤·¥¢¥ó¥«¡¼¤Î³«»ÏÈÖ¹æ
-define('LS2_ANCHOR_ORIGIN',0);
+define('LS2_ANCHOR_ORIGIN', 0);
 
 //¸«½Ð¤·¥ì¥Ù¥ë¤òÄ´À°¤¹¤ë(¥Ç¥Õ¥©¥ë¥ÈÃÍ)
-define('LS2_LIST_COMPACT',FALSE);
+define('LS2_LIST_COMPACT', FALSE);
 
 function plugin_ls2_action()
 {
        global $vars;
        global $_ls2_msg_title;
-       
+
        $params = array();
-       foreach (array('title','include','reverse') as $key)
-       {
-               $params[$key] = array_key_exists($key,$vars);
+       foreach (array('title', 'include', 'reverse') as $key) {
+               $params[$key] = isset($vars[$key]);
        }
-       $prefix = array_key_exists('prefix',$vars) ? $vars['prefix'] : '';
-       $body = ls2_show_lists($prefix,$params);
-       
+       $prefix = isset($vars['prefix']) ? $vars['prefix'] : '';
+       $body = ls2_show_lists($prefix, $params);
+
        return array(
                'body'=>$body,
-               'msg'=>str_replace('$1',htmlspecialchars($prefix),$_ls2_msg_title)
+               'msg'=>str_replace('$1', htmlspecialchars($prefix), $_ls2_msg_title)
        );
 }
 
 function plugin_ls2_convert()
 {
-       global $script,$vars;
+       global $script, $vars;
        global $_ls2_msg_title;
 
-       $prefix = '';
-       if (func_num_args())
-       {
-               $args = func_get_args();
-               $prefix = array_shift($args);
-       }
-       else
-       {
-               $args = array();
-       }
-       if ($prefix == '')
-       {
-               $prefix = strip_bracket($vars['page']).'/';
-       }
-
        $params = array(
                'link'    => FALSE,
                'title'   => FALSE,
@@ -85,189 +79,173 @@ function plugin_ls2_convert()
                '_args'   => array(),
                '_done'   => FALSE
        );
-       array_walk($args, 'ls2_check_arg', &$params);
-       $title = (count($params['_args']) > 0) ?
-               join(',', $params['_args']) :
-               str_replace('$1',htmlspecialchars($prefix),$_ls2_msg_title);
 
-       if ($params['link'])
-       {
+       $args = array();
+       $prefix = '';
+       if (func_num_args()) {
+               $args   = func_get_args();
+               $prefix = array_shift($args);
+       }
+       if ($prefix == '') {
+               $prefix = strip_bracket($vars['page']) . '/';
+       }
+
+       array_walk($args, 'ls2_check_arg', & $params);
+
+       $title = (! empty($params['_args'])) ?
+               htmlspecialchars(join(',', $params['_args'])) : // Manual
+               str_replace('$1', htmlspecialchars($prefix), $_ls2_msg_title); // Auto
+
+       if ($params['link']) {
                $tmp = array();
-               $tmp[] = 'plugin=ls2&prefix='.$prefix;
-               if (isset($params['title']))
-               {
+               $tmp[] = 'plugin=ls2&prefix=' . rawurlencode($prefix);
+               if (isset($params['title'])) {
                        $tmp[] = 'title=1';
                }
-               if (isset($params['include']))
-               {
+               if (isset($params['include'])) {
                        $tmp[] = 'include=1';
                }
-               return '<p><a href="'.$script.'?'.join('&amp;',$tmp).'">'.$title.'</a></p>'."\n";
+               return '<p><a href="' . $script . '?' . join('&amp;', $tmp) . '">' . $title . '</a></p>' . "\n";
+       } else {
+               return ls2_show_lists($prefix, $params);
        }
-       return ls2_show_lists($prefix,$params);
 }
-function ls2_show_lists($prefix,&$params)
+
+function ls2_show_lists($prefix, & $params)
 {
        global $_ls2_err_nopages;
-       
-       if (strlen($prefix))
-       {
-               $pages = array();
-               foreach (get_existpages() as $_page)
-               {
-                       if (strpos($_page,$prefix) === 0)
-                       {
+
+       $pages = array();
+       if (strlen($prefix)) {
+               foreach (get_existpages() as $_page) {
+                       if (strpos($_page, $prefix) === 0)
                                $pages[] = $_page;
-                       }
                }
-       }
-       else
-       {
+       } else {
                $pages = get_existpages();
        }
+
        natcasesort($pages);
-       
-       if ($params['reverse'])
-       {
-               $pages = array_reverse($pages);
-       }
-       foreach ($pages as $page)
-       {
+       if ($params['reverse']) $pages = array_reverse($pages);
+
+       foreach ($pages as $page) {
                $params["page_$page"] = 0;
        }
-       if (count($pages) == 0)
-       {
-               return str_replace('$1',htmlspecialchars($prefix),$_ls2_err_nopages);
-       }
-       
-       $params['result'] = array();
-       $params['saved'] = array();
-       foreach ($pages as $page)
-       {
-               ls2_get_headings($page,$params,1);
+
+       if (count($pages) == 0) {
+               return str_replace('$1', htmlspecialchars($prefix), $_ls2_err_nopages);
+       } else {
+               $params['result'] = $params['saved'] = array();
+               foreach ($pages as $page) {
+                       ls2_get_headings($page, $params, 1);
+               }
+               return join("\n", $params['result']) . join("\n", $params['saved']);
        }
-       return join("\n",$params['result']).join("\n",$params['saved']);
 }
 
-function ls2_get_headings($page,&$params,$level,$include = FALSE)
+function ls2_get_headings($page, & $params, $level, $include = FALSE)
 {
        global $script;
        static $_ls2_anchor = 0;
-       
-       $is_done = (isset($params["page_$page"]) and $params["page_$page"] > 0); //¥Ú¡¼¥¸¤¬É½¼¨ºÑ¤ß¤Î¤È¤­True
-       
-       if (!$is_done)
-       {
-               $params["page_$page"] = ++$_ls2_anchor;
-       }
-       
+
+       // ¥Ú¡¼¥¸¤¬Ì¤É½¼¨¤Î¤È¤­
+       $is_done = (isset($params["page_$page"]) && $params["page_$page"] > 0);
+       if (! $is_done) $params["page_$page"] = ++$_ls2_anchor;
+
        $r_page = rawurlencode($page);
        $s_page = htmlspecialchars($page);
-       $title = $s_page.' '.get_pg_passage($page,FALSE);
-       $href = $script.'?cmd=read&amp;page='.$r_page;
-       
-       ls2_list_push($params,$level);
+       $title  = $s_page . ' ' . get_pg_passage($page, FALSE);
+       $href   = $script . '?cmd=read&amp;page=' . $r_page;
+
+       ls2_list_push($params, $level);
        $ret = $include ? '<li>include ' : '<li>';
-       if ($params['title'] and $is_done)
-       {
+
+       if ($params['title'] && $is_done) {
                $ret .= "<a href=\"$href\" title=\"$title\">$s_page</a> ";
                $ret .= "<a href=\"#list_{$params["page_$page"]}\"><sup>&uarr;</sup></a>";
-               array_push($params['result'],$ret);
+               array_push($params['result'], $ret);
                return;
        }
-       else
-       {
-               $ret .= "<a id=\"list_{$params["page_$page"]}\" href=\"$href\" title=\"$title\">$s_page</a>";
-               array_push($params['result'],$ret);
-       }
-       
+
+       $ret .= "<a id=\"list_{$params["page_$page"]}\" href=\"$href\" title=\"$title\">$s_page</a>";
+       array_push($params['result'], $ret);
+
        $anchor = LS2_ANCHOR_ORIGIN;
-       foreach (get_source($page) as $line)
-       {
-               if ($params['title'] and preg_match('/^(\*{1,3})/',$line,$matches))
-               {
-                       $id = make_heading($line);
+       $matches = array();
+       foreach (get_source($page) as $line) {
+               if ($params['title'] && preg_match('/^(\*{1,3})/', $line, $matches)) {
+                       $id    = make_heading($line);
                        $level = strlen($matches[1]);
-                       $id = LS2_CONTENT_HEAD.$anchor++;
-                       ls2_list_push($params,$level + strlen($level));
+                       $id    = LS2_CONTENT_HEAD . $anchor++;
+                       ls2_list_push($params, $level + strlen($level));
                        array_push($params['result'], "<li><a href=\"$href$id\">$line</a>");
-               }
-               else if ($params['include']
-                       and preg_match('/^#include\((.+)\)/',$line,$matches) and is_page($matches[1]))
+               } else if ($params['include']
+                       and preg_match('/^#include\((.+)\)/', $line, $matches) and is_page($matches[1]))
                {
-                       ls2_get_headings($matches[1],$params,$level + 1,TRUE);
+                       ls2_get_headings($matches[1], $params, $level + 1, TRUE);
                }
        }
 }
+
 //¥ê¥¹¥È¹½Â¤¤ò¹½ÃÛ¤¹¤ë
-function ls2_list_push(&$params,$level)
+function ls2_list_push(& $params, $level)
 {
        global $_ul_left_margin, $_ul_margin, $_list_pad_str;
-       
-       $result =& $params['result'];
-       $saved  =& $params['saved'];
+
+       $result = & $params['result'];
+       $saved  = & $params['saved'];
        $cont   = TRUE;
-       $open   = "<ul%s>";
+       $open   = '<ul%s>';
        $close  = '</li></ul>';
-       
-       while (count($saved) > $level or
-               (count($saved) > 0 and $saved[0] != $close))
-       {
+
+       while (count($saved) > $level ||
+             (! empty($saved) && $saved[0] != $close)) {
                array_push($result, array_shift($saved));
        }
-       
+
        $margin = $level - count($saved);
-       
-       while (count($saved) < ($level - 1))
-       {
+
+       while (count($saved) < ($level - 1)) {
                array_unshift($saved, ''); //count($saved)¤òÁý¤ä¤¹¤¿¤á¤Îdummy
        }
-       
-       if (count($saved) < $level)
-       {
+
+       if (count($saved) < $level) {
                $cont = FALSE;
                array_unshift($saved, $close);
-               
+
                $left = ($level == $margin) ? $_ul_left_margin : 0;
-               if ($params['compact'])
-               {
-                       // ¥Þ¡¼¥¸¥ó¤ò¸ÇÄê
-                       $left += $_ul_margin;
-                       // ¥ì¥Ù¥ë¤ò½¤Àµ
-                       $level -= ($margin - 1);
-               }
-               else
-               {
+               if ($params['compact']) {
+                       $left  += $_ul_margin;   // ¥Þ¡¼¥¸¥ó¤ò¸ÇÄê
+                       $level -= ($margin - 1); // ¥ì¥Ù¥ë¤ò½¤Àµ
+               } else {
                        $left += $margin * $_ul_margin;
                }
                $str = sprintf($_list_pad_str, $level, $left, $left);
                array_push($result, sprintf($open, $str));
        }
-       if ($cont)
-       {
-               array_push($result, '</li>');
-       }
+
+       if ($cont) array_push($result, '</li>');
 }
+
 //¥ª¥×¥·¥ç¥ó¤ò²òÀϤ¹¤ë
-function ls2_check_arg($val, $key, &$params)
+function ls2_check_arg($value, $key, & $params)
 {
-       if ($val == '')
-       {
+       if ($value == '') {
                $params['_done'] = TRUE;
                return;
        }
-       if (!$params['_done'])
-       {
-               foreach (array_keys($params) as $key)
-               {
-                       if (strpos($key, strtolower($val)) === 0)
-                       {
-                               $params[$key] = TRUE;
+
+       if (! $params['_done']) {
+               foreach (array_keys($params) as $param) {
+                       if (strtolower($value)  == $param &&
+                           preg_match('/^[a-z]/', $param)) {
+                               $params[$param] = TRUE;
                                return;
                        }
                }
                $params['_done'] = TRUE;
        }
-       $params['_args'][] = $val;
+
+       $params['_args'][] = $value; // Link title
 }
 ?>