文書内容処理モデル

内容処理は、内容値を解析すること、 及びその結果得られるトークンの列を処理することからなる。 本来宣言的な性質をもつ構造表記法とは異なり、内容値は、 内容プロセサによって解釈される手続き型言語の形で文書内容を表現する。 内容値を処理することによって生じる効果は、 ある仮想機械を用いて記述される。 . ]]> 内容値及びそれに関連する解釈文脈は、 構造処理の過程においてに示すとおりに識別される。 次に、それらのデータが内容プロセサに供給される。

if the Content value is in Binary Content Representation and Interchange Format and in if the Content value is in Clear Text Content Representation and Interchange Format as indicated by the content notation specifier in the Content value. specifier --> identifier Content value --> Current Context of Interpretation ]]> 構造処理によって識別された内容値は、仮想機械によって解析され、 トークンの列に変換される。この変換は、現解釈文脈中の内容記法識別子に よって示されるとおり、内容値が2進内容表現交換様式で表されている 場合にはに示すとおりに行われ、平文内容表現交 換様式で表されている場合にはに示すとおりに 行われる。

トークン列の処理は、個々のトークンを解釈し、 そのトークンに関して規定されているとおりに 仮想機械の状態及び現ページ像を変更することからなる。 ある種のトークンは現ページ像に何の影響も与えないが、 他のある種のものは大きな変更を加える場合もある。 この複雑な活動をより正確に定義するため、幾つかの副モデルを用いる。

17.では、仮想機械、作画モデル及び座標系を定義する。 仮想機械は、内容の解釈過程全体をモデル化する。 作画モデルは、現ページ像の変更がどのように行われるかを定義する。 座標系は、現ページ像に影響を与える演算子群に対して座標を提供する。

この規格では、文書の組版に際して必要とされる能力を その提示装置がもっていなかった場合に実行すべき いかなるフォールバック処理も規定しない。 そのような動作は、装置の特性を試験するために内容演算子群を用い、 それらの試験結果に基づいて条件付きで内容手続き群を実行することによって、 SPDL文書中に含めることができる。

仮想機械

仮想機械は、内容処理の過程全体をモデル化する。 この仮想機械モデルは、 単に文書内容の意味を定義するためのモデルとして提供されている。 これは、文書内容プロセサの実際の実装方式について 指図しようとするものではなく、特定の実装における文書内容の意味の実現方法について 制約を加えようとするものでもない。

内容プロセサの仮想機械モデルは、次に示す構成要素からなる。

shows the components of the Virtual Machine and states the subclauses in which they are specified. ]]> に、 この仮想機械の構成要素と、それらを定義している箇条とを示す。 仮想機械

ここから17.1.15まででは、 仮想機械の構成要素について、さらに詳細な定義を与える。 最初に、個々の構成要素の定義に用いる幾つかの概念を導入し、 その後で、各構成要素そのものを定義する。

基本的な概念

仮想機械の構成要素群の定義は、オブジェクト、状態及び演算子と いう三つの概念をもとに組み立てられている。

オブジェクト

仮想機械によって操作することのできるデータ要素を、オブジェクトとする。 objects is an expansion of the class of values defined in . ]]> で定義した値のクラスを拡張したものとする。 オブジェクトのクラスは、 値及び複合オブジェクトという二つの副クラスに分けられる。 object references. ]]> 値のクラスは、simple values. ]]> オブジェクト参照ではない値を区別しなければならないところでは、 それらを 内容演算子のオペランドとして直接用いることができるのは、 値、すなわち単純値及びオブジェクト参照だけとする。

Composite objects possess properties that values do not have. ]]> 複合オブジェクトは下位構造をもつ。 それは、複数の値(オブジェクト参照を含む)を保持することができる 区切りのついた容器となっている。 contents of the composite object. ]]> 保持されている値の集合を、その複合オブジェクトの オブジェクト参照は、他のそのような容器への参照とする。 複合オブジェクトは、何らかの演算子又は動作によって生成され、 生成の結果として得られるオブジェクト参照によって 識別される。

値の意味は、それがどこに現れるかにかかわらず同一とする。 2という整数の意味は、それがどのようにして生成されたかには依存しない。 しかしながら、複合オブジェクトの意味は、 内容だけでなく、個々の実体に依存する。 二つのオブジェクト参照が同一の複合オブジェクトを識別している場合、 それらのオブジェクト参照は、等価とする。 そうでない場合、 たとえ参照されている複合オブジェクトの内容が同一であったとしても、 それらは、等価ではない。 refer to that composite object. ]]> あるオブジェクト参照がある複合オブジェクトを識別している場合、 そのオブジェクト参照は、その複合オブジェクトを ある複合オブジェクトが下位構造をもつのは、 新たなオブジェクトを生成することなく、 その複合オブジェクトの一部分を変更する内容演算子が存在する場合とする。 言い換えると、 同一の複合オブジェクトを参照する二つのオブジェクト参照があり、 その一方を、そのような変更を行う演算子のオペランドとして用いると、 その複合オブジェクト内部に、ある変化が生じる。 この変化は、他方のオブジェクト参照を用いて その複合オブジェクトにアクセスすると明らかとなる。 share the composite object. ]]> これら二つのオブジェクト参照は、その複合オブジェクトを 複合オブジェクトは、 複写された場合の振舞いによっても値とは区別される。 値を複写すると、 元のインスタンスと区別できない、その値型のもう一つのインスタンスが生じる。 実際には、 第2のインスタンスが実際に存在するかどうか確かめることはできない。 値がオブジェクト参照だった場合、 二つのオブジェクト参照が同一の複合オブジェクトを共有する結果となる。

