2017-08-28 29 views
1

PostScript包含过程集(ProcSets)。 过程集是包含命名过程和操作符的字典。PostScript过程集和资源存储在哪里?

这些程序集按类别排列。 现在这些类别存储在哪里?

  1. 哪里是(常规)资源存储? (例如字体,CIDFont,CMap,ProcSet,...)
  2. ProcSet的类别存储在哪里?

你需要systemdict只是两个额外的词典

更新1(localDict和globalDict存储资源,或者究竟是这些存储?):

(KENS的答案后)好的,也许现在的第一个问题应该是。资源如何存储在解释器中。

从我的理解是,有可能是这样的结构:

Resources (Dictionary ??? is this local or global or ...?) 
- Font (Dictionary) 
- CIDFont (Dictionary) 
--- CIDFontType (integer) 
--- CIDFontName (name) 
--- CIDSystemInfo (dictionary) 
--- FontBBox (array) 
--- FontMatrix (array) 
--- FontType (integer) 
--- ... 
--- ... 
- CMap (Dictionary) 
- FontSet (Dictionary) 
- Encoding (Array) 
- Form (Dictionary) 
- Pattern (Dictionary) 
- ProcSet (Dictionary) 
--- BitmapFontInit (Dictionary) 
--- CIDInit (Dictionary) 
--- ColorRendering (Dictionary) 
--- FontSetInit (Dictionary) 
--- Trapping (Dictionary) 
- ColorSpace (Array) 
- ... 
- ... 
- Category (Dictionary) 
--- Generic (Dictionary) 

大多数是存储在VM字典。在本地VM或全局VM中。

难道这些资源也加入了UserDict和globaldict,因为:

  • 如果存储在本地虚拟机的东西是最有可能加入到了UserDict。
  • 如果您在全局VM中存储了某些内容,则很可能会将其添加到globaldict中。

看到PostScript语言参考手册3(第66页第3章):

的字典的UserDict和globaldict旨在是为应用程序定义的词典等 对象 主存储库。当PostScript程序在本地VM中创建字典时,它通常会将该字典与userdict中的名称关联起来。 同样,当程序在全局VM中创建字典时,它通常会将该字典与globaldict中的名称关联起来。

所以最简单的将创造200点字典:“MyLocalResources”,并在第一储存在UserDict中,另一个在globaldict“MyGlobalResources”。 这两个字典将包含类别(字体,CIDFont,ProcSet等)。

查找资源运算符是一种机制,你必须实现自己将看看这两个字典之一。

这是正确的吗?

FontDirectoryGlobalFontDirectory是这些实际上是局部和全局的“字体”资源类的实现?

回答

1

OK首先程序集是而不是按类别排列,它们是任何其他资源。所以你可以通过名字和类别来引用它们(这里的类别是ProcSet)。

存储资源可以存储在任何方便执行的地方。通常这是在磁盘上,但它不一定是;例如Ghostscript可以将其标准资源存储在ROM文件系统中。

一旦实例化,无论是通过从PostScript程序创建定义,还是通过查找和实例化指定的资源,资源都存储在VM中。

我不明白,你需要在localdict或globaldict任何额外的条目,因为findresource可以使用任何机制要定位资源(注意字体的行为有所不同,有规律可循那里)

说实话,ProcSet资源或多或少毫无意义,它的唯一用途是允许PostScript程序生成器在每次生成新的PostScript程序时避免向解释器发送它们自己的ProcSet定义。

显然,这只适用于工作流程紧密的地方,您可以在这里控制PostScript的生成方式。这很少见。对于大多数应用程序ProcSet,每次发送ProcSet的开销与程序的其余部分相比非常小。我想这当时似乎是个好主意。

[交的问题编辑]

只要你遵循PLRM定义的规则,它取决于你如何定义资源。例如,Ghostscript确实定义了两个“实例”字典,一个用于全局虚拟机,另一个用于本地虚拟机实例,这些字典是在localdict和globaldict中定义的IIRC。您可以通过阅读/ghostpdl/Resource/Init/gs_res.ps来了解更多关于实现方式的信息,您可能会发现一些评论很有帮助。特别是有关复制通用资源类别实现的注意事项。

对于FontDirectory和GlobalFontDirectory是Font类实例的实现是完全合理的,虽然没有实际的要求,我不认为。很显然,在这种情况下,您必须先在这些字典中查找现有实例的字体类别findresource实现。另一方面,如果你没有这样实现,那么你必须保持FontDirectory和GlobalFontDirectory与字体类别实例的实现同步,这可能很尴尬和浪费。

由于历史原因,字体和大多数其他资源一样,都是与其他资源有所不同,并且与早期的PostScript版本具有向后兼容性。

不要忘记隐式资源实现。