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

メッセージ

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

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

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




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

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

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-04-11 (月) 01:14:43
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.428 sec.

SourceForge