Spec-Zone.ru › Elisp

Таблица соответствия регистров

Вы можете настроить преобразование регистров, установив специальную таблицу соответствия регистров. Таблица соответствия регистров определяет сопоставление между заглавными и строчными буквами. Она влияет как на функции преобразования регистров для объектов Lisp (см. предыдущий раздел), так и на функции, применяемые к тексту в буфере (см. Изменение регистров). Каждый буфер имеет свою таблицу соответствия регистров; также существует стандартная таблица соответствия регистров, используемая для инициализации таблицы соответствия регистров новых буферов.

Таблица соответствия регистров — это таблица символов (см. Таблицы символов), подтип которой case-table. Эта таблица символов сопоставляет каждый символ с соответствующим строчным символом. Она имеет три дополнительных слота, которые содержат связанные таблицы:

upcase

Таблица upcase сопоставляет каждый символ с соответствующим заглавным символом.

canonicalize

Таблица canonicalize сопоставляет все символы, связанные с регистром, с определённым членом этого набора.

equivalences

Таблица equivalences сопоставляет каждый символ из набора символов, связанных с регистром, со следующим символом в этом наборе.

В простых случаях вам нужно указать только сопоставление со строчными буквами; три связанные таблицы будут вычислены автоматически.

Для некоторых языков заглавные и строчные буквы не находятся во взаимно однозначном соответствии. Может быть две разные строчные буквы с одним и тем же заглавным эквивалентом. В этих случаях необходимо указать сопоставления для строчных и заглавных букв.

Дополнительная таблица canonicalize сопоставляет каждый символ с его каноническим эквивалентом; любые два символа, связанные преобразованием регистров, имеют один и тот же канонический эквивалентный символ. Например, поскольку ‘a’ и ‘A’ связаны преобразованием регистров, они должны иметь один и тот же канонический эквивалентный символ (который должен быть либо ‘a’ для обоих, либо ‘A’ для обоих).

Дополнительная таблица equivalences — это отображение, которое циклически переупорядочивает каждый класс эквивалентности (символов с одинаковым каноническим эквивалентом). (Для обычного ASCII это сопоставит ‘a’ с ‘A’ и ‘A’ с ‘a’, и так же для каждого набора эквивалентных символов.)

При построении таблицы соответствия регистров вы можете предоставить nil для canonicalize; тогда Emacs заполнит этот слот из сопоставлений строчных и заглавных букв. Вы также можете предоставить nil для equivalences; тогда Emacs заполнит этот слот из canonicalize. В таблице соответствия регистров, которая фактически используется, эти компоненты не nil. Не пытайтесь указать equivalences без указания canonicalize.

Вот функции для работы с таблицами соответствия регистров:

Функция: case-table-p объект

Этот предикат возвращает не-nil если объект является допустимой таблицей соответствия регистров.

Функция: set-standard-case-table таблица

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

Функция: standard-case-table

Это возвращает стандартную таблицу соответствия регистров.

Функция: current-case-table

Эта функция возвращает таблицу соответствия регистров текущего буфера.

Функция: set-case-table таблица

Это устанавливает таблицу соответствия регистров текущего буфера в таблицу.

Макрос: with-case-table таблица тело…

Макрос with-case-table сохраняет текущую таблицу соответствия регистров, делает таблицу текущей таблицей соответствия регистров, вычисляет формы тело и, наконец, восстанавливает таблицу соответствия регистров. Возвращаемое значение — значение последней формы в теле. Таблица соответствия регистров восстанавливается даже при выходе из-за throw или ошибки (см. Выходы из области видимости).

Некоторые языковые среды изменяют преобразования регистров символов ASCII; например, в турецкой языковой среде заглавная буква I ASCII преобразуется в турецкую букву «i» без точки (‘ı’). Это может повлиять на код, который требует обычного преобразования регистров ASCII, например, на реализации сетевых протоколов, основанных на ASCII. В этом случае используйте макрос with-case-table с переменной ascii-case-table, которая хранит неизменённую таблицу соответствия регистров для набора символов ASCII.

Переменная: ascii-case-table

Таблица соответствия регистров для набора символов ASCII. Эта переменная не должна изменяться никакими настройками языковой среды.

Следующие три функции являются удобными подпрограммами для пакетов, определяющих наборы символов, отличных от ASCII. Они изменяют указанную таблицу соответствия регистров case-table; они также изменяют стандартную таблицу синтаксиса. См. Таблицы синтаксиса. Обычно вы будете использовать эти функции для изменения стандартной таблицы соответствия регистров.

Функция: set-case-syntax-pair uc lc case-table

Эта функция определяет пару соответствующих букв, одну заглавную и одну строчную.

Функция: set-case-syntax-delims l r case-table

Эта функция делает символы l и r парными разделителями, не зависящими от регистра.

Функция: set-case-syntax символ синтаксис case-table

Эта функция делает символ не зависящим от регистра, со синтаксисом синтаксис.

Команда: describe-buffer-case-table

Эта команда отображает описание содержимого таблицы соответствия регистров текущего буфера.

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/Case-Tables.html

Spec-Zone.ru

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