Библиотека поддержки Unicode

Что такое Unicode?

Unicode - один из стандартов представления текстовых данных в вычислительных системах. Основным его отличием от других аналогичных стандартов является то, что он определяет не только способы представления информации, но и способы, и форматы обмена, базовые алгоритмы обработки, способы классификации символов и т.д.

Зачем ещё одна библиотека?

Надо отметить, что на сегодняшний день существует несколько реализаций библиотек с названием Unicode на языке Ada. Однако на мой субъективный взгляд они имеют не много общего со стандартом и идеологией Unicode. Фактически ни одна из них не предоставляет реализаций стандартных алгоритмов, определяемых стандартом, а некоторые ещё и очень сложны в использовании.

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

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

Структура библиотеки

Пакет Unicode. Пакет определяет типы данных для представления символа (Universal_Character) и строки символов (Universal_String). Типы определены таким образом, что позволяют присваивать значения символьных и строковых литералов языка объектам указанных типов без использования подпрограмм преобразования типов.

Смысловая нагрузка символов и строк Unicode делает неопределенной стандартные операции сравнения: вместо этого вводятся понятия "двоичного" сравнения и "весового" сравнения. Для устранения неоднозначности толкования стандартных знаков операторов сравнения, они объявлены как неопределенные.

Дополнительно пакет определяет тип для представления скалярного значения символов Unicode и последовательностей скалярных значений.

Пакет Unicode.Characters. Пакет содержит определения перечислимых типов и разнообразных констант, используемых для классификации символов.

Пакет Unicode.Characters.Properties. Пакет предоставляет доступ к базе данных свойств символов.

Пакет Unicode.Characters.Surrogates. Пакет содержит типы данных и подпрограммы для работы с суррогатными парами символов. Суррогатной парой является особая двухсимвольная последовательность, первый символ которой принадлежит множеству верхних суррогатных символов, а второй - множеству нижних суррогатных символов. Такая пара трактуется как одно скалярное значение, позволяя представлять символы со скалярными значениями более 65535.

Пакет Unicode.Characters.Surrogates.Properties. Состав и назначение пакета аналогичны пакету Unicode.Characters.Properties. Исключение составляет то, что вместо типа Universal_Character используется тип Surrogate_Pair.

Пакет Unicode.Strings. Пустой пакет. Предназначен для использования в качестве родительского пакета для построения иерархической библиотеки алгоритмов работы со строками.

Пакет Unicode.Strings.Case_Mappings. Пакет предоставляет подпрограммы классификации и преобразования регистров знаков.

Пакет Unicode.Strings.Normalization. Пакет предоставляет алгоритмы построения различных нормальных форм строк.

Пакет Unicode.Support.String_Iterators. Пакет упрощает построение итерационных циклов, предназначенных для обработки строк с учетом суррогатных символов. Находящиеся в нем подпрограммы автоматически преобразуют корректные суррогатные пары в одно скалярное значение и инкрементируют/декрементируют значение индексной переменной.

Текущая версия библиотеки находится здесь.

Вадим Годунко. Май 2003г.


PS. Данный проект получил свое дальнейшее развитие в виде Матрешки.