Многострочный шрифт
Один из способов гарантировать надежное перевыделение многострочных конструкций шрифта — добавить к ним свойство текста font-lock-multiline. Оно должно быть присутствовать и не nil для текста, являющегося частью многострочной конструкции.
Когда шрифт готов выделить диапазон текста, он сначала расширяет границы диапазона по необходимости, чтобы они не попадали в текст, помеченный свойством font-lock-multiline. Затем он удаляет все свойства font-lock-multiline из диапазона и выделяет его. Спецификация выделения (в основном font-lock-keywords) должна повторно устанавливать это свойство каждый раз, когда это уместно.
Предупреждение: не используйте свойство font-lock-multiline для больших диапазонов текста, так как это замедлит перевыделение.
- Переменная: font-lock-multiline
-
Если переменная
font-lock-multilineустановлена вt, шрифт попытается автоматически добавить свойствоfont-lock-multilineк многострочным конструкциям. Однако это не является универсальным решением, так как оно несколько замедляет работу шрифта. Оно может пропустить некоторые многострочные конструкции или сделать свойство больше или меньше, чем необходимо.Для элементов, чей matcher является функцией, функция должна гарантировать, что подстрока 0 охватывает всю соответствующую многострочную конструкцию, даже если будет выделена только небольшая её часть. Часто так же легко добавить свойство
font-lock-multilineвручную.
Свойство font-lock-multiline предназначено для обеспечения правильного переформатирования; оно не автоматически идентифицирует новые многострочные конструкции. Для их идентификации требуется, чтобы режим шрифта работал с достаточно большими кусками одновременно. Это произойдёт случайно во многих случаях, что может создать впечатление, что многострочные конструкции работают магически. Если вы установите переменную font-lock-multiline в не-nil, это впечатление будет ещё сильнее, так как выделение этих найденных конструкций будет правильно обновляться с этого момента. Но это не работает надёжно.
Для надежного поиска многострочных конструкций необходимо либо вручную поместить свойство font-lock-multiline на текст перед тем, как режим шрифта взглянет на него, либо использовать font-lock-fontify-region-function.
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/Font-Lock-Multiline.html