В этой главе приведена следующая информация:
Двунаправленный текст (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