У меня есть реализация текстового поля, в которой используется pango. Если я помещу строку, начинающуюся со слова в сценарии с письмом справа налево, за которым следует пробел, за которым следует слово в сценарии с письмом слева направо, перенос слов, который использует панго, испортится (с использованием PANGO_WRAP_WORD_CHAR
). Для строки العربية ENGLISH я получаю следующее:
Если я добавлю символ Юникода U+200F
после пробела, я получу ожидаемый перенос слов:
Кроме того, если я заменю приведенный выше арабский шрифт на хинди (который пишется слева направо, как и английский рядом с ним), проблема все равно возникает, так что это не выглядит строго слева направо, справа. -что-то налево. В случае с хинди я применил хак, который вставляет 0x200E
после пробела, что решает проблему.
Это баг панго? Есть ли обходные пути, которые я могу попробовать, которые достаточно универсальны, чтобы решить проблему, но не сломать другие случаи? Текущий обходной путь, который я использую, вставляет либо 0x200E
, либо 0x200F
после каждого пробела в зависимости от направления предыдущего строго направленного символа в строке, но я не уверен, что есть определенные строки, с которыми это вызовет проблемы.
Обновление: мне удалось воспроизвести эту проблему в Ubuntu 12.04 с помощью gedit (с включенными параметрами Включить перенос текста и Не разбивать слова на две строки). Я просто набирал Hello world
снова и снова, пока оно не перевернулось несколько раз, затем заменил все экземпляры world
на पहुंचगया
, и все рухнуло в одну строку.