Неверное направление стрелки в контекстах RTL

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

(От меня:) Проблема в том, что эта замена выполняется (насколько мне известно) вне какого-либо контекста рендеринга, когда текст представляет собой просто последовательность кодов символов. Невозможно разумно определить направление текста. Иногда это совершенно невозможно, если направление текста зависит от контекста, который недоступен во время замены.

Вышеизложенное строго говоря неточно. Любая серьёзная система рендеринга текста в наши дни требует движка формирования (shaping engine), такого как HarfBuzz, и связывание «->» в «→» выполняется именно таким движком в сотрудничестве со шрифтом, поддерживающим лигатуры. Движок формирования осведомлён о контексте bidi и скрипте текста, который он формирует, поэтому он мог бы в принципе отразить стрелку.

Они говорят о чём-то вроде этого: GitHub - tonsky/FiraCode: Free monospaced font with programming ligatures · GitHub

Рассмотрите возможность переключения на подход с лигатурами вместо слепой замены символов. Ещё одним спорным преимуществом было бы то, что при копировании и вставке текст оставался бы «->», а не превращался бы в стрелку.

Я не углублялся в технические детали реализации этого, я оставляю это вам, если вы решите использовать это решение.

Редактирование: ну, как и следовало ожидать, Fira Code, в частности, не предназначена для работы с RTL, поэтому рендеринг не идеален — но хотя бы она указывает в правильном направлении! https://fonts.google.com/specimen/Fira+Code?preview.text=A%20->%20B,%20א%20->%20ב
Firefox:

Не уверен, существует ли сегодня шрифт, который делает это правильно и явно поддерживает RTL/bidi.

1 лайк