使用DirectWrite进行部分连字选择

时间:2018-01-26 13:17:28

标签: opentype directwrite ligature

使用HitTestTextPosition中的IDWriteTextLayout样式API,我无法正确处理“ti”,“ffi”或其他带有Calibri等字体的连字文本位置。它总是在结束之后或之前返回位置,而不是像t | i或f | f | i那样返回位置。

使用DirectWrite API在连线内进行插入符号移动的推荐方法是什么?

1 个答案:

答案 0 :(得分:0)

如果你打开GSUB替换,那么......没有“内部”位置吗?

Opentype GSUB连字是代码点序列的单字形替换,映射,而不是“几个字形,一起刷”。它们是字面上不同的单个字形,具有单个边界框,以及用于光标放置/对齐的单个左侧和右侧轴承。如果你有文本A + E并且字体有一个连字替换,将其变为Ӕ,那么在启用连字的情况下,该代码序列中只有两个光标位置:和{{ 1}}。你不能把光标“放在中间”,因为没有“中间”;它是一个单一的,原子的,不可分割的字形。

Ӕ|f.连字也是如此:这些是单个字形,一旦打开GSUB形状。这实际上是假设发生的事情,启用GUBS替换意味着您明确希望文本被呈现 - 用于所有意图和目的 - 因为它具有许多原子字形一对一替换,比如将完整的短语“صلىاللهعليهوعلىآلهوسلم”及其变体转换为单个字形ﷺ。

如果您想使用基本代码点序列,那么如果您的文字包含,则不会将其转换为f + f + i,您需要使用{加载{ {1}}禁用OpenType功能。