Поддержка разных языков – ЧАСТЬ 1

Emacs поддерживает широкий спектр наборов знаков разных языков, включая европейские варианты латинского алфавита, а также китайскую, девангари (хинди и маратхи), эфиопскую,  греческую, IPA,  японскую, корейскую, лаосскую, русскую, тайскую,  тибетскую и вьетнамскую письменности. Эти возможности были внесены из измененной версии Emacs, известной как MULE (от “MULti-lingual Enhancement to GNU Emacs”.1 )

18.1  Введение  в наборы  знаков разных языков

Пользователи этих систем письма выработали много более или менее стандартных систем кодирования для хранения файлов. Внутренне Emacs использует единую многобайтную кодировку, так что в ней можно перемешивать знаки из всех этих систем письма в одном буфере или строке. Эта кодировка представляет каждый знак, не входящий в ASCII, как последовательность байт в промежутке от 0200 до 0377. Emacs переводит из этой многобайтной кодировки в различные другие системы кодирования при считывании и записи файлов, при обмене данными с подпроцессами и (в некоторых случаях) в команде C-q (см. Раздел 18.6 [Многобайтные  преобразования], с. 164).

Команда C-h h (view-hello-file) выводит файл ‘etc/HELLO’, который показывает, как сказать “здравствуйте” на разных языках. Это иллюстрирует различные виды письменности.

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

Префиксный ключ  C-x hRETi  используется  для команд, которые имеют отношение к многобайтным знакам, системам кодирования и методам ввода.

18.2  Включение поддержки многобайтных знаков

Вы можете включить или выключить поддержку многобайтных знаков либо для всего Emacs, либо для отдельного буфера. Когда  в буфере  выключены многобайтные знаки, каждый байт в нем представляет один знак, даже коды от 0200 до 0377. Старые средства для поддержки европейских наборов знаков, ISO Latin-1 и ISO Latin-2, работают так же, как они работали в Emacs 19, и кроме того, работают для других наборов знаков ISO 8859.

Однако, чтобы использовать ISO Latin,  необязательно  выключать поддержку многобайтных знаков; многобайтный набор знаков Emacs включает все эти знаки, и Emacs может автоматически переводить из него в коды ISO и наоборот.

Чтобы отредактировать определенный  файл в однобайтном представлении, обратитесь к нему через find-file-literally.  См. Раздел 14.2 [Обращение], с. 106. Чтобы превратить  буфер в многобайтном представлении в однобайтное представление тех  же  знаков, проще всего сохранить содержимое этого буфера в файле, уничтожить  его и снова обратиться к этому файлу с помощью find-file-literally.  Вы также можете использовать C-x hRETc (universal-coding-system-argument) и указать ‘raw-text’ в качестве системы кодирования для обращения к файлу или для его сохранения. См.  Раздел 18.9 [Задание кодирования], с. 168.  Обращение к  файлу как  к  ‘raw-text’ не выключает преобразование формата,  декомпрессию  и автоматический выбор режима, в отличие от find-fileliterally.

1  Многоязыковое расширение GNU Emacs. (Прим. переводчика)

Чтобы выключить поддержку многобайтных знаков по умолчанию, запустите  Emacs с ключом ‘-unibyte’ (см.  Раздел A.2 [Ключи  запуска], с. 386) или установите  переменную среды EMACS_UNIBYTE.    Вы также  можете  настроить параметр enable-multibytecharacters  или,  что  эквивалентно, прямо установить  переменную default-enablemultibyte-characters в вашем файле инициализации,  это дает в основном тот же эффект, что и ‘-unibyte’.

Во время инициализации  не создаются многобайтные  строки из значений переменных среды, вхождений  файла ‘/etc/passwd’, etc., которые содержат  не входящие в ASCII восьмибитные знаки. Однако, файл инициализации обычно считывается  как многобайтный — как все файлы на Лиспе — даже если задан ключ ‘-unibyte’. Чтобы избежать создания многобайтных строк из находящихся в этом файле строк с не-ASCII-знаками, поместите в его первой строке комментарий с текстом ‘-*-unibyte: t;-*-’. Для файлов инициализации других пакетов, вроде Gnus, нужно сделать то же самое.

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

18.3  Языковые среды

Все поддерживаемые наборы знаков допустимы в буферах Emacs, если включены многобайтные знаки; нет необходимости выбирать конкретный язык, чтобы увидеть его знаки в буфере Emacs. Однако, важно выбрать языковую среду, чтобы получить различные установки по умолчанию. На самом деле языковая среда представляет  выбор предпочтительной письменности (в большей или меньшей степени), а не выбор языка.

