Next: , Up: Multiline Font Lock   [Contents][Index]


23.6.9.1 複数行のFont Lock

複数行構造のFont Lockを確実に再ハイライトする方法の1つは、それらをテキストプロパティfont-lock-multilineにputする方法です。複数行構造の一部であるようなテキストには値が非nilであるようなこのプロパティが存在するべきです。

Font Lockがテキスト範囲をハイライトしようとする際は、まずそれらがfont-lock-multilineプロパティでマークされたテキストにならないように必要に応じて範囲の境界を拡張します。それからその範囲のすべてのfont-lock-multilineを削除してハイライトします。ハイライト指定(大抵はfont-lock-keywords)は、適宜このプロパティを毎回再インストールしなければなりません。

警告: ハイライトが低速になるので大きなテキスト範囲にたいしてfont-lock-multilineを使用してはならない。

Variable: 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を使用しなければなりません。