* @version 0.01 */ /*************************************************************************** * プラグインモジュールインタフェースの実装 ***************************************************************************/ /** * 直接 URL で ?plugin=todo 指定された場合の呼び出しエントリポイント。 * * @returns $result = array(msg => $pagename, body => $content) */ function plugin_todo_action() { global $vars; $page = strip_bracket($vars['page']); $body = todo_generate_index($vars, $page, $vars['mark']); $mesg = array('msg' => 'TodoIndex', 'body' => $body); # echo "
"; print_r($mesg); exit;
return $mesg;
}
/**
* ページ内で #todo 指定された場合の呼び出しエントリポイント。
*
* @returns $result = $content
*/
function plugin_todo_convert() {
global $vars, $script;
// default is to traverse all subtopics under own topic
$page = strip_bracket($vars['page']);
switch (func_num_args()) {
case 2:
$mark = func_get_arg(1);
case 1:
$page = func_get_arg(0);
default:
}
$body = todo_generate_index($vars, $page, $mark);
# echo ""; print_r($body); exit;
return $body;
}
/***************************************************************************
* 内部関数
***************************************************************************/
function todo_generate_index($vars, $page, $mark) {
$todo = todo_search($vars, trim($page), trim($mark));
foreach ($todo as $page => $list) {
foreach ($list as $line) {
$html .= "- " . $line . " [[[" . $page . "]]]\n";
}
}
return convert_html($html);
}
function todo_search($vars, $page, $mark) {
if ($mark == '') $mark = "todo";
if ($page == "''") $page = '';
// 検索対象を選択
foreach (get_existpages() as $file => $name) {
if (strncmp($name, $page, strlen($page)) == 0) {
$scan[$file] = $name;
}
}
// 探索するマーク行のパターン
$expr = "/^[\*\-\s]*(\[".$mark."\].*)/i";
// [TODO] マークされているエントリを探す
foreach ($scan as $file => $name) {
foreach (get_source($name) as $line) {
if (preg_match($expr, $line, $match)) {
$link[$name][] = $match[1];
}
}
}
return $link;
}
/*
* Local Variables:
* mode: php
* c-basic-offset: 4
* buffer-file-coding-system: euc-jp-unix
* End:
*/