contents という名前のページがあると #contents がオートリンクになって働かない†
- ページ: BugTrack
- 投稿者: kak
- 優先順位: 普通
- 状態: 完了
- カテゴリー: 本体バグ
- 投稿日: 2005-02-09 (水) 07:16:46
- バージョン:
メッセージ†
サマリのとおりです。contents というページを作りましたのでおかしくなっていると思います。
- relatedもそうですね。 -- teanan
- 確かにおかしくなっていたので、「contents」ページを削除しました。 --
- #で始まる行は、Autolink無効にしておけば良さそうな気がします。 -- okkez
- #で始まっていて、かつそれが有効な名前(contents/related/norelated)かどうかチェックしないといけないような気がします。 -- Ratbeta
- とりあえず回避方法を見つけましたので書いておきます。 -- teanan
- lib/init.phpの最後の$line_rulesから#contentsの部分を削除する。
$line_rules = array_merge(array(
'&(#[0-9]+|#x[0-9a-f]+|' . $entity_pattern . ');' => '&$1;',
"\r" => '<br />' . "\n", /* 行末にチルダは改行 */
'#related$' => '<del>#related</del>',
- '^#contents$' => '<del>#contents</del>'
), $line_rules);
- 下記の内容で、plugin/contents.inc.php を作成する。
<?php
function plugin_contents_convert()
{
return '<p><del>#contents</del></p>';
}
?>
- 現状のcontentsとrelatedの処理って、かな~りトリッキーですね (^^; -- teanan
- ちなみに、ここで返された文字列が lib/convert_html.php:890行目付近の preg_replace_callbackによって目次に置換されますので、例えば return '<#contents>'; とかにすることも出来そうです。 contents.inc.phpを作ることによって、少し見通しが良くなるのかも (^^; *1 -- teanan
- ふむふむ。トリッキーな所があるというのなら、そいつを叩き潰すうちに物事どうにかなって行くものですよー -- henoheno
- 不具合動作を修正するということで、contentsの件は上記の案で修正しました。relatedについては既に related.inc.php があり、プラグイン化が目論まれていたようですので、プラグイン化してしまいました*2。-- teanan
- お疲れ様です :) contentsとrelatedの元の出力がdelタグで囲まれているのは、仮に機能が無効あるいは置換に失敗した際に「#contentsや#relatedは現在無効となっている」事をユーザーに知らせる意図があるように思います。コミットされたものは文字列がユニークであることを意図されている様ですが、この点どう思われますか? -- henoheno
- なるほど、そのような意味があったのですね (^^; 私は単純に置換対象の文字列としか認識しておりませんでしたので、このような実装にしました。
置換に失敗した場合に表示される方が良さそうですので、後ほど<del>でくくった形に戻しておきます。-- teanan
- すみません思い出しました。<del>を嫌ったのは、書式の%%でdelになるためです。%%#contents%% と書くと似たような形になるため、書式ではかけない特殊な形の置換文字列にしました。 -- teanan
- related convertプラグインにコメントで書いていた $related_link = 0; は、コメントが足りませんでしたが (^^; #norelated プラグインの動作です。つまるところ「#relatedが欲しいシチュエーションなら、(私なら)100% #norelated も書きたくなるけど書くのが面倒だよね」と思っていますがどう思いますか? :) -- henoheno
- $related_link がどのような効果をもたらすか、については認識しておりました*3。$related_link = 0;を入れなかったのは、現状と同じ動作を優先させたためです。 -- teanan
- #relatedを書いたら#norelatedを書きたくなるのは私もそう思いますが、現状の動作を変えちゃっても問題ないでしょうか・・? (^^; -- teanan
- #relatedと#norelatedをマージする話は、一つの新機能ネタと思っていただければ :) -- henoheno
- error_reporting(E_ALL) のとき、「PukiWiki/1.4/Manual/Plugin/A-D」などを閲覧すると Notice: Undefined offset: 1 in convert_html.php on line 909 が発生するようです。 -- henoheno
902 function replace_contents($arr)
903 {
904 henoheno 1.6 $contents = '<div class="contents">' . "\n" .
905 '<a id="contents_' . $this->id . '"></a>' . "\n" .
906 $this->contents->toString() . "\n" .
907 '</div>' . "\n";
908 henoheno 1.1 array_shift($arr);
909 henoheno 1.3 return ($arr[1] != '') ? $contents . join('', $arr) : $contents;
910 henoheno 1.1 }
- 関数が呼ばれた当初は $arr = array(0 => '<#_contents_>') ですが、908行目で空になります。前後関係がつかめていないので状況のみ。 -- henoheno
- '()'でのマッチがなくなっているのが原因のようです (^^; 修正します。失礼致しました。 -- teanan