[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-devel:10352] Re: [japo:00021] Re: textutils
久保田です。
# Cc: がたくさんあるのは、とりあえず消しました。必要ならば
# いくらでも引用して頂いて結構です (って、この ML は Web で
# 公開されてるのだから、こんな許可を書くこと自体に意味がない)。
> 岡@奈良先端です。
> 一方で、本当に国際化するのは結構大変で、仮りにワイドキャラク
> タに変換したとします。そうすると、文字ごとののカラム数を正確
> に処理するための知識が足りないような気がしています(2カラムと
> 1カラムの文字を、コードセット非依存に区別できるような標準化
> されたAPIを知らないので)。
こんな API が存在すれば、その API は うそ ですね。
カラム数にはそもそも標準など存在しないのですから。
--- * --- * --- * ---
すみません、いま気がついたんですが、gettext での行の折り畳みは、
ソース中に長い文字列リテラルが存在する場合に起こるのですよね。
.po ファイル中の msgstr が長い場合に行が折り畳まれてしまうような
場面って存在するのでしょうか?
というのは、.po ファイルには msgid と msgstr が共存します。
msgstr はどんなコードセットでも許容しないといけないので、
msgid は ASCII を使うべきです。それでも、msgstr に使われる
コードセットに、ASCII と共存できるものでなければならない
という制限を加えることになりますが、その制限を取り去れば
.po ファイル自体が存在できなくなってしまうので、最小限の
制限として、これは必要です。
というわけで、msgid に来る文字列、すなわちソースコード中の
文字列リテラルは、ASCII の範囲で書かれなければなりません。
そうすると、ASCII で書かれた文字列リテラルは、どこで改行
しようと破壊されることはありえない。
したがって、EUC-JP が行の折り畳み処理によって壊れてしまう、
という問題は、ソースコードに ASCII 以外のコードセットを
使うことによって生じたものであるので、解決法としては
ソースコードを書き換えるのが正しく、gettext に EUC-JP パッチ
が必要となるような状況そのものがおかしいのだ、という結論になります。
--- * --- * --- * ---
これ、間違ってますか?
たぶん、どこか私の知らないところで、msgstr が強制的に
行の折り畳み処理を受けてしまう場面があるのでしょうね。
というわけで、上記の内容は誤りで、話題になっているのは
msgid ではなく msgstr の折り畳みだ、というふうに考える
ことにして、続きを書きます。
--- * --- * --- * ---
> さっきからずっとソースを眺め直していたのですが、いい考えが出
> てきませんでした。逆にマルチバイトで処理する方法も考えてみた
> のですが、未知のコードセットとグリフに対して勝手な仮定を置く
> ことになってしまい、あまりにも信用がおけないのでやめました。
>
> その他、日本語は単語の途中で改行が入っても許されますが、英語
> やヨーロッパの言語はそうではありません。これをどう機械的に判
> 断するかも悩み所です。
エンドユーザーには触れないプログラムだから、単語の途中で切って
しまってもかまわない、というのは、なしでしょうか?
やっぱり、一定のカラム数で改行するような動作はしないように
する、というのがいちばんの解決法だと思います。そうすれば、
未知の文字コードに対する仮定とか一切なしにできます。
途中で改行を加える、というのは、EUC ならともかく、シフト状態を
持つ ISO-2022-* のようなコードだと、wchar_t などを使わない
かぎり、大変な作業になりますよ。
--- * --- * --- * ---
でも、やっぱり変だなあ...
msgstr を、行の折り畳み処理を受けてしまうほど (つまり、約 80
バイト以上) に長くいてしまうほうが悪い、と考えることも
できますよね。そんな場合は msgstr を書いた時に手動で改行
しておかなくちゃ。ただし、カラム数/バイト数 の値が非常に小さく
なるようなコードセット (があったとして) に対しては、
このことを強く要求できないですが...
でも、きれいな解決法がもしないのなら、これもありですよね。
/***********************************************************
* 久保田智広 Tomohiro KUBOTA
* tkubota@xxxxxxxxxxx / kubota@debian.or.jp
***********************************************************/