見出しと目次に含まれる注釈の構文定義の揺れ (正規表現のパッチ)

  • ページ: BugTrack2
  • 投稿者: Mizar
  • 優先順位: 低
  • 状態: 却下
  • カテゴリー: 本体バグ
  • 投稿日: 2005-03-01 (火) 20:55:39
  • バージョン: 1.4.5

メッセージ

cvs:lib/init.php で定義されている注釈の正規表現

$NotePattern = '/\(\(((?:(?>(?:(?!\(\()(?!\)\)(?:[^\)]|$)).)+)|(?R))*)\)\)/ex';

cvs:lib/make_link.php で定義されている注釈の正規表現

\(\(
 ((?:(?R)|(?!\)\)).)*) # (1) note body
\)\)

注釈の入れ子の場合を除き、閉じ丸括弧が3文字以上並んだ場合の判断として、 前者では余った括弧を注釈の内側にある文字列と見なすのに対し、 後者では注釈の外側にある文字列と見なして解釈しています。

この定義の揺れによる影響が、以下に示すごく限られた状況においてですが確認できます。

#contents
*test1((note)))testA
*test2((note))testB
*test3)testC

見出し文字列に閉じ括弧が余分な注釈が存在し、さらに目次を作成するというものです。 サンプルはこちら。

目次から注釈を取り除くのには前者の定義が用いられますが、それ以外の本文や注釈文を構成するのには主に後者が用いられます。そのため、目次では余分な閉じ括弧が見られませんが、見出しではその余分な閉じ括弧を見ることができます。


  • filemake_link.php.1_17.diff のような見直しを検討している間に見つけました (^^; このバグは通常利用する上で支障は全く無いものと思われますが、合わせるなら現状のlib/make_link.phpの側の定義で構わないかな、と思います。 -- Mizar 2005-03-01 (火) 21:28:23
  • 意図的に見出しに余分な閉じ括弧をつけたいケースももしかしたらあるかもしれませんので、私も統一するなら外側にある文字列と見なすlib/make_link.phpの定義にして欲しいですね。注釈の最後で閉じ括弧を使いたい場合は、その後にスペースを入れるか全角括弧を使うということで。 -- sagen 2005-03-02 (水) 12:36:53
  • 先のdiffファイルにはバグがありましたので差し替え。 filemake_link.php.20050303a.diff*1 -- Mizar 2005-03-03 (木) 01:24:19 => 別件で検討
  • とりあえず、以下のパッチにより修正できるかと思います。脱線気味のパッチを先に載せてしまいましたが、正規表現や文法の見直しについては別途議論する方向としたいので、このBugTrackでは以下の修正に留めておきたいです。 -- Mizar 2005-03-09 (水) 22:50:02
    • cvs:lib/init.php
      @@ -364,7 +364,7 @@
       $InterWikiName = '(\[\[)?((?:(?!\s|:|\]\]).)+):(.+)(?(1)\]\])';
       
       // 注釈
      -$NotePattern = '/\(\(((?:(?>(?:(?!\(\()(?!\)\)(?:[^\)]|$)).)+)|(?R))*)\)\)/ex';
      +$NotePattern = '/\(\(((?:(?R)|(?!\)\)).)*)\)\)/ex';
       
       /////////////////////////////////////////////////
       // 初期設定(ユーザ定義ルール読み込み)


*1 本BugTrackのバグを修正するものではなく、パフォーマンスの問題に関わるものです。但し、この修正が実際に改善となるか改悪となるかは未確認です(おそらく改善しても誤差の範囲内と予測しています)。

添付ファイル: filemake_link.php.20050303a.diff 1330件 [詳細] filemake_link.php.1_17.diff 1312件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-04-11 (月) 01:14:43
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.368 sec.

OSDN