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

コンパウンド・ストリングとフォント・リスト

デスクトップがコンパウンド・ストリングを表示する場合、デスクトップはセグメントのフォント・リスト要素タグを使用して、各セグメントをフォントまたはフォント・セットに関連付けます。アプリケーションは希望するフォントまたはフォント・セットを読み込んで、そのフォントまたはフォント・セットと、それに関連付けられたフォント・リスト要素タグを含むフォント・リストを作成し、同じタグでコンパウンド・ストリング・セグメントを作成していなければなりません。

デスクトップは、コンパウンド・ストリングをフォント・リスト・エントリに割り当てるとき、次のように設定された検索プロシージャに従います。

  1. デスクトップは、フォント・リストで、コンパウンド・ストリングに指定されたフォント・リスト要素タグと厳密に一致するものを検索します。一致点が見つかると、コンパウンド・ストリングはそのフォント・リスト・エントリに割り当てられます。

  2. コンパウンド・ストリングとフォント・リスト間の一致点が見つからない場合は、デスクトップは、コンパウンド・ストリングをフォント・リスト要素タグに関係なくフォント・リストの最初の要素に割り当てます。

後方互換を保つため、厳密な一致点が見つからない場合は、コンパウンド・ストリングまたはフォント・リストの XmFONTLIST_DEFAULT_TAG の値が、XmSTRING_DEFAULT_CHARSET のタグでコンパウンド・ストリングまたはフォント・リストのエントリを作成した結果のタグに一致します。

図 4-1 は、フォント・リスト要素タグが XmFONTLIST_DEFAULT_TAG 以外に設定される場合の、コンパウンド・ストリング、フォント・セット、フォント・リスト間の関係を示しています。

図 4-1 フォント・リスト要素タグが XmFONTLIST_DEFAULT_TAG でない場合のコンパウンド・ストリング、フォント・セット、フォント・リスト間の関係

Graphic

次の例は、tagb と呼ばれるタグの使用方法を示しています。

XFontSet                *font1;  
XmFontListEntry         font_list_entry; 
XmFontList              font_list;  
XmString                label_text;
char                    **missing;
int                     missing_cnt;
char                    *del_string;
char                    *tagb;           /* Font list element tag */
char                    *fontx;          /* Initialize to XLFD or font alias */
char                    *button_label;   /* Contains button label text */
                .
                .
font1 = XCreateFontSet (XtDisplay(toplevel), fontx, & missing,
                        & missing_cnt, & def_string);  
font_list_entry = XmFontListEntryCreate (tagb, XmFONT_IS_FONTSET,
                        (XtPointer)font1);  
font_list = XmFontListAppendEntry (NULL, font_list_entry);  
XmFontListEntryFree (font_list_entry);   
label_text = XmStringCreate (button_label, tagb);

XCreateFontSet() 関数はフォント・セットを読み込み、XmFontListEntryCreate() 関数はフォント・リスト・エントリを作成します。アプリケーションは、エントリを作成してそれを既存のフォント・リストに追加するか、または新しいフォント・リストを作成しなければなりません。どちらの場合も XmFontListAppendEntry() 関数を使用します。適切な場所にフォント・リストがないので、前述のコード例ではフォント・リスト引き数が NULL の値になっています。XmFontListAppendEntry() 関数は、単一のエントリ font_list_entry を持つ font_list という新しいフォント・リストを作成します。font_list に新しいエントリを追加するには、同じプロシージャに従い、ヌルでないフォント・リスト引き数を提供してください。

図 4-2 は、フォント・リスト要素タグが XmFONTLIST_DEFAULT_TAG に設定される場合の、コンパウンド・ストリング、フォント・セット、フォント・リストの関係を示しています。この場合、値のフィールドはロケール・テキストです。

図 4-2 フォント・リスト要素タグが XmFONTLIST_DEFAULT_TAG に設定されている場合のコンパウンド・ストリング、フォント・セット、フォント・リスト間の関係

Graphic

ここで、デフォルト・タグは Font_Set_C を指しています。Font_Set_C は、その言語で文字を表示するのに必要なフォントを識別します。