複数行構造のFont
Lockを確実に再ハイライトする方法の1つは、それらをテキストプロパティfont-lock-multiline
にputする方法です。複数行構造の一部であるようなテキストには値が非nil
であるようなこのプロパティが存在するべきです。
Font
Lockがテキスト範囲をハイライトしようとする際は、まずそれらがfont-lock-multiline
プロパティでマークされたテキストにならないように必要に応じて範囲の境界を拡張します。それからその範囲のすべてのfont-lock-multiline
を削除してハイライトします。ハイライト指定(大抵はfont-lock-keywords
)は、適宜このプロパティを毎回再インストールしなければなりません。
警告:
ハイライトが低速になるので大きなテキスト範囲にたいしてfont-lock-multiline
を使用してはならない。
font-lock-multiline
変数がt
にセットされているとFont
Lockは自動的に複数行構造にたいしてfont-lock-multiline
プロパティの追加を試みる。しかしこれによりFont
Lockが幾分遅くなるので普遍的解決策ではない。これは何らかの複数行構造を見逃したり、必要なものより多く、または少なくプロパティをセットするかもしれない。
matcherが関数であるような要素は、たとえ少量のサブパート(subpart)だけがハイライトされるような場合でも、submatch
0(訳注:正規表現の後方参照においてsubmatch
0はマッチした文字列全体を指す)が関連する複数行構造全体を確実に網羅するようにすべきである。単に手動でfont-lock-multiline
を追加するのが容易な場合も多々ある。
font-lock-multiline
プロパティは正しい再フォント表示を確実に行うことを意図しています。これは新たな複数行構造を自動的に認識しません。それらを認識するためにはFont
Lockが一度に十分な大きさのchunkを処理することを要求します。これは多くの場合にアクシデントにより発生し得るかもしれないので、複数行構造が不可解に機能するような印象を与えるかもしれません。変数font-lock-multiline
を非nil
にセットした場合には、発見されたこれらの構造にたいするハイライトは変数をセットした後は正しく更新されるので、さらにこの印象が強くなるでしょう。しかしこれは信頼性をもって機能しません。
信頼性を保ち複数行構造を見つけるためには、Font
Lockが調べる前にテキストのfont-lock-multiline
プロパティを手動で配置するか、font-lock-fontify-region-function
を使用しなければなりません。