2026/4/18 1:25:28
网站建设
项目流程
如何申请com网站,dede 子网站,网络平台建设授权书实名认证,最新wordpress教程本文主要介绍#xff1a;1#xff09;什么是HarfBuzz2#xff09;HarfBuzz名称来源3#xff09;为什么需要HarfBuzz4#xff09;HarfBuzz能做什么5#xff09;HarfBuzz不能做什么6#xff09;哪些平台在使用HarfBuzz可以直接跳转感兴趣部分阅读。一、什么是HarfBuzzHarf…本文主要介绍1什么是HarfBuzz2HarfBuzz名称来源3为什么需要HarfBuzz4HarfBuzz能做什么5HarfBuzz不能做什么6哪些平台在使用HarfBuzz可以直接跳转感兴趣部分阅读。一、什么是HarfBuzzHarfBuzz 是一个用 C 编写的文字塑形引擎Text Shaping即将字符序列转换成字形序列Glyph。二、HarfBuzz的名称来源HarfBuzz的作者是Behdad Esfahbod贝赫达德·埃斯法赫博德HarfBuzz的命名最初来自于该作者对 OpenType 的波斯语翻译。三、为什么需要HarfBuzz我们回答清楚以下几个问题「为什么需要HarfBuzz」这个问题就理解了。1一段字符串从输入到上屏需要经历哪些过程可以用下面这张图概括详细的流程可以参考从0到1自定义文字排版引擎原理篇在这里插入图片描述图中红色部分就是HarfBuzz所能做的事情。Text Shaping/文本塑形就是将一串 Unicode 字符码点Codepoints根据字体中的规则转换为一串有序的字形Glyphs序列及其位置信息的过程。2为什么不能把字符串里的字符直接从字体文件里拿出来画在屏幕上在一文读懂Fon文件一文中我们知道了Font文件中存储着字符的位图信息那能直接取出每个字符的位图进行绘制吗答案当然是不可以举几个例子例子一在 Tamil泰米尔语语言规则中当字母“ட”后接元音符号“ு”时这一对字符必须替换为单个字形“டு”即字符序列 “ட,ு” 需要用字体中的单个“டு”字形来替代。例子二在配置了连字 feature 的应用中当遇到 f 和 i 相遇时在很多英文字体中会合并成一个单独的 fi 字形。以上这些连字、重排、字形替换等处理都是在Shaping阶段完成的。四、HarfBuzz能做什么1塑形沿用上面对塑形的解释HarfBuzz可以将一串 Unicode 字符码点Codepoints根据字体中的规则转换为一串有序的字形Glyphs序列及其位置信息。可以用下面这张图来概括HarfBuzz的塑形流程在这里插入图片描述图片来自https://mrandri19.github.io/2019/07/24/modern-text-rendering-linux-overview.html可以看出HarfBuzz的输入是字体文件 分段好的字符HarfBuzz的输出是字形信息Glyph、position、kerning等2字体处理除了核心的塑形功能HarfBuzz还提供了访问其他字体功能的函数比如GSUB和GPOS表可变字体彩色字体字体子集化等。五、HarfBuzz不能做什么1HarfBuzz 不会处理双向文本问题如果想排版LTR、RTL如希伯来语、阿拉伯语混排的字符串需要确保在提交给HarfBuzz的输入中字符串的顺序是一致的。也就是在将文本输入HarfBuzz之前需要进行分段。2HarfBuzz无法处理包含不同字体属性的文本比如对于字符串“a huge breakfast”其中“huge”希望是斜体那么我们需要向 HarfBuzz 分开发送三个字符串使用罗马字体的a使用斜体字体的huge以及再次使用罗马字体的breakfast。同样如果在字符串中包含不同的字体、字号、字体样式、语言或方向那么需要独立地对每个文本段进行塑形。HarfBuzz在处理字符串时要求字符串具有相同的属性。3HarfBuzz不会处理换行、连字符或对齐HarfBuzz会将字符串排列在一条理论上长度无限的单行上如果想找出文本中可能的单词、句子和换行点需要使用ICU库的断句函数。六、哪些平台在使用HarfBuzz在这里插入图片描述