*AutoLinkの仕掛けを作るとしたら
*AutoLinkの仕掛けを作る

こんな感じになるんでしょうか... -- [[ぱんだ]]
-ページ: BugTrack
-投稿者: [[ぱんだ]]
-優先順位: 低
-状態: 提案
-カテゴリー: 本体新機能
-投稿日: 2003-01-22 (水) 16:28:15
-バージョン: 1.3.3

-html.php
 ...
 if ($is_read) {
 	$body = preg_replace("/(?:^|(?<=>))([^<]*)/e",'autolink_replace(\'$1\')',$body);
**メッセージ

最初の版は<pre>~</pre>の中も置換してしまうというダサい動作だったので、まじめに作ってみました。
-$nowikinameを1にすると、WikiNameの自動リンクを抑制します。
-$autolinkを1以上の数値にすると、$autolink文字以上の長さのBracketNameページ名と合致する文字列が自動的にリンクになります。
-$nowikiname=1かつ$autolink>0のときは、WikiNameのページもAutoLinkで処理します。
--つまり、ページが存在するWikiNameはリンクになり、そうでない場合はリンクになりません。

***ダウンロード
PukiWiki/1.3.3用です。
#ref(193_1.3.3.diff)

----
**コメント
-[[極悪版 wiki>極悪:AutoLink]] のようなすでに存在するWikiNameへは自動でリンクしてくれると嬉しいですが・・・。Wikiらしくていいなぁと -- [[baniko]] SIZE(10){2003-01-22 (水) 09:46:36}
--これってWikiNameじゃなくってBracketNameのことでしょうか。BracketNameへの自動リンクは副作用がかなりありそう… -- [[reimy]] SIZE(10){2003-01-22 (水) 09:50:09}
-表現がまずかったですね。存在するページ名へのリンクです。 -- [[baniko]] SIZE(10){2003-01-22 (水) 09:53:57}
--BracketNameによるページへの自動リンクは副作用があるので…。採用するとすればオプション扱いかな。 -- [[reimy]] SIZE(10){2003-01-22 (水) 10:06:22}
--仕掛け自体は簡単なんですが。ページが増えると結構重い処理になります。 -- [[ぱんだ]] SIZE(10){2003-01-22 (水) 13:25:44}
--ページを作成したときに、ページ名のindex-listをファイルに落とすようにして、そいつで処理するのでは軽減できないでしょうか? -- [[baniko]] SIZE(10){2003-01-22 (水) 13:28:36}
----
-よさげな感じですね。テストして負荷なども調べてみようと思います。あとは、4バイトが決めうちでいいのか・・・。 -- [[baniko]] SIZE(10){2003-01-23 (木) 12:23:27}
-CafeWikiを遅ればせながらテストしております。にほんごWikiName自動リンク機能はすばらしかったです。やはり必須機能ですね。 -- [[tejicube]] SIZE(10){2003-01-23 (木) 12:24:59}
--その機能まってました!どのへんに差し込めばいいでしょうか?html.phpの -- [[tejicube]] SIZE(10){2003-01-23 (木) 12:30:41}
-レポートお待ちしてます :) -- [[ぱんだ]] SIZE(10){2003-01-23 (木) 12:59:34}
--$pageからブラケットを取ったらうまく動きました! -- [[tejicube]] SIZE(10){2003-01-23 (木) 14:21:12}
 if (!preg_match("/^$WikiName$/",$page) and strlen($page) >= 4) {
  $page = str_replace("[","",$page);//ブラケット左側を取る
  $page = str_replace("]","",$page);//右側も取る
  $temp = '(?:'.preg_quote($page,'/').')';
  $arr[$temp] = strlen($temp);
 }
 ...
-func.php
 function autolink_replace($str)
 {
 	global $WikiName;
 	static $pattern;
 	
 	if (!isset($pattern)) {
 		$pages = get_existpages();
 		$arr = array();
 		foreach ($pages as $page) {
 			if (!preg_match("/^$WikiName$/",$page) and strlen($page) >= 4) {
 				$temp = '(?:'.preg_quote($page,'/').')';
 				$arr[$temp] = strlen($temp);
 			}
 		}
 		arsort($arr,SORT_NUMERIC);
 		$pattern = join('|',array_keys($arr));
 	}
 	return preg_replace("/($pattern)/e",'make_link(\'[[$1]]\')',$str);
 }
---これではダサいので、もっとかっこよく実装してくださいね。。(汗) -- [[tejicube]] SIZE(10){2003-01-23 (木) 14:24:14}
-193_1.3.3.diffを添付しました。 -- [[ぱんだ]] SIZE(10){2003-01-23 (木) 16:12:09}
-if ($arr[19] != '') { は if ($arr[19] != '') がデフォルトですかね。Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}''が出ました。まだリンク具合は確認してませんが実験してみます。 -- [[たらこせる]] SIZE(10){2003-01-23 (木) 16:15:36}
-ってもうdiffで修正済みですね。すんません。 -- [[たらこせる]] SIZE(10){2003-01-23 (木) 16:17:54}
-''InterWikiテクニカル''がInterWikiとテクニカルに分かれてしまいますね。func.php/get_autolink_pattern()の
 array_unshift($arr,"(?:$WikiName)");

 array_push($arr,"(?:$WikiName)");
のほうがいいかもしれません。 -- [[ぱんだ]] SIZE(10){2003-01-23 (木) 16:24:30}
-稼動してます。負荷かかってるかなあ。 -- [[たらこせる]] SIZE(10){2003-01-23 (木) 16:26:45}
-やっぱり [[ WikiName]] と WikiName のどっちを取るかという問題になる…。 -- [[ぱんだ]] SIZE(10){2003-01-23 (木) 16:35:37}
--ちなみにAutoLinkでは[[ WikiName]]が存在したとしても WikiNameを見に行きます。(仕様) -- [[ぱんだ]] SIZE(10){2003-01-23 (木) 16:37:23}
-これ、やっぱり面白いですね...。次期検索結果画面をBracketName化した時点でinclude作成(ほげ?表示をしない)してくれたりしたらその後のファイル構築もかなり面白くなりそう。 -- [[たらこせる]] SIZE(10){2003-01-23 (木) 17:12:20}
-193_1.3.3.diffを差し替えました。 array_unshiftを(array_shiftではなく)array_pushにしただけです。 -- [[ぱんだ]] SIZE(10){2003-01-23 (木) 17:42:59}

#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.3+ © 2001-2020 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.057 sec.

OSDN