包裹在pango的词用混杂的脚本

时间:2015-12-09 18:47:20

标签: text unicode arabic unicode-string pango

我有一个使用pango的文本框实现。如果我把一个以从右到左的脚本开头的字符串,后跟一个空格,然后是从左到右的脚本中的单词,那么pango使用的自动翻译就会搞乱(使用{{1} })。对于字符串العربيةENGLISH ,我得到以下内容:

Bad word wrapping

如果我在空格后添加unicode字符PANGO_WRAP_WORD_CHAR,那么我得到预期的自动换行:

Expected word wrapping

另外,如果我用印地语替换上面的阿拉伯语脚本(从左到右,就像它旁边的英语​​一样),那么我仍然会遇到问题,所以它似乎不是严格的左 - 对,从右到左的事情。在印地语的情况下,我放入一个hack,在解决问题的空间之后插入一个U+200F

这是pango中的错误吗?是否有我可以尝试的解决问题的通用解决问题但不打破其他情况?我正在使用的当前工作基于字符串中前一个强配置字符的方向在每个空格后插入0x200E0x200E,但我不确定是否存在某些字符串这会导致问题。

更新:我能够使用gedit在Ubuntu 12.04上重现此问题(使用启用文本环绕不启用两行分割字设置)。我只是一遍又一遍地输入0x200F,直到它被包裹多次,然后用Hello world替换world的所有实例,并且所有内容都折叠为一行。

3 个答案:

答案 0 :(得分:5)

符号U+200FU+200E是左右标记和左右标记。 S:

  • 在每个英文文本和阿拉伯语文本之间,放置一个左右标记
  • 在每个阿拉伯语文本和英文文本之间,放置一个左移标记

这是一个错误,因为Pango应该自动查看文本但是Pango不这样做,你应该手动完成。

答案 1 :(得分:3)

在我看来,它是一个错误或不完整的功能,因为它出现在混合脚本上。

对我来说,你正在使用旧的pango开发,可能来自Ubuntu 12.04?

Ubuntu 12.04 contains Gedit 3.4
Ubuntu 15.10 contains Gedit 3.10

Pango在3.6中发生了根本性的变化,它已经用HarfBuzz取代了他的塑造引擎。 [2]

我无法使用Gedit 15.10重现该错误,它总是向下移动(2)两个单词,也不允许我调整窗口大小以尝试拆分这两个单词。见屏幕截图。

pango shaping mixed scripts in gedit

<强>更新

它的行为似乎发生了变化:

  • 从阿拉伯语开始时,它不会从英文脚本中包装第一个单词。

    pango-view  --text "وقعت أطراف سياسية ليبية اليوم في المغرب اتفاق سلام برعاية أممية aljazeeranet" --width=70 --margin=0 --wrap=word 
    

    enter image description here

  • 与前一种情况相同,不包装,并强制执行宽度

    pango-view  --text "elections الجزيرة" --width=30 --margin=0 --wrap=word
    

    enter image description here

<强>参考文献:

答案 2 :(得分:0)

注意,我们最近升级了我们使用的pango版本,从pango版本1.36.1升级到1.38.1,这个问题就消失了。所以我相信这是pango或harfbuzz中的一个错误,已经修复过了。