我在this文档中看到FontConfig工具“透明地基于字形覆盖”进行字体回退.
所以问题是:
>这个算法究竟是如何工作的?
>这是大多数浏览器使用的标准算法 – webkit,gecko(可能不是IE)?
>如果字体回退基于存在的字体中缺少的字形与CSS字体回退(指定哪些字体依次使用,当字体完全丢失)有何关系?
编辑:我找到了this文档,它解释了FontConfig的“内容”,但没有解释“如何”.问题1是关于“如何”.
总结一下 – 这篇文章只与一件事有关 – 当字体中缺少字形时,字体回退是如何工作的.
解决方法
> CSS规范,它提供了用于回退的字体,以及
>文本引擎,用于文本整形.
CSS规范在这方面相当简单,只是简单地使用系统名称给出字体列表,但是几种可能的“catch all”字体在计算机之间无法保证是相同的(没有理由假设例如,serif映射到Times或Times New Roman.
文本引擎使用的回退算法完全取决于引擎,但通常在字形查找步骤中启动:文本引擎看到一串代码点,并尝试使用字体来整形该字符串.对于序列中的每个点,它检查字体是否具有匹配的字形(通过查询CMAP表和子表),或者一个规则告诉引擎可能只有在跟随更多代码点时才使用字形,通过GSUB机制(例如,字母e,t和c中没有字形的字体,但是带有&字形的字符和表示序列等的GSUB规则应该用单字形&替换为in-text,),当它完成这种“点数单位”的累积时,它会对文本进行整形并将其交回任何要求它形成文本的内容.
如果,在字形查找期间,事实证明字体不包含任何让引擎形成特定代码点的内容(即通过CMAP数据运行以及GSUB规则仍然显示“没有字形”),那么文本引擎可以做两件事:
>放弃.没有字形,而是使用定义为字形id 0的.notdef大纲,并且通常为您提供带有可爱空盒子的文本(由字体伙伴亲切地称为“豆腐”)或问号.
>尝试字体回退,它将尝试使用另一种字体来查找不受支持的代码点的字形.
当使用回退时,引擎可以查看替代字体列表,直到:(a)找到字形,或(b)列表耗尽,此时引擎必须放弃,并将使用.notdef字形.引擎是否从原始字体或列表中的最后一个字体获取.notdef字形完全取决于引擎(尽管通常它会使用第一个字体,但易读性)
在任何地方都没有“标准”算法; font fallback基本上是文本引擎作者提供的一种便利机制,就像浏览器带有书签管理器一样(方便,而不是任何规范的一部分).就OpenType而言,没有要求引擎是否应该在找不到字形时提供.notdef,或者它是否应该提供它可以形成的部分,然后在其他地方找到缺少的字形,并且渲染那样的文字. CSS意味着您的文本引擎至少应该具有某种形式的字体回退,但它没有指定它应该如何工作,或者何时应该启动.