2.1. Архитектурный контекст

Эта статья является вольным пересказом раздела «2.1. Architectural Context» Стандарта Юникода.

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

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

Базовые операции

Большинство компьютерных систем предоставляет низкоуровневую функциональность для небольшого количества базовых операций с текстом, но основе которых уже строятся более сложные. Следующие действия в определённой степени поддерживаются большинством систем:

  • Визуальная отрисовка символов (в том числе лигатуры и т.п.)
  • Переносы строк при отрисовке (включая перенос слов)
  • Изменение внешнего вида (размера, кернинга, применение различных эффектов)
  • Определение таких элементов, как «слово» или «предложение».
  • Интерактивное взаимодействие с пользователем в процессе выделения и подсвечивания текста.
  • Обработка клавиатурного ввода и редактирование хранимого текста.
  • Сравнение отдельных строк при поиске или сортировке.
  • Анализ текстового содержимого при проверке правописания.
  • Сжатие и декомпрессия.

Текстовые элементы, символы и операции

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

Например, в традиционной немецкой орфографии, комбинация букв «ck» может рассматриваться, как текстовый элемент для операции переноса (превращается в «k-k»). А для операции сортировки эта комбинация текстовым элементом не является. В испанском языке «ll» является отдельным элементом при сортировке (ставится между «l» и «m»), но не при отрисовке. Английские «A» и «a» при отрисовке рассматриваются, как различные элементы. Но при поиске, обычно, они считаются одной и той же буквой.

Границы текстовых элементов также могут меняться. Например, при проверке орфографии текстовыми элементами являются уже целые слова.

Вместо определения текстовых элементов, кодировка описывает фундаментальные единицы, каждая из которых идентифицируется кодом. Это символы (assigned characters), наименьшие частицы текста. Текстовые элементы представляют собой последовательности символов.

Прим. переводчика: коды (кодовые позиции) бывают assigned — с ними связаны символы и unassigned — для них символы не определены (но могут быть определены в дальнейших версиях Стандарта). Перевести можно, как «определённые» или «распределённые» позиции.

Большинство алгоритмов рассматривает текстовые элементы, как последовательность кодов символов. Некоторые текстовые элементы соответствуют тому, что рассматривается пользователем, как отдельные символы. Это графемы.

Обработка текста и кодировка

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

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

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

Не всегда подходы, которые позволяют оптимально кодировать символы для одного языка, также оптимально работают для другого. Например, можно по разному кодировать ударение и подобные диакритические знаки. Можно использовать последовательность символ + диакритический знак, либо кодировать эту пару как отдельный символ.

Кодировка не может одинаково хорошо поддерживать все алгоритмы. Необходимы компромиссы. Например, Юникод использует отдельные символы для букв в верхнем и нижнем регистре. Это делает проще процесс отрисовки, но, при этом, усложняет процесс сравнения.

Однозначность символов

Каждый раз, когда Стандарт описывает какое-то поведение по умолчанию, это делается для того, чтобы пользователи и программы не сталкивались с неоднозначным пониманием того, как им правильно использовать символы и их последовательности. Например, для двунаправленных систем письма описывается, как правильно построить последовательность символов, чтобы он соответствовала конкретному направлению вывода. (См. раздел 2.10).

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

Целью Юникода является не определение конкретных правил для каждой реализации, а поощрение единообразия.

Другими словами, в идеале, два пользователя, знакомые со стандартом, выберут для представления одного и того же текста, одинаковые последовательности символов. На практике, конечно, существует множество ограничений, так что эта цель не всегда достижима.

Скопировано!