複数行のプラグイン引数を、読み込む時のまとめ処理はlib/convert_html.php で、書き込み時の自動修正はlib/file.php で担当しています。
しかし、それぞれの正規表現が微妙に違うため、自動修正で誤判定をする時があります。
// 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 } } }
// 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; } }
1つ目は、読み込み時には複数行ではないと判定するものに対して、記録時に閉じタグのチェックを開始してしまいます*1。
2つ目は、複数行の引数指定の解説 の3番で、「{と同じ数の}が行頭に現れるまでが引数として扱われます。」となっているのにもかかわらず、
読み込み時に行の途中に同じ数の}があるだけで複数行引数が終わりと判定してしまい、引数が原因でFactory_Div() はプラグインではないと判断してしまいます*2。
あとついでなんですが、BugTrack2/154 の修正を次の場所にもしておきませんか?
while (! empty($lines)) { - $next_line = preg_replace("/[\r\n]*$/", '', array_shift($lines)); + $next_line = rtrim(array_shift($lines), "\r\n");