通过 Harfbuzz 和 FreeType 在文本编辑器中显示混合复杂脚本

Posted

技术标签:

【中文标题】通过 Harfbuzz 和 FreeType 在文本编辑器中显示混合复杂脚本【英文标题】:Display Mixed Complex Script in Text Editor via Harfbuzz & FreeType 【发布时间】:2014-06-23 21:18:13 【问题描述】:

这里有一些背景: 我已经下载了 this 示例并让它在我的 Ubuntu 上运行。一切安好。我将自己的 OpenType 字体放入项目中,它也可以正常工作!我确保 HarfBuzz 支持我的字体和我的语言。现在我需要更进一步。

我需要一些指导:

    在上面的例子中,三种语言都有自己的字体来支持显示。我的意思是,这三种语言是分开渲染的(就我对代码的理解而言)。

    那么,如何让HarfBuzz在多种语言混合在一起时选择正确的字体并一次渲染?我的意思是,没有制作支持世界上所有语言的字体文件。

    在这个例子中,中文脚本是垂直显示的(这正是我想要的),但是如果我将拉丁脚本的text_directions设置为HB_DIRECTION_TTB,这当然不是我想要的。我希望整个单词“拉丁”旋转 90 度。

那么,我该如何实现呢?如何在不破坏中文布局的情况下做到这一点?

3 .最后但同样重要的是,在解决了以上问题后,我想制作一个文本编辑器来同时显示和编辑多种语言,同一个地方。我不知道我是否需要在 HarfBuzz 或 FreeType 上做一些工作,或者实现一个支持这种复杂文本布局的文本编辑器?有什么可以参考的例子吗?

提前感谢您的帮助。

【问题讨论】:

我对“这当然不是我想要的”评论感到困惑 - 在日语或中文中,这正是您想要的:您不希望正常书写的单词但是旋转了 90 度。正确的行为将字母排列在彼此下方,您想要的是覆盖字体布局说明的东西。 是的,对于您的评论,日文或中文,这正是我想要的,但如果我想显示英文或其他拉丁语言,线条是垂直的,而字母保持直立 - 这就是我不想要。我可能没有清楚地描述这个问题,因为我的英语很差,对此感到抱歉。我想要实现的是垂直方向布局所有文本,中文或日文单词保持直立,拉丁字母旋转90 度。 一张图片胜过千言万语。您可以添加图像或链接到显示外观的图像吗? (因为在多行文本中,如果你的意思是我认为你的意思,那会做可怕的事情) 当时我没有足够的声誉在我的帖子中添加图片。现在我已经添加了该示例的屏幕截图。顶部的文字是传统的蒙古文,应该是垂直的,但是由于垂直显示的问题(我不知道如何解决),它不能正常显示。下面是垂直方向的拉丁文。 我的意思是你能张贴一张你想要它看起来像什么的照片吗? 【参考方案1】:

    HarfBuzz 只是在相同的脚本和方向性上进行整形,您应该首先拆分文本,猜测或找到该块的语言和方向(使用 ICU 或 smt 其他),然后将其发送到整形器。通常在 Linux 上为脚本查找正确安装的字体,您可以使用 fontconfig。

    我不知道,我建议为此提出单独的问题。

    从 shaper 开始制作文本编辑器并非易事。你应该做比迪烟、换行和……这些都有他们的挑战。我建议使用更高级别的抽象(pango)。例如,浏览器在支持这些方面做了很多工作。

【讨论】:

哈,非常感谢您的回答,我想我必须回到 pango 并保留 harfbuzz 的东西。我负担不起重新发明***的时间。

以上是关于通过 Harfbuzz 和 FreeType 在文本编辑器中显示混合复杂脚本的主要内容,如果未能解决你的问题,请参考以下文章

[HarfBuzz] HarfBuzz API 设计

HarfBuzz - 有没有办法获得特定字体的最大前瞻/回溯字形计数?

Harfbuzz 在字体文件中选择本地斜线字符

icu4c opentype harfbuzz 的区别

无法安装 Harf Buzz - 文本整形引擎

如何在 Visual Studio 中静态链接 FreeType2?