非专业程序员

努力做专业的事!

HarfBuzz概览

HarfBuzz概览

本文概述 本文主要介绍: 1)什么是HarfBuzz 2)HarfBuzz名称来源 3)为什么需要HarfBuzz 4)HarfBuzz能做什么 5)HarfBuzz不能做什么 6)哪些平台在使用HarfBuzz 可以直接跳转感兴趣部分阅读。 一、什么是HarfBuzz HarfBuzz 是一个用 C++ 编写的文字塑形引擎(Text Shaping),即将字符序列转换成...

深入理解iOS CoreText API

iOS自定义富文本渲染基础篇

这篇文章是从0到1自定义富文本渲染的原理篇之一,此外你还可能感兴趣: 一文读懂字符与编码 一文读懂字符、字形、字体 一文读懂字体文件 从0到1自定义文字排版引擎:原理篇 逆向分析CoreText中的字体级联/Font Fallback机制 新手小白也能看懂的LLDB技巧/逆向技巧 更多内容可订阅公众号「非专业程序员Ping」,文中所有代码可在公众号后台回复 “...

新手小白也能看懂的逆向技巧

介绍常用逆向技巧与思路

引言 在我们日常工作中,难免会遇到一些Crash等疑难问题需要查看系统实现,有时候在做一些高级定制功能时,比如自定义富文本渲染等,也需要查看系统是怎么做的;特别是对于iOS程序员来说,由于Apple的闭源生态,遇到以上问题基本只能靠逆向手段来逐步分析。学会汇编和逆向,可以说是一个程序员从入门走向进阶的第一步。 前面我们通过逆向手段分析了CoreText中的字体级联/Font Fallba...

【持续更新】新手必备!!如何白嫖逆向工具

IDA、Hopper...

引言 工欲善其事,必先利其器。 前面我们通过逆向手段分析了CoreText中的字体级联/Font Fallback机制,用到了Hopper、IDA等逆向工具,但接触过的小伙伴应该知道,这些逆向工具都是收费的,即使有免费试用,比如Hopper,但也只能试用半个小时,逆向分析时,每次刚分析出一点头绪就重启了,很是打断思路。 本文将整理这些资源,确保我们在分析过程中,能顺畅使用!! 文中所...

CoreText Font Fallback

CoreText中的字体级联/Font Fallback机制

一、引言 本文基于Xcode 16.4,iOS 18.5模拟器分析,不同系统版本可能有区别。 前面我们介绍了自定义文字排版引擎的原理,其中有一个复杂部分是字体Fallback,本文将通过逆向手段分析CoreText中CTFontCopyDefaultCascadeListForLanguages的实现,通过了解系统的字体回退实现,可以帮助我们实现更好的生产级别的文字排版引擎。 ...

从0到1自定义文字排版引擎:原理篇

排版引擎原理、自定义排版引擎

引言 前面我们讲解了字符与编码,知道了Character与Unicode的关系和区别,也介绍了字符(Character)、字形(Glyph)、字体的区别,并通过实际解析一个Font文件,真正了解到了Font文件中有什么;如果你对这些概念还熟悉,推荐先阅读前面几篇文章打好基础。 作为程序员,日常和文本打交道肯定最多,不知道你是否深入想过这样一个问题: 一段中英日等多国混排的文字,...

一文读懂Font文件

深入介绍Font文件内容

一、引言 在开始阅读本文之前,推荐先阅读字符(Character)、字形(Glyph)、字体的区别理解基本概念。 如果你对字符与Unicode的相关概念还不理解,推荐阅读字符与编码 前文,我们介绍了字符(Character)、字形(Glyph)、字体的区别,这里我们再来实际分析一个字体文件中到底有什么,这有利于我们后续理解文字排版引擎的工作原理和流程。 macOS上系统字...

Typora激活

Typora激活

参考了网上关于Typora的激活方式,修改hasActivated="true"==e.hasActivated为hasActivated="true"=="true",在新版本(V1.11.7)已经不生效,研究了下发现另外一种规避方式,本文记录下。 MacOS上找到:/Applications/Typora.app/Contents/Resources/TypeMark/page-dis...

一文读懂字符、字形、字体

Character、Glyph、Font的区别

一、引言 什么是Character?什么是Glyph?Character和Glyph是否一一对应?我们常说的Font又包含哪些东西?如果要自己实现一套文本的分词、测量和布局,又需要理清楚哪些概念?ascent、descent、lineHeight之间的关系是怎么样的? 本文将尽量以简洁易懂的方式来解释以上问题,也可以提前Mark起来,作为日后的速查手册。 二、Character Ch...

第一个Flutter应用

Flutter环境搭建、应用编写与构建

一、环境搭建 添加Flutter镜像: export PUB_HOSTED_URL=https://pub.flutter-io.cn export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn 下载Flutter SDK:https://docs.flutter.cn/install/archive 添加Flutte...