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

Re: Pango 0.16 での jisx0201,jisx0212


まるやまです。

メールが長くなってしまいましたが、よろしくお願いします。

<0GDB0084KCH3E4@xxxxxxxxxxxxxxxxxxx>の記事において
tajima@xxxxxxxxxxxxxxxxxxxさんは書きました。

> こんにちは、田島ともうします。
> 
> 問題の件は、
> 	http://bugzilla.gnome.org/show_bug.cgi?id=50633
> 
> にバグ登録してあります。JISX0201, JISX0212 に対しては、
> まるやまさんの指摘された方法で conv_8bit, conv_euc に修正を入れる、
> のが正しいやりかたと思います。 patch は一端作ったのですが、
> 他の文字セットへの対応のことなどを考えていたり、あとその他のことに時間を
> とられてたりしたこともあって、放ったままになっておりました。
> 今週中に cvs に commit できるように致します。
> 
> なお、一般的にこの手の問題を持ってく先ですが、現在の状況では buzilla.gnome.org
> にバグ登録するのがもっとも確実かと思います。jisx0213 サポートの件は別途 bug 登録
> しておきます。
> 

お手数かけて申し訳ございません。
今後、bugzillaに登録するようにします。


以下、自分の記述部分に、補足、訂正があります。

> >http://www.pango.org/gscript.gif
> >にあるように、
> >
> >Japanese (日本語) こんにちは、
> >
> >までは表示されているのですが、このあとに、謎の文字が続いています。
> >半角で「コンニチワ」と表示されるのだと思うのですが、
> >半角で「コ(space)ャァー」と言う風にしか読めません。
> >
> >いろいろ原因を探った結果、examples/pangox.aliases から選択され、
> >jisx0201カナの表示に使われる
> >-mutt-clearlyu-medium-r-normal--17-120-100-100-p-128-iso10646-1
> >のマッピングが「変」だという結論に達しました。
> >「ヲ」から「ソ」まで正しいと思うのですが、それ以降が変です。
> >
> >これは変だと思うのですが、本当に変なのでしょうか。
> >
> >これが本当に変なのか自分の知識では判断付かないのと、

このへんの話が言葉足らずでした。

U+FF66 以降がUNICODEにおけるいわゆる半角カナの領域だと思うのですが、
-mutt-clearlyu-medium-r-normal--17-120-100-100-p-128-iso10646-1
は、XFree86 4.0 標準のフォントのようなのですが、
xfdで見てみると、
0xFF66 「ヲ」から 0xFF7F「ソ」までは正しいように見えるですが、

0xFF80 「ヲ」
0xFF81 「ァ」
0xFF81 「ィ」

のように、なっていて
一方、
http://www.unicode.org/Public/MAPPINGS/EASTASIA/JIS/JIS0201.TXT
では、
----------
SJIS    UNICODE 

0xBF    0xFF7F  # HALFWIDTH KATAKANA LETTER SO
0xC0    0xFF80  # HALFWIDTH KATAKANA LETTER TA
0xC1    0xFF81  # HALFWIDTH KATAKANA LETTER TI
0xC2    0xFF82  # HALFWIDTH KATAKANA LETTER TU
0xC3    0xFF83  # HALFWIDTH KATAKANA LETTER TE
----------
となっていて、
-mutt-clearlyu-medium-r-normal--17-120-100-100-p-128-iso10646-1
がおかしいのではないのかな、という意味です。

そして、これが、
> >半角で「コ(space)ャァー」と言う風にしか読めません。
の原因ではないのかな、という意味です。

で、これが本当におかしいのか、が良くわかりません。
どうなのでしょうか。

> >
> >やはり、jisx0201 フォントが選択された方が幸せだと思うので、
> >以下の方法で、実現させました。
> >
> >1. 
> > http://www.unicode.org/Public/MAPPINGS/EASTASIA/JIS/SHIFTJIS.TXT

これは、間違いです。
http://www.unicode.org/Public/MAPPINGS/EASTASIA/JIS/JIS0201.TXT
が正しいです。

> >2.
> > modules/basic/tables-big.i 
> > の最初の enum に
> >
> >  ENC_JIS_0201    = 1 << nn
> >
> >  charsets[] に
> >
> >  { nn, "SJIS",         "jisx0201.1976-0", conv_8bit },
> >

全ての環境のiconv()で、SJISがあるのか、SJISという名前なのか、
良く分からなかったので、SJIS にすべきかどうか、
迷ったのですが、
少なくとも Redhat 7.0J ftp版の glibcでは、
SJIS というのがあったので、このようにしてみました。

また、Redhat 7.0J ftp版の glibc iconv では、
-------
SJIS    UNICODE

0x5C    0x00A5  # YEN SIGN
0x7E    0x203E  # OVERLINE
-------
のように変換されているので、これも考慮にいれて
SJISにしてみました。
ただ、この変換テーブルも、すべての環境で、
こうなのかは分かりません。


> >これで、半角カナで「コンニチワ」と表示されるようになりました。

これは、「コンニチハ」が正しいです。


ところで、

> >  ENC_JIS_0201    = 1 << nn

> >  { nn, "SJIS",         "jisx0201.1976-0", conv_8bit },

を追加して、
jisx0201フォントまたはiso-8859-1フォントで、
0x5C    0x00A5  # YEN SIGN
が表示されるのは確認したのですが、
0x7E    0x203E  # OVERLINE
が表示されません。

pango/modules/basic/basic-x.c の
basic_engine_shape() 
の第3引数 
gint length
には、U+203E の前までのUTF-8 のバイト数しか入っていない
ようだ、というところまでは追っかけたのですが、
この理由、および、この上位の関数の処理内容が
よくわりません。

これはバグなのでしょうか。

以上よろしくお願いします。

---------
Toshio MARUYAMA
marutosi@xxxxxxxxxxxxx