« | Home | »

2005.02.15

Text-formatter(その2)

<pre>と</pre>で囲まれた領域で改行が不要に入るのを防ぐ改造を行ったが、http://・・・・のような部分を自動リンクにして欲しいとの要望があり、Util.pmを再度改造しました。
最初の失敗はhttp://・・・・・pics.jpgのような画像ファイルへのリンクも自動リンクになってしまって、画像が表示されなくなってしまったことでした。
結局jpg, jpeg, JPG, gifを除くようにしました。 これ以外の拡張子を持つ画像ファイルがアップロードされると困るのですが、そのときは除外する拡張子を追加することとします。
さらに、最初失敗したのですが、文中の語句にリンクアイコンを使ってリンクを貼るとそこで生成されたURLに重ねて自動リンクを施そうとして、おかしなことになってしまいます。
これを防ぐため、”href”が現れた場合も既にリンクとなっていると判断して自動リンクから除くようにする必要がありました。
以下の赤字が以前より追加した部分です。

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)@) {
if (!$preflag and $p =~ m@http@ and $p !~ m@(href|jpg|JPG|jpeg|gif)@){
$p =~ s!(http:([^x00-x20()<>x7F-xFF])*)!&make_link($1)!gex;
}
$p =~ s!r?n!<br />n!g;
$p = "<p>$p</p>";
}
if($p =~ m@</pre@){  $preflag = 0;  }
}
join "nn", @paras;
}
sub make_link {
$_ = shift;
return qq|<a href="$_">$_</a>|;
}

コメント

コメントはありません

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

コメント投稿





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

*

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