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

Posted

技术标签:

【中文标题】HarfBuzz - 有没有办法获得特定字体的最大前瞻/回溯字形计数?【英文标题】:HarfBuzz - Is there a way to get max lookahead / backtrack Glyph Count of a specific font? 【发布时间】:2020-01-14 05:39:52 【问题描述】:

我们正在开发一个使用 HarfBuzz 处理 OpenType 的文本编辑程序。 当用户输入时,我们正在使用 HarfBuzz 对输入后的文本进行重新分析,因此我们将获得正确的 GSUB 等等。

我们希望尽可能分析较少的文本。

我们试图找到如何使用 HarfBuzz 获取有关特定字体的信息,有关在 OpenType 表中该字体的不同查找中定义的前瞻或回溯的最大长度。

有没有办法使用 HarfBuzz 获取“lookaheadGlyphCount”和“backtrackGlyphCount”。

在 LookupType 6 和 LookupType 8 上查看 Microsoft Documentation

编辑:

如需进一步说明,请参阅 TypeDrawers 上的此问题 - Here。

【问题讨论】:

我有点困惑...为什么要在 SO 上提供赏金而不是向实际维护 harfbuzz 的人提问?当您用尽所有选项时,SO 就在这里为您服务,并且发布到 github.com/harfbuzz/harfbuzz/issues绝对是您始终可以使用的选项。 @Mike'Pomax'Kamermans - 作为一个新用户,我打开这个问题可能不是在正确的位置。尽管在 GitHub 上看起来更像是维护 HarfBuzz 或 BUG 报告。我认为在 SO 上,由于 TAG 'HarfBuzz' - 这是询问'How To' 的正确位置。 请记住,您还遇到了缺乏文档:您想知道如何做一些非常具体和技术性的事情,但显然 harfbuzz 文档没有提到这是否可能: harfbuzz 的每个用户都可能会从您需要添加到文档中的信息中受益,因此即使它不是错误,您也绝对应该针对开源项目提出此类问题。他们的回答可用于改进文档,以便其他人以后不必问同样的问题。 按照您的建议,我的同事发布了一个关于此的问题:github.com/harfbuzz/harfbuzz/issues/1977 不错!这应该会给你带来很多好的 cmets 和帮助。 【参考方案1】:

有没有办法使用 HarfBuzz 获得“lookaheadGlyphCount”和“backtrackGlyphCount”。

不使用当前的 HarfBuzz 公共 API。

HarfBuzz 解析表并使用该信息,但出于某种原因没有公开它。您可以使用 HarfBuzz 私有 API 编写自己的解析器,但我已与 Behdad 交谈过,有理由不公开它,这可能是它的不可靠性或其他原因。

我还应该补充一下,这是字体的非常具体的细节,GSUB/GPOS 不是构建字体的唯一方式,有些字体没有这些,AAT morx/kerx 字体有不同的故事,所以我的建议是寻找其他缓存解决方案。

Firefox、Chrome 的旧版布局引擎和 Minikin 都在使用文字缓存的方法,https://github.com/linebender/skribo/issues/6 你也许也可以使用类似的东西,或者像 Chrome 的 LayoutNG 一样单独缓存每个段落。

【讨论】:

以上是关于HarfBuzz - 有没有办法获得特定字体的最大前瞻/回溯字形计数?的主要内容,如果未能解决你的问题,请参考以下文章

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

icu4c opentype harfbuzz 的区别

有没有办法以编程方式确定字体文件是不是具有特定的 Unicode 字形?

Django获得最大PK

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

为 iPhone 5 和 6 设置不同的字体大小