Ленивое вычисление свойств текста
Вместо вычисления свойств текста для всего текста в буфере, вы можете организовать вычисление свойств текста для частей текста тогда и только тогда, когда это необходимо.
Примитив, который извлекает текст из буфера вместе со свойствами, это buffer-substring. Перед проверкой свойств эта функция выполняет необычный обработчик buffer-access-fontify-functions.
- Переменная: buffer-access-fontify-functions
Эта переменная содержит список функций для вычисления свойств текста. Перед тем, как
buffer-substringскопирует текст и свойства текста для части буфера, он вызывает все функции в этом списке. Каждая из функций получает два аргумента, которые определяют диапазон доступа к буферу. (Сам буфер всегда является текущим буфером.)
Функция buffer-substring-no-properties не вызывает эти функции, так как она игнорирует свойства текста.
Для предотвращения вызова функций обработчиков более одного раза для одной и той же части буфера, вы можете использовать переменную buffer-access-fontified-property.
- Переменная: buffer-access-fontified-property
-
Если значение этой переменной не
nil, это символ, который используется в качестве имени свойства текста. Значение «неnil» для свойства текста означает, что другие свойства текста для этого символа уже вычислены.Если у всех символов в диапазоне, указанном для
buffer-substring, есть значение «неnil» для этого свойства,buffer-substringне вызывает функцииbuffer-access-fontify-functions. Она предполагает, что у этих символов уже есть правильные свойства текста и просто копирует свойства, которые у них уже есть.Обычный способ использования этой функции заключается в том, что функции
buffer-access-fontify-functionsдобавляют это свойство, а также другие, к символам, с которыми они работают. Таким образом, они избегают вызова многократно для одного и того же текста.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Lazy-Properties.html