GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Low_002dLevel-Font.html ・ emacs-doc.conao3.com

42.12.12 低レベルフォント表現

通常、フォントを直接操作する必要はありません。万が一操作が必要な場合に備え、本セクションではその方法を解説します。

Emacs Lispでは、フォントはフォントオブジェクト、フォントスペック、フォントエンティティという3種類の異なるLispオブジェクト型を用いて表現されます。

関数: fontp object &optional type

object がフォントオブジェクト、フォント仕様、またはフォントエンティティである場合は t を返す。それ以外の場合は nil を返す。

オプション引数 type が nil 以外の場合、チェック対象とする Lisp オブジェクトの正確な型が決定されます。その場合、type は font-object、font-spec、または font-entity のいずれかである必要があります。

フォントオブジェクトとは、Emacsが開いたフォントを表すLispオブジェクトです。フォントオブジェクトはLisp上で変更することはできませんが、検査することは可能です。

関数: font-at position &optional window string

ウィンドウ window の位置 position にある文字の表示に使用されているフォントオブジェクトを返します。window が nil の場合、デフォルトで選択中のウィンドウが使用されます。string が nil の場合、position は現在のバッファ内の位置を指定します。それ以外の場合、string は文字列である必要があり、position はその文字列内の位置を指定します。

フォント仕様とは、フォントの検索に使用できる一連の仕様を含むLispオブジェクトです。1つのフォント仕様に対して、複数のフォントが該当する場合があります。

関数: font-spec &rest arguments

arguments の仕様に基づき、property-value のペアで構成される新しいフォント仕様を返してください。指定可能な仕様は以下の通りです。

:name

フォント名(文字列)。XLFD、Fontconfig、またはGTK+のいずれかの形式。The GNU Emacs ManualのFontsを参照してください。

:family
:foundry
:weight
:slant
:width

これらは、同名のフェイス属性と同じ意味を持ちます。フェイス属性を参照してください。:family と :foundry は文字列またはシンボルであり、他の3つはシンボルまたは数値(有効なスタイルシンボルの数値)です。値の例として、:slant は italic、:weight は bold、:width は normal となる場合があります。

:size

フォントサイズ—ピクセルサイズを指定する非負整数、またはポイントサイズを指定する浮動小数点数。

:adstyle

‘sans’ など、フォントに関する追加のタイポグラフィスタイル情報。値は文字列またはシンボルである必要があります。

:registry

文字セットレジストリおよびフォントのエンコーディング(例:‘iso8859-1’)。値は文字列またはシンボルである必要があります。

:dpi

フォントの設計解像度(dpi)。値は0以上の数値である必要があります。

:spacing

フォントの間隔:proportional、dual、mono、またはcharcell。値は、整数(proportionalの場合は0、dualの場合は90、monoの場合は100、charcellの場合は110)、または1文字の記号(P、D、M、Cのいずれか)とします。

:avgwidth

フォントの平均幅(1/10ピクセル単位)。値は0以上の数値である必要があります。

:script

フォントが対応すべきスクリプト(記号)。

:lang

フォントがサポートすべき言語。値は、2文字のISO-639言語名を持つシンボルである必要があります。Xでは、値が空でない場合、フォントのXLFD名の「Additional Style」フィールドと照合されます。MS-Windowsでは、仕様に一致するフォントは、その言語に必要なコードページをサポートする必要があります。現在、このプロパティでサポートされているCJK言語は、‘ja’、‘ko’、および‘zh’のごく一部のみです。

:otf

フォントは、これらのOpenType機能をサポートするOpenTypeフォントである必要があります。ただし、GNU/Linux上の‘libotf’のように、それを必要とするスクリプト向けの複雑なテキストレイアウトをサポートするライブラリを用いてEmacsがコンパイルされていることが条件となります。値は、以下の形式のリストである必要があります。

(script-tag langsys-tag gsub gpos)

ここで、script-tag は OpenType スクリプトタグ記号、langsys-tag は OpenType 言語システムタグ記号(またはデフォルトの言語システムを使用する場合は nil)、gsub は OpenType GSUB フィーチャータグ記号のリスト(いずれも不要な場合は nil)、gpos は OpenType GPOS フィーチャータグ記号のリスト(いずれも不要な場合は nil)です。gsub または gpos がリストである場合、そのリスト内の nil 要素は、そのフォントが残りのタグ記号のいずれにも一致してはならないことを意味します。gpos 要素は省略可能です。OpenType スクリプト、言語、およびフィーチャータグの一覧については、登録済み OTF タグの一覧を参照してください。

:type

