Поддержка национальных кодировок в операционной системе A2


SAGE


В процессе программирования под эту замечательную ОС у меня возникла идея создать нечто вроде проекта по ее локализации. Необходимость в более полноценной поддержке кириллицы этой ОС очевидна, а по ходу дела могут возникнуть определенные наработки, по что называется "тюнингу" некоторых аспектов реализации ОС. Вот, собственно эти самые наработки я и предполагаю выкладывать на этой странице. Некоторые из наработок в дальнейшем могут перерасти в отдельные проекты. В общем, приветствуются любые предложения и пожелания.

Что есть в ОС 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.





Тип

Имя

Размер

Загрузок

zip

Sage.Cyrillic.zip

11 KiB

141

txt

Sage.Cyrillic.txt

2 KiB

133

mht

kod.mht

133 KiB

154

mht

cyrillic.mht

120 KiB

150

Дата последнего обновления: 24-1-16 20:14:06


 

Copyright © 2005-2017 SAGE. Все права защищены.