GDL ブロック マクロ
ブロック マクロは、1 つ以上の GDL エントリを表すために使用されます。 これらは *BlockMacros コンストラクト内で定義されます。
*BlockMacros コンストラクトのインスタンス名がブロック マクロの名前になり、*BlockMacros コンストラクトの中かっこ内に含まれるエントリがそのブロック マクロの内容になります。 マクロ名はシンボル名の種類である必要があります。 ブロック マクロ定義に含まれている項目は、完了している必要があります。
コンストラクト エントリがある場合は、マクロ定義内で完了する必要があります。 つまり、ブロック マクロ定義の内容で入れ子レベルを変更することはできません。
ブロック マクロには、通常のデータ エントリに加えて、他のブロックまたは値マクロ定義と名前空間ディレクティブを含めることができます。 ネストされたマクロ定義と名前空間ディレクティブはすぐに評価され、ブロック マクロの内容には表示されません。
ブロック マクロには、他のブロック マクロまたは値マクロへの参照を含めることができます。 *BlockMacros コンストラクトのインスタンス名の後にかっこで囲まれた仮引数リストを指定できます。 このブロック マクロ定義の本文内の仮引数への参照は、ブロック マクロが実際に参照されるときに渡される対応するパラメーターによって記号的に置き換えられます。
注 値マクロ参照を渡すために使用される引数の宣言と参照には、引数の型が値マクロであることを示す等号 (=) が接頭辞として付けられます。 値マクロへのすべての参照には、ブロック マクロではなく値マクロへの参照であることを示す等号が接頭辞として付けられます。
ブロック マクロへの参照では、パラメーター リストを任意の深さに入れ子にすることができます。 ブロック マクロは、*InsertBlock: NameOfBlockMacro を使用して参照されます。 ブロック マクロの名前は、値マクロへの参照ではないため、前に等号が付いていません。 この構文は GPD 構文とは異なります。
次のコード例は、ブロック マクロの使用方法を示しています。
*Macros:
{
LetterName: Letter
Quote: <BeginValue:Q>"<EndValue:Q>
}
*BlockMacro: LetterSize
{
*Name: =Quote=LetterName=Quote
*PaperDimension: PAIR(8.5 , 11)
}
*BlockMacro: PaperOption(PaperSize, =PaperName)
{
*Option: =PaperName
{
*InsertBlock: PaperSize
}
}
*InsertBlock: PaperOption(LetterSize, =LetterName)