Поддержка национальных кодировок в операционной системе A2SAGE В процессе программирования под эту замечательную ОС у меня возникла идея создать нечто вроде проекта по ее локализации. Необходимость в более полноценной поддержке кириллицы этой ОС очевидна, а по ходу дела могут возникнуть определенные наработки, по что называется "тюнингу" некоторых аспектов реализации ОС. Вот, собственно эти самые наработки я и предполагаю выкладывать на этой странице. Некоторые из наработок в дальнейшем могут перерасти в отдельные проекты. В общем, приветствуются любые предложения и пожелания. Что есть в ОС A2 на сегодняшний день?В ОС A2 существует поддержка шрифтов Unicode, включающих естественно и символы кириллицы. Для отображения текста в графическом интерфейсе ОС используется внутреннее представление символов в UCS32. Т.е. каждый символ текста занимает 4 байта памяти. Такое решение совершенно не расточительно, а является вполне логичным [1]. В ОС A2 существует возможность использовать русскую раскладку клавиатуры (которая почему-то называется кириллической - Cyrillic). Для возможности использования этой самой раскладки нужно исполнить команду:
WMCyrillicIME.Install~
Если необходимо чтобы модуль раскладки подгружался автоматически при загрузке ОС, необходимо открыть файл конфигурации Configuration.XML (для этого можно исполнить команду Configuration из раздела меню System), и добавить строку:
<Setting value="WMCyrillicIME.Install"/>
в секцию Autostart. После этого нужно нажать кнопку Store! в редакторе конфигурации и перезагрузить ОС. Есть альтернативный путь заставить вступить изменения в силу, - исполнить команду:
Configuration.Init~
Теперь, находясь в окне редактора, можно пользоваться комбинацией клавиш Ctrl + Space для включения / выключения раскладки. Естественно, для корректного открытия / сохранения наших файлов нужно указывать кодировку UTF-8. Не густо. Неоходимость добавления в систему других кодировок очевидна. Поддержка однобайтовых кириллических кодировокНа сегодняшний день имеется большое количество вариантов кодирования символов кириллицы в различных ОС и в сети Интернет. Ситуация напоминает суп :) [2]. Однобайтовые кодовые таблицы пока еще довольно распостранены, поскольку позволяют более эффективно использовать оперативную память и емкость различных информационных носителей, а для Интернет-ресурсов позволяют повысить скорость загрузки страниц (с современными емкостями запоминающих устройств и скоростями Интернет эти соображения уже не так актуальны, особенно при наличии различных алгоритмов компрессии данных). Для обеспечения поддержки какой-либо новой кодировки в ОС A2 достаточно определить соответствующие объекты "декодер" и "кодер" для данной кодировки, и внести соответствующие изменения в файл конфигурации Configuration.XML. <Section name="Codecs"> <Section name="Encoder"> <Section name="Text"> <Setting name="KOI8-R" value="CyrillicUtilities.KOI8REncoderFactory"/> <Setting name="KOI8-U" value="CyrillicUtilities.KOI8UEncoderFactory"/> <Setting name="CP1251" value="CyrillicUtilities.CP1251EncoderFactory"/> <Setting name="CP866" value="CyrillicUtilities.CP866EncoderFactory"/> <Setting name="ISO-8859-5" value="CyrillicUtilities.ISO88595EncoderFactory"/> *** <Section name="Decoder"> <Section name="Text"> <Setting name="KOI8-R" value="CyrillicUtilities.KOI8RDecoderFactory"/> <Setting name="KOI8-U" value="CyrillicUtilities.KOI8UDecoderFactory"/> <Setting name="CP1251" value="CyrillicUtilities.CP1251DecoderFactory"/> <Setting name="CP866" value="CyrillicUtilities.CP866DecoderFactory"/> <Setting name="ISO-8859-5" value="CyrillicUtilities.ISO88595DecoderFactory"/> *** Поскольку символы текста в A2 внутренне представлены в UCS32, задача "декодера" состоит в выполнении преобразования из исходной кодировки в UCS32, а "кодера" соответственно из UCS32 в соответствующую целевую кодировку. Стандартные "кодеры" и "декодеры" ОС находятся в модуле TextUtilities.Mod. Мною предложен модуль CyrillicUtilities.Mod, обеспечивающий поддержку кодировок CP1251, KOI8-R, KOI8-U, CP866 и ISO-8859-5. Для реализации декодера задается массив, содержащий коды символов в UCS32, индекс массива соответствует коду символа в исходной кодировке. Для реализации кодера такой способ уже не подходит, и с целью повышения эффективности алгоритма для каждой из кодировок создается хэш-таблица [3]. Размер хэш-таблиц выбран исходя из полного исключения коллизий. Все что нужно сделать для обесечения поддержки этих кодировок в системе, - нужно скачать мой модуль, откомпилировать его, отредактировать файл конфигурации и обеспечить вступление изменений в силу перезагрузкой ОС или исполнением команды:
Configuration.Init~
Создание клавиатурных раскладокВзяв за основу модуль WMCyrillicIME.Mod, и внеся незначительные коррективы, я создал модуль WMUkrainianIME.Mod для поддержки украинской раскладки клавиатуры. Для автоматической загрузки требуемой раскладки клавиатуры, можно добавить в секцию Autostart файла конфигурации Configuration.XML следующие стороки: *** <Section name="Autostart"> *** <Setting name="Cyrillic Input Method Editor" value="WMCyrillicIME.Install"/> *** или *** <Section name="Autostart"> *** <Setting name="Ukrainian Input Method Editor" value="WMUkrainianIME.Install"/> *** Переключение раскладок осуществляется нажатием Ctrl + Space. Установка шрифтовВ элементах GUI ОС A2 по-умолчанию используются собственные растровые шрифты, хотя и есть модули для работы со шрифтами Open Type / True Type. Существует возможность заменить, например, символы растрового шрифта Oberon на символы из любого Open Type / True Type шрифта, например Arial. Для этого необходимо скопировать файлы arial.ttf, ariali.ttf, arialbd.ttf и arialbi.ttf на раздел A2 и исполнить следующие команды: OpenTypeFonts.Make arial.ttf Oberon 8 10 12 14 16 20 24 Scn~ OpenTypeFonts.Make ariali.ttf Oberon i 8 10 12 14 16 20 24 Scn~ OpenTypeFonts.Make arialbd.ttf Oberon b 8 10 12 14 16 20 24 Scn~ OpenTypeFonts.Make arialbi.ttf Oberon bi 8 10 12 14 16 20 24 Scn~ Будут созданы экранные (параметр Scn) шрифты всех начертаний (обычный, курсив, жирный и жирный курсив) размеров: 8, 10, 12, 14, 16, 20 и 24. Данная процедура, однако, в экранных шрифтах ОС не добавит символы национальных алфавитов поскольку, стандартные растровые шрифты A2 не поддерживают кодировку Unicode, а для отображения этих символов используется некий растровый шрифт, лежащий в одном довольно объёмном файле. Если требуется при подготовке текстовых документов чётко указать на необходимость использования системой определённого Open Type / True Type шрифта, можно скопировать файлы этого шрифта на раздел A2 и определить пользовательские текстовые стили AdHoc с явным указанием имени файла этого шрифта. Использованные источники:[1] "Проблема кодировок": стечение обстоятельств или стратегический замысел?. [2] The Cyrillic Charset Soup. [3] Algorithms and Data Structures. N. Wirth.
Дата последнего обновления: 24-1-16 19:14:06 |
|||||||||||||||||||||||
Copyright © 2005-2021 SAGE. Все права защищены. |