gpt4 book ai didi

dictionary - 什么是 PostScript 词典,如何访问它们(通过 Ghostscript)?

转载 作者:行者123 更新时间:2023-12-04 09:04:24 25 4
gpt4 key购买 nike

我一般看ghostscript作为命令行工具;然而,我一直对那里存在的大量设置和选项感到惊讶 - 这是由于 ghostscript 的事实。是一个成熟的 PostScript 语言解释器(我经常忘记)。

例如,在 Querying Ghostscript for the default options/settings of an output device (such as 'pdfwrite' or 'tiffg4') ;学习如何检索给定输出设备的默认选项。但是,我想知道的是 - 这些选项是否与所谓的 PostScript 词典有关?

或者,换句话说 - 什么是 PostScript 词典;还有什么设施ghostscript有,查询(并可能)修改这些数据?

最佳答案

用最简单的术语来说: 在 PostScript 中,字典是键(名称)+ 值对的列表。 字典允许 PostScript 解释器查找键是否存在并获取其值以在任何过程中使用它。解释器还可以创建键、存储或修改值,甚至创建完整的自定义词典(由其处理的 PostScript 代码决定)。键通常是名称类型(但它们也可以是任何其他类型,空值除外)。

对于 PostScript 解释器的任何实现,这些字典中的两个必须始终存在:

  • systemdict
    这个拥有预定义的 PostScript 运算符(以及使它们执行 PostScript 规范所期望的操作的实现)。
  • userdict
    这个保存 PostScript 程序的变量和过程(将“过程”视为由语言定义的运算符和程序定义的值和参数的组合构成的函数或子例程)。

  • 关于名称的一个词:名称对于其他编程语言来说是 uniq 标识符(并且它们区分大小写)。这些标识符可以是变量或过程名称。它们可以由 256 个 ASCII 字符的任意组合组成(但它们不是字符串)。

    您可能知道,PostScript 是一种面向堆栈的语言。它使用几个堆栈:
  • 操作数栈
    该堆栈保存每个操作数和中间操作的每个结果(将最后一个结果临时转换为操作数堆栈的最顶部元素)。
  • 字典堆栈
    顾名思义:这个堆栈只保存字典。因此,堆栈定义了任何键/名称查找的当前上下文。
  • 执行栈
    这个持有可执行对象,即主要是当前正在执行的过程和文件。如果解释器中断了当前对象的执行,它会将被中断的对象放到这个堆栈中。一个对象被完全执行后,它会从堆栈中移除,然后继续执行现在最顶端的那个。
  • 图形状态堆栈
    该堆栈承载用于弹出图形元素的当前上下文:当前线宽设置、当前字体、当前颜色或灰度值、当前路径...当前图形状态可以被保存( gsave )和恢复( grestore pop _code)之后。最顶层的图形状态始终是当前的图形状态。

  • 所有这些堆栈都是相互独立的。但是,操作数、字典和图形状态堆栈都在 PostScript 程序的控制之下(即可能被它操纵)。执行堆栈是解释器的唯一属性。

    对于每个堆栈都有一定的限制(至于可以存储在其上的元素数量等)。 PostScript 知道可以操作堆栈的运算符:将一个新元素放在堆栈上,删除最顶部的元素( dup ),复制最顶部的元素( roll _0x104567 的 order of the stack of the order 10104567个元素) exch
    ),交换两个顶级元素( dict ),以及更多(对 PostScript 编程的一个很好的介绍是来自 Adob​​e 的“蓝皮书”)。

    正如我已经说过的,字典有自己的堆栈,其中包含 PostScript 解释器可能使用的所有字典。

    在该堆栈上可能有一个单独的字体字典,或者 PostScript 程序想要创建的任意数量的字典(使用 systemdict 关键字)并私下使用,或者某些特定于某个 P​​ostScript 解释器的字典,例如 Ghostscript .
    userdict 总是最底层的;上面是 pop 。这两个不能从字典堆栈中删除,其中所有其他的都可以受任何堆栈操作运算符的影响(例如 userdict 从堆栈中删除最顶层元素)。

    每当解释器查找名称时,它都会从最顶层的字典开始搜索该名称的字典。因此 systemdictsystemdict 之前被搜索。一旦找到名称(一个键),解释器就会停止搜索并使用该键(或者更确切地说,它拥有的值)。这种架构的结果是 PostScript 程序员可以用他自己的变体覆盖在 userdict 中预定义的任何 PostScript 运算符。

    此外,某些词典可以用于 PS 程序的“私有(private)”(无访问权限,例如字体词典)或“只读”。

    更新 -- 更多答案:
  • How can I obtain a list of other dictionaries contained in systemdict or ojit_code ?
  • How can a Ghostscript power user print out dictionary contents?
  • 关于dictionary - 什么是 PostScript 词典,如何访问它们(通过 Ghostscript)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11137732/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com