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

24.7.1 Font Lockの基本

Font Lock の機能は、いくつかの基本関数に基づいています。これらの関数はそれぞれ、対応する変数で指定された関数を呼び出します。この間接参照により、メジャーモードやマイナーモードは、当該モードのバッファにおけるフォント化の動作を変更できるほか、フォント化とは全く関係のない機能に Font Lock の仕組みを利用することさえ可能です。(そのため、以下の説明で関数の動作について述べる際に「~すべきである」と表現しています。モード側で対応する変数の値をカスタマイズすることで、全く異なる動作を実現できるためです。)以下で言及する変数については、その他の Font Lock 変数で説明しています。

font-lock-fontify-buffer

この関数は、font-lock-fontify-buffer-functionで指定された関数を呼び出すことで、現在のバッファのアクセス可能な部分をフォント化する必要があります。

font-lock-unfontify-buffer

Font Lock をオフにしてフォント化を解除する際に使用します。font-lock-unfontify-buffer-function で指定された関数を呼び出します。

font-lock-fontify-region beg end &optional loudly

beg から end までの範囲をフォント化する。loudly が nil 以外の場合は、フォント化中にステータスメッセージを表示する。font-lock-fontify-region-function で指定された関数を呼び出す。

font-lock-unfontify-region beg end

beg と end の間の領域からフォント化を除去すべき。font-lock-unfontify-region-function で指定された関数を呼び出す。

font-lock-flush &optional beg end

この関数は、beg から end までの領域のフォント化を古くなったものとしてマークする必要があります。指定がない場合、または nil、beg、end が指定されている場合は、バッファのアクセス可能な部分の先頭と末尾がデフォルトとなります。font-lock-flush-function で指定された関数を呼び出します。

font-lock-ensure &optional beg end

この関数は、beg から end までの範囲がフォント化されていることを確認する必要があります。オプション引数の beg と end は、デフォルトでバッファのアクセス可能な部分の先頭と末尾となります。font-lock-ensure-function で指定された関数を呼び出します。

font-lock-debug-fontify

これはモード用のフォントロッキングを開発する際に使用することを想定した便宜上のコマンドであり、Lispコードから呼び出すべきではありません。関連するすべての変数を再計算し、バッファ全体に対して font-lock-fontify-region を呼び出します。

Font Lockモードによるテキストのハイライト方法を制御する変数がいくつかあります。ただし、メジャーモードはこれらの変数を直接設定すべきではありません。代わりに、font-lock-defaultsをバッファローカル変数として設定すべきです。この変数に割り当てられた値は、Font Lockモードが有効な場合に、他のすべての変数を設定するために使用されます。

変数: font-lock-defaults

この変数はモードによって設定され、そのモードでテキストをどのようにフォント化するかを指定します。設定されると、自動的にバッファローカルになります。値が nil の場合、Font Lock モードはハイライトを行いません。

nil 以外の場合、値は次のような形式になります:

(keywords [keywords-only [case-fold
 [syntax-alist other-vars...]]])

最初の要素 keywords は、検索ベースのフォント化を指示する font-lock-keywords の値を間接的に指定します。これは、font-lock-keywords で使用するリストを値とするシンボル、変数、または関数であることができます。また、フォント化の可能なレベルごとに1つずつ、こうしたシンボルを複数並べたリストとすることも可能です。最初のシンボルはフォント化レベル「mode default」を、次のシンボルはレベル1のフォント化を、その次はレベル2を、というように指定します。「mode default」レベルは通常、レベル1と同じです。これは、font-lock-maximum-decoration が nil の値を持つ場合に使用されます。Levels of Font Lock を参照してください。

2番目の要素 keywords-only は、変数 font-lock-keywords-only の値を指定します。これが省略されているか、あるいは nil である場合は、(文字列やコメントの)構文フォント化も行われます。これが nil 以外である場合は、構文フォント化は行われません。構文フォントロック を参照してください。

3番目の要素 case-fold は、font-lock-keywords-case-fold-search の値を指定します。これが nil 以外の場合、Font Lock モードは検索ベースのフォント化において大文字・小文字を区別しません。

4番目の要素 syntax-alist が nil 以外の場合、それは (char-or-string . string) 形式のコンスセルのリストである必要があります。これらはフォント化の際に構文テーブルを構築するために使用され、生成された構文テーブルは font-lock-syntax-table に格納されます。syntax-alist が省略されているか、あるいは nil である場合、フォント化では syntax-table 関数が返す構文テーブルが使用されます。構文テーブル関数 を参照してください。

syntax-alist の最も一般的な用途は、単に数文字の構文を記号構成要素から単語構成要素に変更し、フォント化ルールが単語境界に基づく正規表現演算子を使用できるようにすることです。syntax-alist が、文字列やコメントとして認識される内容を変更し得るより侵襲的な変更を記述する場合、構文的なフォント化における重要な最適化が妨げられるため、こうした設定の使用を控えるか、あるいは構文的なフォント化において優先される syntax-ppss-table に nil 以外の値を追加で設定する方が望ましいです。

残りの要素(もしあれば)は、総称して other-vars と呼ばれます。これらの要素はそれぞれ (variable . value) の形式である必要があります。つまり、variable をバッファローカルにした上で、それを value に設定するということです。これらの other-vars を使用して、最初の5つの要素で制御できるもの以外の、フォント化に影響を与える変数を設定できます。その他の Font Lock 変数 を参照してください。

モードが font-lock-face プロパティを追加することで明示的にテキストをフォント化する場合、font-lock-defaults に対して (nil t) を指定することで、すべての自動フォント化を無効にできます。ただし、これは必須ではありません。font-lock-face プロパティを用いて一部の要素をフォント化しつつ、テキストの他の部分には自動フォント化を設定することも可能です。