文字の描画に使用するフォントバックエンドを指定するシンボルです。取り得る値は、プラットフォームやビルド時のEmacsの設定によって異なります。代表的な値としては、Xではftcrhbやxfthb、MS-Windowsではharfbuzz、GNUstepではnsなどが挙げられます。また、通常はfont-specにおいて指定しない場合、nilとなることもあります。

関数: font-put font-spec property value

font-spec font-spec のフォントプロパティ property を value に設定します。property には、上述のいずれかを指定できます。

フォントエンティティとは、必ずしもオープンされている必要のないフォントへの参照のことです。そのプロパティは、フォントオブジェクトとフォントスペックの中間的な性質を持ちます。フォントオブジェクトと同様に、フォントスペックとは異なり、単一の特定のフォントを参照します。フォントオブジェクトとは異なり、フォントエンティティを作成しても、そのフォントの内容がコンピュータのメモリにロードされることはありません。Emacsは、スケーラブルフォントを参照する単一のフォントエンティティから、異なるサイズの複数のフォントオブジェクトをオープンすることがあります。

関数: find-font font-spec &optional frame

この関数は、フレーム frame 上のフォント仕様 font-spec に最も合致するフォントエンティティを返します。frame が nil の場合は、選択されたフレームがデフォルトとなります。

関数: list-fonts font-spec &optional frame num prefer

この関数は、フォント仕様 font-spec に一致するすべてのフォントエンティティのリストを返します。

オプション引数 frame は、nil 以外の場合、フォントを表示するフレームを指定します。オプション引数 num は、nil 以外の場合、返されるリストの最大長を指定する整数である必要があります。オプション引数 prefer は、nil 以外の場合、返されるリストの順序を制御するための別のフォント指定である必要があります。返されるフォントエンティティは、そのフォント指定への近さが大きい順にソートされます。

set-face-attribute を呼び出し、:font 属性の値としてフォント仕様、フォントエンティティ、またはフォント名文字列を渡すと、Emacs は表示可能なフォントの中から最も適合するものを開きます。その後、対応するフォントオブジェクトを、そのフェイスにおける :font 属性の実際の値として格納します。

以下の関数を使用して、フォントに関する情報を取得できます。これらの関数では、font 引数にフォントオブジェクト、フォントエンティティ、またはフォントスペックを指定できます。

関数: font-get font property

この関数は、font に対するフォントプロパティ property の値を返します。property には、font-spec がサポートするいずれかの値を指定できます。

font がフォント仕様であり、かつそのフォント仕様で property が指定されていない場合、戻り値は nil となります。 font がフォントオブジェクトまたはフォントエンティティである場合、:script プロパティの値はそのフォントがサポートするスクリプトのリストとなる可能性があり、:otf プロパティの値は (gsub . gpos) という形式のコンスとなります。ここで gsub と gpos は、そのフォントがサポートする OpenType フィーチャーを表すリストであり、次のような形式となります。

((script-tag (langsys-tag feature...) ...) ...)

ここで、script-tag、langsys-tag、featureはOpenTypeレイアウトタグを表す記号です。

font がフォントオブジェクトである場合、font のフォントバックエンドが非 OpenType フォントの結合文字のレンダリングをサポートしていれば、特殊プロパティ :combining-capability は non-nil となります。

関数: font-face-attributes font &optional frame

この関数は、font に対応する面属性のリストを返します。オプション引数 frame は、フォントを表示するフレームを指定します。nil の場合は、選択されたフレームが使用されます。戻り値は以下の形式となります。

(:family family :height height :weight weight
   :slant slant :width width)

ここで、family、height、weight、slant、およびwidthの値は面属性値です。これらのキー・属性ペアの中には、fontで指定されていない場合、リストから省略されるものがあります。

関数: font-xlfd-name font &optional fold-wildcards long-xlfds

この関数は、font に対応する文字列である XLFD (X Logical Font Descriptor) を返します。XLFD に関する情報については、The GNU Emacs Manual の Fonts を参照してください。

オプション引数 fold-wildcards が nil 以外の場合、XLFD 内の連続するワイルドカードは1つにまとめられます。

オプション引数 long-xlfds が省略されているか、あるいは nil である場合、XLFD の長さが 255 文字を超えるときは関数は nil を返します。これは、XLFD の長さをその制限内に収めることを規定している X プロトコルとの互換性を確保するためです。long-xlfds が nil 以外である場合、この制限は解除され、関数は任意の長さの XLFD を返すことができます。

以下の2つの関数は、フォントに関する重要な情報を返します。

関数: font-info name &optional frame

この関数は、frame で使用される文字列 name で指定されたフォントに関する情報を返します。frame が省略されているか、または nil が指定されている場合は、選択されたフレームがデフォルトとなります。

