2017-08-28 6 views
1

PostScriptにはプロシージャセット(ProcSets)が含まれています。 プロシージャーセットは、名前付きのプロシージャーと演算子を含む辞書です。PostScriptプロシージャセットとリソースはどこに保存されていますか?

これらの手順セットはカテゴリで構成されています。 ここで、これらのカテゴリはどこに保存されていますか?

  1. (通常の)リソースはどこに保管されていますか? (フォント、CIDFont、CMap、ProcSetなど)
  2. ProcSetのカテゴリはどこに保存されていますか?

あなたはsystemdictでちょうど2つの追加の辞書必要です

UPDATE 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のいずれか。ローカルVMで何かを保存する場合、それが最も可能性の高いuserdictに追加され

  • :ので

    は、これらのリソースは、userdictとglobaldictにも追加されます。

  • グローバルVMに何かを保存すると、globaldictに追加される可能性が高くなります。

ポストスクリプト言語リファレンスマニュアル3(66ページの第3章)を参照:

辞書userdictとglobaldictは、アプリケーション定義辞書および他 オブジェクトの 主要リポジトリであることが意図されます。 PostScriptプログラムがローカルVMに辞書を作成すると、 は通常、その辞書をuserdictの名前と関連付けます。 同様に、プログラムがグローバルVMにディクショナリを作成すると、通常 はディクショナリをglobaldictの名前に関連付けます。

「MyLocalResources」と「MyGlobalResources」という2つの辞書を作成するのが最も簡単なのは、最初のものがuserdictに、もう1つがglobaldictに格納されている場合です。 これらの2つの辞書には、カテゴリ(フォント、CIDFont、ProcSetなど)が含まれます。

にfindResourceオペレータは、これらの2つの辞書のいずれかになりますあなた自身を実装する必要がメカニズムです。

これは間違いありませんか?

FontDirectoryGlobalFontDirectoryこれらは実際にはローカルとグローバルの「フォント」カテゴリリソースの実装ですか?

答えて

1

OK最初に手順セットはではなく、はカテゴリに配置されていますが、他のリソースと同様です。だからあなたは名前とカテゴリ(ここではCategoryはProcSetです)でそれらを参照します。

格納されたリソースは、実装に便利な任意の場所に格納できます。通常これはディスク上にありますが、必ずしもそうである必要はありません。例えば、Ghostscriptは標準のリソースをROMファイルシステムに格納することができます。

PostScriptプログラムから定義を作成した場合でも、名前付きリソースを見つけてインスタンス化した場合でも、リソースはVMに格納されます。

にfindResourceがリソースを検索するためにあなたが好きなメカニズムを使用することができますので、私は

(フォントは少し異なる振る舞いをし、そこに従うべきルールがあることに注意)、あなたはlocaldictまたはglobaldict内の任意の余分なエントリを必要としていることがわかりません

正直なところ、ProcSetリソースは多かれ少なかれ無意味です。唯一の目的は、PostScriptプログラムジェネレータが、新しいPostScriptプログラムを生成するたびに、ProcSet定義をインタプリタに送信しないようにすることです。

明らかに、これは厳密なワークフローでのみ動作し、PostScriptの生成方法を制御できます。これはかなりまれです。ほとんどのアプリケーションProcSetsのたびにProcSetを送信するオーバーヘッドは、プログラムの残りの部分と比較してかなり小さいです。私はそれが当時の良いアイデアのように思えた。

[ポスト質問編集]

あなたはPLRMで定義されたルール、あなたはリソースを定義どのようにそのフォローアップ提供。たとえば、Ghostscriptは、グローバルVM用とローカルVMインスタンス用の2つのインスタンス・ディクショナリを定義します。これらは、localdictとglobaldictで定義されたIIRCです。 /ghostpdl/Resource/Init/gs_res.psを読むことで、これがどのように実装されているかを知ることができます。特に、Generic Resource Category実装のコピーに関する注意事項。

FontDirectoryとGlobalFontDirectoryがFont Categoryのインスタンスの実装であることはまったく合理的ですが、実際の要件はありませんが、私はそれを考えません。当然のことながら、その場合は、Font Category findresourceの実装に、まずそれらの辞書を既存のインスタンスで探す必要があります。一方、それを実装しない場合、FontDirectoryとGlobalFontDirectoryをFont Categoryインスタンスの実装と同期させておく必要があります。これはおそらく扱いにくく無駄です。

フォントは、以前のPostScriptバージョンとの歴史的な理由から、そしてほとんどの他のリソースとは少し異なります。

暗黙的なリソースの実装を忘れないでください。

関連する問題