Когда таблица синтаксиса недостаточно гибка для указания синтаксиса
языка, вы можете переопределить таблицу синтаксиса для определенных
вхождений символов в буфере, применив свойство текста
syntax-table. См. Свойства текста,
как применять свойства текста.
Допустимые значения свойства текста syntax-table:
Если значение свойства является таблицей синтаксиса, то вместо таблицы синтаксиса текущего буфера используется эта таблица для определения синтаксиса базового символа текста.
(syntax-code . matching-char)Ячейка конс этого формата является необработанным дескриптором синтаксиса (см. Внутреннее устройство таблиц синтаксиса), который напрямую указывает класс синтаксиса для базового символа текста.
nilЕсли свойство равно nil, синтаксис символа определяется
из текущей таблицы синтаксиса обычным образом.
Если это не nil, функции сканирования синтаксиса, такие как
forward-sexp, обращают внимание на свойства текста
syntax-table. В противном случае они используют только текущую
таблицу синтаксиса.
Эта переменная, если она не 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-function. Его роль заключается в
помощи в поиске безопасных начальных и конечных позиций буфера для передачи
в syntax-propertize-function. Например, основной режим может
добавить функцию в этот хук для идентификации многострочных синтаксических
конструкций и обеспечения того, чтобы границы не попадали в середину одной из них.
Каждая функция в этом хуке должна принимать два аргумента, start
и end. Она должна вернуть либо ячейку конс с двумя
скорректированными позициями буфера, (new-start . new-end),
либо nil, если корректировка не требуется. Функции хука
выполняются по очереди, повторно, пока они все не вернут nil.