共通デスクトップ環境 プログラマーズ・ガイド (国際化対応編)

フォント・セットおよびフォント・リストの形式

表 2-1 にフォント・セットとフォント・リストの形式を示します。

表 2-1 フォント・セットおよびフォント・リストの形式

リソース型 

XLFD セパレータ 

終止符 

FontEntry セパレータ 

*fontSet: (Xlib)

カンマ 

なし 

なし 

*fontList : (Motif)

セミコロン 

コロン 

カンマ 

次に、フォント・リソース指定の例をいくつか挙げます。

app_foo*fontList: -adobe-courier-medium-r-normal--24-240-75-75-m-150-*:

上記の fontList は、ユーザのロケールに適切なものとして、1 つ以上の 24 ポイント Adobe Courier フォントから成るフォント・セットを指定しています。

app_foo*fontList: -adobe-courier-medium-r-normal--18-*; *-gothic-*-18-*:

この fontList は、ユーザのデータの一部の文字には 18 ポイント Courier フォントから成るフォント・セットを指定し、その他の文字には 18 ポイント Gothic フォントを指定しています。

Motif ベースのアプリケーションは、フォント・リストに入っているフォント・セットに直接アクセスする必要が起こる場合があります。たとえば、DrawingArea ウィジェットを使用するアプリケーションは、描画したイメージの 1 つにラベルを付けたいことがあります。次のコード例は、フォント・リストからのフォント・セットの抽出方法を示しています。この例では、タグ XmFONTLIST_DEFAULT_TAG でフォント・セットを探します。XmFONTLIST_DEFAULT_TAG が「ロケールの codeset」を指すためです。アプリケーションでは、ローカライズされたデータを含むすべての文字列に XmFONTLIST_DEFAULT_TAG を使用してください。

XFontSet FontList2FontSet( XmFontList fontlist)  
{  
XmFontContext context;
XmFontListEntry next_entry;  
XmFontType type_return = XmFONT_IS_FONT;  
char* font_tag;  
XFontSet fontset;  
XFontSet first_fontset;  
Boolean have_font_set = False;   

if ( !XmFontListInitFontContext(&context, fontlist)) {
     XtWarning("fl2fs: can't create fontlist context...");
     exit 0;  
}   

while ((next_entry = XmFontListNextEntry(context) != NULL) {

  fontset = (XFontSet) XmFontListEntryGetFont(next_entry,
              &type_return);
  if (type_return == XmFONT_IS_FONTSET ) {

      font_tag = XmFontListEntryGetTag(next_entry);

      if (!strcmp(XmFONTLIST_DEFAULT_TAG, font_tag) {
          return fontset;
      }
      /* Remember the 1st fontset, just in case... */
      if (!have_font_set) {
          first_fontset = fontset;
          have_font_set = True;
      }
   }
}  
if (have_font_set)
      return first_fontset;  
return (XFontSet)NULL; 
}