TeX的iOS图形驱动(2022/08/01)
这里来讲我一个昨天测试的例子。先上代码:
这代码是网上抄的。作用是绘制shading,或者称作gradient。那么效果如此:

然后,我看了一眼Texpad的效果(起码的对标对象嘛):

这是图形驱动没写好啊。熟悉图形学和PDF的人应该知道,这里面的绘制,是先画文字,然后取文字轮廓作为clip的来源,然后再绘制shading。除去细节不谈,Texpad的渲染的问题在宏定义里面的special处就出现了:
这个special是告诉PDF解释器,绘制文字的时候要将文字轮廓放到clip path中去。
Swift包的Core Graphics的API,虽然有时候比OC版的难用,但也不是不能用。大的原则,其实就是按PDF的逻辑(字节码)顺序来写。我用swift playgrounds写了一下,大概如此:

代码很乱,但是有效果如此,是能做出来的。
在iOS或者macOS上写图形图像的东西,如果知道PDF的细节,那么理解Core Graphics就很容易了。因为他们图形图像模型是一致的。当然,不读PDF的Reference也可以,读一本老书也可以:

TikZ以及诸多图像包的支持,是我这App的开发重点。还好以前用Cairo写过一版驱动啊,用Core Graphics,还是有熟悉感的。
有网友问我的App支不支持EPS。这事嘛,macOS上面有一个PSNormalizer.framework,可以将PS转换为PDF。但是在iOS上,应该是不存在这个库的,所以,原生支持(省事的)是不存在的。可能的做法有俩,一个是买GhostScript的商业版授权,或者重写出一个PostScript来。前者价格不明,后者需要App带来足够的收入。
我去年写过一个简易版的PostScript解释器,但是用途比较简单,一是为了解析Type 1字体以及诸多的cmap文件,二是给PDF解析库做hook。基础是有的,但是想要更多的PostScript支持,还是需要一定的工作量的。