Previous: Syntactic Font Lock, Up: Font Lock Mode [Contents][Index]
通常は、font-lock-keywords
の要素は複数行にわたるマッチを行うべきではありません。それらの動作に信頼性はありません。なぜなら、Font
Lockは通常はバッファーのごく一部をスキャンするので、そのスキャンが開始される行境界をまたがる複数行構造を見逃しかねないからです(スキャンは通常、行頭から開始される)。
ある要素にたいして、複数行構造にたいするマッチを正しく機能させるには、2つの観点があります。それは識別(identification)の補正と、再ハイライト(rehighlighting)の補正です。1つ目は、Font Lockがすべての複数行構造を探すことを意味します。2つ目は、複数行構造が変更されたとき、たとえば以前は複数行構造の一部だったテキストが、複数行構造から除外されたときに、関連するすべてのテキストをFont Lockに正しく再ハイライトさせることを意味します。これら2つの観点は密接に関連しており、一方を機能させることがもう一方を機能させるようなことが多々あります。しかし、信頼性のある結果を得るためには、これら2つの観点双方にたいして、明示的に注意しなければなりません。
複数行構造の識別を確実に補正するには、3つの方法があります:
font-lock-extend-region-functions
に追加する。
font-lock-fontify-region-function
フックを使用する。
font-lock-multiline
でそれをマークする。
複数行構造の再ハイライトを行うには、3つの方法があります:
font-lock-multiline
を配する。これにより、その構造の一部が変更された場合は、構造全体が再ハイライトされるだろう。あるケースにおいては、それを参照するfont-lock-multiline
変数をセットすることにより、これを自動的に行うことができる。
jit-lock-contextually
を確実にセットして、それが行う処理に委ねる。これにより、実際の変更に続いて構造の一部だけが、若干の遅延の後に再ハイライトされるだろう。これは、複数行構造のさまざまな箇所のハイライトが、後続行のテキストに依存しない場合のみ機能する。jit-lock-contextually
はデフォルトでアクティブなので、これは魅力的な解決策になり得る。
jit-lock-defer-multiline
を配する。これは、jit-lock-contextually
が使用された場合のみ機能し、再ハイライト前に同様の遅延を伴うが、font-lock-multiline
のように後続行に依存する箇所のハイライトも処理する。
• Font Lock Multiline: | テキストプロパティで複数行塊をマークする。 | |
• Region to Refontify: | バッファー変更後にどのリージョンを再フォント表示するかを制御する。 |