【问题标题】:How to properly display Hebrew in text widget?如何在文本小部件中正确显示希伯来语?
【发布时间】:2021-09-18 10:23:51
【问题描述】:

我正在使用 Manjaro Linux KDE 和最新版本的 Tcl 和 Tk,并试图在文本小部件中显示希伯来语。在测试中,希伯来文文本被粘贴到 Kate 文本编辑器中的 Tcl 脚本中,并以正确的顺序出现,从右到左带有复合字符。

在 Tcl/Tk 中不使用特定字体,文本从左到右打印并分离复合字符的组成部分,使得元音点和音节标记显示为单独的字符。使用SBL Hebrew font后,单词看起来更好,但元音点位置不正确,仍然从左到右书写。我尝试使用 \u200f\u200e 标记,但没有区别;但我真的不知道我在那里做什么,只是尝试在希伯来语单词上加上前缀和后缀。颠倒字符串有帮助,但元音点不与辅音结合。

我没有使用 Tkinter,但这个较旧的 SO post 似乎表明这是 Tcl 的 Linux 问题。

如果我使用 Tcl 从 SQLite 中提取希伯来语并使用 puts 将其写入命令行,它会正确显示。此外,如果我从 Tk 文本小部件复制反转的文本并将其粘贴到这个 SO 问题中,它会以正确的顺序显示。澄清一下,这里的反转不是指使用string reverse,只是它在 Tk 中出现反转,但是当粘贴到这个 SO 框中时,它显示正确。

你能告诉我我做错了什么以及如何让它正确显示吗?

我尝试关注document 关于 Tcl 国际化和编码的内容,但没有关注这会如何影响在文本小部件中显示希伯来语。我还遇到了一个网站,其中包含unicode editor 的代码,它显示了包括希伯来语在内的多种语言,但我也无法遵循该代码。我尝试运行代码,如果选择希伯来语,它会从右到左书写,但我看不到元音点或音标;但我对输入希伯来语不太了解。

谢谢。

.tw tag configure heb -font {"SBL Hebrew" 18 normal}
.tw insert end "בְּרֵאשִׁ֖ית" "heb"
# Also tried "בְּרֵאשִׁ֖ית\u200f" and "\u200fבְּרֵאשִׁ֖ית".
# and "בְּרֵאשִׁ֖ית\u200e" and "\u200eבְּרֵאשִׁ֖ית".
# Tried .t insert end [string reverse $h ] "heb", which order the 
# consonants but the vowel points and cantillation marks are not correct.

这是正确的渲染。

这是来自 Tk。第一个是正常顺序,第二个使用字符串反转。可以观察到,元音点不在辅音“上”,并且音标不正确。我对希伯来语知之甚少,但我可以看出它们不匹配,并且似乎被打印为单独的字符而不是组合。我认为看起来像“W”的希伯来字母下看起来像“t”的东西是两个相互重叠的字符——一个点和符号有点类似于正确渲染中的左括号。

我不知道为什么,但是在重新启动并安装下一批更新后,并不是说它们与 Tk 有任何关系,当没有设置字体时,渲染是不同的。但是,一旦设置了 SBL 希伯来语字体,字符就会如上所示被分开。

【问题讨论】:

  • 为此,您需要包含错误的屏幕截图。我怀疑问题出在字体渲染引擎上;我真的帮不上忙,因为我在使用完全不同的字体渲染器的 macOS 上。
  • @DonalFellows 谢谢。我添加了屏幕截图。我还没有在 Windows 上尝试过。我引用的一篇 SO 帖子声称它在 Windows 上按预期工作。

标签: tcl tk hebrew


【解决方案1】:

我可以告诉你,文本在 macOS 上使用 Tk 呈现的非常接近正确(我不确定只是字体差异有多少,而且我不喜欢下降装饰的一些剪裁,但我不认为这是 Tk 本身做错事)。

这意味着 这绝对是您看到的渲染错误。我怀疑这可能与输入渲染器的字符块的大小有关;如果renderer 的低级别一次只被赋予一个字符,那么他们就没有机会获得正确的整体布局或应用任何字符组合。我猜真正的问题是TkpDrawCharsInContext() 只是调用Tk_DrawChars(),如果我对 cme​​ts 的阅读是正确的。 (相比之下,macOS 渲染器在这里做了一些不同的事情。)

我没有解决方法。

【讨论】:

  • 这开始是一条评论,但需要比我在那个空间中容纳的要大得多(而且还可以放一张照片)。
  • 另外,希望该平台没有使用 tkUnixFont.c 中的 old 文本渲染器;这不太可能与组合字符或 RTL 脚本一起使用。它几乎不能与 ISO 8859-1 以外的任何东西一起使用……
  • 我可以再问一些吗?我在我的问题中添加了一个可以正确呈现的屏幕截图,但前提是没有专门设置字体。这是否意味着任何有用的东西?一旦我设置了 SBL 希伯来语字体,我所知道的唯一一种,字符就不再组合了。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
  • 2013-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多