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

[debian-devel:13053] Re: jgroff patch handling on latin1 (Re: linuxdoc-tools: no Korean .txt output!)



久保田です。

重大な設計ミスがありました。
日本語のロケールは、ja_JP.eucJP かもしれないし、
ja_JP.UTF-8 かもしれません。groff は、どちらでも動くように
できていないといけません。(あるいは、ja_JP.SJIS とかのロケールが
追加されたら、それでも動かなければなりません)。重要な点は、
同一のマシン、同一の構成において、LANG などの環境変数を変える
だけで動作が切り変わらないといけないということです。

ところが、/usr/share/man/ja/* にあるマニュアルページは、
特定の文字コードで書かれています。今のところ、それは
EUC-JP です。

LANG=ja_JP.UTF-8 な状態で setlocale(LC_ALL,""); すると、
fgetwc() にしろ、mbstowcs() にしろ、入力を UTF-8 だと思って
しまいます。

解決法としては、

(1) groff に、ロケールとは独立に入力文字コードを指定する
    コマンドオプションを追加する。

(2) man-db を、groff を起動するときにソースの文字コードを
    指定するコマンドオプションを指定するように改造する。

(3) 以下のどちらかを選択し、Debian Policy に載せる。
    (3a) 各言語ごとに、マニュアルページはどの文字コードで書くか
         についてのガイドラインを定める。(実質的には現状を
         追認する形になる)。
    (3b) すべてのマニュアルページは UTF-8 で書くこととする。

というふうなことになると思います。groff が出力する文字コードは、
ロケール依存でいいと思います。

キーは、groff は Debian や Linux 以外でも動くように設計するべき
だけど、man-db は Debian specific package だから portability を
少々犠牲にしても構わない、というところです。

# UTF-8 --> wchar_t の変換って、どうすればいいんでしょうか?
# iconv では wchar_t が使えないし、mbstowcs では UTF-8 が
# 今のところ使えない (UTF-8 ロケールが存在しない) し、使えた
# としても、ロケール名ってポータブルなものではないし。
# (ということで言えば、iconv に与える文字コード名もポータブル
# ではないんですが)。

ところで、佐野さんの提案にもあるように、議論は debian-i18n@org
でやりませんか?それとも、いっそのこと groff の upstream も
まきこんでやるほうがいいのでしょうか? (とするとどこが適切
なんでしょうか)

---
Tomohiro KUBOTA <kubota@debian.org>
http://surfchem0.riken.go.jp/~kubota/