Compartilhar via


Macros de bloco GDL

Macros de bloco são usadas para representar uma ou mais entradas GDL. Eles são definidos dentro do constructo *BlockMacros.

O nome da instância do constructo *BlockMacros torna-se o nome da macro de bloco e as entradas contidas nas chaves do constructo *BlockMacros tornam-se o conteúdo dessa macro de bloco. O nome da macro deve ser um tipo de nome de símbolo. As entradas contidas com uma definição de macro de bloco devem ser concluídas.

Se houver entradas de construção, elas deverão ser concluídas dentro da definição de macro. Em outras palavras, o conteúdo de uma definição de macro de bloco não pode alterar o nível de aninhamento.

Uma macro de bloco pode conter outras definições de macro de bloco ou valor e diretivas de namespace, além de entradas de dados normais. As definições de macro aninhadas e as diretivas de namespace são avaliadas imediatamente e não aparecem no conteúdo da macro de bloco.

Macros de bloco podem conter referências a outras macros de bloco ou valor . O nome da instância do constructo *BlockMacros pode ser seguido por uma lista de argumentos formais entre parênteses. Qualquer referência a qualquer argumento formal dentro do corpo dessa definição de macro de bloco será substituída simbolicamente pelo parâmetro correspondente que é passado quando a macro de bloco é realmente referenciada.

Nota As declarações e referências de argumentos que serão usadas para passar referências de macro de valor são prefixadas com o sinal de igual (=) para indicar que o tipo de argumento é macro de valor. Todas as referências a macros de valor também são prefixadas com o sinal de igual para significar que a referência é para uma macro de valor em vez de uma macro de bloco.

Referências a macros de bloco podem aninhar listas de parâmetros para profundidade arbitrária. As macros de bloco são referenciadas usando *InsertBlock: NameOfBlockMacro. O nome da macro de bloco não é prefixado com um sinal de igual porque não é uma referência a uma macro de valor. Essa sintaxe é diferente da sintaxe gpd.

O exemplo de código a seguir mostra como usar macros de bloco.

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