GDL-Blockmakros
Blockmakros werden verwendet, um einen oder mehrere GDL-Einträge darzustellen. Sie werden im *BlockMacros-Konstrukt definiert.
Der instance Name des *BlockMacros-Konstrukts wird zum Namen des Blockmakros, und die Einträge, die in den geschweiften Klammern des *BlockMacros-Konstrukts enthalten sind, werden zum Inhalt dieses Blockmakros. Der Makroname muss ein Symbolnamenstyp sein. Die Einträge, die in einer Blockmakrodefinition enthalten sind, müssen vollständig sein.
Wenn Konstrukteinträge vorhanden sind, müssen diese innerhalb der Makrodefinition abgeschlossen werden. Anders ausgedrückt: Der Inhalt einer Blockmakrodefinition kann die Schachtelungsebene nicht ändern.
Ein Blockmakro kann neben normalen Dateneinträgen auch andere Block- oder Wertmakrodefinitionen und Namespacedirektiven enthalten. Die geschachtelten Makrodefinitionen und Namespacedirektiven werden sofort ausgewertet und werden nicht im Inhalt des Blockmakros angezeigt.
Blockmakros können Verweise auf andere Block- oder Wertmakros enthalten. Auf den instance Namen des *BlockMacros-Konstrukts kann eine formale Argumentliste in Klammern folgen. Alle Verweise auf ein formales Argument innerhalb des Hauptteils dieser Blockmakrodefinition werden symbolisch durch den entsprechenden Parameter ersetzt, der übergeben wird, wenn tatsächlich auf das Blockmakro verwiesen wird.
Hinweis Den Deklarationen und Verweisen von Argumenten, die zum Übergeben von Wertmakroverweisen verwendet werden, wird das Gleichheitszeichen (=) vorangestellt, um anzugeben, dass der Argumenttyp ein Wertmakro ist. Allen Verweisen auf Wertmakros wird auch das Gleichheitszeichen vorangestellt, um anzugeben, dass der Verweis auf ein Wertmakro anstelle eines Blockmakros verweist.
Verweise auf Blockmakros können Parameterlisten in beliebige Tiefe verschachteln. Auf Blockmakros wird mithilfe von *InsertBlock: NameOfBlockMacro verwiesen. Dem Namen des Blockmakros wird kein Gleichheitszeichen vorangestellt, da es sich nicht um einen Verweis auf ein Wertmakro handelt. Diese Syntax unterscheidet sich von der GPD-Syntax.
Im folgenden Codebeispiel wird gezeigt, wie Blockmakros verwendet werden.
*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)