これに対して、複合オブジェクトを複写する際には、 もう一つ別の容器を用いて(又は新たな容器を生成して)、 元のオブジェクトの内容をこの第2の容器内に複写する必要がある。 それらは二つの異なる複合オブジェクトなので、 その参照は、複合オブジェクトを共有しない。

type. ]]> 各オブジェクトは、それぞれ plus some new types. ]]> 値の型はで定義した型の幾つかを含み、 これに新しい型を幾つか加えている。 新しい型は、複合オブジェクトのクラスのために導入されている。 X, there is a corresponding XReference object reference type. ]]> 複合オブジェクト型. ]]> この規格が定義するオブジェクト型は、で規定する。

状態

State consists of the Operand Stack, the Context Stack, the Graphics State Variables, the Graphics State Stack, the set of State Variables, the ordered set of SaveObjects, and the set of Referenced Objects. ]]> 仮想機械の 仮想機械の状態は、内容処理によって変更可能な仮想機械の構成要素群から、 現ページ像だけを取り除いたものから構成される。

仮想機械の状態は、次に示す操作を受ける。

演算子

Operators cause actions to be taken by the Virtual Machine. ]]> この動作には、次に示すものが含まれる。

演算子は、0個以上のオペランドをとる。 オペランドには、次に示すものがある。

ある演算子が行う動作が、 その演算子を解釈する前の現ページ像の状態に依存することは決してない。

パーサ

内容処理に対する手続き的な入力を、内容値とする。 内容値は、構造処理によって識別されたトークン列に対応する。 and . ]]> この内容値は1個のオクテット列を含む。このオクテット列は、 及びで定義する二つの 内容表現交換様式のいずれかによるデータとする。 parser converts the Octet String into a sequence of tokens using the rules defined in the appropriate Content Interchange Format definition ( or ) as determined by the content notation specifier in the Content value. specifier --> identifier Content value --> Current Context of Interpretation ]]> 又は)で定義されている規則を用いて、このオクテット列をトー クンの列に変換する。 below). ]]> パーサは、インタプリタとは平行に実行することができる(参照)。

トークンの列

tokens. ]]> インタプリタへの入力は、この 各トークンは、 パーサが符号化されたトークンを処理した結果得られるオブジェクトとする。 値が符号化されていた場合、その結果は、値とする。 複合オブジェクトが符号化されていた場合、 その結果は、その複合オブジェクトへのオブジェクト参照とする。 いずれの場合にも、その結果は、値となる。

executability attribute as defined in . ]]> ある種の値は、で定義するliteral or executable and the value is said to be a literal value or an executable value, respectively. ]]> 実行可能性属性は、 and , determines the executability attribute. ]]> 実行可能性属性をもつ値について、パーサは及びで規定する規則を用いて、 その実行可能性属性を決定する。

内容トークンの列を解釈することに加えて、 トークンの部分列を手続きとして退避することができる。 ), the elements of which are the values produced by parsing the saved tokens. ]]> Vector object --> Vector 手続きは、 ベクタ(参照)への実行可能なオブジェクト参照とする。 このベクタの要素は、 退避されたトークンを解析して得られる値とする。 Procedure object --> Procedure 手続きの実行は、 インタプリタに対するオブジェクト群のもう一つの供給元を提供する。

インタプリタ

インタプリタは、値の列を入力としてとる。 この列は、トークン列であっても、 実行可能ベクタ(手続き)の要素の列であってもよい。 インタプリタは、それらの値を、与えられた順に解釈する。

リテラル識別子、リテラルベクタ参照 又は実行可能性属性をもたない他の型の値を解釈した場合、 インタプリタは、その値をオペランドスタックに積む。

実行可能な識別子オブジェクトを解釈した場合、 その識別子に結合されている値を解釈する。 識別子に結合された値を見つける方法については、 文脈スタックについての記述(後述)中で述べる。

実行可能なベクタ参照(手続き参照)の解釈は、 その参照の現れ方に依存する。 directly in the token sequence or as an element of an executable Vector, then the encountered executable Vector reference is pushed onto the Operand Stack and is not executed. ]]> 参照がトークン列中にindirectly as the result of the execution of some Identifier or Operator, then the executable Vector that is referenced is executed. ]]> 実行可能ベクタ参照が、 何らかの識別子又は演算子の実行結果としてOperator causes the Virtual Machine to perform actions that depend on the particular operator. ]]> to . ]]> この規格が定義する演算子については、からまでで定義する。 . ]]> 演算子の一覧をに示す。

演算子を解釈した結果として行われる動作には、次に示すものが含まれる。

to . ]]> 個々の演算子に固有の動作については、 からまでにおいて演算子ごとに定義する。

オペランドスタック

オペランドスタックは、任意の数の値を保持できるスタックとする。 これは、任意の型の組合せからなる値群を保持できる混合型のスタックとする。 オペランドスタックは、内容プロセサに渡された解釈文脈内の 仮想機械の状態中にあるオペランドスタックに従って初期化される。 stack, top of stack, push, and pop are used in a way consistent with common computer science usage. ]]> この規格では、

