[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[locale] Предложение по генерации раскладок



Господа!

На Ваш суд выносится предложение по генерации консольных раскладок.
Приаттачено в виде genkbd.tgz . Разумеется, скрипты и пр. выглядят
достаточно сыро. Уж сильно не ругайте, пианист играет, как успевает. ;-)
Идея следующая: есть некий шаблон, в нашем случае это ru.m4, сильно
напоминающий обычную раскладку, с кодировко-зависимыми полями,
представленными в виде Cyrillic_*, и раскладко-зависимыми полями,
представленными в виде Xkb_*, которые, в свою очередь, представлены в
виде Cyrillic_*.

Cyrillic_* могут принимать различные значения, в зависимости от
выбираемой кодировки. Набор значений можно сгенерировать, например, с
помощью прилагаемой charmap.pl, которой в качестве аргумента даётся
каталог с кодировками. Обычно это /usr/share/i18n/charmaps. Полученные
данные выдаются в файл charmap.m4. В charmap.pl я нагло написал
   $CHARMAP = "(koi8-r|cp1251|iso-8859-5|cp866)"
ограничившись тем самым данными кодировками (плюс юникодная, которая
"зашита" в сам charmap.pl). Файл charmap.m4 используется в ru.m4, и в
зависимости от указанных в его заголовочных комментариях параметров -D,
подсовывает файлу ru.m4 разные значения для Cyrillic_* .

Xkb_* находятся в файле layout.m4, который также содержит заголовок с
возможными значениями раскладок. Этот файл получается с помощью
layout.pl, которому в качестве аргумента передаётся Xkb'шная русская
раскладка (обычно лежит в /usr/X11R6/lib/X11/xkb/symbols/ru, но здесь я
прилагаю её модифицированный вариант, на базе которого и был
сгенерирован layout.m4).  Итак, получается довольно простой и наглядный
механизм синхронизации "подвижной" части раскладок с раскладкой из xkb.
Зачем создавать отдельную базу раскладок, когда есть прекрасная
возможность воспользоваться имеющейся?!  Кстати, надеюсь,
модифицированный (обогащённый) вариант Xkb'шной ru будет утверждён, в
конце концов.

Возможность выбора различных клавиш-переключателей заложена в сам ru.m4,
что и отражено в его заголовочных комментариях.

Краткое описание всех файлов из genkbd.tgz :

ru.m4      -- Базовый шаблон раскладок (использует
              сгенерированные layout.m4 и charmap.m4)
layout.m4  -- Генерируется с помощью layout.pl
charmap.m4 -- Генерируется с помощью charmap.pl

layout.pl  -- Генерирует файл layout.m4
charmap.pl -- Генерирует файл charmap.m4

ru         -- Модифицированный вариант
              /usr/X11R6/lib/X11/xkb/symbols/ru, который
              использовался при создании прилагаемого layout.m4

genkbd     -- Скрипт на sh с использованием утилиты dialog для
              "наглядной" генерации раскладок
genkbd.tcl -- Скрипт на Tcl/Tk для аналогичной цели		


ПРИМЕР.

Машинописная раскладка для кодировки KOI8-R с
клавишей-переключателем "Правый Alt" генерируется так:

    m4 -Dtypewriter -Dkoi8-r -Dalt_lk ru.m4 > ru.map

Или же с помощью прилагаемых менюхообразных и окноподобных
genkbd и genkbd.tcl :-)

Жду ответной реакции...

-- 
Best regards,
              Eugene

genkbd.tgz