* @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: */