« | Home | »

2005.02.13

Text-formatter

通常文章を書くときはテキストフォーマットは「改行を変換する」を選ぶ。
もし、「なし」を選ぶと自分で文章中の改行したいところに<br>を挿入しておかなければならないので大変不便である。
ところが、プログラムソースを貼り付けて示したいときは一行毎に<br>が入って間が抜けた表示になり甚だ具合がわるい。
それで、<pre>と</pre>で囲めば改行を入れないようになると思って、<pre>の自動挿入アイコンも設けたが、どうもうまく機能しない。
テキストのフォーマットは/lib/MT下にあるUtil.pmで行っているが、調べたら空白行毎に切って処理しているので空白行があると<pre>と</pre>で囲まれた領域であるのを忘れてしまうようになっている。
ネットを調べると同じ悩みに行き着いた御仁がいらっしゃるようで、ちゃんと解決法が書かれていた。
$prefagという変数を追加して<pre>がでてきたら</pre>が出てくるまで状態を覚えておこうと言うものです。
早速使わせていただいたが、これでも記述部分にhtmlのタグがでて来るとBrowserが反応してしまうので&gt; &lt;(&は便宜上全幅で書いています)を用いてescapeしてやる必要がありますが、快適です。
以下の赤字部分がUtil.pmの修正部分です。

sub html_text_transform {
my $str = shift;
$str ||= '';
my @paras = split /r?nr?n/, $str;
    my $preflag = 0;     # add var
for my $p (@paras) {
       if($p =~ m@<pre@){   $preflag = 1;  } # add pre check.
if (!$preflag and  $p !~ m@^</?(?:h1|h2|h3|h4|h5|h6|table
|ol|dl|ul|menu|dir|p|pre|center|form|fieldset|select|blockquote
|address|div|hr)@) {
$p =~ s!r?n!<br />n!g;
$p = "$preflag<p>$p</p>";
}
if($p =~ m@</pre@){  $preflag = 0;  }
}
join "nn", @paras;
}

コメント

コメントはありません

コメントフィードを購読する

コメント投稿





コメント本文に次の(X)HTMLタグを使えます:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)