Spec-Zone.ru › Elisp

Таблица регистра

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

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

upcase

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

canonicalize

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

equivalences

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

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

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

Для некоторых символов определены особые правила преобразования регистра, которые по умолчанию имеют приоритет над текущей таблицей регистра. Для этих символов стандарт Unicode определяет свойства символов, отличные от nil, special-uppercase, special-lowercase или special-titlecase (см. Свойства символов). Например, U+00DF LATIN SMALL LETTER SHARP S, ß, по умолчанию преобразуется в верхний регистр как строка "SS", а не как U+1E9E LATIN CAPITAL LETTER SHARP S. Чтобы заставить эти символы преобразовываться в соответствии с таблицей регистра, установите соответствующее свойство Unicode в значение nil:

 (upcase "ß")
  => "SS"
 (put-char-code-property ?ß 'special-uppercase nil)
 (upcase "ß")
  => "ẞ"

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

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

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

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

Функция: case-table-p object

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

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

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

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

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

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

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

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

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

Макрос: with-case-table table body…

Макрос with-case-table сохраняет текущую таблицу регистра, делает table текущей таблицей регистра, вычисляет формы body, а затем восстанавливает таблицу регистра. Возвращаемое значение — значение последней формы в body. Таблица регистра восстанавливается даже при аварийном выходе через 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 char syntax case-table

Эта функция делает символ char нечувствительным к регистру и задаёт ему синтаксис syntax.

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

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

Copyright © 1990-1996, 1998-2026 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