さくら日記帳に限らず掲示板などでは必ず使われる改行タグ BR。
これ、s/\n/<br>\n/ だけすりゃぁいいとか思ったら大間違い。
たとえば HTML タグの後ろで改行した場合、普通は入れないはずの BR タグが入れたくもないのに入ってしまう。
それを正規表現一発でどう変換しようかと考えていたらいつの間にか頭から煙が出ていたのだが (ぉ、ぐぐる先生に聞いてみたところ有力な情報をゲッツ。
やっぱり考えることはおなじくごり押しかよ。_no
で、そのことをチャットで話してたらかいちょもそのコードを適用したらしく。
つーわけでネタも似たようなもんなので
トラックバックしてみる。
で、さくら日記帳 for MySQL で使っているごり押し部分。
前作のさくら日記帳 Rev-2.0.0 BETA では PRE タグ処理が分離していたが、今回は BR タグ変換と統合。
PRE タグは BR タグを付けると二重改行になるのでこうした小細工が必要なり。
ちなみに二重改行は BR の連続になるが、P タグに変換するのがマンドクセ('A`)ので諦めた。(ぉ
my $pre_tag_flag = 0;
my $wd_tmp;
foreach my $line (split(/\r?\n/, $wd)) {
if ($line =~ /<pre( .*?)?>/) { $pre_tag_flag = 1; }
if ($pre_tag_flag || $line =~ /<\/?($regex .*?|$regex)>$/) { $wd_tmp .= "$line\n"; }
else { $wd_tmp .= "$line<br>\n"; }
if ($line =~ /<\/pre( .*?)?>/) { $pre_tag_flag = 0; }
}
$wd = $wd_tmp;
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ 山銀
└ G兄