Next: Region to Refontify, Up: Multiline Font Lock [Contents][Index]
複数行構造の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
を使用しなければなりません。