我编写了一些例程来解析CFF字体数据。
在处理hvcurveto
和vvcurveto
命令时,偶尔我会在堆栈上获得额外的项目。
对于这两个命令,堆栈深度应为
4, 5, 12, 13, 20, 21, ...
或
8, 9, 16, 17, 24, 25, ...
对于某些字体,我的堆栈大小为10.由于某种原因,还有一个额外的参数。
这是否表明我在处理前面的命令时犯了错误 - 或者是CFF字体常用的堆栈上的额外命令?
曲线命令位于子程序中,额外参数似乎传递给子程序。
似乎只要在CFF流的中间有提示命令而不是在开头就有额外的参数。
答案 0 :(得分:1)
根据CFF规范,堆栈中不应该有额外的项目 - 开始和结束堆栈标记显然是有原因的。
事实证明我没有正确处理提示掩码,这错误地将额外参数留在了堆栈上。