XCreateFontSet(3) 国際化文字列を表示するためのフォントセットを作成・解放する

Other Alias

XFreeFontSet

書式

XFontSet XCreateFontSet(display, base_font_name_list, missing_charset_list_return,

               missing_charset_count_returndef_string_return)

      Display *display;

      char *base_font_name_list;

      char ***missing_charset_list_return;

      int *missing_charset_count_return;

      char **def_string_return;

void XFreeFontSet(display, font_set)

      Display *display;

      XFontSet font_set;

引き数

display
X サーバへの接続を指定する。
base_font_name_list
ベースフォント名を指定する。
def_string_return
存在しない文字集合に対して描画される文字列が返される。
font_set
フォントセットを指定する。
missing_charset_count_return
存在しない文字集合の数が返される。
missing_charset_list_return
存在しない文字集合が返される。

説明

関数 XCreateFontSet は、指定されたディスプレイに対してフォントセットを生成する。 フォントセットは XCreateFontSet が呼ばれた時点のロケールに関連付けられる。 このフォントセットは、それ以降の関数呼び出しで使用され、フォントや キャラクタの情報の取得やテキストの描画のために使われる。 これらの動作はフォントセットのロケールに基づいて行われる。

引き数 base_font_name_list はベースフォント名のリストである。これは Xlib がロケールに必要なフォントロードするために用いられる。 ベースフォント名はコンマ区切りのリストである。 また、終端が NULL 文字で、ホストポータブル文字エンコーディングの文字列 であると仮定される。 そうでない場合の実行結果は実装依存である。 コンマの直前直後の空白は無視される。

XLFD フォント名を用いれば、Xlib が多数のロケールに必要なフォントを取得 する際に、ロケールに依存しない単独のベースフォント名を使用できるように なる。 この単独のベースフォント名は、フォントのファミリを示すべきである。 そしてこのファミリのメンバは、使おうとするロケールに必要な様々な 文字集合でエンコードされているべきである。

XLFD ベースフォント名はロケールに対して必要な、ある文字集合を明示的に 示すこともできる。 これにより、ロケールが必要とする文字集合で使う正確なフォントを、 フォント選択を完全に行った状態で指定することができる。

ベースフォント名が XLFD 名でない場合、Xlib はそのフォントの フォント属性から XLFD 名を得ようとする。 この XLFD 名の取得に成功すれば、関数 XBaseFontNameListOfFontSet はクライアントに与えられた名前の代わりに、この XLFD 名を返す。

Xlib は

XFontSet でテキストを表示する際に使うフォントを選択するためのアルゴリズムは 次の通りである。 ロケールが必要とするそれぞれの文字集合を得るため、ベースフォント名のリ ストを検索し、以下の条件のうちサーバに存在するフォントの組を指す最初の ものを見つける。

  • CharSetRegistryCharSetEncoding フィールドに関して、必要な文字集合あるいは必要な文字集合の スーパーセットを示す、XLFD を満たす最初のベースフォント名。 実装では、指定した文字集合が必要な文字集合のスーパーセットであるベース フォント名を使用する。この例として、ASCII 文字集合に対する ISO-8859-1 フォントが挙げられる。
  • 再マッピングして必要な文字集合をサポートできる1つ以上の文字集合を指す、 1つ以上のXLFDを満たすベースフォント名の集合。 Xlib の実装では必要な文字集合から1つ以上の他の文字集合へのマッピングを 認識し、マッピングした先の文字集合に対するフォントを使うことができる。 例えば、JIS Roman は ASCII のチルダとバックスラッシュを円記号と オーバーバーで置き換えたものである。 JIS Roman フォントが利用できない場合、Xlib はこの文字集合をサポートす るため、 ISO8859-1 をロードすることができる。
  • XLFD準拠のフォント名か非XLFDのフォント名のうち、XLFDフォント名を得るこ とができ、(XLFD フォント名の CharSetRegistry フィールドと CharSetEncoding フィールドを置き換えて)必要な文字集合と結びつけることができる最初のも の。 1 の場合には、必要な文字集合のスーパーセットである文字集合を使う実装も ある。
  • 実装依存の方法で、文字集合のイメージ文字をサポートする1つ以上のフォン トにマッピングできる最初のフォント名。

例えば、あるロケールが次の文字集合を必要とすると考える。

ISO8859-1
JISX0208.1983
JISX0201.1976
GB2312-1980.0

