From: Araki K. <j00...@ip...> - 2002-01-21 17:39:22
|
荒木と申します。 http://mlterm.sf.net/ にて、mlterm という端末ソフトウェアを開発しております。 早速ですが、東風フォントを mlterm 上でアンチエイリアスして表示する際の不 具合報告をいただいておりまして、それに関連して、お伺いしたいことがあり、 メールを送らせていただきました。 # このメールは、mlterm の ML にも CC しております。 # そのまま CC をつけていただければ、(加入せずとも) mlterm の ML にも配送 # されます。 不具合の症状は、例えば、JISX0208 の 「〜」(0x2141) などが表示できない、と いったものです。 原因は、おそらくこういうことのようです。 mlterm ではアンチエイリアスフォントの表示に際して、Xft を使用しており、 この Xft の API が、Unicode での入出力しか受けつけてくれないために、 JISX0208 の表示には、mlterm 内部で、JISX0208 => Unicode 変換を行なってお ります。 mlterm では、内部での JIS0208 <=> Unicode 置換に際して、かつて www.unicode.org/Public/Mapping 以下にあり、現在は obsolete されている JIS0208.TXT(*) を使用しております。 従って、JISX0208 の 0x2141 は、0x301c に変換されます。 (*) # Name: JIS X 0208 (1990) to Unicode # Unicode version: 1.1 # Table version: 0.9 # Table format: Format A # Date: 8 March 1994 # Authors: Glenn Adams <gl...@me...> # John H. Jenkins <Joh...@ta...> ところが、東風明朝フォントを ttf2bdf して、BDF での並びを調べた限りで は、 www.unicode.org/Public/Mapping の CP932.TXT に元づいた配列になっ ているようで、0x2141 相当するグリフは 0xff5e に入っており、0x301c に は、何のグリフも入っておりません。 このため、Xft で表示した場合に、「〜」が表示されないということなのだ ろう、と推測しております。 # 0x301c 以外につきましても、以下のサイトにてまとめられているような # JISX0208<=>Unicode の様々な変換テーブル間でマッピングの異なる部分に # ついては、同様の問題が生じます。 # http://www.debian.or.jp/~kubota/unicode-symbols.html # ちなみに、X-TT は、xc/extras/X-TrueType/JISX0208/main.c などをみますと、 # 内部でこの辺の差異を吸収してくれるようでして、X-TT 経由で東風フォント # を使う限りでは、この問題は生じないようです。 この問題の回避策としては、ひとつに、mlterm 側で、様々に存在する JISX0208 <=> Unicode 変換テーブルをオプションで切りかえられるようにする という方法が考えられます。 しかし、これですと、ユーザが、変換テーブル間の相違という問題を理解した上 で、どのフォントがどの変換テーブルに依存しているかということを調べて、い ちいち切りかえる必要が生じます。 # mlterm 側から、どのフォントが使われているか判定できれば、内部で自動的に # フォントごとの変換テーブルの差異を吸収することも可能なのですが、どうも # 正確に判定することは期待できないようです。 一方、東風フォントの方で、0x301c にも、「〜」のグリフをいれていただく、と いう方法も考えられます。 この場合、Unicode としては、0x301c と 0xff5e に同じグリフが割りあてられ ていること自体は問題ないはずですので、個人的には、できればそのようにして いただけるとありがたいと思っております。 # MS Gothic/MS Mincho では 0x301c にも「〜」が入っているようです。 # ただ、Dynalab フォントでは、東風フォントと同様の問題が生じるようでして、 # いずれにせよ、そちらへの対処は必要になりそうです。 # そこで、Xft に JISX0208 をわたすのに使用する 変換テーブルとして、 # JIS0208.TXT でなく CP932.TXTを使うオプション程度は、mlterm にも実装する # つもりではいます。 とはいえ、わたしは、フォントの実装や、Unicode <=> JISX0208 のマッピング について、専門的な知識はほとんどありませんので、このような場合に、どのよ うな解決策をとるのが一番よいのか、判断しかねているのが現状です。 もし、こうすべきだ、ということがありましたら、その点ご指摘いただけると 幸いです。 --- mlterm で問題になるグリフ(JISX0208) JISX0208 mlterm 東風フォント 0x2140 005C/Na FF3C/F 0x2141 301C/W FF5E/F 0x2142 2016/A 2225/A 0x215D 2212/N FF0D/F 0x2171 00A2/Na FFE0/F 0x2172 00A3/Na FFE1/F 0x224C 00AC/Na FFE2/F --- その他(http://www.debian.or.jp/~kubota/unicode-symbols.htmlから抜粋) --------------------------------------------------------------------------------------------- 変換元 Unicode への変換結果** / 東アジア文字幅 CCS Shift_JIS* EUC-JP* 0208 SJIS CP932 APPLE 0221A 0221B JAVAA JAVAB --------------------------------------------------------------------------------------------- [ASCII] 0x5C ---- 0x5C ---- ---- ---- ---- ---- 005C/Na ---- 005C/Na 0x7E ---- 0x7E ---- ---- ---- ---- ---- 007E/Na ---- 007E/Na [JISX0201 ローマ字] 0x5C 0x5C ---- ---- 00A5/Na 005C/Na 00A5/Na 00A5/Na ---- 005C/Na 00A5/Na 0x7E 0x7E ---- ---- 203E/N 007E/Na 007E/Na 203E/N ---- 007E/Na 203E/N [JISX0208] 0x2131 0x81 0x50 0xA1 0xB1 FFE3/F FFE3/F FFE3/F FFE3/F FFE3/F 203E/N FFE3/F FFE3/F 0x213D 0x81 0x5C 0xA1 0xBD 2015/A 2015/A 2015/A 2014/A 2014/A 2014/A 2015/A 2015/A 0x2140 0x81 0x5F 0xA1 0xC0 005C/Na 005C/Na FF3C/F FF3C/F 005C/Na FF3C/F FF3C/F FF3C/F 0x2141 0x81 0x60 0xA1 0xC1 301C/W 301C/W FF5E/F 301C/W 301C/W 301C/W 301C/W 301C/W 0x2142 0x81 0x61 0xA1 0xC2 2016/A 2016/A 2225/A 2016/A 2016/A 2016/A 2016/A 2016/A 0x215D 0x81 0x7C 0xA1 0xDD 2212/N 2212/N FF0D/F 2212/N 2212/N 2212/N 2212/N 2212/N 0x216F 0x81 0x8F 0xA1 0xEF FFE5/F FFE5/F FFE5/F FFE5/F FFE5/F 00A5/Na FFE5/F FFE5/F 0x2171 0x81 0x91 0xA1 0xF1 00A2/Na 00A2/Na FFE0/F 00A2/Na 00A2/Na 00A2/Na 00A2/Na 00A2/Na 0x2172 0x81 0x92 0xA1 0xF2 00A3/Na 00A3/Na FFE1/F 00A3/Na 00A3/Na 00A3/Na 00A3/Na 00A3/Na 0x224C 0x81 0xCA 0xA2 0xCC 00AC/Na 00AC/Na FFE2/F 00AC/Na 00AC/Na 00AC/Na 00AC/Na 00AC/Na [JISX0212] 0x2217 ---- 0x8F,A2,97 ---- ---- ---- ---- 007E/Na FF5E/F ---- ---- --------------------------------------------------------------------------------------------- では -- kiken j00...@ip... |