Next: , Previous: , Up: フェイス   [Contents][Index]


41.12.11 フォントセット

フォントセット(fontset)とは、それぞれが文字コードの範囲に割り当てられるフォントのリストのことです。個々のフォントではEmacsがサポートする文字の全範囲を表示できませんが、フォントセットであれば表示することができます。フォントのようにフォントセットは名前をもつことができ、フレームやフェイスにたいしてフォントを指定する際に、フォント名としてフォントセット名を使用できます。以下はLispプログラム制御下でのフォントセット定義に関する情報です。

Function: create-fontset-from-fontset-spec fontset-spec &optional style-variant-p noerror

この関数は仕様文字列fontset-specに応じて新たなフォントセットを定義する。この文字列は以下のような形式であること:

fontpattern, [charset:font]…

カンマの前後の空白文字は無視される。

この文字列の最初の部分fontpatternは、最後の2つのフィールドが‘fontset-alias’であることを除外して標準Xフォント名形式をもつこと。

新たなフォントセットはlong名とshort名という2つの名前をもつ。long名はそれ全体がfontpattern、short名は‘fontset-alias’。いずれの名前でもこのフォントセットを参照できる。同じ名前がすでに存在するフォントセットではnoerrornilならエラーがシグナルされ、noerrorが非nilならこの関数は何も行わない。

オプション引数style-variant-pが非nilなら、そのフォントセットのbold、italic、およびbold-italicも同様に作成するよう指示する。これらの変種フォントセットはshort名をもたずbold、および/またはitalicを示すようにfontpatternを変更して作成したlong名だけをもつ。

仕様文字列はそのフォントセット内でどのフォントを使用するかも宣言する。詳細は以下を参照。

構文‘charset:font’はある特定の文字セットにたいして、(このフォントセット内の)どのフォントを使用するかを指定します。ここでcharsetは文字セットの名前、fontはその文字セットにたいして使用するフォントです。仕様文字列内ではこの構文を任意の回数使用できます。

明示的に指定しなかった残りの文字セットにたいして、Emacsはfontpatternにもとづいてフォントを選択します。これは‘fontset-alias’をその文字セットを命名する値に置き換えます。文字セットASCIIにたいしては、‘fontset-alias’は‘ISO8859-1’に置き換えられます。

加えて後続の複数フィールドがワイルドカードなら、Emacsはそれらを1つのワイルドカードにまとめます。これは自動スケールフォント(auto-scaled fonts)の使用を防ぐためです。フォントを大きくスケーリングすることにより作成されたフォントは編集に使用できず、小さくスケーリングされたフォントは、それ自身のサイズがより小さいフォントを使用する(Emacsが行う方法)ほうがよいので有用ではありません。

つまり以下のようなfontpatternなら

-*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24

ASCIIにたいするフォントspecは以下のようになるでしょう:

-*-fixed-medium-r-normal-*-24-*-ISO8859-1

またChinese GB2312文字にたいするフォントspecは以下のようになるでしょう:

-*-fixed-medium-r-normal-*-24-*-gb2312*-*

上記のフォントspecにマッチするChineseフォントをもっていないかもしれません。ほとんどのXディストリビューションには、familyフィールドに‘song ti’か‘fangsong ti’をもつChineseフォントだけが含まれます。そのような場合には以下のように‘Fontset-n’を指定できます:

Emacs.Fontset-0: -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24,\
        chinese-gb2312:-*-*-medium-r-normal-*-24-*-gb2312*-*

この場合にはChinese GB2312以外のすべての文にたいするフォントspecはfamilyフィールドに‘fixed’をもち、Chinese GB2312にたいするフォントspecはfamilyフィールドにワイルドカード‘*’をもちます。

Function: set-fontset-font fontset characters font-spec &optional frame add

この関数は指定されたcharactersにたいして、font-specのフォントマッチングを使用するように既存のフォントセットfontsetを変更する。

fontsetnilならこの関数はframeのフォントセット、framenilなら選択されたフレームのフォントセットを変更する。

fontsettならこの関数はshort名が‘fontset-default’であるようなデフォルトフォントセットを変更する。

characters引数はfont-specを使って表示すべき単一の文字を指定する。fromtoが文字であるようなコンスセル(from . to)でもよい。この場合には範囲fromからto (両端を含む)までのすべての文字にたいしてfont-specを使用する。

charactersには文字セット(文字セットを参照)も指定できる。この場合には、その文字セット内のすべての文字にたいしてfont-specを使用する。

charactersにはスクリプト名(char-script-tableを参照)も指定できる。この場合にはスクリプトに属するすべての文字にたいしてfont-specを使用する。

charactersにはnilも指定できる。この場合にはフォント仕様が指定されていないすべての文字にfont-specを使用する。

font-specは関数font-specが作成したfont-specオブジェクトかもしれない(低レベルのフォント表現を参照)。

font-specにはコンスセル(family . registry)を指定できる。ここでfamilyはフォントのファミリー名(先頭にfoundry名が含まれるかもしれない)、registryはフォントのレジストリー名(末尾にエンコーディング名が含まれるかもしれない)。

font-specにはフォント名(文字列)も指定できる。

font-specには、指定されたcharactersにたいするフォントが存在しないことを明示的に指定するnilを指定できる。これはたとえばUnicodeのPUA(Private Use Area)由来のようなグリフをもたない文字のフォントにたいするシステムワイドの高価な検索を避けるために有用。

オプション引数addが非nilなら、以前charactersにセットされたフォントspecにfont-specを追加する方法を指定する。prependならfont-specは既存specの先頭、appendならfont-specは末尾に追加される。デフォルトではfont-specは以前のセットされたfontspecをオーバーライドする。

たとえば以下は文字セットjapanese-jisx0208に属するすえての文字にたいして、ファミリー名が‘Kochi Gothic’であるようなフォントを使用するようにデフォルトフォントセットを変更する。

(set-fontset-font t 'japanese-jisx0208
                  (font-spec :family "Kochi Gothic"))

この関数は一般的にはユーザーのinitファイルから呼び出されること、そしてカレントのEmacsセッションにおいてcharactersのいずれかの文字が表示される前に呼び出される公算はさらに大であることに注意。これは一部のスクリプトではEmacsがそれらを表示する方法をキャッシュすること、このキャッシュには表示に用いるフォントの情報も含まれること、そして一度表示されるとフォントセット内での変更と関係なく、キャッシュされたフォントが引き続き使用されることが理由である。

Function: char-displayable-p char

この関数はEmacsがcharを表示できるようなら非nilをリターンする。またはより正確には選択されたフレームのフォントセットが、charが属する文字セットを表示するためのフォントをもてばtをリターンする。

フォントセットは文字単位でフォントを指定できる。フォントセットがこれを行う場合には、この関数の値は正確ではないかもしれない。

この関数はテキスト端末用のコーディングシステムがその文字をエンコード可能かどうかもチェックするので、利用可能なフォントがなくても非nilをリターンするかもしれない(端末I/Oのエンコーディングを参照)。