这篇文章是从0到1自定义富文本渲染的原理篇之一,此外你还可能感兴趣:
更多内容欢迎关注公众号:非专业程序员Ping
- 一文读懂字符与编码
- 一文读懂字符、字形、字体
- 一文读懂字体文件
- 从0到1自定义文字排版引擎:原理篇
- 逆向分析CoreText中的字体级联/Font Fallback机制
- 新手小白也能看懂的LLDB技巧/逆向技巧
- 深入理解iOS CoreText API
引言
前面我们讲解了字符与编码,知道了Character与Unicode的关系和区别,也介绍了字符(Character)、字形(Glyph)、字体的区别,并通过实际解析一个Font文件,真正了解到了Font文件中有什么;如果你对这些概念还熟悉,推荐先阅读前面几篇文章打好基础。
作为程序员,日常和文本打交道肯定最多,不知道你是否深入想过这样一个问题:
一段中英日等多国混排的文字,系统(排版引擎)是如何知道怎么排布每个文字的,特别是不同国家的语言排版规则不同,比如中文、英文是从左向右排列,阿拉伯文是从右向左排列的;阿拉伯文会有连字(ligature),中文没有连字;更细节的,为了增强文本的可读性和美观性,系统一般还会将文字紧凑处理(kerning)、连字处理(ligature)等,排版引擎在其中到底做了哪些事情,每一步的基本原理又是怎么样的,本文将带你逐步揭开排版引擎的神秘面纱。
通过本文,或许你也能自定义一个文字排版引擎了。
一、文本预处理/Unicode归一化
在字符与编码一文中,我们知道同一个字符可能对应多个code point,比如
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |