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

3

一些背景信息: 我已经下载了这个示例并在我的Ubuntu上运行成功。一切都好。我将自己的OpenType字体放入项目中,也能正常工作!我确保HarfBuzz支持我的字体和语言。现在我需要更进一步。

我需要一些指导:

  1. 在上面的示例中,三种语言各自有自己的字体来支持显示。也就是说,在代码的理解下,这三种语言被单独渲染。

    那么,当多种语言混合在一起时,如何使HarfBuzz选择正确的字体并一次性呈现它们呢?我的意思是,不制作一个支持全世界所有语言的字体文件。

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

那么,我如何实现这一点?如何在不影响中文布局的情况下实现这一点?

3.最后但并非最不重要的是,在解决上述问题之后,我想制作一个文本编辑器来同时显示和编辑许多语言。我不知道是否需要在HarfBuzz或FreeType上进行一些工作,还是实现支持此复杂文本布局的文本编辑器?是否有任何可以参考的示例?

提前感谢您的帮助。


一张图片胜过千言万语。你能添加一张图片或者图片链接来展示它的样子吗?(因为如果你的意思和我想的一样,多行文本会造成可怕的影响) - Mike 'Pomax' Kamermans
我当时没有足够的声望在我的帖子中添加图片。现在我已经添加了那个示例的截图。顶部的文本是传统蒙古文,应该是竖向排列的,但由于竖向显示的问题(我不知道如何解决),它将无法正确显示。下面是拉丁文竖向排列。 - gone
我是说你能发一张你想要它看起来像什么的图片吗? - Mike 'Pomax' Kamermans
你需要找到一个带有vrt2表的字体,该表具有实现此目的所需的字形和垂直度量标准。你可能不想依赖于造型引擎来完成这个技巧,但请确保字体具有正确的垂直数据。 - Mike 'Pomax' Kamermans
不要担心字体的问题,因为字体包含了所有的排版指令,而排版引擎只是按照这些指令进行排版。如果你的应用程序使用正确的拉丁字体回退机制,那么Harfbuzz等工具就会按照你所展示的方式呈现拉丁文本。因此,关键在于确保你的应用程序简单地使用适合拉丁文的回退字体。 - Mike 'Pomax' Kamermans
显示剩余4条评论
1个回答

4
  1. HarfBuzz用于对同一脚本和方向的文本进行排版。您需要首先将文本分割,猜测或找到语言和方向(使用ICU或其他工具),然后将其发送到排版器。通常在Linux上查找正确安装的字体以支持某个脚本,可以使用fontconfig。

  2. 我不知道,建议您提出单独的问题。

  3. 从排版器开始制作文本编辑器并不容易。您需要处理双向文本、换行等问题,这些都有各自的挑战。我建议使用更高级别的抽象层(如pango)。例如,浏览器为此做了很多工作。


哈,非常感谢您的回答,我想我必须回到Pango并将Harfbuzz的东西保持原样。不能浪费时间重新发明轮子。 - gone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接