[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[mgp-users-jp 00919] Some problems on `--enable-freetype-charset16'
- To: mgp-users-jp@mew.org
- Subject: [mgp-users-jp 00919] Some problems on `--enable-freetype-charset16'
- From: mituharu@math.s.chiba-u.ac.jp
- Date: Tue, 25 Dec 2001 12:37:50 +0900
- Delivered-to: mailing list mgp-users-jp@mew.org
- Mailing-list: contact mgp-users-jp-help@mew.org; run by ezmlm
- User-agent: Wanderlust/2.4.1 (Stand By Me) SEMI/1.13.7 (Awazu) FLIM/1.13.2 (Kasanui) Emacs/21.1 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI)
千葉大の山本です。
magicpoint 1.09a で --enable-freetype-charset16 を指定してコンパイルし、
ftp://www.mew.org/pub/MagicPoint/ttf.tar.gz にあるフォントを使用したと
きに文字が正しく表示されない場合がいくつかありましたので報告します。
1. tfont.c で
if (code > 256)
code = unicode_map[code];
#endif /* FREETYPE_CHARSET16 */
#if 1 /* latin2-4 encoding processing */
if (code > 0xa0) {
if (registry)
regid = get_regid(registry) -1;
else {
if (mgp_charset)
regid = get_regid(mgp_charset) -1;
}
if (latin_unicode_map[regid][code])
code = latin_unicode_map[regid][code];
}
#endif
return TT_Char_Index(char_map, (short) code);
という部分がありますが、code = unicode_map[code] で Unicode に変換
した後にその下の #if 1 /* latin2-4 encoding processing */ 〜 #endif
の部分でさらに latin_unicode_map による変換が行われてしまう場合があ
ります。(実際には配列の外を見てしまいますが。) 「#endif /*
FREETYPE_CHARSET16 */」 の直前に else を入れれば回避できますが、
#ifdef の部分が中途半端になってあまり良くないと思いますのでもう少し
整理した方がいいかもしれません。こちらでは Mac OS X (+ XFree86) と
いう環境で問題が起きました。
2. RedHat 7.2 でコンパイルすると一部の文字が truetype フォントではなく
X のフォントで表示されてしまいます。原因は上のソースコードの最後の
return TT_Char_Index(char_map, (short) code);
で、freetype 1.3.1 の freetype.h では
EXPORT_DEF
TT_UShort TT_Char_Index( TT_CharMap charMap,
TT_UShort charCode );
となっていて問題無いのですが、RedHat 7.2 に入っている freetype 1.4
の freetype.h では
EXPORT_DEF
TT_UShort TT_Char_Index( TT_CharMap charMap,
TT_ULong charCode );
となってしまっているために符号拡張が起きてしまいます。(short) code
を (u_short) code にすれば回避できます。
RedHat 7.2 に入っている freetype 1.4 は正式リリースではなさそうなの
でこれに合わせるべきかどうかという問題はありますが、一応報告してお
きます。
山本 光晴
mituharu@math.s.chiba-u.ac.jp