Introducing otfcc

尽管 node-sfnt 本身十分适合在 Node 中处理 ttf,然而我还是不满意,主要是两点:

  • node-sfnt 只能读取 CFF,无法写入 CFF;
  • node-sfnt 对于 OpenType Features 完全不支持;
  • node-sfnt 的性能很成问题,处理大文件非常慢,偏偏 Inziu Iosevka 的文件的都不小

综合这三点之后,经过和李阿玲的讨论,决定使用 C 制作两个单独的程序,用来处理 OpenType 格式的序列化和反序列化:

  • otfccdump 用来将 SFNT 转化为 JSON。JSON 中将不包含不必要的数据。
  • otfccbuild 则反过来,将 JSON 编译成 SFNT 字体,并且尽可能地优化之。

写 C 和 Nodejs 是不同的,后者把所有的杂活都给你包办了,而前者则需要认真处理,以及小心地抹平平台之间的差异。当然最后的效果还算是好的,otfcc 完整地处理了一遍 Inziu 的文件,而且比 ttx 快 50 倍。

源码参阅:caryll/otfcc