[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Начертание текста (двунаправленный текст и перерисовка символов) - Обзор

В этой главе приведена следующая информация:

Двунаправленный текст (BIDI) получается в результате объединения текстов, читаемых в разных направлениях. Например, английский текст читается слева направо, а текст на арабском языке или иврите - справа налево. Если в одной строке содержатся фрагменты английского текста и текста на иврите, то это двунаправленный текст.

Правила чтения двунаправленного текста следующие:

Двунаправленный текст читается справа налево и сверху вниз.

Если текст вставки помещается в одну строку, он читается слева направо и считается отдельным вставным элементом двунаправленного текста. Если же текст вставки занимает несколько строк, то необходимо соблюдать порядок чтения его фрагментов - слева направо и сверху вниз.

Двунаправленный текст, в котором фрагмент, читаемый справа налево и занимающий одну строку, вставлен в предложение, читаемое слева направо, может выглядеть так:

ЭТО ПРЕДЛОЖЕНИЕ СОДЕРЖИТ тскет йыннелварпанувд И ОБЫЧНЫЙ ТЕКСТ.

Двунаправленный текст, в котором фрагмент, читаемый справа налево и занимающий две строки, вставлен в предложение, читаемое слева направо, может выглядеть так:

ЭТО ПРЕДЛОЖЕНИЕ СОДЕРЖИТ ,икортс евд ан йытибзар ,тскет
йыннелварпанувд И ОБЫЧНЫЙ ТЕКСТ.

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

Потоки данных

В средах с поддержкой двунаправленного текста применяются следующие потоки данных:

Визуальные потоки данных Система выстраивает символы в той последовательности, в которой они появляются на экране.

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

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

ЭТО ПРЕДЛОЖЕНИЕ СОДЕРЖИТ двунаправленный текст И ОБЫЧНЫЙ ТЕКСТ.

то визуальный поток данных будет следующим:

ЭТО ПРЕДЛОЖЕНИЕ СОДЕРЖИТ тскет
йыннелварпанувд И ОБЫЧНЫЙ ТЕКСТ.

Если область вывода ориентирована слева направо, то текст также выводится слева направо:

ЭТО ПРЕДЛОЖЕНИЕ СОДЕРЖИТ тскет йыннелварпанувд И ОБЫЧНЫЙ ТЕКСТ.
-------> <----------------- ---------------->

Стрелки показывают направление чтения.

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

.ТСКЕТ ЙЫНЧЫБО И двунаправленный текст ТИЖРЕДОС ЕИНЕЖОЛДЕРП ОТЭ
<---------------- -----------------> <-------

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

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

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

Если логический поток данных включает в себя фрагменты текста, читаемого в другом направлении, то функции управления выводом двунаправленного текста сохраняют ориентацию всех его фрагментов. Например, если с клавиатуры введен следующий текст:

ЭТО ПРЕДЛОЖЕНИЕ СОДЕРЖИТ двунаправленный текст И ОБЫЧНЫЙ ТЕКСТ.

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

ЭТО ПРЕДЛОЖЕНИЕ СОДЕРЖИТ двунаправленный текст И ОБЫЧНЫЙ ТЕКСТ.

При выводе в область, ориентированную слева направо, этот логический поток данных будет выглядеть так:

ЭТО ПРЕДЛОЖЕНИЕ СОДЕРЖИТ тскет йыннелварпанувд И ОБЫЧНЫЙ ТЕКСТ.
-------> <----------------- ---------------->

При выводе в область, ориентированную справа налево, этот логический поток данных будет выглядеть так:

И ОБЫЧНЫЙ ТЕКСТ. тскет йыннелварпанувд ЭТО ПРЕДЛОЖЕНИЕ СОДЕРЖИТ
----------------> <----------------- ------->

Таким образом, логический поток данных читается в областях с любой ориентацией.

Перемещение курсора

Ниже описано перемещение курсора по двунаправленному тексту:

Визуальный поток Курсор движется вправо или влево на один символ или вверх-вниз на одну строку. Например, если курсор находится в конце первого фрагмента следующего текста:

ЭТО ПРЕДЛОЖЕНИЕ СОДЕРЖИТ_тскет йыннелварпанувд И ОБЫЧНЫЙ ТЕКСТ.

то после нажатия клавиши "стрелка вправо" курсор перемещается на один символ вправо:

ЭТО ПРЕДЛОЖЕНИЕ СОДЕРЖИТ тскет йыннелварпанувд И ОБЫЧНЫЙ
ТЕКСТ.

Таким образом, перемещение курсора не зависит от направления чтения текста.

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

ЭТО ПРЕДЛОЖЕНИЕ СОДЕРЖИТ_тскет йыннелварпанувд И ОБЫЧНЫЙ ТЕКСТ.

то для перемещения курсора к следующему символу необходимо сначала найти этот символ в логическом потоке. Курсор перемещается к следующему логическому фрагменту предложения:

ЭТО ПРЕДЛОЖЕНИЕ СОДЕРЖИТ тскет йыннелварпанувд_И ОБЫЧНЫЙ ТЕКСТ.

Курсор перемещается в соответствии с порядком чтения текста.

Перерисовка символов

Перерисовка символов выполняется, если начертание символа зависит от его положения в строке текста. В некоторых языках, например, в арабском, начертание символа зависит от его положения в строке и от соседних символов.

Начертание символов арабского алфавита определяется следующими обстоятельствами:

Способы перерисовки символов

Перерисовка символов должна быть реализована отдельно от других системных компонентов. Однако функции перерисовки символов должны быть доступны другим системным компонентам в форме утилит. Система может выполнять перерисовку символов следующими способами:

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

Контекстная перерисовка символов

Вообще говоря, контекстная перерисовка символов - это выбор необходимого начертания каждого отдельного символа данного шрифта в зависимости от его положения в слове и от соседних символов. Возможны следующие начертания символов:

Изолированный Символ, не соединенный ни с предыдущим, ни с последующим символами.
Конечный Символ, соединенный с предыдущим символом, но не с последующим.
Начальный Символ, соединенный с последующим символом, но не с предыдущим.
Промежуточный Символ, соединенный и с предыдущим, и с последующим символами.

Кроме того, у символа могут быть следующие дополнительные характеристики:

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

Обзор функций библиотеки визуального представления текста

Подробную информацию по этому вопросу вы найдете на Web-сайте:

www.opengroup.org

или в книге "Portable Layout Services: Context-dependent and Directional Text"

# C616 ISBN 1-85912-142-X, январь 1997 г.

Адрес для заказа книги:

The Open Group,
Publications Department,
PO Box 96,
Witney,
Oxon OX8 6PG,
England 

Телефон: +44 (0)1993 708731, факс: +44 (0)1993 708732


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]