34.9 Перевод символов

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

Таблица перевода имеет два дополнительных слота. Первый либо nil, либо таблица перевода, выполняющая обратный перевод; второй — максимальное количество символов для поиска при переводе последовательностей символов (см. описание make-translation-table-from-alist ниже).

Функция: make-translation-table &rest translations

Эта функция возвращает таблицу перевода на основе аргумента translations. Каждый элемент translations должен быть списком элементов вида (from . to); это означает перевод символа from в to.

Аргументы и формы в каждом аргументе обрабатываются по порядку, и если предыдущая форма уже переводит to в какой-либо другой символ, скажем to-alt, from также переводится в to-alt.

Во время декодирования применяются переводы из таблицы перевода к символам, полученным обычным декодированием. Если система кодирования имеет свойство :decode-translation-table, которое указывает таблицу перевода для использования, или список таблиц перевода для последовательного применения. (Это свойство системы кодирования, возвращаемое coding-system-get, а не свойство имени символа системы кодирования. См. Основные понятия систем кодирования.) Наконец, если standard-translation-table-for-decode не равен nil, результирующие символы переводятся этой таблицей.

Во время кодирования применяются переводы из таблицы перевода к символам в буфере, и результат перевода фактически кодируется. Если система кодирования имеет свойство :encode-translation-table, которое указывает таблицу перевода для использования, или список таблиц перевода для последовательного применения. Кроме того, если переменная standard-translation-table-for-encode не равна nil, она указывает таблицу перевода, используемую для перевода результата.

Переменная: standard-translation-table-for-decode

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

Переменная: standard-translation-table-for-encode

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

Переменная: translation-table-for-input

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

Эта переменная автоматически становится локальной для буфера при установке.

Функция: make-translation-table-from-vector vec

Эта функция возвращает таблицу перевода, созданную из vec, которая является массивом из 256 элементов для сопоставления байтов (значения от 0 до #xFF) с символами. Элементы могут быть nil для непереведенных байтов. Возвращаемая таблица имеет таблицу перевода для обратного сопоставления в первом дополнительном слоте и значение 1 во втором дополнительном слоте.

Эта функция предоставляет простой способ создания частной системы кодирования, которая отображает каждый байт на определенный символ. Вы можете указать возвращаемую таблицу и таблицу обратного перевода, используя свойства :decode-translation-table и :encode-translation-table соответственно в аргументе props функции define-coding-system.

Функция: make-translation-table-from-alist alist

Эта функция похожа на make-translation-table, но возвращает сложную таблицу перевода, а не простое одно-к-одному сопоставление. Каждый элемент alist имеет вид (from . to), где from и to являются либо символами, либо векторами, определяющими последовательность символов. Если from — это символ, этот символ переводится в to (т.е. в символ или последовательность символов). Если from — это вектор символов, эта последовательность переводится в to. Возвращаемая таблица имеет таблицу перевода для обратного сопоставления в первом дополнительном слоте и максимальную длину всех последовательностей символов from во втором дополнительном слоте.