Самостоятельное создание внешних модулей для русификатора CyrHack
Автор: Tim N. Tashpulatov, 09 Май 2001 Кол-во прочтений/просмотров: 17683 Кол-во слов в этом тексте: 704 Версия для печати:
Модули в CyrHack II представляют собой отдельные файлы, в которые вынесены языкозависимые ресурсы - шрифты, раскладки клавиатур и сами клавиатуры, таблицы граффити, сортировок и так далее. Файл должен обязательно иметь CreatorID = 'Cyr2' и тип 'plug'. Имя модуля по возможности должно быть дескриптивным (например, "Ukrainian (KOI8)").
Все ресурсы являются факультативными. Если какого-то ресурса нет, то вместо него будет использоваться системный. Таким образом, вполне реально создать модуль, который будет подменять, например, только системный шрифт, и занимать при этом всего два-три килобайта.
Тип ID Комментарий -------------------------------------------------------------------------------- font 1000 System font (0) font 1001 Bold font (1) font 1002 Large font (2) font 1003 Symbol font (3) - шрифт со значками Graffiti shift (en/En/EN) font 1007 LargeBold font (7) font 2003 Шрифт со значками Graffiti shift для национальной раскладки (ru/Ru/RU) tkbd 10000 Экранная клавиатура graf 1000 Таблица подстановки символов для граффити attr 1000 Таблица атрибутов символов case 1000 Таблица весов символов для caseless compare sort 1000 Таблица сортировки символов kbdx 1000 Таблица подстановки символов для внешней клавиатуры tver 1 Версия модуля tstr 1000 Инфоpмация о модуле, pазpаботчиках, и т.д.
Список со временем может дополняться новыми ресурсами, например, с кодом (по аналогии с хаками) или картинками (иконки, справка по граффити).
ШРИФТЫ
Шрифты - стандартные, в формате NFNT. Нарисовать или отредактировать их можно с помощью программ типа FED или FontEdit. Последние версии PilRC также имеют ограниченную поддержку шрифтовых ресурсов.
ЭКРАННАЯ КЛАВИАТУРА
Стандартный tkbd ресурс. Для изготовления или правки рекомендую воспользоваться пакетом Y-TKBD Владимира Медейко.
ТАБЛИЦЫ СОРТИРОВКИ 'sort' и 'case'
Представляют из себя массивы по 256 байт, где в позиции, соответствующей коду символа, располагается его вес. Подробней о таблицах можно почитать в SDK.
ТАБЛИЦА 'case'
Массив из 256 двухбайтовых значений. Каждое битовое поле значения соответствует тому или иному признаку символа. Подробней см. все в том же SDK.
ТАБЛИЦА ПОДСТАНОВКИ ГРАФФИТИ
Массив из 128 символов. Первые 64 символа - коды, подставляемые вместо вводимых кодов в диапазоне 0x41-0x7f. Следующие 64 - коды, подставляемые вместо комбинаций "символ" + акцент.
ТАБЛИЦА ПОДСТАНОВКИ ДЛЯ ВНЕШНЕЙ КЛАВИАТУРЫ
Еще более простая вещь. 128 символов, которые подставляются вместо порождаемых клавиатурой кодов в диапазоне 0x00-0x7f.
КАК СОБРАТЬ МОДУЛЬ В ДОМАШНИХ УСЛОВИЯХ
Лучше и проще всего попросить сделать это приятеля, не пугающегося шестнадцатиричных кодов и ломавшего в детстве программы для ZX Spectrum. Для простоты предположим, что требуемые ресурсы мы изготовили или выдрали из других файлов. Совсем хорошо, если делается это в unix-подобной ОС (я собираю под Linux), но ничто не мешает сделать то же под Windows или - со временем - написать могучий редактор с пищалками и мигалками.
Для сборки модуля изготовим файл с описанием ресурсов (назовем его Russian-1251.rcp):
DATA "font" ID 1000 "Res/nfnt2328.bin" DATA "font" ID 1001 "Res/nfnt2329.bin" DATA "font" ID 1002 "Res/nfnt232a.bin" DATA "font" ID 1003 "Res/nfnt232b.bin" DATA "font" ID 1007 "Res/nfnt232f.bin" DATA "font" ID 2003 "Res/gsi-ru.bin" DATA "tkbd" ID 0x2710 "Res/tkbd2710.bin" DATA "graf" ID 1000 "Res/graffiti.bin" DATA "attr" ID 1000 "Res/charattr.bin" DATA "case" ID 1000 "Res/caseless.bin" DATA "sort" ID 1000 "Res/sort.bin" DATA "kbdx" ID 1000 "Res/kbdxlat.bin" VERSION "1.00"
и воспользуемся нехитрым Makefile:
## Makefile for CyrHack module
TARGET = Russian-1251 NAME = "Russian (1251)" CREATORID = "Cyr2" TYPE = "plug"