<p>自動挿入の仕様を変更

個人的な好みの問題ではあるが、
<p>という段落タグがあまり好きではない。
というのも、このタグを入れると、自動的に前後に空白行を入れてしまうので、
デザイン面で苦労することが多いからだ。

MTの場合、改行が2つ以上続くと、そこで一段落と判断し、
段落毎に<p>?</p>に収めようとする。
確かに、『論理的』には正しいことなのだけど、
<strong>なんて使うことはほとんどないように、
基本的にはデザイン性と利便性とで選べるようにすべきかと。

というわけで、この仕様を変更する。
変更するファイルは、/lib/MT/ にある、Util.pm。
このファイルは、MTで使うユーティリティーが詰まったモジュールだが、
その中の、html_text_transformというサブルーチン(246行目/v3.01)が、
この仕様を制御しているので、とりあえずその中の、

$p = “<p>$p</p>”;
行をコメントアウトする。

# $p = “<p>$p</p>”;

しかし、これだけでは実は問題が生じる。
というのも、『前述の改行2つで?』というチェック部分で、空白行を削除してしまうので、
各段落がくっついて表示されてしまう。
しょうがないので、各段落の最後に空白行を再び追加する。
ルーチンの最後で、段落毎に分割したデータを、再び1つにまとめているので、
その際に、各段落毎に空白行を入れるようにすればよい。

join “\n\n”, @paras;
 ↓
join “<br />\n<br />\n”, @paras;
というわけで、最低限の変更による変更後。

sub html_text_transform {
  my $str = shift;
  $str ||= ”;
  my @paras = split /\r?\n\r?\n/, $str;
  for my $p (@paras) {
    if ($p !~ m@^</?(?:h1|h2|h3|h4|h5|h6|table|ol|dl
|ul|menu|dir|p|pre|center|form|fieldset|blockquote|address|div|hr)@) {
      $p =~ s!\r?\n!<br />\n!g;
#    $p = “<p>$p</p>”;
    }
  }
  join “<br />\n<br />\n”, @paras;
}