Свойства синтаксиса
Когда таблица синтаксиса недостаточно гибкая для определения синтаксиса языка, вы можете переопределить таблицу синтаксиса для определённых символов в буфере, применив свойство текста syntax-table. Смотрите Свойства текста, чтобы узнать, как применять свойства текста.
Допустимые значения свойства текста syntax-table:
- syntax-table
-
Если значение свойства — таблица синтаксиса, эта таблица используется вместо текущей таблицы синтаксиса буфера для определения синтаксиса символа в тексте.
(syntax-code . matching-char)-
Ячейка-список такого формата — это непосредственное описание синтаксиса (см. Внутреннее устройство таблицы синтаксиса), которая напрямую определяет класс синтаксиса для символа в тексте.
nilЕсли свойство равно
nil, синтаксис символа определяется из текущей таблицы синтаксиса обычным способом.
- Переменная: parse-sexp-lookup-properties
Если эта переменная не равна
nil, функции сканирования синтаксиса, такие какforward-sexp, учитывают свойства текстаsyntax-table. В противном случае они используют только текущую таблицу синтаксиса.
- Переменная: syntax-propertize-function
-
Эта переменная, если не равна
nil, должна содержать функцию для применения свойствsyntax-tableк заданному участку текста. Она предназначена для использования основными режимами для установки функции, которая применяет свойстваsyntax-tableсоответствующим образом в режиме.Функция вызывается
syntax-ppss(см. Разбор позиции) и режимом подсветки синтаксиса (Font Lock) во время синтаксической подсветки (см. Подсветка синтаксиса). Она вызывается с двумя аргументами, start и end, которые представляют начальную и конечную позиции текста, на котором она должна действовать. Разрешается произвольно перемещать точку внутри области, ограниченной start и end; такие перемещения не нуждаются в использованииsave-excursion(см. Выходы). Также разрешается вызыватьsyntax-ppssв любой позиции перед end, но если программа Lisp вызываетsyntax-ppssв некоторой позиции и позже изменяет буфер в какой-либо позиции ранее, то программа должна вызватьsyntax-ppss-flush-cacheдля очищения устаревшей информации из кэша.Внимание: Когда эта переменная не равна
nil, Emacs удаляет свойства текстаsyntax-tableпроизвольно и полагается наsyntax-propertize-functionдля их повторного применения. Таким образом, если эта возможность используется вообще, функция должна применять все свойства текстаsyntax-tableиспользуемые основным режимом. В частности, режимы, полученные из режима CC Mode, не должны использовать эту переменную, так как CC Mode использует другие средства для применения и удаления этих свойств текста.
- Переменная: syntax-propertize-extend-region-functions
-
Этот необычный крючок выполняется кодом синтаксического разбора перед вызовом
syntax-propertize-function. Его роль — помочь определить безопасные начальную и конечную позиции буфера для передачи вsyntax-propertize-function. Например, основной режим может добавить функцию в этот крючок для идентификации многострочных синтаксических конструкций и гарантировать, что границы не попадают в середину одной.Каждая функция в этом крючке должна принимать два аргумента, start и end. Она должна вернуть либо список из двух скорректированных позиций буфера,
(new-start . new-end), либоnil, если корректировка не требуется. Функции крючка выполняются по очереди, повторяясь, пока они все не вернутnil.
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/Syntax-Properties.html