我似乎无法在文档中找到有关此内容的任何信息,因此一直使用的函数是FT_Get_Char_Index(ftFace,i);,它只需要1个unicode代码点。但是组合字符怎么样,那些占用多个代码点的字符呢?
据我所知,其中一些字符可以简单地进行unicode规范化,以表示为另一个(单个)代码点,但有些字符不能,对吧?我们如何处理这些问题?
我正在制作一个通用的文本编辑软件,并希望它支持所有的unicode。但也许多码点字符的这个问题很小,以至于不值得麻烦?在一些主要的亚洲语言中,这些字符不是很常见吗?
如果用freetype无法正常完成,应该怎么做呢?
答案 0 :(得分:2)
如果我理解正确,如果不另外使用某种布局库,你将无法做你想做的事。布局库使用OpenType字体中的补充信息来定位组合标记(以及许多其他内容)。例如,假设您有序列U + 0041,U + 0301(拉丁文大写字母A,组合急性标记)。一般来说,你不能只将它们与它们在渲染空间中的默认位置一起拍打,因为急性标记会与'A'的形状碰撞。
布局库将分析此序列的字体的OpenType布局表,并返回可用于正确定位序列的每个项目的定位信息。因此,举例来说,你给它的序列,它可能会说,“将'A'留在原处;向右移动50个单位,向上移动90个单位”(这比这复杂得多,但希望能给你这个想法)。