В памяти все это хранится в виде последовательности кодовых точек Unicode (надеюсь, до этого были очень странные вещи, но давайте не будем идти туда) - это сам текст, как он представлен на компьютере. Поначалу текст не зависит от направления письма, это просто последовательность символов.
Эта последовательность проходит через механизм рендеринга, который знает алгоритм Unicode Bidi и, таким образом, может преобразовывать текст в глифы для отображения в определенной позиции. Каждый персонаж в Unicode имеет свойство Bidi, которое контролирует его поведение в таких контекстах. Это указывает, что a
является символом LTR, а א
является символом RTL; он контролирует, чтобы круглые скобки правильно отражались в контекстах RTL (открывающая скобка по-прежнему (
в тексте, даже если вы видите )
); и несколько символов могут появляться в обоих контекстах. Все это очень упрощено, и там есть немало вещей, которые можно поработать. Наконец, несколько глифов могут накладываться друг на друга (например, диакритические знаки) или образовывать лигатуры; тогда это графемы, что по сути то, что мы воспринимаем как «письмо».
Тогда перемещение курсора легко выполнить, потому что курсор может быть только между двумя графемами (он становится более сложным в начале сегмента LTR или RTL, но давайте пока оставим это без изменений) и → переместил вперед через них, а ← движется назад. В RTL форварды, конечно, означает left ; это следует за направлением текста. Порядок расположения двух графем относительно друг друга не имеет значения при позиционировании курсора.
Хотя я признаю, что смешанный текст RTL и LTR может показаться странным, но я думаю, что люди в арабских или ивритоязычных странах довольно привыкли к этому.
Что касается проблемы, заключающейся в том, что правильный текстовый макет иногда теряется при копировании и вставке текста, я предполагаю, что наиболее распространенной проблемой является поддержка приложения или механизма компоновки для соответствующего сценария. Если механизм верстки не знает, как макетировать арабский текст, все, что вы получаете, это символы в их логическом порядке слева направо. Никакие лигатуры не формируются, текстовое направление не применяется. Например, браузеры уже неплохо поддерживают такие вещи, но если я возьму арабский текст и вставлю его в Word, он будет выглядеть неправильно (в случае с Word 2007; PowerPoint справился, однако). К сожалению, это не легко исправить, но, как правило, текст, который вы скопировали, точно такой же, просто неправильный дисплей.
Отказ от ответственности: я долгое время скрывался в списке рассылки Unicode, но я ни в коем случае не эксперт в этих вопросах. Я говорю на двух языках, и оба тривиально, что касается макета. Это воспоминание о том, как я думаю, что это может работать, а может и не быть фактическим фактом.