Spec-Zone.ru › Elisp

Основы выделения шрифтом

Функциональность выделения шрифтом основана на нескольких основных функциях. Каждая из них вызывает функцию, указанную соответствующей переменной. Эта косвенность позволяет основным и дополнительным режимам изменять способ работы выделения шрифтом в буферах этого режима и даже использовать механизмы выделения шрифтом для функций, не связанных с выделением. (Поэтому в описании ниже используется слово «должен», когда описываются действия функций: режим может настраивать значения соответствующих переменных, чтобы сделать что-то совершенно иное.) Переменные, упомянутые ниже, описаны в Других переменных выделения шрифтом.

font-lock-fontify-buffer

Эта функция должна выделить шрифтом доступную часть текущего буфера, вызвав функцию, указанную в font-lock-fontify-buffer-function.

font-lock-unfontify-buffer

Используется при отключении выделения шрифтом для удаления выделения. Вызывает функцию, указанную в font-lock-unfontify-buffer-function.

font-lock-fontify-region beg end &optional loudly

Должна выделить шрифтом область между beg и end. Если loudly не nil, должны отображаться сообщения об операции выделения. Вызывает функцию, указанную в font-lock-fontify-region-function.

font-lock-unfontify-region beg end

Должна удалить выделение шрифтом из области между beg и end. Вызывает функцию, указанную в font-lock-unfontify-region-function.

font-lock-flush &optional beg end

Эта функция должна отметить выделение шрифтом области между beg и end как устаревшее. Если не указано или nil, beg и end по умолчанию устанавливаются в начало и конец доступной части буфера. Вызывает функцию, указанную в font-lock-flush-function.

font-lock-ensure &optional beg end

Эта функция должна убедиться, что область между beg и end выделена шрифтом. Необязательные аргументы beg и end по умолчанию устанавливаются в начало и конец доступной части буфера. Вызывает функцию, указанную в font-lock-ensure-function.

font-lock-debug-fontify

Это команда-удобство, предназначенная для использования при разработке выделения шрифтом для режима и не должна вызываться из кода Lisp. Она пересчитывает все соответствующие переменные и затем вызывает font-lock-fontify-region для всего буфера.

Существует несколько переменных, которые управляют тем, как режим выделения шрифтом выделяет текст. Однако основные режимы не должны устанавливать ни одну из этих переменных напрямую. Вместо этого они должны установить font-lock-defaults в качестве переменной локальной для буфера. Значение, присваиваемое этой переменной, используется, если и когда режим выделения шрифтом включен, для установки всех остальных переменных.

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

Эта переменная устанавливается режимами для указания, как выделять текст в этом режиме. Она автоматически становится локальной для буфера при установке. Если ее значение равно nil, режим выделения шрифтом не выполняет выделение, и вы можете использовать меню «Лица» (в меню «Правка», а затем «Свойства текста» в строке меню) для явного назначения лиц тексту в буфере.

Если значение отлично от nil, оно должно выглядеть так:

(keywords [keywords-only [case-fold
 [syntax-alist other-vars…]]])

Первый элемент, keywords, косвенно задает значение font-lock-keywords, которое направляет выделение шрифтом на основе поиска. Он может быть символом, переменной или функцией, значением которой является список, используемый для font-lock-keywords. Он также может быть списком нескольких таких символов, по одному для каждого возможного уровня выделения. Первый символ определяет уровень выделения «по умолчанию для режима», следующий символ определяет уровень 1 выделения, следующий — уровень 2 и так далее. Уровень «по умолчанию для режима» обычно совпадает с уровнем 1. Он используется, когда font-lock-maximum-decoration имеет значение nil. См. Уровни выделения шрифтом.

Второй элемент, keywords-only, задает значение переменной font-lock-keywords-only. Если он опущен или nil, также выполняется синтаксическое выделение (строк и комментариев). Если он не nil, синтаксическое выделение не выполняется. См. Синтаксическое выделение шрифтом.

Третий элемент, case-fold, задает значение font-lock-keywords-case-fold-search. Если он не nil, режим выделения шрифтом игнорирует регистр при поиске на основе выделения.

Если четвертый элемент, syntax-alist, не nil, он должен быть списком элементов вида (char-or-string . string). Они используются для настройки таблицы синтаксиса для синтаксического выделения; полученная таблица синтаксиса хранится в font-lock-syntax-table. Если syntax-alist опущен или nil, синтаксическое выделение использует таблицу синтаксиса, возвращаемую функцией syntax-table. См. Функции таблиц синтаксиса.

Все оставшиеся элементы (если есть) коллективно называются other-vars. Каждый из этих элементов должен иметь вид (variable . value) — что означает, сделать variable локальной для буфера и затем установить ее в value. Вы можете использовать эти other-vars для установки других переменных, влияющих на выделение, помимо тех, которые вы можете контролировать с помощью первых пяти элементов. См. Другие переменные выделения шрифтом.

Если ваш режим явно выделяет текст, добавляя свойства font-lock-face, он может указать (nil t) для font-lock-defaults для отключения всего автоматического выделения. Однако это не обязательно; можно выделять некоторые части с помощью свойств font-lock-face и настроить автоматическое выделение для других частей текста.

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-Basics.html

Spec-Zone.ru

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