値を明示的なオペランドとして必要とする演算子は、 それらをオペランドスタックから降ろす。 また、値を明示的な結果として返す演算子は、それらをオペランドスタックに積む。

文脈スタック

文脈スタックは、辞書のスタックであり、 仮想機械の状態の構成要素の一つとする。 ) are lists of key/value pairs in which the key is an Identifier or Cardinal and the value can be a simple value or object reference. ]]> 辞書(で定義する)は、キーと値との対のリスト とする。 この対(つい)中のキー は、識別子又は非負整数とする。値は、単純値でもオブジェクト参照で もよい。

文脈スタックは、辞書の順序付きリストとする。 文脈スタックの初期値は、 内容プロセサに渡された解釈文脈中の仮想機械の状態からとられる。 PushContextStack operator. ]]> 辞書は、PushContextStack演算子を用いて 文脈スタックの上端に追加することができる。 PopContextStack operator. ]]> 辞書は、PopContextStack演算子を用いて 文脈スタックから取り除くことができる。 UserDict nor SystemDict can be removed from the Context Stack. ]]> 文脈スタックは、識別子に結合された値を見つけるために用いられる。 binding for that Identifier. ]]> この値を、その識別子の 識別子の結合値を見付け出すために文脈スタックを参照する際、 それは次に示すとおり逆向きに検索される。 すなわち、最後にスタックに置かれた辞書が最初に検索され、 問題の識別子がその辞書中のキーの一つであれば、そのキーと対(つい)になる値が返される。 そうでなければ次の辞書が検索され、以下同様に続けられる。 RaiseError is invoked with UndefinedKey as its operand. ]]> 文脈スタック上のどの辞書もその識別子をキーとしてもたない場合、 RaiseErrorが 実行可能な識別子の解釈は、 その識別子に結合されたオブジェクトを取り出すために、 暗黙のうちに文脈スタックを使用する。 GetValue operator can be used with a literal Identifier or Cardinal to explicitly retrieve the object bound to that key. ]]> GetValue演算子は、 リテラル識別子又は非負整数に対して、 そのキーに結合されたオブジェクトを明示的に取り出すために 用いることができる。

標準辞書

文脈スタック上には、次に示す二つの標準辞書が存在する。

被参照オブジェクトの集合

被参照オブジェクトの集合は、仮想機械の状態の構成要素の一つとする。 この集合は、もともと解釈文脈中に存在していたか、 又は内容を解釈していく過程で新たに生成され、 現在もなお参照されているすべての複合オブジェクトの集合からなる。 referenced if an object reference to that object is the value paired with some key in a Dictionary on the Context Stack, is on the Operand Stack, is the value of a Graphics State Variable, is the value of a Graphics State Variable saved on the Graphics State Stack, is the value of a State Variable, or if an object reference to it is a value stored in some other referenced object. ]]> ある複合オブジェクトへのオブジェクト参照が、 文脈スタック上にある辞書中のいずれかのキーと対応付けられた値である場合、 オペランドスタック上にある場合、 作図状態変数の値である場合、 作図状態スタック上に退避された作図状態変数の値である場合、 状態変数の値である場合、 又は他の被参照オブジェクト中に格納されている値である場合、 その複合オブジェクトは、 被参照オブジェクトの初期集合は、 内容プロセサに渡された解釈文脈中の仮想機械の状態からとられる。

状態変数

State Variables is a component of the Virtual Machine. ]]> global in that they can always be referenced from content. ]]> 状態変数は、内容から常に参照できるという意味で 状態変数群の値は、仮想機械の状態の一部を構成する。 . ]]> 状態変数群とそれらの初期値については、で定義する。

作図状態及び作図状態スタック

状態変数群に加えて、 作画部の状態を表す別の大域変数群の集合が存在する。 Graphics State Variables. ]]> それらを 作図状態変数は、ほとんどの作画演算子に対して暗黙の引数として作用する。 . ]]> 作図状態変数群及びそれらの初期値については、で定義する。 CurrentTransformation and CurrentColor. ]]> 作図状態変数の例としては、 CurrentTransformation及びCurrentColorがあげられる。 graphics state. ]]> すべての作図状態変数及びその値の集合を、 作図状態スタックは、仮想機械の状態の構成要素の一つとする。 SaveGraphicsState operator. ]]> 作図状態変数の集合は、SaveGraphicsState演算子によって このスタック上に退避することができる。 RestoreGraphicsState or RestoreGraphicsStateXCP operator, or if it is the graphics state that is part of a SaveObject, explicitly by RestoreSavedGraphicsState and implicitly by the RestoreState operator. ]]> 退避されたこの作図状態は、 RestoreGraphicsState演算子又はRestoreGraphicsStateXCP演算子によって 明示的に回復することができる。 この作図状態が退避オブジェクトの一部であれば、 RestoreSavedGraphicsState演算子によって明示的に回復することも、 RestoreState演算子によって暗黙のうちに回復することもできる。 オペランドスタックとは異なり、 このスタックを明示的に操作するこれら以外の演算子はない。 このスタック上のオブジェクトは、 生成された時点での作図状態変数群の値を表現する 実装固有のデータオブジェクトとする。 作図状態スタックは、内容プロセサに渡された解釈文脈内の 仮想機械の状態中にある作図状態スタックに従って初期化される。 . ]]> このスタックに影響を与える演算子群は、で定義する。

