[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: ddtpの文字化け



久保田です。

From: KISE Hiroshi <fuyuneko@xxxxxxxxxxxx>
Subject: Re: ddtpの文字化け
Date: Sun, 8 Jun 2003 00:07:38 +0900

> となっています。最初の1文字のフォントのサイズを変える処理を
> しているようです(いつもw3mで見ていたので気がつきませんでした)。
> で、上のapmdの場合(cat -vを通してます)、
> 
> <p style="text-align: justify"><font size="+2">M-%</font>M-NM-!M-<M-%M-HM-%
> 
> となっています。つまり、単純に1バイトを切り出しているのが
> 悪いわけで。

gluck.debian.org:/org/packages.debian.org/htmlscripts/pages.pl
というのが、それをやっているスクリプトのようです。
(/org/ddtp.debian.org/ 以下からは見付けることができませんでした)。


> 日本語の場合に、この1文字目を大きくする処理をやめるか、
> 正しく日本語の1文字を切り出す処理をする、ということが
> できればよいのですが。ほかの言語のことも考えないと
> いけないんですよね。

Perl でこういう処理を正しくするには、どうすればいいのでしょうか?
もちろん、日本語だけの処理ではだめで、C で言うマルチバイト文字の
ような処理が必要になると思うのですが...

あるいは、正しい処理が非常に重くなるようでしたら、言語 (正確には
エンコーディング) ごとの処理を簡単に追加できるような構造を作る
というのもひとつの手だと思いますが。(現在、debian-devel@jp で
議論している debconf の国際化においては、このような手法を使って
います。これは、debconf は Debian に必須なパッケージなので、
perl-base パッケージだけできちんと動作すべきと考えたからです。)

なお、gluck.debian.org は現在 Debian Woody で、Perl 5.6.1 です。

そのスクリプトの内容を勝手に公表していいものなのかどうか、よく
わからないので、該当部分だけを抜き出すと、

    $long_desc =~ /^([^&]|&[^;]+;)/;
    $first = $1;
    $rest = substr($long_desc,length($first));
    $package_page .= "<p style=\"text-align: justify\"><font size=\"+2\">$first</font>$rest\n";

という感じです。$first は1バイト、もしくは「&」で始まって「;」で
終わる文字列となっているようです。

もしかしたら、アラビア文字のように文字がつながる言語のことを考えたら、
最初の1文字だけ大きくするというのは、あまり良い考えではないのかも
知れません。

---
久保田智広 Tomohiro KUBOTA <kubota@debian.org>
http://www.debian.or.jp/~kubota/