Spec-Zone.ru › Elisp

Свойства синтаксиса

Когда таблица синтаксиса недостаточно гибкая для определения синтаксиса языка, вы можете переопределить таблицу синтаксиса для определённых символов в буфере, применив свойство текста 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

Spec-Zone.ru

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