Next: , Previous: , Up: Text Properties   [Contents][Index]


31.19.7 テキストプロパティのlazyな計算

バッファー内のすべてのテキストにたいしてテキストプロパティを計算するかわりに、何かがテキスト範囲に依存している場合にはテキストプロパティを計算するようにアレンジできます。

プロパティとともにバッファーからテキストを抽出するプリミティブはbuffer-substringです。この関数はプロパティを調べる前にアブノーマルフックbuffer-access-fontify-functionsを実行します。

Variable: buffer-access-fontify-functions

この変数はテキストプロパティ計算用の関数のリストを保持する。buffer-substringがバッファーの一部のテキストとテキストプロパティをコピーする前にこのリスト内の関数すべてを呼び出す。各関数はアクセスされるバッファー範囲を指定する2つの引数を受け取る(バッファーは常にカレントバッファー)。

関数buffer-substring-no-propertiesはいずれにせよテキストプロパティを無視するので、これらの関数を呼び出さない。

同じバッファー部分にたいして複数回フック関数が呼び出されるのを防ぐために変数buffer-access-fontified-propertyを使用できる。

Variable: buffer-access-fontified-property

この変数の値が非nilなら、それはテキストプロパティ名として使用されるシンボルである。そのテキストプロパティにたいする非nil値は、“その文字にたいする他のテキストプロパティはすでに計算済み”であることを意味する。

buffer-substringにたいして指定された範囲内のすべての文字、このプロパティにたいする値として非nilをもつなら、buffer-substringbuffer-access-fontify-functionsの関数を呼び出さない。それらの文字がすでに正しいテキストプロパティをもつとみなして、それらがすでに所有するプロパティを単にコピーする。

buffer-access-fontify-functionsの関数にこのプロパティ、同様に他のプロパティを処理対象の文字に追加させることがこの機能の通常の用途である。この方法では同じテキストにたいして、それらの関数が何度も呼び出されるのを防ぐことができる。