Функциональность Font Lock основана на нескольких базовых функциях. Каждый из этих вызовов вызывает функцию, указанную соответствующей переменной. Эта непрямая связь позволяет основным и второстепенным режимам изменять способ работы fontification в буферах данного режима, а также использовать механизмы Font Lock для функций, не связанных с fontification. (Именно поэтому в описании ниже говорится «следует», когда описывается, что делают функции: режим может настраивать значения соответствующих переменных, чтобы выполнить совершенно другую задачу.) Переменные, упомянутые ниже, описаны в Другие переменные Font Lock.
font-lock-fontify-buffer ¶Эта функция должна выполнить fontification доступной части текущего буфера,
вызывая функцию, указанную в
font-lock-fontify-buffer-function.
font-lock-unfontify-buffer ¶Используется при отключении Font Lock для удаления fontification. Вызывает
функцию, указанную в font-lock-unfontify-buffer-function.
font-lock-fontify-region beg end &optional loudly ¶Должен выполнить fontification области между beg и end.
Если loudly не равен nil, следует отображать
сообщения о статусе во время fontification. Вызывает функцию, указанную в
font-lock-fontify-region-function.
font-lock-unfontify-region beg end ¶Должен удалить fontification из области между beg и
end. Вызывает функцию, указанную в
font-lock-unfontify-region-function.
font-lock-flush &optional beg end ¶Эта функция должна пометить fontification области между
beg и end как устаревшую. Если не указано или
равно nil, beg и end по
умолчанию принимают начало и конец доступной части буфера. Вызывает функцию,
указанную в
font-lock-flush-function.
font-lock-ensure &optional beg end ¶Эта функция должна убедиться, что область между beg и
end была выполнена fontification. Необязательные аргументы
beg и end по умолчанию принимают начало и конец
доступной части буфера. Вызывает функцию, указанную в
font-lock-ensure-function.
font-lock-debug-fontify ¶Это удобная команда, предназначенная для использования при разработке
font-locking для режима, и ее не следует вызывать из кода Lisp. Она
пересчитывает все соответствующие переменные, а затем вызывает
font-lock-fontify-region для всего буфера.
Существует несколько переменных, которые контролируют, как режим Font Lock
выделяет текст. Но основные режимы не должны устанавливать ни одну из этих
переменных напрямую. Вместо этого они должны устанавливать font-lock-defaults
как буферо-локальную переменную. Значение, присвоенное этой переменной,
используется, если и когда режим Font Lock включен, для установки всех
других переменных.
Эта переменная устанавливается режимами для указания, как выполнять
fontification текста в этом режиме. Она автоматически становится буферо-локальной
при установке. Если ее значение равно nil, режим Font Lock
не выполняет выделения.
Если она не равна nil, ее значение должно выглядеть так:
(keywords [keywords-only [case-fold [syntax-alist other-vars…]]])
Первый элемент, keywords, косвенно указывает значение
font-lock-keywords, который управляет поисковой
fontification. Это может быть символ, переменная или функция, значение
которой является списком для использования в font-lock-keywords.
Это также может быть списком нескольких таких символов, по одному для каждого
возможного уровня fontification. Первый символ указывает уровень
fontification «mode default», следующий символ — fontification
уровня 1, следующий — уровня 2 и так далее. Уровень «mode default»
обычно совпадает с уровнем 1. Он используется, когда font-lock-maximum-decoration
имеет значение nil. См. Уровни Font Lock.
Второй элемент, keywords-only, указывает значение
переменной font-lock-keywords-only. Если он опущен или
равен nil, также выполняется синтаксическая fontification
(строк и комментариев). Если он не равен nil, синтаксическая
fontification не выполняется. См. Синтаксическая Font Lock.
Третий элемент, case-fold, указывает значение
font-lock-keywords-case-fold-search. Если он не равен nil, режим Font Lock игнорирует регистр во время поисковой
fontification.
Если четвертый элемент, syntax-alist, не равен nil, то это должен быть список пар вида (char-or-string
. string). Они используются для настройки таблицы
синтаксиса для синтаксической fontification; полученная таблица синтаксиса
хранится в font-lock-syntax-table. Если syntax-alist
опущен или равен nil, синтаксическая fontification использует
таблицу синтаксиса, возвращаемую функцией syntax-table. См.
Функции таблицы синтаксиса.
Все остальные элементы (если таковые имеются) коллективно называются
other-vars. Каждый из этих элементов должен иметь вид
(variable . value)—что
означает, сделать variable буферо-локальной, а затем
установить ее значение в value. Вы можете использовать эти
other-vars для установки других переменных, влияющих на
fontification, помимо тех, которые вы можете контролировать с помощью первых
пяти элементов. См. Другие переменные Font Lock.
Если ваш режим явно выполняет fontification текста путем добавления
свойств font-lock-face, он может указать (nil t)font-lock-defaults, чтобы отключить всю автоматическую
fontification. Однако это не обязательно; возможно выполнить fontification
некоторых элементов с помощью свойств font-lock-face и
настроить автоматическую fontification для других частей текста.