退避オブジェクトの順序付き集合

SaveState. ]]> 被参照オブジェクトの値、状態変数の値、 作図状態変数の値及び作図状態スタックは、 演算子SaveStateを用いて明示的に退避することができる。 RestoreState. ]]> この演算子は、退避オブジェクトを返す。 退避オブジェクトは、後にRestoreStateを用いて回復することが できる。 SaveState operator will be destroyed when its resulting SaveObject is restored. ]]> SaveState演算子の実行後に生成された複合オブジェクトは、 その実行結果である退避オブジェクトが回復される際にすべて破壊される。 この破壊される複合オブジェクトには、 後に生成されたすべての退避オブジェクトも含まれる。 SaveState operator is interpreted. ]]> その他のすべての複合オブジェクトは、 SaveState演算子が解釈された時点でそれらがもっていた状態に復元される。

  • SaveState does not save the state of the Context Stack nor the Operand Stack. ]]> SaveState演算子は、 文脈スタック及びオペランドスタックのいずれをも退避しない。 ContextStack. ]]> 文脈スタックは、その内容の複製を演算子ContextStackを用いてベクタに移すことにより、退避することができる。 Count, Mark, Copy, Pop, and MakeandStoreVector. ]]> オペランドスタックは、 演算子Count、Mark、Copy、Pop 及びMakeandStoreVectorを用いる簡単な手続きを使って ベクタ中に退避することができる。
  • SPDLインタプリタの実装における記憶領域の管理法については、 実装の設計者に大部分任されている。 複合オブジェクトを生成する演算子群、 及び回復処理時にそれらの破壊と回復を行う演算子群が、 すべての記憶領域管理システムがその枠内で操作を行うべき制約を設定する。
  • ある退避オブジェクトを 後でRestoreStateのオペランドとして用いるのであれば、 これをオペランドスタック上、又は何らかの被参照オブジェクトの値中に 保持しなければならない。 このことは、後でSaveState演算子を解釈する際には常に、 その解釈の一部として、 問題の退避オブジェクトの実体(使用している記憶領域)を 退避しなければならないことを示す。

    退避オブジェクトの集合については、明確に定められた構造はない。 RestoreState means that there is, effectively, an ordering defined on the set of SaveObjects making them an ordered set of SaveObjects. ]]> しかしRestoreStateの動作が示すように、 実質的には、ある順序が退避オブジェクトの集合内に定義されている。 このために、それらは この順序は、回復されていない退避オブジェクトのうち最も古いものから始まり、 それらのうち最も最近のもので終る。 ある退避オブジェクトを回復すると、 その退避オブジェクト及びこの順序内でその退避オブジェクトより後ろにあるすべての退避オブジェクトが削除される。 退避オブジェクトの順序付き集合の初期値は、 解釈文脈中の仮想機械の状態からとられる。 退避オブジェクトの順序付き集合内には、 常に少なくとも1個の退避オブジェクトが存在している。 それは、直接の上位ブロックにおける暗黙の退避オブジェクトである。

  • 作画部

    imager is the part of the interpreter that interprets the imaging operators and causes imaging activities on the Current Page Image. 17.1での並べ方からは、imagerはinterpreterの一部ではなく、それとは同列の別のものに見えるのだが? ]]> 作画部は、作図状態変数群の値を、 作画演算子の暗黙のオペランドとして用いる。 , and ; additional imaging operators are defined in and . ]]> テキスト、幾何図形及びラスタ図形の作画を行う演算子群は、 及びで定義する。追加的な作画演算子群は、及びで定義する。

    現ページ像

    Current Page Image is provided as an argument to Content Processor and may be absent. ]]> 現ページ像は、1個のページ像とする。 and the changed page image is returned as a result of content processing. ]]> 現ページ像が存在する場合、それは、で述 べるとおり作画演算子を解釈することによって変更され、変更されたペー ジ画像が内容処理の結果として返される。 現ページ像が与えられなかった場合、 通常ならば解釈された時に作画動作を行う作画演算子は、 いずれも作画動作を行わない。 (作画動作が行われなかったというエラーや警告は与えられない。)

    empty. ]]> ページの内容の処理を始める時点では、 現ページ像は 作画演算子群を解釈するとともに現ページ像を構築していくことは、 文書内容プロセサの分担とする。 . ]]> で記述したとおり、 完成したページ像を提示媒体のインスタンスと関連付けるのは、 構造プロセサの分担とする。

    宣言された資源の集合

    宣言された資源の集合は、 文書構造処理中に構築され、内容プロセサに渡される解釈文脈の一部とする。 set of Declared Resources is the set of all resources that have been declared to be available while processing the Content value supplied to this invocation of the Content Processor. ]]> 宣言された資源の集合は、 内容処理中に変更することはできない。

    resource-finding operators, either the generic FindResource operator or an operator specific to the given resource type. ]]> 資源は、FindResource演算子、 又は与えられた資源型に特有の演算子を用いて内容中から参照される。 そのような演算子は、資源宣言内で資源に結合された 内部資源名である資源の名前をオペランドとしてとる。 そのような演算子は、 対応する資源をオブジェクトとしてオペランドスタック上に返す。 and . ]]> 構造レベルで資源を定義する方法については、及びで定義する。 through , and through . ]]> 各種の資源の値がもつ意味については、から まで、 及びからまでで定義する。 FindResource operator is defined in . ]]> FindResource演算子は、で定義する。

    現中断方針

    abort-policy presentation parameter in the Block State of the most immediately superior BLOCK when the Context of Interpretation is constructed. ]]> 現中断方針は、解釈文脈が構築される際に、 最も近い上位ブロックの 現中断方針は、内容内部での例外処理動作を制御するために、 解釈文脈中で提供される。 これは、警告が発生した後で、実行を続けるか、 それとも文書全体の処理をその時点で中断するかを決定するために用いられる。 現中断方針が それ以外の場合、処理は警告後も続けられる。 内容処理によって現中断方針を変更することはできない。

    CurrentTransformation ]]> CurrentTransformationの初期値

    below and . ]]> 内容処理の間、現在有効な座標系は、内容演算子によって変更する ことができる(からまで及 び参照)。 CurrentTransformation which is provided in the Context of Interpretation. ]]> そのような変更の範囲は、解釈文脈中で提供される CurrentTransformationの初期値によって制限される。 CurrentTransformation cannot be changed by content processing. ]]> 内容処理によって CurrentTransformationの初期値を変更することはできない。

    作画モデル

    作画演算子のうちの幾つかを解釈することによって、 現ページ像は、変更される。 そのような演算子は、作画動作を実行する。 作画動作は、あるimaging model is a two dimensional graphics model appropriate for device independent usage, and for high quality printing and publishing needs. ]]> この作画モデルは、装置に依存せずに使用でき、 高品質の印刷と出版のための要求に適した、 2次元の作画モデルとする。 ページ像は、最初は空であるページ像に対して 一連の作画動作を行うことによって、徐々に形成される。 image element on the page image. ]]> 個々の作画動作は、ページ像上に1個のimaging activity places an image element on the page image by painting ink through a mask and a clipping region, as shown in . ]]> に示すように、 インクをマスクとクリップ領域とを通して塗ることで ページ像上に作画要素を置く。 ). ]]> 現ページ像は、もしあれば、仮想機械の構成要素の一つとする (参照)。

    作画モデルには、次に示す四つの構成要素がある。

    • インク
    • マスク
    • クリップ領域
    • ページ像

    作画要素をページ像に追加する個々の作画演算子ごとに、 これらの構成要素のインスタンスが必要となる。 マスクは、作画演算子によって構築されるか、 又は作画演算子へのオペランドとして与えられる。 インクとクリップ領域とは、作図状態変数からとられる。 ページ像は、仮想機械の現ページ像要素とする。 これらの構成要素については、17.2.1から17.2.4まででさらに詳しく述べる。 作画モデル

    インク

    ink. ]]> 作画動作は、現在選択されている色空間から現在選択されている色を、 ink refers to the color and visual texture which will be displayed by the presentation device. ]]> この規格では、無地インクとパターンという2種類のインクを定義する。

    solid ink has a single color which can be any of the colors expressible in the CurrentColorSpace, including black, white, or any shade of gray. ]]> CurrentColorSpace内で表現可能な、 黒、白又は任意の濃度の灰色を含む任意の色であってよい。 無地インクは、論理的に不透明であり、 ページ像上で同じ領域を占める、以前に置かれた作画要素の色を覆い隠す。 . ]]> 色空間は、で定義する。

    pattern need not be solid but instead consists of repeated instances of a graphic figure, the pattern cell. ]]> パターンの定義は、パターンを定義する座標系、 繰り返されるインスタンス間のX及びY方向の距離、 及びパターンセルを描く手続きを指定する。 パターンセルは、透明な領域をもっていてもよい。 さらに、パターンセルはそれ自身が既に色付けされていてもよく、 そのパターンを描く前に無地の色を関連付けなければならない 単なるマスクであってもよい。 32.にパターンの定義を示す。

    ImageRasterElement operator, the color to be painted for each imaging operator, and the color space to which it refers, are taken from the CurrentColor and CurrentColorSpace Graphics State Variables, respectively. ]]> ImageRasterElement演算子の場合を除いて、 各作画演算子に関して描かれる色と、それが参照する色空間とは、 それぞれ作図状態変数CurrentColor及び CurrentColorSpaceからとられる。 ImageRasterElement operator, the color space is taken from CurrentColorSpace which must not be a pattern color space. ]]> ImageRasterElement演算子の場合、 色空間は、CurrentColorSpaceからとられる。 これは、必ずしもパターン色空間でなくてもよい。 ImageRasterElement operator is specified by the sample value which specifies a color in the CurrentColorSpace; see . ]]> ImageRasterElement演算子のオペランドである サンプルラスタ図形画像中の個々のサンプルについて描かれる色は、 CurrentColorSpace中の色を指定するサンプル値によって指定される (28.参照)。

    マスク

    mask provides the shape of the image element. ]]> マスクは、幾何学的パスの内部として、 幾何学的パスにそってペンで線引きした領域として、 サンプルラスタ図形画像データのインスタンスとして、 又はビットマップラスタ図形画像データのインスタンスとして記述される。 加えて、フォント中のグリフへの個々の参照は、 グリフ表現によって決定されるマスクへの間接的な参照となる。 幾何学的パスは、単純な凸形、凹形、 あるいは自身と交差したり不連続な境界をもつ形状を含む、 多様な形状を記述するために用いてよい。 これらのうちのいずれの型のマスクも、 作画演算子を用いて記述することができる。

    マスクは、ページ像上のどこにインクが置かれるかを決定する。 クリップ領域がない場合、 インクはマスクが定義されている部分についてだけ ページ像を変更する。 クリップ領域は、ページ像の変更される部分をさらに制限する。

    クリップ領域

    クリップ領域は、ページ像上において、 その上にインクを置くことができる領域とする。 クリップ領域の内部に落ちたインクは、ページ像に影響を与えるが、 クリップ領域の外部に落ちたインクが影響を与えることはない。 clipped by the clipping region. ]]> このように、作画要素の形状は、クリップ領域によって クリップ領域の境界は、 マスクを幾何学的に記述するのと同じ手段を用いて記述される。 最初は、クリップ領域はページの作画可能領域全体を含むく(矩)形とする。 しかしながら、これは他の幾何学的な領域との共通部分をとることによって、 さらに制限することができる。 クリップ領域に対する変更は、その変更が行われる前に退避された 作図状態を回復することによってだけ取り消すことができる。

    CurrentClippingRegion Graphics State Variable. ]]> 個々の作画演算子に用いられるクリップ領域は、 CurrentClippingRegion作図状態変数からとられる。 assured reproduction area of an page image is that region of the page image upon which marks may be made. assured reproduction area --> imageable region (3.54) (1/10指摘済み) ]]> ページ像において、印字することができる領域を、 その) during interpretation of content. ]]> 参照座標系上におけるこの領域の位置と大きさは、 媒体及びSPDLの実装によって異なる。 しかしながら、SPDLはこの領域の位置と大きさ(参照)とを 内容の解釈中に判定するための状態変数群を提供する。 CurrentClippingRegion for a page image that is associated with a given medium, and is always within the extents of that medium. ]]> ある与えられた媒体に関連付けられたページ像に関して、 その再現保証領域は、無指定時のCurrentClippingRegionであって、 それは常にその媒体の範囲内にある。

    ページ像

    page image is an abstract, device independent model of the page that is to be rendered on a medium. ]]> ページ像は、 最初は空であるページ像に作画要素を順次追加していくことによって、 徐々に形成される。 image element is the result of a single imaging activity. ]]> この規格において定義する作画動作は、 次に示すものをCurrentClippingRegionを通してページ像上に描くことを含む。

    • 塗りつぶ(潰)された幾何学的な領域
    • 線引きされた幾何学的な領域
    • サンプルラスタ図形又はビットマップラスタ図形のインスタンス
    • 単一のグリフ

    CurrentClippingRegion onto the page image. ]]> 作画要素の構築、及び作画演算子のその他すべての作用は、 その作画演算子が解釈された時点でのページ像の内容及び状態に、 いかなる形でも依存しない。

    座標系

    冒頭の"content"は自明なので不要。 ]]> 作画演算子は、すべて現在のユーザ座標系の文脈内において解釈される。 . ]]> この座標系は、に示すとおり、 構造プロセサによって設定される参照座標系を用いて定義される。 CurrentTransformation Graphics State Variable. ]]> 現在のユーザ座標系の参照座標系に対する関係は、 CurrentTransformation作図状態変数によって設定される。 CurrentTransformation for each PAGE is established by the Structure Processor in . ]]> 各ページの初期CurrentTransformationは、 に示すとおり、構造プロセサによって設定される。 CurrentTransformation in effect when each subordinate PICTURE on the page is processed is saved as the Initial CurrentTransformation for that BLOCK and is passed as the Initial CurrentTransformation in conjunction with the content processing for all TOKENSEQUENCES immediately subordinate to that BLOCK. ]]> さらに、ページ上にある個々の下位ピクチャが 処理される際に有効となるCurrentTransformationは、 そのブロックに関する初期CurrentTransformationとして退避されており、 そのブロックの直接の下位にあるすべてのトークン列に関する内容処理の際に、 初期CurrentTransformationとして渡される。 CurrentTransformation establishes a coordinate system in terms of which all coordinate transformation within that BLOCK are relative. ]]> この初期CurrentTransformationが、ある座標系を設定する。 そのブロック内におけるすべての座標変換は、 この座標系に対して相対的なものとする。

    参照座標系及びユーザ座標系内での位置は、 その位置のX座標及びY座標を別々に指定するか、 点というものを用いて指定する。 point is a pair of values in which the first value is the X coordinate of the location and the second value is the Y coordinate of the location. ]]> 参照座標系

    RCS) provides for unambiguous specification of locations on a page image. ]]> 参照座標系(RCS)は、 ページ像上において位置を曖昧さなく指定できるようにする。

    RCSは、両軸共にミリメートルを単位とした2次元のデカルト座標系とする。 16.8 --> 19.19? (1/10指摘済み) ]]> 現ページ像上へのRCSの配置については、で規定する。

    ユーザ座標系

    UCS) provides for specification of locations on the Current Page Image in a flexible way. ]]> ユーザ座標系(UCS)は、 現ページ像上において柔軟な位置指定が行えるようにする。 作画演算子によって用いられる位置情報は、すべて、 UCS及びUCSからRCSへの対応付けを用いて指定する。 この対応付けは、次に示す二つの機能を果たす。

    • RCSの物理的な計測単位を、UCSの無次元の単位と対応づける。
    • 都合に合わせて選ばれたUCSに関して、 位置や形状を記述する自由を利用者に与える。 この対応付けは任意に変更できる。 このため、このような記述に用いられるUCSは、 これらの記述が作画要素を現ページ像に追加するために用いられる際に、 結果として得られる形状の大きさや向きに制約を加えることがない。

    CurrentTransformation Graphics State Variable. ]]> この対応付けは、CurrentTransformation作図状態変数によって与えられる。 CurrentTransformation can specify any mapping of the UCS into the RCS that can be represented in the form: ]]> CurrentTransformationは、 次に示す形で表すことができるUCSからRCSへの任意の対応付けを可能にする。

  • x' = a×x + c×y + e
  • y' = b×x + d×y + f

    ここで、a、b、c、d、e及びfは、実数の定数であって、 その次元はミリメートルとする。 x及びyはUCS上の座標、x'及びy'はRCS上の座標とする。 この式は、次に示す行列式と等価である。

  • [ x' y' 1 ] = [ x y 1 ] × ace bdf 001 次の条件を満たすすべての対応付けは、縮退しており、逆変換できない。 a × d - b × c = 0

    affine transformations and includes all combinations of scaling, translation and rotation. ]]> これらの6個の数値a、b、c、d、e及びfによって表現できる すべての座標変換の集合は、CurrentTransformation is to map an image element defined in UCS Space to an image element that is defined in RCS Space and can be added to the Current Page Image. ]]> CurrentTransformationの効果は、 CurrentTransformation Graphics State Variable) are defined in . ]]> (CurrentTransformation作図状態変数への代入に適した) 座標変換オブジェクトを生成する演算子群は、で定義する。

  • CurrentTransformation ]]> 初期CurrentTransformation

    CurrentTransformation is logically composed of two parts: the Initial CurrentTransformation for the most immediately superior BLOCK to the content being processed and the Active CurrentTransformation. ]]> 内容処理を行っている間のどの時点においても、 CurrentTransformationは、論理的には二つの部分、 すなわち処理されている内容に最も近い 上位ブロックの初期CurrentTransformation、 及び現行CurrentTransformationから構成される。 CurrentTransformation is established by the Context of Interpretation. ]]> 初期CurrentTransformationは、 解釈文脈によって設定される。 CurrentTransformation is the product (by matrix multiplication) of the CurrentTransformation times the matrix inverse of the Initial CurrentTransformation. ]]> 現行CurrentTransformationは、 (行列乗算によって)CurrentTransformationに 初期CurrentTransformationの逆行列を乗じた積とする。 CurrentTransformation; it can never change the Initial CurrentTransformation. ]]> 内容処理は、現行CurrentTransformationだけを変更することができる。 内容処理は、初期CurrentTransformationを変更することが決し てない。

    which affect the CurrentTransformation are of two forms. ]]> で定義する、CurrentTransformationに影響を与える演算子群は、 二つの形態をとる。 CurrentTransformation relative to the existing CurrentTransformation and installs the result as the new CurrentTransformation. ]]> 第1の形態の演算子は、新しいCurrentTransformationを 現在のCurrentTransformationから相対的に計算し、 それを新たなCurrentTransformationとして設定する。 CurrentTransformation using the Concat operator or installed as the Active CurrentTransformation using the SetTrans operator. ]]> 第2の形態の演算子は、座標変換を Concat演算子を用いてCurrentTransformationに連結することも、 SetTrans演算子を用いて現行CurrentTransformationとして 設定することも可能な抽象的実体として計算する。

    表記法

    リテラル

    リテラルとは、 何らかのオブジェクトを表す単一のトークン又はトークンの列とする。 . ]]> 演算子名の場合を除き、この規格中のリテラルは、 で定義する平文内容表現交換様式におけるトークン列用の構文を用いて表現する。 . ]]> 演算子名の表現は、で与える。

    <sl> <li> 0.5 <li> 2 <li> &lsqb;0 0 0 &rsqb; </sl>

    オブジェクト

    オブジェクトは、その型と内容の両方によって識別される。 値の内容は、単にその値自身とする。 複合オブジェクトの内容は、それを構成する値の集合とする。 オブジェクトの内容は、その値のリテラル、 又は指示された型のとりうる任意の値を表す名前のいずれかによって表記する。 ". ]]> その型が/と表記する。

    この内容を名前で表記する場合、 その名前は、大文字と小文字とを混在させて書く。

    <sl> <li> &lt;<hp1>n: <![ %english; [Number]]>数 </hp1>&gt; <li> &lt;<hp1>flag: <![ %english; [Boolean]]>論理値 </hp1>&gt; <li> &lt;<hp1>T: <![ %english; [Transformation]]>座標変換 </hp1>&gt; </sl>

    内容が特定の値又は複合オブジェクトである場合、 その内容は、その値又は複合オブジェクトのリテラルで表記する。

    <sl> <li> <0.5:<hp1> <![ %english; [Number]]>数 </hp1>&gt; <li> <2:<hp1> <![ %english; [Integer]]>整数 </hp1>&gt; <li> <&lsqb;0 0 0&rsqb;:<hp1> <![ %english; [Vector]]>ベクタ </hp1>&gt;</sl>

    ErrorDict. ]]>

    ここで言っているような例は示されていない。 オブジェクトの型がその内容によって示されており、 すぐ近くにそのようなオブジェクトが多数ある場合、 その内容リテラルは、関連付けられた型を伴わない単独のものとする場合もある。

    オブジェクト型

    オブジェクト型は,その型名によって示す。 訳してしまうので、大文字/小文字の話は関係ない。

    <sl> <li> <hp1><![ %english; [Number]]>数</hp1> <li> <hp1><![ %english; [Transformation]]>座標変換</hp1> <li> <hp1><![ %english; [VectorReference]]>ベクタ参照</hp1> </sl>

    短縮形

    特定のオブジェクトを指定する必要がない場合、 及びオブジェクトに名前を与える必要がない場合には、 オブジェクトをそのオブジェクトの型名で表記することがある。 型名そのものと混同される危険がないか、検討要。

    <sl> <li> <![ %english; [Number]]>数 <li> <![ %english; [Transformation]]>座標変換 <li> <![ %english; [VectorReference]]>ベクタ参照 </sl>

    名前を使って値を表記しているオブジェクトを何回も同じ箇条内で引用し, さらに、文脈が混乱を避けるに十分なだけの情報を提供している場合、 そのオブジェクトを単にその内容の名前だけで示すことがある。

    " and "<T: Transformation >". ]]> 例えば、及びを、それぞれ<及び<を 繰り返し参照する際に用いることがある。

    オブジェクトの並び

    オブジェクトの並びは, 括弧で囲み,コンマで区切ったオブジェクト表現の列で表記する。

    <![ %english; [ (Integer, Integer, Integer) Is a seqeunce of three objects all of type Integer. ]]> (整数, 整数, 整数)は、 それぞれの型が整数である三つのオブジェクトの並びとする。

    不定個数のオブジェクトの並びは, 括弧で囲み,コンマで区切ったオブジェクト表現の列で、 省略符号

    Example: (value1, value2, . . . valuen) Is a seqeunce of n objects named value1 through valuen.

    --> <![ %english; [ (<f>value<SUB/1/</f>, <f>value<SUB/2/</f>, . . . <f>value<SUB/n/></f>) Is a seqeunce of n objects named value<f><SUB>1</SUB></F> through <f>value<SUB/n/></f>valuen;. ]]> (<f>value<SUB/1/</f>, <f>value<SUB/2/</f>, . . . <f>value<sub/n/</f>)は、 <f>value<sub/1/</f>から<f>value<sub/n/</f>までの名前をもつn個のオブジェクトの並びとする。

    演算子

    演算子は,太字の文字列で表された演算子名で表記する。 この演算子名は、大文字で始まり、その後ろに小文字の列が続く。 ただし、複合的な演算子名中の各単語の先頭の1文字は、大文字とする。 . ]]> 演算子群の名前は、に示す。

    <sl> <li> <hp2>Multiply</hp2> <li> <hp2>FindResource</hp2> <li> <hp2>ImageRasterElement</hp2> </sl>

    状態変数及び作図状態変数

    状態変数及び作図状態変数は、斜体の文字列で表されたその名前で表記する。 この名前は、大文字で始まり、その後ろに小文字の列が続く。 ただし、複合変数名中の各単語の先頭の1文字は、大文字とする。 すべての作図状態変数名は、複合名とし、 その先頭はCurrent/とする。

    <sl> <li> <hp1>CurrentColor</hp1> <li> <hp1>CurrentTransformation</hp1> <li> <hp1>CurrentClippingRegion</hp1></sl>

    オペランドスタック

    オペランドスタックの上端部分の状態に関する情報を表す必要がある場合, オペランドスタックの最上部にあるn個の値を 縦に並べたリストとして示すことによって、その状態を表現する。 オペランドスタックの一番上にある値がこのリストの第1の項目として示され、 2番目の値が第2の項目となり、以下同様に続く。 その様式は、次に示すとおりとする。

  • value1: Any > operand on the top of the stack ]]> the stack -> the operand stack <value1: 任意> オペランドスタックの一番上の値
  • value2: Any > second value on the operand stack ]]> <value2: 任意> オペランドスタックの2番目の値
  • . . .
  • valuen: Any > nth value on the operand stack ]]> <valuen: 任意> オペランドスタックのn番目の値

    オペランドスタック内には、明示的に示された値群の下に, さらに任意個数の値が存在しうることを想定している。 それらの示されていない値は、 オペランドスタックの示された部分に作用するどの演算子によっても用いられず、 その影響を受けることもない。

  • 演算子記述

    この規格で定義する各演算子に対して,次の演算子記述を定める。

    • 演算子の解釈を始める際にオペランドスタックから降ろすオペランドの個数と型。
    • 演算子の解釈終了時にオペランドスタックに積む結果の個数と型。
    • オペランドと結果との関係。
    • 演算子の解釈によって生じる仮想機械の状態に対するその他の作用。
    • 現ページ像に対する影響。

    オペランドのリスト及び結果のリストは、 オペランドスタックの状態表現として示す。

    演算子の解釈による作用については、 本文中でだけ記述する場合と、 それを解釈した場合に同等な作用を生じる SPDLトークンの列を示す場合とがある。 その表記法を、次に示す。 { トークンの列 }

    この表記法は,中括弧で囲んだトークンの列を解釈した結果を表している。 この場合,各トークンは、演算子名又はリテラルで表現する。 列中における個々のトークンは,空白で区切る。 トークンの列の中に、注釈を含めてもよい。 それらの注釈は、百分率記号(%)によってトークンから分離する。注 釈は行末まで続く。