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