XCreateFontSet(3X11)

名前
XCreateFontSet, XFreeFontSet - 国際化された文字列を表示するフォントセットの作成、解放

書式
XFontSet XCreateFontSet(display, base_font_name_list, missing_charset_list_return,
               missing_charset_count_return, def_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
    存在しない文字集合を返す。

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

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

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

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

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

Xlib は

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

•   と フィールドに関して、必要な文字集合あるいは必要な文字集合のスーパーセッ トを示す、XLFD を満たす最初のベースフォント名。 実装では、指定した文字集合が必要な文字集合のスーパーセットであるベース フォント名を使用する。この例として、ASCII 文字集合に対する ISO-8859-1 フォントが挙げられる。

•   再マッピングして必要な文字集合をサポートできる1つ以上の文字集合を指す、 1つ以上のXLFDを満たすベースフォント名の集合。 Xlib の実装では必要な文字集合から1つ以上の他の文字集合へのマッピングを 認識し、マッピングした先の文字集合に対するフォントを使うことができる。 例えば、JIS Roman は ASCII のチルダとバックスラッシュを円記号とオー バーバーで置き換えたものである。 JIS Roman フォントが利用できない場合、Xlib はこの文字集合をサポートす るため、 ISO8859-1 をロードすることができる。

•   XLFD準拠のフォント名か非XLFDのフォント名のうち、XLFDフォント名を得るこ とができ、(XLFD フォント名の フィールドと フィールドを置き換えて)必要な文字集合と結びつけることができる最初のも の。 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-*-*"

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

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

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

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

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

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

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

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

関連項目
XExtentsofFontSet(3X11), XFontsOfFontSet(3X11), XFontSetExtents(3X11)
Xlib - C Language X Interface