ユーザは明示的に文字集合を指定する base_font_name_list を与えることが できる。この場合、指定したフォントが存在すれば使われることが保証される。 例:

"-JIS-Fixed-Medium-R-Normal--26-180-100-100-C-240-JISX0208.1983-0,-JIS-Fixed-Medium-R-Normal--26-180-100-100-C-120-JISX0201.1976-0,-GB-Fixed-Medium-R-Normal--26-180-100-100-C-240-GB2312-1980.0,-Adobe-Courier-Bold-R-Normal--25-180-75-75-M-150-ISO8859-1"

代わりに、文字集合を省略した base_font_name_list を与えることができ、 この場合は Xlib はロケールが必要とする文字集合のフォントを選択する。 例:

"-JIS-Fixed-Medium-R-Normal--26-180-100-100-C-240,-JIS-Fixed-Medium-R-Normal--26-180-100-100-C-120,-GB-Fixed-Medium-R-Normal--26-180-100-100-C-240,-Adobe-Courier-Bold-R-Normal--25-180-100-100-M-150"

代わりに、Xlib が利用可能で XLFD プロパティの最小限の要求を満たすフォ ントの全てからの選択を行えるように、ユーザは単に単一のベースフォント名 を与えることもできる。 例:

"-*-*-*-R-Normal--*-180-100-100-*-*"

もし、十分なメモリがないか、現在のロケールがサポートされていないために XCreateFontSet がフォントセットを生成することができなければ、 XCreateFontSet は NULL を返し、missing_charset_list_return には NULL が設定され、 missing_charset_count_return には 0 が設定される。 現在のロケールが必要とする全ての文字集合に対してフォントが存在する場合、 XCreateFontSet は正しい XFontSet を返し、missing_charset_list_return には NULL が設定され、 missing_charset_count_return には 0 が設定される。

必要なフォントセットの1つ以上が存在しない場合、 XCreateFontSet は missing_charset_list_return にフォントが存在しない文字集合の名前(NULL で終る)のリストを設定し、 missing_charset_count_return に足りないフォントの数を設定する。 この文字集合はロケールのエンコーディングに必要な文字集合のリストから得 られる。 ただし、Xlib が要求された文字集合を再マッピングできるような文字集合は 含まない。

必要な文字集合がいずれも存在しない場合か、Xlib でのロケール定義で、あ る特定の文字集合に対して必要なはずのフォントが見つからない場合は、 XCreateFontSet は NULL を返す。 そうでない場合には、 XCreateFontSet は font_set に正しい XFontSet を返す。

Xmb/Xwc 系の描画や計算の関数が呼び出された時、 XFontSet に足りない文字集合があった場合は、そのロケールの文字のいくつかは描画で きない。 def_string_return が NULL でなければ、 利用できるフォントの文字集合が、あるコードの文字を描画するのに必要な全 てのグリフを含んでいない時、 XCreateFontSet はこの XFontSet で描画されるグリフを表す文字列へのポインタを返す。 文字列は必ずしも現在のロケールの正しい文字で構成されているわけではなく、 フォントセットに対して必ずロードされたフォントで描画されるわけでもない が、クライアントはこの文字列を XFontSet で描画あるいは計算される文字列に含めることによってデフォルトのグリフを 描画あるいは計算することができる。

def_string_return に返される文字列が空文字列("")ならば、何のグリフも 描画されず、文字の送り幅も 0 である。 返される文字列は、NULL で終わる。 この文字列は Xlib が所有しているので、クライアントは修正したり解放した りしてはならない。 この文字列は、対応する XFontSet を引き数にして XFreeFontSet を呼び出すことによって解放される。 解放されるまでは、その内容が Xlib によって変更されることはない。

欠けている文字集合とデフォルト文字情報からエラーメッセージを作り、 一部のフォントが存在しない場合にプログラムの実行を継続するか どうかを決めることはクライアントの責任である。

返される XFontSet と欠けている文字集合文字列はそれぞれ XFreeFontSetXFreeStringList で解放しなければならない。 クライアントが与える base_font_name_list は XCreateFontSet を呼び出した後にクライアントが解放してもよい。

関数 XFreeFontSet は指定したフォントセットを解放する。 存在するならば、関連するベースフォント名リスト、フォント名リスト、 XFontStruct のリスト、 XFontSetExtents が解放される。