2006/11/09(Thu)
○ NetBSD
@mapper_zone
Citrus iconvはesdbで指定されているDEFCSIDがfromとtoが一致したらピボット変換しない(必要ないので)。
先日対応したCP51932/CP50220だけど、CP932とは収録文字数に差がある(前者にはユーザ定義文字とか
IBM拡張文字が含まれないのよー)。その為に異なるDEFCSIDを振らざるを得なかったので
両者の変換は必ずUnicodeを経由しての変換になってしまう。
ダサダサ。
もっとスマートなやり方ならばshare/i18n/csmapper/mapper.dir で
CP932/CP51932 mapper_zone 0x2121 - 0x7426, 0x7921 - 0x7C7E
CP51932/CP932 mapper_zone
...
とか書ければ一番いいんだけど(それならCP932EXT%UCS.srcを3分割する必要もなかった)
mapper_zoneは細かいZONE指定に対応していないんだよなー。
直すのはそんなに手間じゃないはずなので、TODOに追加しておこう(いれときっぱなしー)。
これ対応すればこないだJOHAB対応時にKS5601のテーブルを2分割したのも元に戻せる。
...ってdistrib/sets/lists/base/miで一度obsoleteにマークしたものって戻して良いんだっけ?
@VIQR(RFC1456)
それがVIPクオリティ、じゃなくてヴェトナムの7bitコード、メールやニュースグループで使用されてたらすい。
文字集合はVISCII、符号化手法はISO-2022のような状態遷移を使うのではなく、RFC1345のようなニーモニックを使う。
A -> 0x41 A( -> 0xC5 A(' -> 0x81 A(. -> 0x83 A(` -> 0x82 ...
ニーモニックではなくリテラルで
A(`
を表現したい場合、エスケープ文字として0x5cを使い
A\(`
と書く、符号化手法というより換字ですな。
というわけで(どういうわけで)、これもまた
DR#288のケースだね。
mbrtowc(&wc, ...)がwc != L'\0'の場合でも(size_t)0を返す可能性がある。
またwc->mb に戻す時、前の文字がニーモニックの1バイト目と被るASCIIの文字である場合
エスケープが必要なのでその情報をmbstate_tで保持する必要がある。
つまり mb -> wc はstatelessだけれども wc -> mb はstatefulなパターン。
実装自体はニーモニックを1文字づつバラしたツリーを辿る方法で簡単にできるっぽ。
テストしたらcommitするよん。