関数が返す値は、[opened-name full-name size height baseline-offset relative-compose default-ascent max-width ascent descent space-width average-width filename capability] という形式のベクトルです。このベクトルの各成分の説明は以下の通りです。

opened-name

フォントを開く際に使用した名前(文字列)。

full-name

フォントの正式名称(文字列)。

size

フォントのピクセルサイズ。

height

フォントの高さ(ピクセル)。

baseline-offset

ASCIIベースラインからのピクセル単位のオフセット(上方向が正)。

relative-compose
default-ascent

文字の構成を制御する数値。

max-width

フォントの最大前進幅。

ascent
descent

このフォントのアセントとディセント。これら2つの数値の和は、上記のheightの値と等しくなるはずです。

space-width

フォントのスペース文字の幅(ピクセル単位)。

average-width

フォント文字の平均幅。Emacsはこれを用いてディスプレイ上のテキストレイアウトを計算します。average-width の値が 0 の場合、Emacs は代わりに space-width の値をこれらの目的で使用します。

filename

フォントのファイル名を文字列で指定します。フォントバックエンドがファイル名を取得する手段を提供していない場合は、nil とすることができます。

capability

最初の要素が、x、opentype、truetype、type1、pcf、またはbdfのいずれかのフォントタイプを表すシンボルであるリスト。OpenTypeフォントの場合、このリストには、そのフォントがサポートするGSUBおよびGPOSフィーチャーを記述する2つの追加要素が含まれます。これらの要素はそれぞれ((script (langsys feature …) …) …)形式のリストであり、ここでscriptはOpenTypeスクリプトタグを表すシンボル、langsysはOpenType langsysタグ(またはデフォルトのlangsysを表すnil)を表すシンボル、そして各featureはOpenTypeフィーチャータグを表すシンボルです。

関数: query-font font-object

この関数はfont-objectに関する情報を返します。(これは、フォント名である文字列を引数として受け取るfont-infoとは対照的です。)

関数が返す値は、[name filename pixel-size max-width ascent descent space-width average-width capability] という形式のベクトルです。このベクトルの各成分の説明は以下の通りです。

name

フォント名(文字列)。

filename

フォントのファイル名を文字列で指定します。フォントバックエンドがファイル名を取得する手段を提供していない場合は、nil とすることができます。

pixel-size

フォントを開く際に使用されるフォントのピクセルサイズ。

max-width

フォントの最大前進幅。

ascent
descent

このフォントのアセントとディセント。これら2つの数値の合計がフォントの高さとなります。

space-width

フォントのスペース文字の幅(ピクセル単位)。

average-width

フォント文字の平均幅。これが0の場合、Emacsはディスプレイ上のテキストレイアウトを計算する際に、代わりにspace-widthの値を使用します。

capability

最初の要素が、x、opentype、truetype、type1、pcf、またはbdfのいずれかのフォントタイプを表すシンボルであるリスト。OpenTypeフォントの場合、このリストには、そのフォントがサポートするGSUBおよびGPOSフィーチャーを記述する2つの追加要素が含まれます。これらの要素はそれぞれ((script (langsys feature …) …) …)形式のリストであり、ここでscriptはOpenTypeスクリプトタグを表すシンボル、langsysはOpenType langsysタグ(またはデフォルトのlangsysを表すnil)を表すシンボル、そして各featureはOpenTypeフィーチャータグを表すシンボルです。

以下の4つの関数は、さまざまなフェイスで使用されるフォントのサイズ情報を返し、Lispプログラムにおけるさまざまなレイアウト上の考慮を可能にします。これらの関数はフェイスのリマッピングを考慮しており、対象のフェイスがリマッピングされている場合には、リマッピング後のフェイスに関する情報を返します。フェイスのリマッピングを参照してください。

関数: default-font-width

この関数は、選択中のフレームで定義されている現在のバッファのデフォルトフェイスで使用されているフォントの平均幅をピクセル単位で返します。

関数: default-font-height

この関数は、選択中のフレームで定義されている現在のバッファのデフォルトフェイスで使用されるフォントの高さをピクセル単位で返します。

関数: window-font-width &optional window face

この関数は、window で使用されている face のフォントの平均幅をピクセル単位で返します。指定された window はライブウィンドウである必要があります。nil が指定されているか、あるいは省略された場合、window には選択中のウィンドウが、face には window のデフォルトフェイスがそれぞれ設定されます。

関数: window-font-height &optional window face

この関数は、window で使用されている face のフォントの高さをピクセル単位で返します。指定された window はライブウィンドウである必要があります。nil が指定されているか、あるいは省略された場合、window には選択中のウィンドウが、face には window のデフォルトのフェイスがそれぞれ設定されます。