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

フォント管理

デスクトップは、テキストを表示するためにフォント・リストを使用します。フォントは、指定された文字セットの文字を表現するグリフのセットを定義します。フォント・セットは、指定されたロケールまたは言語のテキストを表示するのに必要なフォントの集まりです。フォント・リストは、使用されるフォントか、フォント・セットか、その両方のリストです。Motif にはフォント・リストを作成する簡易関数があります。

フォント・リスト構造

デスクトップには、テキスト表示用にフォント・リストが必要です。フォント・リストは、フォント構造体か、フォント・セットか、その両方のリストであり、それぞれに識別のためのタグがあります。フォント・セットは、現在の言語のすべての文字が確実に表示できるようにします。フォント構造体により、すべての文字が確実に表示できるようにするのは、(ロケールのコード・セットからグリフ索引への変換を含めて) プログラマの責任です。

フォント・リストの各エントリの形式は、{tag, element } の組み合わせです。element は単一のフォントかフォント・セットのいずれかです。アプリケーションは、単一のフォントとフォント・セットのどちらからでもフォント・リスト・エントリを作成できます。たとえば、次のコード・セグメントはフォント・セットのフォント・リスト・エントリを作成します。

char font1[] =
        "-adobe-courier-medium-r-normal--10-100-75-75-M-60";  
font_list_entry = XmFontListEntryLoad (displayID, font1,
        XmFONT_IS_FONTSET, "font_tag");

XmFontListEntryLoad() 関数は、フォントを読み込むか、またはフォント・セットを作成して読み込みます。この関数の 4 つの引き数は次のとおりです。

displayID

フォント・リストが使用されるディスプレイ

fontname

フォント名かベース・フォント名リストのいずれか (nametype 引き数による) を表す文字列

nametype

fontname 引き数がフォント名とベース・フォント名リストのどちらを表すかを指定する値

tag

そのフォント・リスト・エントリのタグを表す文字列

nametype 引き数が XmFONT_IS_FONTSET の場合、XmFontListEntryLoad() 関数は fontname 引き数の値からフォント・セットを現在のロケールに作成します。フォント・セットに指定されたフォントの文字セットは、ロケールに依存します。nametypeXmFONT_IS_FONT の場合、XmFontListEntryLoad() 関数は fontname にあるフォントをオープンします。どちらの場合も、フォントまたはフォント・セットがフォント・リスト・エントリに置かれます。

次のコード例は、新しいフォント・リストを作成し、そこにエントリfont_list_entry を追加します。

XmFontList font_list;  
XmFontListEntry font_list_entry;
  		.
  		.
font_list = XmFontListAppendEntry (NULL, font_list_entry);  
XmFontListEntryFree (font_list_entry);

フォント・リストが作成されると、XmFontListAppendEntry() 関数がそこに新しいエントリを追加します。次の例は、XmFontListEntryCreate() 関数を使用して既存のフォント・リストに新しいフォント・リスト・エントリを作成します。

XFontSet font2;  
char *font_tag;  
XmFontListEntry font_list_entry2;
  		.
  		.  
font_list_entry2 = XmFontListEntryCreate (font_tag,
  		 XmFONT_IS_FONTSET, (XtPointer)font2);

font2 パラメータは XCreateFontSet() 関数に返された XFontSet を指定します。XmFontListEntryCreate() 関数の引き数は font_tagXmFONT_IS_FONTSETfont2 であり、それぞれタグ、型、フォントです。タグおよびフォント・セットは、フォント・リスト・エントリの {tag, element} の組み合わせです。

このエントリをフォント・リストに追加するには、XmFontListAppendEntry() 関数を再度使用します。このときのみ最初のパラメータが既存のフォント・リストを指定します。

font_list = XmFontListAppendEntry(font_list, font_list_entry2); 
XmFontListEntryFree(font_list_entry2);

フォント・リストの例

リソース・ファイルにフォント・リストを指定する形式は、リストに含まれるものがフォントか、フォント・セットか、その両方かによって異なります。

フォントの獲得

フォントを獲得するには、フォントとオプションのフォント・リスト要素タグを指定します。

複数のフォントを指定するエントリは、, (カンマ) で区切られます。

フォント・セットの獲得

フォント・セットを獲得するには、ベース・フォント・リストとオプションのフォント・リスト要素タグを指定します。

ベース・フォント・リストに指定された複数のフォントは ; (セミコロン) で区切られます。複数のフォント・セットを指定するエントリは , (カンマ) で区切られます。

フォント・リスト要素タグがない場合のフォントの指定

フォント・リスト要素タグがない場合、デフォルトの XmFONTLIST_DEFAULT_TAG が使用されます。次に例をいくつか示します。

フォント・リスト要素タグがない場合のフォント・セットの指定

フォント・リスト要素タグがない場合、デフォルトの XmFONTLIST_DEFAULT_TAG が使用されます。次にフォント・セット指定の例をいくつか示します。

フォント・リスト形式

XmFontList() データ型は次の要素に関連付けられた 1 つ以上のエントリを含むことができます。

XFontStruct

フォントの charset でエンコードされたテキスト (フォント・エンコード・テキスト) を描画するのに使用できる X フォント

XFontSet

ロケールでエンコードされたテキスト (ローカライズされたテキスト) を描画するのに使用できる XFontStruct フォントの集まり

次の形式は、文字列から XmFontList へのコンバータによって使用されます。

XmFontList    := <fontentry> {', 'fontentry}   

fontentry     := <fontname><fontid>
              | <baselist><fontsetid>   

baselist      := <fontname>{';'<fontname>}   

fontsetid     := ':'<string> | <defaultfontset>   

fontname      := <XLFD string>  

fontid        := '='<string> | <defaultfont>   

XLFD string   := XLFD 仕様を参照 
defaultfont   := NULL  
defaultfontset:= ':'NULL  
string        := 改行をのぞく ISO646IRV のすべての文字

XmFontList が指定された fontentry は、フォントかフォント・セットのいずれかを指定できます。どちらの場合も、コンパウンド・ストリング (XmString) 内のセグメントにより ID (fontid または fontsetid) が参照できます。

defaultfontdefaultfontset はいずれもデフォルトの fontentry を定義できますが、XmFontList 単位にデフォルトは 1 つだけしかありません。

XmFONTLIST_DEFAULT_TAG 識別子は、XmString が描画されるときに、常にデフォルトの fontentry を参照します。デフォルトの fontentry が指定されない場合は、最初の fontentry が描画に使用されます。

リソース・コンバータは、作成されたすべてのフォント・セットが同じロケールに関連付けられるように、単一のロケールで動作します。


注 -

実装によっては、ロケールのコード・セット名を、特別な charset ID (fontid または fontsetid) として XmFontList 文字列の中に確保します。このためアプリケーション開発者は、プラットフォーム間でポータブルなアプリケーションを作成したい場合は、コード・セット名を使用しないように注意してください。