Spec-Zone.ru › Elisp

Ленивое вычисление свойств текста

Вместо вычисления свойств текста для всего текста в буфере, вы можете организовать вычисление свойств текста для частей текста тогда и только тогда, когда это необходимо.

Примитив, который извлекает текст из буфера вместе со свойствами, это 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API