ghostscript - PostScript cvn 运算符

标签 ghostscript postscript

也许是一个奇怪的问题,不确定它是否有意义,或者我是否还没有达到正确理解它的正确学习点。

在 PostScript 中,您有 CVN 运算符。

(abc) cvn => /abc
(abc) cvx cvn => abc

现在,以斜杠开头的名称是文字名称,不带斜杠的名称是可执行名称(不谈论任何立即评估的名称)。

如果您在 GhostScript 中测试这两行,则此输出与预期一致。但我真正想知道的是,您看到的输出只是您看到的显示值(= .ToString())值。还是“/”斜杠也存储在名称值中?

例如,对象被存储为 (伪代码):

new Name {
  theName = "abc";
  isLiteral = true;
}
return ToString() { 
if (isLiteral)
 return "/abc";
//..

或者更确切地说:

new Name {
  theName = "/abc";
}
return ToString() {
  return theName;
}

最佳答案

名称仅仅是一个字符序列,如第 54 页的 PLRM 中所定义。存储细节无关紧要。

可以将字符串仅存储为字符,以及一些关联数据以将其定义为名称对象,而不是字符串对象。或者您可以存储带有字符和前面的“\”的字符串,这样您就知道它的名称。

它的文字或可执行文件是否是一个单独的属性。

我相信我所知道的所有实现都存储名称的字符没有前面的“/”,并单独维护确定其类型和属性的数据。通常这是因为它们维护一个“通用”数据类型,所有其他数据类型都源自该数据类型。

但是没有什么表明你必须这样做,而且实际上你不应该关心解释器如何实际存储对象,只要它的行为遵循规范。

可执行文件和文字之间的区别实际上与执行有关。如果我这样做:

/测试

然后我创建一个文字名称,然后将其推送到操作数堆栈(因为这就是我们对所有文字所做的操作)。但是如果我这样做:

测试

然后我创建一个可执行文件名称并执行它。

请参阅 PLRM“特定类型的执行”第 50 页第 3.5.5 节

关于ghostscript - PostScript cvn 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43537597/

相关文章:

token - PostScript 字符串标记

postscript - 一种在路径中的每条线上执行单独笔画的方法

asp.net - 使用 GhostScript 在服务器上将 PDF 转换为图像集合

windows - 让 Graphic Magick 检测 Ghostscript 以在 Windows 上阅读 pdf。如何将 WINDOWS CMD 上的 Ghostscript 调用名称更改为 'gs' ?

python - 无需在每一页上复制模板即可生成多页 PDF?

postscript - Postscript 中的宽虚线

c - 如何像 ghostscript 一样将 X11 键盘事件路由到标准输入?

linux - 鬼脚本字体

android - Android 的 Postscript 驱动程序?

PDF 到 PostScript 使用 Ghostscript : large files having issues printing