改行用のモジュール追加
(2006.01.17)
もう皆さん御存知のようにホームページを作成してるのはAmigaの中なものでどうしても改行に気を使わなくてはいけません。具体的に説明しますとAmigaのブラウザAWebII V3.4であれば画面の幅で改行してくれないのです。
理由は明白でして英語とかアルファベットでの言語の場合は単語と単語の間にスペースが入っているためにそれを目印に改行(=折り返し=ワードラップ=word wrap)するようになっていて日本語のように単語と単語の間に空白がない言語であれば「長い単語だなぁ」とかブラウザが思いながら1行で表示させてしまうためです。
それではとても読みにくいので人力でタグ<BR>を画面の右端あたりで入れるようにしていました。タグを入れるのも最近では面倒になってきましたので行の連結と右端にタグを入れるのを全自動でやってくれるモジュールを作成しました。ちなみにこの説明もそのモジュールを利用しているのでタグを入れていません。実際に入力しているソースはこんな感じ。タグを見えるように修正してあります。
<PRE PPMOD="PpWrap">
もう皆さん御存知のようにホームページを作成してるのはAmigaの中なものでどうしても改行に気を使わなくてはいけません。
具体的に説明しますとAmigaのブラウザAWebII V3.4であれば画面の幅で改行してくれないのです。
理由は明白でして英語とかアルファベットでの言語の場合は単語と単語の間にスペースが入っているためにそれを目印に
改行(=折り返し=ワードラップ=word wrap)するようになっていて日本語のように単語と単語の間に空白がない言語
であれば「長い単語だなぁ」とかブラウザが思いながら1行で表示させてしまうためです。
それではとても読みにくいので人力でタグ<BR>を画面の右端あたりで入れるようにしていました。
タグを入れるのも最近では面倒になってきましたので行の連結と右端にタグを入れるのを全自動でやってくれるモジュールを
作成しました。ちなみにこの説明もそのモジュールを利用しているのでタグを入れていません。実際に入力している
ソースはこんな感じ。
</PRE>
どうです?ソースは随分といいかげんに改行してるでしょ。でもこのモジュールを通すときちんと行を連結してしかも改行までやってくれます。なんかもうソースがただのテキストになってる気が。PpWrap.pmはこんな感じ。
# $VER: module PpWrap for ppmod. 1.0, 2006/01/16
package PpWrap;
sub init
{
my($child) = @_;
main::putmessage('verbose', "module load.");
main::putmessage('verbose', "config = '$child->{pathname}'");
bless(\&parser_wrap);
push(@main::parsers, \&parser_wrap);
}
sub parser_wrap
{
my($junk, @inhtml) = @_;
my @outhtml = ();
my $outbuff = '';
my $inbuff;
foreach $inbuff (@inhtml)
{
if ('' ne $inbuff)
{
$outbuff .= $inbuff;
}
elsif ('' ne $outbuff)
{
push(@outhtml, wrap_lines($outbuff));
$outbuff = '';
}
else
{
push(@outhtml, '
');
}
}
push(@outhtml, wrap_lines($outbuff));
$outbuff = '';
return @outhtml;
}
sub wrap_lines
{
my ($outbuff) = @_;
my @outhtml = ();
while (118 < length($outbuff))
{
my $wrap = -1;
my $i;
for ($i = 0; $i < 118; $i++)
{
if (0xa1 <= unpack('C', substr($outbuff, $i, 1)))
{
$i++;
}
$wrap = $i;
}
if (118 <= $wrap)
{
$wrap -= 2;
}
push(@outhtml, substr($outbuff, 0, $wrap + 1) . '
');
$outbuff = substr($outbuff, $wrap + 1);
}
if (0 < length($outbuff))
{
push(@outhtml, $outbuff . '
');
$outbuff = '';
}
return @outhtml;
}
1;