过时的实现如何能够优雅地处理新版本的OpenType字体?

时间:2017-04-14 12:29:35

标签: fonts opentype

您可以在以下MS OpenType font file specification版本号部分找到以下文字:

  

读取表的实现必须包含检查版本的代码   数字,以便,如果和何时格式,因此版本   数字更改,旧的实现将处理更新的版本   正常。

假设有人编写了一个代码来读取版本1及更高版本的OpenType字体文件,该代码用于处理相同的字体文件,但是版本2.我无法想象它是如何“优雅地”成功,除非上述声明意味着必须在处理之前将代码更新为字体文件的最终版本。

1 个答案:

答案 0 :(得分:3)

你错误地“优雅”了“仍然解析字体文件”。规范的想法是有版本号,以便每个解析器显式检查版本号,继续解析它知道如何解析的版本,并在不知道如何处理的版本上正确地报告和确定性行为。

平滑:

  • 开始阅读表格
  • 将版本号读入表格结构
  • 检查版本号
  • 分支到已知版本号的解析函数
  • 报告无法继续解析未知版本号
  • 以确定的,记录的方式取消解析运行
  • 使用解析器的应用程序现在可以优雅地处理它们所处的“无法加载请求字体”的情况。

不优雅:

  • 开始阅读表格
  • 在解析器编写完成后,将字节读入反映最新OpenType表格式的结构中。
  • 最终会出现版本不匹配的损坏数据,可能会在那里发生硬件崩溃,然后由于访问了表格分配范围之外的内存。
  • 可能会提供损坏的数据和/或以后崩溃因为偏移错误
  • 可能崩溃使用解析器的应用程序,因为返回了损坏的数据,或者解析器崩溃很难杀死进程
  • 可能......等等。

没有期望解析器能够解析更新的OpenType表格格式,但绝对应该以优雅的方式与它们交易,检查版本是否匹配那些它知道如何使用,并报告无法解析它没有解析规则的数据,以及允许消费应用程序执行他们需要做的事情的干净退出。