Macros de blocs GDL
Les macros de blocs sont utilisées pour représenter une ou plusieurs entrées GDL. Ils sont définis dans la construction *BlockMacros.
Le nom instance de la construction *BlockMacros devient le nom de la macro de bloc, et les entrées contenues dans les accolades de la construction *BlockMacros deviennent le contenu de cette macro de bloc. Le nom de la macro doit être un type de nom de symbole. Les entrées contenues avec une définition de macro de bloc doivent être complètes.
S’il existe des entrées de construction, elles doivent être effectuées dans la définition de macro. En d’autres termes, le contenu d’une définition de macro de blocs ne peut pas modifier le niveau d’imbrication.
Une macro de bloc peut contenir d’autres définitions de macros de blocs ou de valeurs et directives d’espace de noms en plus des entrées de données normales. Les définitions de macros imbriquées et les directives d’espace de noms sont évaluées immédiatement et n’apparaissent pas dans le contenu de la macro de bloc.
Les macros de blocs peuvent contenir des références à d’autres macros de blocs ou de valeurs . Le nom instance de la construction *BlockMacros peut être suivi d’une liste d’arguments formels entre parenthèses. Toute référence à n’importe quel argument formel dans le corps de cette définition de macro de bloc sera symboliquement remplacée par le paramètre correspondant qui est passé lorsque la macro de bloc est réellement référencée.
Note Les déclarations et les références des arguments qui seront utilisées pour transmettre les références de macro de valeur sont précédées du signe égal (=) pour indiquer que le type d’argument est une macro de valeur. Toutes les références aux macros de valeur sont également précédées du signe égal pour signifier que la référence est à une macro de valeur au lieu d’une macro de bloc.
Les références aux macros de blocs peuvent imbriquer des listes de paramètres à une profondeur arbitraire. Les macros de blocs sont référencées à l’aide de *InsertBlock: NameOfBlockMacro. Le nom de la macro de bloc n’est pas précédé d’un signe égal, car il ne s’agit pas d’une référence à une macro de valeur. Cette syntaxe diffère de la syntaxe GPD.
L’exemple de code suivant montre comment utiliser des macros de blocs.
*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)