1

我似乎在文档中找不到任何关于此的信息,一直使用的函数是 FT_Get_Char_Index(ftFace, i);,它只需要 1 个 unicode 代码点。但是组合字符,那些占用多个代码点的字符呢?

我知道其中一些字符可以简单地进行 unicode 规范化以表示为另一个(单个)代码点,但是有些字符不能,对吗?我们如何处理这些?

我正在制作一个通用的文本编辑软件,并希望它支持所有的 unicode。但也许这个问题与多代码点字符太小以至于不值得麻烦?这些字符在一些主要的亚洲语言中不是很常见吗?

如果不能用freetype正确完成,应该怎么做?

4

1 回答 1

2

如果我理解正确,如果不另外使用某种布局库,你将无法做你想做的事。布局库使用 OpenType 字体中的补充信息来定位组合标记(以及许多其他内容)。例如,假设您有序列 U+0041、U+0301(拉丁文大写 A,结合 Acute Mark)。一般来说,您不能将这两个与它们在渲染空间中的默认位置一起拍打,因为 Acute Mark 会与“A”的形状发生碰撞。

布局库将分析此序列的字体的 OpenType 布局表,并返回可用于正确定位序列中每个项目的定位信息。因此,例如,你给它一个序列,它可能会说,“将'A'留在原处;将锐角向右移动 50 个单位,向上移动 90 个单位”(它比这复杂得多,但希望能给你这个想法)。

于 2012-04-29T15:39:29.570 回答