このページは過去に掲載していたものをそのまま使用しています。

日本語を通すためのfontまわりの改造

みついわゆきおさんのパッチのおかげで、fontsetで読み込めるように なったので、Times-Roman等のフォントを使っても日本語が表示されるように 修正してみました。

ascii文字と日本語の共存

フォントの設定をしているのは、lib/font.cなので、ここを修正した。 いままではフォントの指定は次のようになっていた。

/* 定義 */
typedef struct _FontData {
  char *fontname;
  char *fontname_ps;
  char *fontname_x11[NUM_X11_FONTS]; /* First choice */
} FontData;

/* フォント定義の一部 */
{ "Times-Roman",
  "Times-Roman",
  { "-adobe-times-medium-r-normal-*-%d-*-*-*-*-*-*-*",
    NULL
  }
},

これでは不便なので次のように変更する

/* 修正後のフォント定義 */
{ "Times-Roman",
  "Times-Roman",
  { "-adobe-times-medium-r-normal-*-%d-*-*-*-*-*-*-*,-*-mincho-medium-r-normal-*-%d-*-*-*-*-*-*-*",
    NULL
  }
}, 

これによって不具合がそこら中に出現することになる。なぜなら fontを指定している文字列には'%d'が含まれているが、これはg_snprintf()に よりサイズを指定して完全な形になるのだが、その際のコードは次のように なっている。

g_snprintf(buffer, bufsize, x11_font, 100);
/*これを展開すると*/
g_snprintf(buffer, bufsize,"-adobe-times-medium-r-normal-*-%d-*-*-*-*-*-*-*,-*-mincho-medium-r-normal-*-%d-*-*-*-*-*-*-*", 100);

そこで、g_snprintf(buffer, bufsize, x11_font, 100, 100);と 書き直す。これによって日本語にも対応したフォントを読み込む事ができるように なり、描画の際に日本語も表示されるようになる。


Yasuhiro Abe <yasu@europa.u-aizu.ac.jp>
Last modified: Thu Feb 3 09:45:33 2000