![]() |
||
|
aranea.ru || Спецификация HTML 4.01 | 8. Информация о языке и направление текста
8. Информация о языке и направление текста8.2. Определение направления текста и таблиц: атрибут dir8.2.1. Введение в алгоритм двухстороннего направления текста8.2.2. Наследование информации о направлении текста 8.2.3. Установка направления вложенного текста 8.2.4. Преодоление алгоритма двухстороннего направления: элемент BDO 8.2.5. Специальные символы для направления и управления соединениями 8.2.6. Влияние стилевых таблиц на двухстороннюю разметку Определение атрибута
Дополнительно к определению языка документа атрибутом lang, авторам может понадобиться установить основное направление (слева направо или справа налево) частей текста документа, структуры таблицы и т.д. Это делается атрибутом dir. Спецификация [UNICODE] назначает направление расположения символов и определяет (комплексный) алгоритм для установки соответствующего направления текста. Если документ не содержит символ, выводимый на экран справа налево, то согласующемуся устройству вывода не требуется применять алгоритм двухстороннего направления [UNICODE]. Если документ содержит символы, визуализирующиеся справа налево, и если устройство вывода выводит эти символы на экран, то оно должно использовать алгоритм двухстороннего направления. Хотя Unicode определяет специальные символы, которые имеют дело с направлением текста, HTML предлагает конструкции разметки более высокого уровня, которые осуществляют то же самое: атрибут dir (не путать с элементом DIR) и элемент BDO. Таким образом, для выражения кавычек на иврите, более естественно написать <Q lang="he" dir="rtl">...a Hebrew quotation... </Q> чем использовать эквивалент символов Unicode: ״...a Hebrew quotation...״ Устройствам вывода нельзя использовать атрибут lang для определения направления текста. Атрибут dir наследуется и может преодолеваться. Пожалуйста, обратитесь к разделу о наследовании направления текста. 8.2.1 Введение в алгоритм двухстороннего направления текстаСледующий пример показывает ожидаемое поведение алгоритма двухстороннего направления. Он включает английский текст, выводимый слева направо, и текст на иврите, визуализирующийся справа налево. Рассмотрите следующий пример текста: english1 HEBREW2 english3 HEBREW4 english5 HEBREW6 Символы в этом примере (и во всех связанных примерах) сохраняются на компьютере следующим способом: первый символ в файле - "e", второй - "n" и последний - "6". Предположим, что доминирующий текст документа в этом параграфе – английский. Это означает, что основное направление – слева направо. Правильная презентация этой строки будет следующей: english1 2WERBEH english3 4WERBEH english5 6WERBEH <------ <------ <------ H H H -------------------------------------------------> E Пунктирные линии указывают на структуру предложения: доминирует английский язык, в который вставлены участки текста на иврите. Достижение корректного представления не требует дополнительной разметки, так как фрагменты на иврите выводятся правильным образом устройствами вывода, т.е. - наоборот, применяя алгоритм двухстороннего направления текста. Если, с другой стороны, доминирующим текстом является иврит, то основное направление – справа налево. Корректное представление будет следующим: 6WERBEH english5 4WERBEH english3 2WERBEH english1 -------> -------> -------> E E E <------------------------------------------------- H В этом случае все предложение представлено справа налево, а вставленные предложения на английском языке выводятся наоборот алгоритмом двухстороннего направления текста. 8.2.2 Наследование информации о направлении текстаАлгоритм двухстороннего направления в Unicode устанавливает базовое направление для текстовых блоков. Для определения базового направления блочного элемента, установите атрибут dir. Значение атрибута dir по умолчанию - "ltr" (слева направо). Когда для блочного элемента устанавливается атрибут dir, то он действует на протяжении всего элемента и любых вложенных блочных элементов. Установка атрибута dir для вложенного элемента преодолевает наследуемое значение. Для определения базового направления текста всего документа, установите атрибут dir для элемента HTML. Например: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <HTML dir="RTL"> <HEAD> <TITLE>...a right-to-left title... </TITLE> </HEAD> ...right-to-left text... <P dir="ltr">...left-to-right text... </P> <P>...right-to-left text again... </P> </HTML> Внутристрочные элементы, с другой стороны, не наследуют атрибут dir. Это означает, что внутристрочный элемент без атрибута dir не открывает дополнительный уровень вложения с точки зрения алгоритма двухстороннего направления текста. (Здесь элемент рассматривается как блочный или внутристрочный на основе его представления по умолчанию. Обратите внимание, что элементы INS и DEL могут быть блочными или внутристрочными в зависимости от их контекста.) 8.2.3 Установка направления вложенного текстаАлгоритм двухстороннего направления [UNICODE] автоматически переворачивает вложенные предложения символов в соответствии с их наследственным направлением (как это показано в предыдущих примерах). Но, в общем, может учитываться только один уровень вложения. Для достижения дополнительных уровней вложенных изменений направлений, вы должны использовать атрибут dir для внутристрочного элемента. Рассмотрите тот же пример текста, показанный ранее: english1 HEBREW2 english3 HEBREW4 english5 HEBREW6 Предположим, что доминирующий язык документа в этом параграфе – английский. И более того, английское предложение содержит раздел на иврите от HEBREW2 до HEBREW4, а раздел на иврите включает английские кавычки (english3). Желаемое представление этого текста следующее: english1 4WERBEH english3 2WERBEH english5 6WERBEH -------> E <----------------------- H -------------------------------------------------> E Для достижения двух вложенных изменений направления, мы должны предоставить дополнительную информацию, это мы сделаем путем разделения второго вложения явным образом. В этом примере, мы используем элемент SPAN и атрибут dir для разметки текста: english1 <SPAN dir="RTL">HEBREW2 english3 HEBREW4</SPAN> english5 HEBREW6 Кроме этого, авторы могут использовать специальные символы Unicode для достижения множественных изменений направлений для вложений. Для получения вложения слева направо, окружите вложенный текст символами LEFT-TO-RIGHT EMBEDDING ("LRE", шестнадцатиричное значение 202A) и POP DIRECTIONAL FORMATTING ("PDF", шестнадцатиричное значение 202C). Для достижения вложения справа налево, окружите вложенный текст символами RIGHT-TO-LEFT EMBEDDING ("RTE", шестнадцатиричное значение 202B) и PDF. Использование разметки направления в HTML с Unicode- символами. Авторам и дизайнерам авторских систем следует знать, что могут возникать конфликты, если атрибут dir использовать для внутристрочных элементов (включая BDO) вместе с соответствующими форматирующими символами [UNICODE]. Предпочтительно использовать либо тот метод, либо другой (как исключающие друг друга). Метод разметки гарантирует структурную целостность документа и смягчает некоторые проблемы, когда редактируют двусторонние тексты HTML в простом текстовом редакторе, но ряд программ лучше приспособлены для использования символов [UNICODE]. Если использовать оба метода, то следует быть очень осторожным, чтобы обеспечить правильное вложение разметки и самих вложений, или их преодоление, иначе результат визуализации будет неопределенным. 8.2.4 Преодоление алгоритма двухстороннего направления: элемент BDO<!ELEMENT BDO - - (%inline;)* -- I18N BiDi over-ride --> <!ATTLIST BDO %coreattrs; -- id, class, style, title -- lang %LanguageCode; #IMPLIED -- language code -- dir (ltr|rtl) #REQUIRED -- directionality -- > Начальный тег: обязательный, конечный тег: обязательный Определение атрибутов
Атрибуты, определенные в другом месте
Алгоритма двухстороннего направления текста и атрибута dir, обычно, достаточно для регулировки изменений направления вложений. Но, могут возникнуть некоторые ситуации, когда двухсторонний алгоритм приводит в результате к некорректной презентации. Элемент BDO позволяет авторам выключить этот алгоритм для выбранных фрагментов текста. Рассмотрите документ, включающий тот же текст, как и в предыдущих примерах: english1 HEBREW2 english3 HEBREW4 english5 HEBREW6 но допустим, что этот текст уже размещен в визуальном порядке. Одна из причин этого состоит в том, что стандарт MIME ([RFC2045], [RFC1556]) предпочитает визуальный порядок, т.е., когда предложения символов с направлением справа налево вставляются в байтовый поток также справа налево. В электронной почте это может быть отформатировано, включая обрыв строки, следующим образом: english1 2WERBEH english3 4WERBEH english5 6WERBEH Это конфликтует с алгоритмом двухстороннего направления текста [UNICODE], так как алгоритм будет инвертировать 2WERBEH, 4WERBEH и 6WERBEH второй раз, показывая слова на иврите слева направо, а не справа налево. Решение данного случая состоит в преодолении двухстороннего алгоритма, размещая электронное сообщение в элемент PRE (для сохранения обрыва строк), а каждую строку в элемент BDO, атрибут dir которого установлен как LTR: <PRE> <BDO dir="LTR">english1 2WERBEH english3</BDO> <BDO dir="LTR">4WERBEH english5 6WERBEH</BDO> </PRE> Все это сообщает двустороннему алгоритму: "Leave me left-to-right!" ("Оставь меня левосторонним"), и в результате приведет к желаемой презентации: english1 2WERBEH english3 4WERBEH english5 6WERBEH Элемент BDO следует использовать в сценариях, где требуется абсолютное управление порядком в предложении (например, ряд многоязычных частей). Атрибут dir обязателен для такого элемента. Авторы могут также использовать специальные символы для преодоления двустороннего алгоритма -- LEFT-TO-RIGHT OVERRIDE (202D) или RIGHT-TO-LEFT OVERRIDE (202E). Символ POP DIRECTIONAL FORMATTING (202C) заканчивает любое преодоление двухсторонней направленности. Обратите внимание. Могут возникнуть конфликты, если атрибут dir используется для внутристрочных элементов (включая BDO) вместе с соответствующими форматирующими символами [UNICODE]. Двухстороннее направление и кодировка символов. В соответствии с [RFC1555] и [RFC1556] используют специальные соглашения для значений параметра "charset" при указании на обращение с двухсторонней направленностью текста в почте MIME, в частности для различения между визуальной, неявной и явной направленностью. Значение параметра "ISO-8859-8" (для иврита) означает визуальную кодировку, "ISO-8859-8-i" подразумевает неявное двухстороннее направление, а "ISO-8859-8-e" – явное. Так как HTML использует алгоритм двухстороннего направления текста Unicode, то согласование документов, закодированных с помощью ISO 8859-8, должно быть помечено как "ISO-8859-8-i". Явное управление направлением в HTML также возможно, но оно не может выражаться с помощью ISO 8859-8, так как "ISO-8859-8-e" не следует использовать. Значение "ISO-8859-8" подразумевает, что документ форматируется визуально, используя неправильно определенную разметку (подобно TABLE с правым выравниванием и без переноса строк) для обеспечения разумного вывода на дисплей для старых устройств, которые не воспринимают двухстороннее направление. Такие документы не согласуются с настоящей спецификацией. Если необходимо, то их можно сделать соответствующими текущей спецификации (и в то же время они будут выводиться корректно на дисплей старых устройств вывода), добавляя разметку BDO, где это необходимо. В противоположность сказанному в [RFC1555] и [RFC1556], ISO-8859-6 (Arabic) не является визуально упорядоченным стандартом. 8.2.5 Специальные символы для направления и управления соединениямиТак как иногда возникают неопределенности по отношению к направлению ряда символов (например, пунктуации), спецификация [UNICODE] включает символы, дающие возможность их правильного различения. Кроме этого, Unicode включает некоторые символы для управления совместного поведения, где это необходимо (например, ситуации с арабскими буквами). HTML 4 имеет специальные символы для таких случаев. Следующий файл DTD представляет некоторые примитивы направления: <!ENTITY zwnj CDATA ""--=zero width non-joiner--> <!ENTITY zwj CDATA ""--=zero width joiner--> <!ENTITY lrm CDATA ""--=left-to-right mark--> <!ENTITY rlm CDATA ""--=right-to-left mark--> Примитив zwnj используется для блокировки совместного поведения в контексте, где присоединение произойдет, хотя и не должно. Примитив zwj не является противоположным, он усиливает соединение, где оно не будет происходить, хотя и может. Например, арабская буква "HEH" используется для сокращения "Hijri" (имени исламской календарной системы). Поскольку изолированная форма "HEH" выглядит подобно цифре пять, применяемой в арабском написании (основанном на индийских цифрах), чтобы предохранить от путаницы "HEH" с пятеркой в году, используют начальную форму "HEH". Но, здесь отсутствует контекст предшествования (т.е. присоединяющаяся буква), к которой "HEH" может присоединяться. Символ zwj предоставляет такой контекст. Таким же образом, в иранских текстах есть случаи, когда буква, которая присоединялась бы нормально к следующей букве, в курсивном соединении этого делать не будет. В таких случаях символ zwnj используется для блокировки присоединения. Другие символы, lrm и rlm, используются при усилении направления для символов, нейтральных к направленности. Например, если двойные кавычки идут между арабской (справа налево) и латинской (слева направо) буквой, то направление кавычки не ясно (что заключено в кавычки – арабский текст или латинский?). Символы lrm и rlm имеют свойство направленности, но не имеют ширины и свойства разрыва слова/строки. Обратитесь к [UNICODE] для получения подробной информации. Зеркальные глифы символов. В общем, алгоритм двухстороннего направления текста не производит зеркальные глифы символов, и оставляет их неизменными. Исключением являются символы, подобные круглым скобкам (смотрите [UNICODE]). В случаях, где зеркальное отображение желательно, например, для египетских иероглифов, греческих Bustrophedon или специальных эффектов дизайна, это следует контролировать с помощью стилевых таблиц. 8.2.6 Влияние стилевых таблиц на двухстороннюю разметкуВ общем, использование стилевых таблиц для изменения визуализации элемента, блочного или внутристрочного уровня и наоборот, совершенно не сложно. Так как алгоритм двухстороннего направления текста полагается на различение уровней блочный/внутристрочный, то необходимо быть очень внимательным во время трансформации. Когда внутристрочный элемент, который не имеет атрибута dir, трансформируется к стилю блочного элемента с помощью стилевых таблиц, он наследует атрибут dir его ближайшего родительского блочного элемента для определения базового направления блока. Когда блочный элемент, который не имеет атрибут dir, трансформируется к стилю внутристрочного элемента с помощью стилевых таблиц, то результирующая презентация должна быть эквивалентной (в терминах двухстороннего форматирования) форматированию, полученному явно добавлением атрибута dir (присвоенному наследуемое значение) к трансформированному элементу. |