24.7.9.1 Многострочный Font Lock

Один из способов обеспечить надежное повторное выделение конструкций многострочного Font Lock — это присвоить им свойство текста font-lock-multiline. Оно должно присутствовать и не быть nil для текста, являющегося частью многострочной конструкции.

Когда Font Lock собирается выделить диапазон текста, он сначала расширяет границы диапазона при необходимости, чтобы они не падали в текст, помеченный свойством font-lock-multiline. Затем он удаляет любые свойства font-lock-multiline из диапазона и выделяет его. Спецификация выделения (в основном font-lock-keywords) должна переустанавливать это свойство каждый раз, когда это уместно.

Предупреждение: не используйте свойство font-lock-multiline для больших диапазонов текста, так как это замедлит повторное выделение.

Переменная: font-lock-multiline

Если переменная font-lock-multiline установлена в t, Font Lock попытается автоматически добавить свойство font-lock-multiline к многострочным конструкциям. Однако это не универсальное решение, поскольку это несколько замедляет Font Lock. Оно может пропустить некоторые многострочные конструкции или сделать свойство больше или меньше, чем необходимо.

Для элементов, чей matcher является функцией, функция должна обеспечить, чтобы подсовпадение 0 охватывало всю соответствующую многострочную конструкцию, даже если будет выделена только небольшая ее часть. Часто проще вручную добавить свойство font-lock-multiline.

Свойство font-lock-multiline предназначено для обеспечения надлежащего повторного выделения; оно не определяет автоматически новые многострочные конструкции. Для их определения требуется, чтобы режим Font Lock работал с достаточно большими блоками за раз. Это произойдет случайно во многих случаях, что может создать впечатление, что многострочные конструкции работают волшебным образом. Если вы установите переменную font-lock-multiline в не-nil, это впечатление будет еще сильнее, поскольку выделение найденных конструкций будет правильно обновляться с этого момента. Но это не работает надежно.

Чтобы надежно найти многострочные конструкции, вы должны либо вручную поместить свойство font-lock-multiline в текст до того, как режим Font Lock его рассмотрит, либо использовать font-lock-fontify-region-function.