36.6.2 Поиск состояния парсера для позиции

Для синтаксического анализа, например, для отступов, часто полезно вычислить синтаксическое состояние, соответствующее заданной позиции в буфере. Эта функция делает это удобно.

Функция: syntax-ppss &optional pos

Эта функция возвращает состояние парсера, которое парсер достиг бы в позиции pos, начиная с начала видимой части буфера. См. Состояние парсера для описания состояния парсера.

Возвращаемое значение такое же, как если бы вы вызвали низкоуровневую функцию парсинга parse-partial-sexp для парсинга от начала видимой части буфера до pos (см. Низкоуровневый парсинг). Однако syntax-ppss использует кэши для ускорения вычислений. Из-за этой оптимизации второе значение (предыдущее полное подвыражение) и шестое значение (минимальная глубина скобок) в возвращаемом состоянии парсера не имеют смысла.

Эта функция имеет побочный эффект: она добавляет локальную для буфера запись в before-change-functions (см. Хуки изменений) для syntax-ppss-flush-cache (см. ниже). Эта запись поддерживает согласованность кэша по мере изменения буфера. Однако кэш может не обновиться, если syntax-ppss вызывается, в то время как before-change-functions временно привязан, или если буфер изменяется без выполнения хука, например, при использовании inhibit-modification-hooks. В таких случаях необходимо явно вызвать syntax-ppss-flush-cache.

Функция: syntax-ppss-flush-cache beg &rest ignored-args

Эта функция сбрасывает кэш, используемый syntax-ppss, начиная с позиции beg. Остальные аргументы, ignored-args, игнорируются; эта функция принимает их, чтобы ее можно было напрямую использовать в таких хуках, как before-change-functions (см. Хуки изменений).