【发布时间】:2013-04-26 09:35:17
【问题描述】:
我有一个关于 PostScript 中的当前图形状态和图形状态堆栈的问题。
在我的代码中,我现在有一个代表当前图形状态的堆栈。 当我初始化我的解释器时,它会创建一个新的 GraphicsState 对象并将其添加到“gsstack”中。
我的当前图形状态被实现为:'gsstack'.Peek(),它总是返回最顶层的图形状态。
使用 gsave 操作符创建当前图形状态的克隆并将其推送到“gsstack”上,因此我在堆栈上有一个新的最顶层图形状态(这意味着我有一个新的当前图形状态对象)。
现在有了 grestore,我从 http://www.tailrecursive.org/postscript/operators.html#grestore 读到了这篇文章
“将当前图形状态设置为图形状态堆栈上的最顶层图形状态,并将该状态从堆栈中弹出。”
grestore 是如何工作的,因为我当前的图形状态已经是最顶层的图形状态...我应该将它从堆栈中弹出吗?
还是我的实现有误? 当我初始化我的解释器时,我是否应该创建一个新的 Current Graphics State 对象,但不将其添加到“gsstack”中,并且仅在调用 gsave 运算符时将其推送到“gsstack”?
提前致谢
【问题讨论】:
-
使用正确的 PostScript 参考手册adobe.com/products/postscript/pdfs/PLRM.pdf 不是第三方教程
-
"最顶层的图形状态始终是当前图形状态。"令人困惑的信息stackoverflow.com/a/11139870/187650
-
如果它对你有用,我有一个几乎完整的 C 级 1 级解释器可用 here(它缺少一些真正困难的运算符,如
definefont。)跨度>
标签: stack interpreter postscript