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

[mgp-users-jp 00919] Some problems on `--enable-freetype-charset16'



千葉大の山本です。

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