Compartir a través de


Macros de bloque GDL

Las macros de bloque se usan para representar una o varias entradas de GDL. Se definen dentro de la construcción *BlockMacros.

El nombre de instancia de la construcción *BlockMacros se convierte en el nombre de la macro de bloque y las entradas contenidas en las llaves de la construcción *BlockMacros se convierten en el contenido de esa macro de bloque. El nombre de la macro debe ser un tipo de nombre de símbolo. Las entradas contenidas en una definición de macro de bloque deben completarse.

Si hay entradas de construcción, deben completarse dentro de la definición de macro. En otras palabras, el contenido de una definición de macro de bloque no puede cambiar el nivel de anidamiento.

Una macro de bloque puede contener otras definiciones de macros de bloque o valor y directivas de espacio de nombres además de entradas de datos normales. Las definiciones de macros anidadas y las directivas de espacio de nombres se evalúan inmediatamente y no aparecen en el contenido de la macro de bloque.

Las macros de bloque pueden contener referencias a otras macros de bloque o valor . El nombre de instancia de la construcción *BlockMacros puede ir seguido de una lista de argumentos formales entre paréntesis. Cualquier referencia a cualquier argumento formal dentro del cuerpo de esta definición de macro de bloque se reemplazará simbólicamente por el parámetro correspondiente que se pasa cuando realmente se hace referencia a la macro de bloque.

Nota Las declaraciones y referencias de argumentos que se usarán para pasar referencias de macro de valor tienen como prefijo el signo igual (=) para indicar que el tipo de argumento es una macro de valor. Todas las referencias a macros de valor también tienen como prefijo el signo igual para indicar que la referencia es a una macro de valor en lugar de a una macro de bloque.

Las referencias a macros de bloque pueden anidar listas de parámetros a profundidad arbitraria. Se hace referencia a macros de bloque mediante *InsertBlock: NameOfBlockMacro. El nombre de la macro de bloque no tiene como prefijo un signo igual porque no es una referencia a una macro de valor. Esta sintaxis difiere de la sintaxis gpD.

En el ejemplo de código siguiente se muestra cómo usar macros de bloque.

*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)