BugTrack/2296
の編集
Top
/
BugTrack
/
2296
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
* 複数行の引数であるかを調べる正規表現が同じ意味になっていない [#nf4de4e9] - ページ: [[BugTrack2]] - 投稿者: 名無しさん - 優先順位: 低 - 状態: 提案 - カテゴリー: 本体バグ - 投稿日: 2008-02-14 (木) 19:46:39 - バージョン: ** メッセージ [#s97a43a2] 複数行のプラグイン引数を、読み込む時のまとめ処理はlib/convert_html.php で、書き込み時の自動修正はlib/file.php で担当しています。&br; しかし、それぞれの正規表現が微妙に違うため、自動修正で誤判定をする時があります。 - lib/convert_html.php (r1.20) のBody::parse() // Multiline-enabled block plugin if (! PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK && preg_match('/^#[^{]+(\{\{+)\s*$/', $line, $matches)) { $len = strlen($matches[1]); $line .= "\r"; // Delimiter while (! empty($lines)) { $next_line = preg_replace("/[\r\n]*$/", '', array_shift($lines)); if (preg_match('/\}{' . $len . '}/', $next_line)) { $line .= $next_line; break; } else { $line .= $next_line .= "\r"; // Delimiter } } } - lib/file.php (r1.93) のmake_str_rules() // Modify this line? if ($modify) { if (! PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK && $multiline == 0 && preg_match('/#[^{]*(\{\{+)\s*$/', $line, $matches)) { // Multiline convert plugin start $modify = FALSE; $multiline = strlen($matches[1]); // Set specific number } } else { if (! PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK && $multiline != 0 && preg_match('/^\}{' . $multiline . '}\s*$/', $line)) { // Multiline convert plugin end $modify = TRUE; $multiline = 0; } } + convert_html.php では行頭の# の直後に{ 以外の文字が1つ以上あってから{ となっているのに対して、&br;file.php では行頭の# の直後に{ 以外の文字が0以上あってから{ となっています。 + convert_html.php では行のどこかに} がX個となっているのに対し、file.php では行頭に} がX個となっています。 1つ目は、読み込み時には複数行ではないと判定するものに対して、記録時に閉じタグのチェックを開始してしまいます((とある行が「#{{」なんて事はまずないだろう、とは思いつつ))。 2つ目は、[[複数行の引数指定の解説>PukiWiki/1.4/ちょっと便利に/複数行のプラグイン引数を可能に#n3028032]] の3番で、「{と同じ数の}が行頭に現れるまでが引数として扱われます。」となっているのにもかかわらず、&br;読み込み時に行の途中に同じ数の}があるだけで複数行引数が終わりと判定してしまい、引数が原因でFactory_Div() はプラグインではないと判断してしまいます((開く&閉じるカッコの数を増やせば、ほとんどは回避できる気がする))。 あとついでなんですが、[[BugTrack2/154]] の修正を次の場所にもしておきませんか? - 上に挙げたlib/convert_html.php のソースの中にある次の行を切り出す部分 while (! empty($lines)) { - $next_line = preg_replace("/[\r\n]*$/", '', array_shift($lines)); + $next_line = rtrim(array_shift($lines), "\r\n"); *** 関連 [#df376568] - [[PukiWiki/1.4/ちょっと便利に/複数行のプラグイン引数を可能に]] - [[BugTrack2/84]] -------- #comment
タイムスタンプを変更しない
* 複数行の引数であるかを調べる正規表現が同じ意味になっていない [#nf4de4e9] - ページ: [[BugTrack2]] - 投稿者: 名無しさん - 優先順位: 低 - 状態: 提案 - カテゴリー: 本体バグ - 投稿日: 2008-02-14 (木) 19:46:39 - バージョン: ** メッセージ [#s97a43a2] 複数行のプラグイン引数を、読み込む時のまとめ処理はlib/convert_html.php で、書き込み時の自動修正はlib/file.php で担当しています。&br; しかし、それぞれの正規表現が微妙に違うため、自動修正で誤判定をする時があります。 - lib/convert_html.php (r1.20) のBody::parse() // Multiline-enabled block plugin if (! PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK && preg_match('/^#[^{]+(\{\{+)\s*$/', $line, $matches)) { $len = strlen($matches[1]); $line .= "\r"; // Delimiter while (! empty($lines)) { $next_line = preg_replace("/[\r\n]*$/", '', array_shift($lines)); if (preg_match('/\}{' . $len . '}/', $next_line)) { $line .= $next_line; break; } else { $line .= $next_line .= "\r"; // Delimiter } } } - lib/file.php (r1.93) のmake_str_rules() // Modify this line? if ($modify) { if (! PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK && $multiline == 0 && preg_match('/#[^{]*(\{\{+)\s*$/', $line, $matches)) { // Multiline convert plugin start $modify = FALSE; $multiline = strlen($matches[1]); // Set specific number } } else { if (! PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK && $multiline != 0 && preg_match('/^\}{' . $multiline . '}\s*$/', $line)) { // Multiline convert plugin end $modify = TRUE; $multiline = 0; } } + convert_html.php では行頭の# の直後に{ 以外の文字が1つ以上あってから{ となっているのに対して、&br;file.php では行頭の# の直後に{ 以外の文字が0以上あってから{ となっています。 + convert_html.php では行のどこかに} がX個となっているのに対し、file.php では行頭に} がX個となっています。 1つ目は、読み込み時には複数行ではないと判定するものに対して、記録時に閉じタグのチェックを開始してしまいます((とある行が「#{{」なんて事はまずないだろう、とは思いつつ))。 2つ目は、[[複数行の引数指定の解説>PukiWiki/1.4/ちょっと便利に/複数行のプラグイン引数を可能に#n3028032]] の3番で、「{と同じ数の}が行頭に現れるまでが引数として扱われます。」となっているのにもかかわらず、&br;読み込み時に行の途中に同じ数の}があるだけで複数行引数が終わりと判定してしまい、引数が原因でFactory_Div() はプラグインではないと判断してしまいます((開く&閉じるカッコの数を増やせば、ほとんどは回避できる気がする))。 あとついでなんですが、[[BugTrack2/154]] の修正を次の場所にもしておきませんか? - 上に挙げたlib/convert_html.php のソースの中にある次の行を切り出す部分 while (! empty($lines)) { - $next_line = preg_replace("/[\r\n]*$/", '', array_shift($lines)); + $next_line = rtrim(array_shift($lines), "\r\n"); *** 関連 [#df376568] - [[PukiWiki/1.4/ちょっと便利に/複数行のプラグイン引数を可能に]] - [[BugTrack2/84]] -------- #comment
テキスト整形のルールを表示する