Введение
Текст, содержащий как LTR, так и RTL текст. Двунаправленный текст содержит два направления письма: справа налево (RTL) и слева направо (LTR). Обычно он включает текст, содержащий разные типы алфавитов, но также может относиться к бустрофедону – способу письма, при котором направление текста меняется в каждой строке. Примером может служить еврейское имя Сара, записанное справа налево: שרה, где буква "шин" (ש) находится справа, "реш" (ר) – посередине, а "хей" (ה) – слева. Многие компьютерные программы не могли правильно отображать это, поскольку были разработаны для отображения текста только в одном направлении. Некоторые так называемые право-левые системы письма, такие как персидская и арабская, в основном, но не исключительно, пишутся справа налево – математические выражения, числовые даты и числа с единицами измерения записываются слева направо. То же самое происходит, если текст с левым направлением письма, например английский, вставлен в них, или наоборот, если арабский текст вставлен в текст с правым направлением письма, например английский.
A bidirectional text contains two text directionalities, right to left (RTL) and left to right (LTR). It generally involves text containing different types of alphabets, but may also refer to boustrophedon, which is changing text direction in each row. An example is the RTL Hebrew name Sarah: שרה, spelled sin (ש) on the right, resh (ר) in the middle, and heh (ה) on the left. Many computer program failed to display this correctly, because they were designed to display text in one direction only. Some so called right to left scripts such as the Persian script and Arabic are mostly, but not exclusively, right to left—mathematical expressions, numeric dates and numbers bearing units are embedded from left to right. That also happens if text from a left to right language such as English is embedded in them; or vice versa, if Arabic is embedded in a left to right script such as English.
Поддержка двунаправленного сценария
Поддержка двунаправленного письма — это способность компьютерной системы корректно отображать текст, написанный в двух направлениях. Этот термин часто сокращают до "BiDi" или "bidi". Первые компьютерные системы были разработаны для поддержки только одной системы письма, как правило, для направленного слева направо письма, основанного исключительно на латинском алфавите. Добавление новых наборов символов и кодировок позволило поддерживать другие системы письма слева направо, но не обеспечивало простой поддержки письма справа налево, например, арабского или иврита, и смешивание этих направлений было непрактичным. Письмо справа налево было внедрено с помощью кодировок, таких как ISO/IEC 8859 6 и ISO/IEC 8859 8, сохраняя буквы (обычно) в порядке написания и чтения. Можно просто изменить порядок отображения с левого направо на порядок справа налево, но это приведет к потере возможности корректного отображения письма слева направо. Благодаря поддержке двунаправленного письма стало возможным смешивать символы из разных систем письма на одной странице, независимо от направления письма. В частности, стандарт Unicode предоставляет основу для полноценной поддержки BiDi, содержащую подробные правила кодирования и отображения смесей письма слева направо и справа налево.
Поддержка Unicode bidi
Стандарт Unicode требует, чтобы символы упорядочивались «логически», то есть в той последовательности, в которой они должны интерпретироваться, в отличие от «визуальной», то есть последовательности их отображения. Это различие важно для поддержки двунаправленного текста, поскольку при любом переходе в режиме двунаправленного текста визуальное представление перестает соответствовать логическому порядку. Таким образом, для обеспечения поддержки двунаправленного текста Unicode предписывает алгоритм преобразования логической последовательности символов в корректное визуальное представление. В этом целях стандарт кодирования Unicode разделяет все символы на один из четырех типов: «сильные», «слабые», «нейтральные» и «символы явного форматирования».
Сильные персонажи
Сильные символы — это символы с чётко выраженным направлением. К таким символам относятся большинство букв алфавитов, слоговых знаков, иероглифов хань, неевропейские и неарабские цифры, а также знаки препинания, специфичные для данных систем письма.
Слабые персонажи
Слабые символы – это те, у которых неопределённое направление. Примеры таких символов включают европейские цифры, восточноарабские цифры, арифметические символы и символы валют.
Нейтральные символы
Нейтральные символы не имеют определяемого направления вне контекста. К ним относятся разделители абзацев, символы табуляции и большинство других пробельных символов. Символы пунктуации, общие для многих систем письма, такие как двоеточие, запятая, точка и неразрывный пробел, также попадают в эту категорию.
Явное форматирование
Явные символы форматирования, также известные как "символы направленного форматирования", — это специальные последовательности Unicode, которые указывают алгоритму изменить его поведение по умолчанию. Эти символы подразделяются на "метки", "встраивания", "изоляторы" и "переопределения". Их эффект сохраняется до появления разделителя абзаца или символа "pop".
Знаки
Если за "слабым" символом следует другой "слабый" символ, алгоритм обращается к первому соседнему "сильному" символу. Иногда это приводит к непреднамеренным ошибкам отображения. Эти ошибки исправляются или предотвращаются с помощью "псевдосильных" символов. Такие управляющие символы Unicode называются диакритическими знаками. Диакритический знак (или) вставляется в определенное место, чтобы заключенный "слабый" символ унаследовал направление письма. Например, для правильного отображения английского названия бренда (LTR) в арабском (RTL) тексте, после символа товарного знака вставляется диакритический знак LRM, если за символом не следует текст LTR (например, "قرأ Wikipedia™ طوال اليوم."). Если диакритический знак LRM не добавлен, "слабый" символ ™ окажется между "сильным" символом LTR и "сильным" символом RTL. Следовательно, в контексте RTL он будет интерпретироваться как RTL и отображаться в неправильном порядке (например, "قرأ Wikipedia™ طوال اليوم.").
Встраивания
Направленные символы форматирования типа "встраивание" – это классический метод явного форматирования в Unicode, и начиная с версии 6.3, их использование не рекомендуется в пользу "изолятов". "Встраивание" указывает, что фрагмент текста следует рассматривать как имеющий отличное направление. Текст, находящийся в области действия символов форматирования типа "встраивание", не является независимым от окружающего текста. Более того, символы внутри "встраивания" могут влиять на порядок символов вне его. В Unicode 6.3 было признано, что направленные "встраивания" обычно оказывают слишком сильное влияние на окружающий текст и, следовательно, неоправданно сложны в использовании.
Изоляты
"Изолирующие" направленные символы форматирования сигнализируют о том, что фрагмент текста должен рассматриваться как направленно изолированный от окружающего его текста. Начиная с Unicode 6.3, эти символы форматирования рекомендуются к использованию в новых документах, после подтверждения поддержки целевыми платформами. Эти символы форматирования были введены после того, как стало понятно, что направленные встраивания обычно оказывают слишком сильное влияние на окружающий текст и, следовательно, сложны в использовании. В отличие от устаревших "встраивающих" направленных символов форматирования, "изолирующие" символы не влияют на порядок текста вне их области действия. Изоляты могут быть вложены друг в друга и могут использоваться внутри встраиваний и переопределений.
Заменяет
Символы "переопределения" направления форматирования позволяют обрабатывать особые случаи, например, для артикулов (например, для принудительного отображения артикула, состоящего из английских букв, цифр и еврейских символов, справа налево). Рекомендуется избегать их использования, где это возможно. Как и другие символы форматирования направления, "переопределения" могут быть вложены друг в друга, а также использоваться во встраиваниях и изолированных участках текста.
Попсы
"Pop" направляющие символы форматирования завершают область действия последнего "внедрения", "переопределения" или "изоляции".
Пробегает
В алгоритме каждая последовательность объединенных сильных символов называется "прогоном". "Слабый" символ, расположенный между двумя "сильными" символами с одинаковой направленностью, наследует их направленность. "Слабый" символ, расположенный между двумя "сильными" символами с разным направлением письма, наследует направление письма основного контекста (в документе с направлением письма слева направо символ станет слева направо, в документе с направлением письма справа налево – справа налево).
Безопасность
Двунаправленные символы Unicode используются в уязвимости Trojan Source. Visual Studio Code подсвечивает управляющие символы BiDi начиная с версии 1.62, выпущенной в октябре 2021 года. Visual Studio подсвечивает управляющие символы BiDi начиная с версии 17.0.3, выпущенной 14 декабря 2021 года.
Египетские иероглифы
Египетские иероглифы писались в обоих направлениях, при этом знаки, имеющие выраженную "голову" или "хвост", были обращены к началу строки.
Китайские и другие китайские символы
Китайские иероглифы могут быть написаны в любом направлении, а также вертикально (сверху вниз, затем справа налево), особенно на вывесках и табличках, однако ориентация отдельных иероглифов не меняется. Это часто можно увидеть на туристических автобусах в Китае, где название компании обычно располагается от передней части автобуса к задней – то есть справа налево на правой стороне и слева направо на левой стороне. Английский текст на правой стороне автобуса также нередко пишется в обратном порядке. (Смотрите фотографии туристического и служебного автобусов ниже.) Аналогично, другие системы письма CJK, использующие те же квадратные иероглифы, такие как японская и корейская письменность, также могут быть написаны в любом направлении, хотя наиболее распространены горизонтальное письмо слева направо, вертикальное письмо сверху вниз и вертикальное письмо сверху вниз справа налево.
Бустрофедон
Бустрофедон — это стиль письма, встречающийся в древнегреческих надписях, в древнесабейском (древнем южноаравийском языке) и в венгерских рунах. Этот метод письма чередует направление и обычно отражает отдельные символы в каждой следующей строке.
Тип луны
Лунный шрифт — это рельефная адаптация латинского алфавита, разработанная как тактильный алфавит для слепых. Изначально текст менял направление (но не ориентацию символов) в конце каждой строки. Специальные рельефные линии соединяли конец строки с началом следующей. Примерно в 1990 году направление чтения изменилось на слева направо.