添付できませんのでCopy&Pasteでお願いします。
<?php // PukiWiki - Yet another WikiWikiWeb clone. // // relatedview.inc.php Copyright Cue 2005 // // 2005/06/10 v0.01 // とりあえず作る // // 2005/06/10 v0.02 // 念のため再入防止 // マッチングパターンの見直し // 逆リンク処理をエイリアス利用に変更 // // 2005/06/11 v0.03 // リスト・テーブルは空行出力を抑制 // 参照元が#include行だった場合、取り込みを抑制 // // 2005/06/11 v0.04 // wiki textのヘッダをオプションで挿入可能に(主にテーブル向け) // 逆リンク時に直近のアンカーを付加 // // 2005/06/11 v0.05 // コメントの日付が間違えてたので修正(恥 // // 2005/06/12 v0.06 // デリミタに/を使ってたバグを修正 // 相対リンクに対応 // // 2005/06/12 v0.07 // 閲覧制限のチェック追加 // // 2005/06/12 v0.08 // 閲覧制限の変更 // パターン見直し // 整形済みとコメントの取り込みを抑制 // // 2005/06/26 v0.09 // WikiName,Autolink対応 // // 2005/07/05 v0.10 // 引数仕様を変更(v0.04仕様を廃止) // ブロックプラグインの取り込みを抑制 // // 2005/07/07 v0.11 // 検索パターンのエラー出力抑制 // 相対パス→絶対パスのバグ修正 // 正規表現でない検索指定の相対パスに対応 // テーブルの上セル連結('~')を実データで置換するよう処理 // // 2005/07/09 v0.12 // ページ読み込み順を自然順ソートに変更 // 対象行中のインラインプラグインはボディ部だけ見るよう変更 // 複数行プラグインはボディ部を含めてスキップ // // 2005/07/14 v0.13 // インラインプラグインのボディ部の取り扱いを変更 // // 2005/07/31 v0.14 // 複数行プラグイン有効判定のバグ取り // ごく簡単なオプションチェック追加 // // 2005/07/31 v0.15 // autolink.dat読み込みでflockし忘れ修正 function plugin_relatedview_convert() { global $WikiName, $BracketName, $nowikiname, $autolink; global $vars, $non_list, $whatsnew; static $busy = false; if(!$busy) $busy = true; else return ''; $args = array(); foreach(func_get_args() as $arg){ @list($key, $val) = explode('=>', $arg); $args[trim($key)] = trim($val); } $unknown_args = array_diff(array_keys($args), array('noautolink', 'nowikiname', 'search', 'nosearch')); if(!empty($unknown_args)){ foreach($unknown_args as $key=>$val) if($args[$val] != '') $unknown_args[$key] .= '=>'.$args[$val]; return 'relatedview : unknown option(s). '.htmlspecialchars(implode(', ', $unknown_args)).'<br />'; } $category = isset($vars['page']) ? strip_bracket($vars['page']) : ''; $q_category = preg_quote($category, '/'); if(isset($args['search']) && !preg_match('/^#.*#$/', $args['search'])) $args['search'] = '#^'.preg_quote(get_fullname($args['search'], $category), '#').'#'; if(isset($args['nosearch']) && !preg_match('/^#.*#$/', $args['nosearch'])) $args['nosearch'] = '#^'.preg_quote(get_fullname($args['nosearch'], $category), '#').'#'; $follow_wikiname = !$nowikiname && !isset($args['nowikiname']) && preg_match('/^'.$WikiName.'$/', $category); $follow_autolink = $autolink && !isset($args['noautolink']) && file_exists(CACHE_DIR . 'autolink.dat'); if($follow_autolink){ $fp = fopen(CACHE_DIR . 'autolink.dat', 'r'); flock($fp, LOCK_SH); @list($auto, $auto_a, $ignores) = file(CACHE_DIR . 'autolink.dat'); flock($fp, LOCK_UN); fclose($fp); if (strpos($ignores, $category) !== false || !preg_match('/^(?:'.$auto.'|'.$auto_a.')$/x', $category)) $follow_autolink = false; } $links = array_keys(links_get_related_db($category)); foreach($links as $key=>$page){ if ($page == $whatsnew || preg_match('/'.$non_list.'/', $page) || (isset($args['search']) && !@preg_match($args['search'], $page)) || (isset($args['nosearch']) && @preg_match($args['nosearch'], $page)) || !check_readable($page, false, false)) unset($links[$key]); } natsort($links); if($follow_autolink || $follow_wikiname){ $link_pattern = '/(\[\[(?:.+?>)?)?'.$q_category.'(?(1)(?:#(?:[A-Za-z][\w-]*)?)?\]\])/'; $replace_patterns = array( '/\[\[(.+?)>'.$q_category.'(?:#(?:[A-Za-z][\w-]*)?)?\]\]/', '/(\[\[)?'.$q_category.'(?(1)(?:#(?:[A-Za-z][\w-]*)?)?\]\])/' ); }else{ $link_pattern = '/\[\[(?:.+?>)?'.$q_category.'(?:#(?:[A-Za-z][\w-]*)?)?\]\]/'; $replace_patterns = array( '/\[\[(.+?)>'.$q_category.'(?:#(?:[A-Za-z][\w-]*)?)?\]\]/', '/\[\['.$q_category.'(?:#(?:[A-Za-z][\w-]*)?)?\]\]/' ); } $anchor_pattern = '/(?:(^\*{1,3}.*?\[#)|(?:^#|&)aname\()([A-Z][\w-]+?)(?(1)\]|[,)])/i'; $relative_pattern = '/\[\[((?:(?!\]\]).)+>)?(\.{0,2}\/(?:'.$BracketName.')?)((?:#(?:[A-Za-z][\w-]*)?)?)\]\]/e'; $body = $matches = $cell_buffers = array(); $is_ver146 = version_compare(S_VERSION, '1.4.6_rc') >= 0; $enable_multiline = $is_ver146 && !PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK ? 1 : 0; foreach($links as $page){ $anchor = $page; foreach(preg_grep('%^(?!//| |\t)%', get_source($page)) as $data){ if($enable_multiline > 1){ if(preg_match('/^\}{'.$enable_multiline.'}/', $data)) $enable_multiline = 1; continue; } if(preg_match($anchor_pattern, $data, $matches)) $anchor = $page.'#'.$matches[2]; if(preg_match('/^#/', $data, $matches)){ if($enable_multiline && preg_match('/(\{{2,})\s*$/', $data, $matches)) $enable_multiline = strlen($matches[1]); continue; } $data = preg_replace($relative_pattern, "'[[$1'.get_fullname('$2', '$page').'$3]]'", $data); if(preg_match('/^\|(.+)\|([hfc]?)$/i', $data, $matches)){ $cells = explode('|', $matches[1]); foreach($cells as $key=>$val){ if($val == '~') $cells[$key] = $cell_buffers[$key]; else $cell_buffers[$key] = $val; } $data = '|'.implode('|', $cells).'|'.$matches[2]."\n"; } $plain = $data; while(preg_match('/&(\w+)(?:\([^)]*\))?(?:\{((?:(?!(?R)|\}).)*)\})?;/', $plain, $matches)){ if(isset($matches[2]) && (!$is_ver146 || $follow_wikiname || preg_match('/^size$/i', $matches[1]))) $plain = str_replace($matches[0], '#'.$matches[2].'#', $plain); else $plain = str_replace($matches[0], '#', $plain); } if(preg_match($link_pattern, $plain)){ $replacements = array( '[[$1>'.$anchor.']]', '[['.$category.'>'.$anchor.']]' ); $body[] = preg_replace($replace_patterns, $replacements, $data); if(preg_match('/^[^-+:|,]/', $data)) $body[] = "\n"; } } } $retval = empty($body) ? "No related pages found.<br />\n" : convert_html($body); $busy = false; return $retval; } ?>