Языковая  среда определяет, какие системы кодирования распознаются при считывании текста (см.  Раздел 18.8 [Распознавание кодирования], с. 166). Это относится к файлам, приходящей почте, сетевым новостям и любому другому тексту, который вы считываете в Emacs. Она также может задавать систему кодирования, используемую по умолчанию для создания файла. Каждая языковая среда также  указывает принимаемый по умолчанию метод ввода.

Языковая  среда выбирается командой M-x set-language-environment. Не имеет значения, какой буфер является  текущим во время запуска этой команды, потому что ее действия применяются глобально ко всему сеансу Emacs. Поддерживаемые языковые среды включают:

Chinese-BIG5,  Chinese-CNS, Chinese-GB, Cyrillic-Alternativnyj,   Cyrillic-ISO, Cyrillic-KOI8,  Devanagari, English, Ethiopic, Greek, Hebrew, Japanese, Korean, Lao, Latin-1, Latin-2, Latin-3, Latin-4, Latin-5, Thai, Tibetan и Vietnamese.

Некоторые операционные системы позволяют вам указать используемый вами язык путем установки переменных среды, определяющих  вашу местность.  Emacs может обрабатывать один распространенный  частный случай:  если название вашей региональной установки для типов знаков содержит строку ‘8859-n’,  Emacs автоматически выбирает соответствующую языковую среду.

Чтобы получить сведения об эффектах определенной языковой среды язсреда, используйте команду C-h L язсреда hRETi  (describe-language-environment). Это сообщит вам, для каких языков полезна данная языковая среда, и перечислит приходящие с ней наборы знаков, системы кодирования и методы ввода. Эта команда также  показывает образцы текста, которые иллюстрируют используемые в этой языковой среде системы  письма. По умолчанию она описывает выбранную языковую среду.

Вы можете  настроить для себя любую языковую среду с помощью обычной ловушки

set-language-environment-hook.  Команда set-language-environment запускает эту ло-

вушку после подготовки новой языковой среды. Функции этой ловушки могут определить текущую языковую среду по значению переменной current-language-environment.

До начала подготовки новой языковой среды, команда set-language-environment запускает ловушку exit-language-environment-hook. Эта ловушка полезна для отмены настроек, сделанных с помощью set-language-environment-hook. К примеру, если вы установили с использованием set-language-environment-hook особые  привязки ключей для конкретной языковой среды, вам стоит сделать так, чтобы exit-language-environmenthook восстанавливала нормальные привязки.

18.4  Методы ввода

Метод ввода — это разновидность  преобразования знаков, разработанная специально для интерактивного ввода. В Emacs, как правило, каждый язык имеет свой метод ввода; иногда несколько языков, в которых используются одни и те  же знаки, могут разделять один метод ввода. Есть немного языков, которые поддерживают несколько методов ввода.

В простейшем случае метод ввода работает через отображение ASCII-букв в другой алфавит. Таким способом действуют методы ввода для греческого и русского.

Более мощный способ — составление: преобразование последовательности знаков в одну букву. Составление используется во многих европейских методах ввода для сознания одной не-ASCII-буквы из последовательности, состоящей из буквы, за которой идет знак акцента (или наоборот). Например, некоторые методы ввода преобразуют последовательность a’ в одну букву с акцентом. В этих методах ввода нет собственных специальных команд; всё, что они делают, — компонуют последовательности печатных знаков.

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

Для китайского  и японского требуются более  сложные методы.  В китайских  методах ввода вы сначала вводите фонетическое написание китайского слова (в методе ввода chinese-py,  помимо прочих) или последовательность частей знака (методы ввода chinese-

4corner,  chinese-sw и другие). Поскольку одно фонетическое написание обычно соответствует многим различным китайским знакам, вы должны выбрать одну из альтернатив с помощью особых команд Emacs. Такие ключи, как C-f,  C-b, C-n, C-p, и цифры имеют в этой ситуации особые определения, используемые  для выбора среди альтернатив. hTABi выводит буфер, показывающий  все возможные варианты.

В японских методах ввода вы сначала вводите целое слово, используя фонетическое написание; потом, когда это слово уже в буфере, Emacs преобразует его в один или несколько знаков, используя большой словарь. Одно фонетическое написание соответствует  многим по-разному записанным японским словам, поэтому вы должны выбрать один из них; для циклического прохода по альтернативам используйте C-n и C-p.

Источник: Ричард Столмен, Руководство по GNU Emacs

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий