如何在freetype中呈现组合的unicode字符?

时间:2012-04-02 23:46:05

标签: unicode fonts freetype text-rendering unicode-normalization

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

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

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

如果用freetype无法正常完成,应该怎么做呢?

1 个答案:

答案 0 :(得分:2)

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

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