contents という名前のページがあると #contents がオートリンクになって働かない

  • ページ: BugTrack
  • 投稿者: kak
  • 優先順位: 普通
  • 状態: 完了
  • カテゴリー: 本体バグ
  • 投稿日: 2005-02-09 (水) 07:16:46
  • バージョン:

メッセージ

サマリのとおりです。contents というページを作りましたのでおかしくなっていると思います。


  • relatedもそうですね。 -- teanan 2005-02-09 (水) 08:29:25
  • 確かにおかしくなっていたので、「contents」ページを削除しました。 -- 2005-02-11 (金) 01:16:58
  • #で始まる行は、Autolink無効にしておけば良さそうな気がします。 -- okkez 2005-02-11 (金) 01:59:03
  • #で始まっていて、かつそれが有効な名前(contents/related/norelated)かどうかチェックしないといけないような気がします。 -- Ratbeta? 2005-02-11 (金) 11:06:12
  • とりあえず回避方法を見つけましたので書いておきます。 -- teanan 2005-03-30 (水) 17:14:24
    1. 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);
    2. 下記の内容で、plugin/contents.inc.php を作成する。
      <?php
      function plugin_contents_convert()
      {
      	return '<p><del>#contents</del></p>';
      }
      ?>
  • 現状のcontentsとrelatedの処理って、かな~りトリッキーですね (^^; -- teanan 2005-03-30 (水) 17:17:49
    • ちなみに、ここで返された文字列が lib/convert_html.php:890行目付近の preg_replace_callbackによって目次に置換されますので、例えば return '<#contents>'; とかにすることも出来そうです。 contents.inc.phpを作ることによって、少し見通しが良くなるのかも (^^; *1 -- teanan 2005-03-30 (水) 17:36:00
  • ふむふむ。トリッキーな所があるというのなら、そいつを叩き潰すうちに物事どうにかなって行くものですよー -- henoheno 2005-03-30 (水) 23:12:56
  • 不具合動作を修正するということで、contentsの件は上記の案で修正しました。relatedについては既に related.inc.php があり、プラグイン化が目論まれていたようですので、プラグイン化してしまいました*2。-- teanan 2005-04-11 (月) 03:51:35
  • お疲れ様です :) contentsとrelatedの元の出力がdelタグで囲まれているのは、仮に機能が無効あるいは置換に失敗した際に「#contentsや#relatedは現在無効となっている」事をユーザーに知らせる意図があるように思います。コミットされたものは文字列がユニークであることを意図されている様ですが、この点どう思われますか? -- henoheno 2005-04-11 (月) 21:35:35
    • なるほど、そのような意味があったのですね (^^; 私は単純に置換対象の文字列としか認識しておりませんでしたので、このような実装にしました。置換に失敗した場合に表示される方が良さそうですので、後ほど<del>でくくった形に戻しておきます。-- teanan 2005-04-12 (火) 10:51:15
    • すみません思い出しました。<del>を嫌ったのは、書式の%%でdelになるためです。%%#contents%% と書くと似たような形になるため、書式ではかけない特殊な形の置換文字列にしました。 -- teanan 2005-04-12 (火) 11:07:13
  • related convertプラグインにコメントで書いていた $related_link = 0; は、コメントが足りませんでしたが (^^; #norelated プラグインの動作です。つまるところ「#relatedが欲しいシチュエーションなら、(私なら)100% #norelated も書きたくなるけど書くのが面倒だよね」と思っていますがどう思いますか? :) -- henoheno 2005-04-11 (月) 21:35:45
    • $related_link がどのような効果をもたらすか、については認識しておりました*3。$related_link = 0;を入れなかったのは、現状と同じ動作を優先させたためです。 -- teanan 2005-04-12 (火) 10:57:42
    • #relatedを書いたら#norelatedを書きたくなるのは私もそう思いますが、現状の動作を変えちゃっても問題ないでしょうか・・? (^^; -- teanan 2005-04-12 (火) 11:03:22
    • #relatedと#norelatedをマージする話は、一つの新機能ネタと思っていただければ :) -- henoheno 2005-04-13 (水) 00:15:34

  • error_reporting(E_ALL) のとき、「PukiWiki/1.4/Manual/Plugin/A-D」などを閲覧すると Notice: Undefined offset: 1 in convert_html.php on line 909 が発生するようです。 -- henoheno 2005-04-21 (木) 22:57:07
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 2005-04-21 (木) 23:01:15
  • '()'でのマッチがなくなっているのが原因のようです (^^; 修正します。失礼致しました。 -- teanan 2005-04-22 (金) 02:43:28

*1 未だに $line_rulesがどのタイミングで置換されるかが確実につかめてないです・・・
*2 なにか罠があるのかもしれませんが、調べてもなにもなさそうですので・・・ (^^;
*3 コメント消しちゃってますね、申し訳ないです X(

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-03-08 (月) 12:14:30
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.209 sec.

OSDN