В этом разделе описываются функции для создания, доступа и изменения таблиц синтаксиса.
Эта функция создает новую таблицу синтаксиса. Если table
не является nil, родительской таблицей новой таблицы синтаксиса
является table; в противном случае родительской является стандартная
таблица синтаксиса.
В новой таблице синтаксиса всем символам изначально присваивается синтаксический класс «inherit» (‘@’), то есть их синтаксис наследуется от родительской таблицы (см. Таблица синтаксических классов).
Эта функция создает копию table и возвращает ее. Если
table опущен или равен nil, она возвращает
копию стандартной таблицы синтаксиса. В противном случае сигнализируется
ошибка, если table не является таблицей синтаксиса.
Эта функция устанавливает синтаксическую запись для char
в соответствии с syntax-descriptor. char
должен быть символом или ячейкой cons вида (min . max);
в последнем случае функция устанавливает синтаксические записи для всех символов
в диапазоне между min и max, включая их.
Синтаксис изменяется только для table, по умолчанию это таблица синтаксиса текущего буфера, и не в какой другой таблице синтаксиса.
Аргумент syntax-descriptor — это дескриптор синтаксиса, то есть строка, первый символ которой является обозначением синтаксического класса, а второй и последующие символы необязательно указывают соответствующий символ и флаги синтаксиса. См. Дескрипторы синтаксиса. Сигнализируется об ошибке, если syntax-descriptor не является действительным дескриптором синтаксиса.
Эта функция всегда возвращает nil. Старая информация о
синтаксисе в таблице для этого символа отбрасывается.
Примеры:
;; Поместить пробельный символ в класс whitespace.
(modify-syntax-entry ?\s " ")
⇒ nil
;; Сделать '$' символом открывающей скобки, ;; с '^' как соответствующим закрывающим. (modify-syntax-entry ?$ "(^") ⇒ nil
;; Сделать '^' символом закрывающей скобки, ;; с '$' как соответствующим открывающим. (modify-syntax-entry ?^ ")$") ⇒ nil
;; Сделать '/' символом пунктуации,
;; первым символом последовательности начала комментария,
;; и вторым символом последовательности конца комментария.
;; Это используется в режиме C.
(modify-syntax-entry ?/ ". 14")
⇒ nil
Эта функция возвращает синтаксический класс character, представленный его символом-обозначителем (см. Таблица синтаксических классов). Эта функция возвращает только класс, а не соответствующий символ или флаги синтаксиса.
Следующие примеры применимы к режиму C. (Мы используем string,
чтобы было легче увидеть символ, возвращаемый char-syntax.)
;; Символы пробела имеют синтаксический класс whitespace.
(string (char-syntax ?\s))
⇒ " "
;; Символы прямого слэша имеют пунктуационный синтаксис.
;; Обратите внимание, что этот вызов char-syntax не раскрывает,
;; что он также является частью последовательностей начала и конца комментария.
(string (char-syntax ?/))
⇒ "."
;; Символы открывающей скобки имеют синтаксис открывающей скобки.
;; Обратите внимание, что этот вызов char-syntax не раскрывает,
;; что у него есть соответствующий символ, ‘)’.
(string (char-syntax ?\())
⇒ "("
Эта функция устанавливает table в качестве таблицы синтаксиса для текущего буфера. Она возвращает table.
Эта функция возвращает текущую таблицу синтаксиса, то есть таблицу для текущего буфера.
Эта команда отображает содержимое таблицы синтаксиса buffer (по умолчанию, текущего буфера) в буфере справки.
Этот макрос выполняет body, используя table в качестве текущей таблицы синтаксиса. Он возвращает значение последней формы в body после восстановления старой текущей таблицы синтаксиса.
Поскольку каждый буфер имеет свою собственную текущую таблицу синтаксиса,
нам следует уточнить это: with-syntax-table временно
изменяет текущую таблицу синтаксиса того буфера, который является
текущим в момент начала выполнения макроса. Другие буферы не затрагиваются.