次: Clickable Text, 前: Saving Properties, 上: Text Properties
バッファ内のすべてのテキストのテキスト属性を計算するかわりに、 必要になった時点でテキストの一部分のテキスト属性を計算するようにできます。
バッファからテキスト属性とともにテキストを取り出す基本関数は、
buffer-substring
です。
属性を調べるまえに、この関数はアブノーマルフック
buffer-access-fontify-functions
を実行します。
この変数は、テキスト属性を計算する関数のリストを保持する。
buffer-substring
がバッファの一部分からテキストとテキスト属性を コピーするまえに、この関数はこのリスト内の関数すべてを呼び出す。 各関数は、バッファの参照される範囲を指定する2つの引数を受け取る。 (バッファはつねにカレントバッファである。)
関数buffer-substring-no-properties
は
テキスト属性を無視するので、これらの関数を呼び出しません。
バッファの同じ部分に対してフック関数が複数回呼び出されるのを防ぐには、
変数buffer-access-fontified-property
を使います。
この変数の値が
nil
以外であると、 それはテキスト属性の名前として使われるシンボルである。 そのテキスト属性に対するnil
以外の値は、 『この文字の他のテキスト属性はすでに計算済みである』ことを意味する。
buffer-substring
に指定された範囲のすべての文字において、 この属性に対してnil
以外の値があると、buffer-substring
はbuffer-access-fontify-functions
の関数を呼び出さない。 それらの文字にはすでに正しいテキスト属性があるとみなし、 それらにすでにある属性をコピーする。この機能を使う普通の方法は、
buffer-access-fontify-functions
の関数が 他の属性ととともにこの属性をそれらが操作した文字に追加する。 そうすれば、同じテキストに対して何回も呼び出されるのを防ぐことができる。