我有一个使用pango的文本框实现。如果我在从右至左的脚本中放置一个单词开头的字符串,然后是一个空格,然后在从左至右的脚本中放置单词,则pango使用的自动换行会被弄乱(使用PANGO_WRAP_WORD_CHAR)。对于字符串العربيةENGLISH,我得到以下信息:

text - 使用混合脚本在pango中自动换行-LMLPHP

如果在空格后添加unicode字符U+200F,则可以得到预期的自动换行:

text - 使用混合脚本在pango中自动换行-LMLPHP

另外,如果我将上面的阿拉伯文字替换为北印度语(从左到右,就像旁边的英语​​一样),那么我仍然会遇到问题,因此,这似乎并不是严格意义上的从左至右到左的东西。在印地语的情况下,我放入了一个hack,该hack在解决问题的空间后插入了0x200E

这是pango中的错误吗?我是否可以尝试一些解决方法,这些解决方法足以解决问题,但又不破坏其他情况?我正在使用的当前解决方法是,根据字符串中前一个强方向字符的方向,在每个空格后插入0x200E0x200F,但是我不确定是否存在某些会引起问题的字符串。

更新:我能够在gedit上的Ubuntu 12.04上重现此问题(启用“启用文本包装”和“不要在两行上拆分单词”设置)。我只是一遍又一遍地键入Hello world,直到它包装了好几次,然后用world替换了पहुंचगया的所有实例,然后所有内容都折叠成一行。

最佳答案

符号U+200FU+200E是RIGHT-TO-LEFT和LEFT-TO-RIGHT标记。 S:

每个英文文本和阿拉伯文本之间的

  • ,在从右向左标记
  • 在每个阿拉伯文本和英文文本之间添加
  • ,在左侧标记为

  • 这是一个错误,因为Pango应该在查看文本时自动执行此操作,但是由于Pango没有这样做,因此您应该手动进行操作。

    10-08 02:21