Macros de Control

Superior  Previo  Próximo

Los macros de control se utilizan para controlar el procesamiento y formateo de plantillas. Los tipos básicos de macros del control incluyen:

El macro de lista, para generar elementos múltiples, tales como atributos y operaciones.
Los macros de ramificación, que forman estructuras si-entonces-sino para ejecutar condicionalmente las partes de una plantilla.
El macro PI tiene efecto desde la siguiente línea no-vacía.
El macro de la función PI esta disponible y permite configurar PI a una variable y agrega la capacidad de ejecutar el PI que se generará antes de la siguiente línea.
El macro PI para formatear nuevas líneas en la salida.
Los macros de sincronización.

 

En general, los macros del control se nombran según "camel casing" (*).

 

Listas

La lista se utiliza para generar elementos múltiples. La estructura básica es:

 

%list=<TemplateName> @separator=<string> @indent=<string>[<conditions>]%

 

donde <string > es una cadena literal doblemente calificada y <TemplateName> puede referir a uno de los siguientes nombres de plantilla:

Namespace
Class
ClassImpl
Attribute
InnerClass
InnerClassImpl
Operation
OperationImpl
Parameter
ClassBase
ClassInterface
Custom Template, las plantillas personalizadas permiten al usuario definir sus propias plantillas. Para obtener más información dirigirse a Agregando una Plantilla Personalizada

<condiciones> es opcional y aparece en las mismas condiciones como las condiciones para este y sus informes.

 

Ejemplo:

%list="Attribute" @separator="\n" @indent = " " %

 

El atributo separador, denotada arriba por @separator, especifica el espacio que se debe utilizar entre cada ítem de la lista. Esto excluye el último item en la lista.

 

El atributo de indentación, denotado por @indent, especifica el espacio por el cual cada línea en la salida generada debe ser indentada.

 

El ejemplo anterior haría salir el resultado de procesar la plantilla Atributo, para cada elemento atributo de la clase objetivo. La lista resultante separaría e indentaría sus artículos por una sola línea nueva y dos espacios respectivamente. Si la clase objetivo tuviera algunos atributos estereotipados, serían generadas usando la plantilla apropiadamente especializada.

 

Hay algunos casos especiales a considerar al usar el macro de la lista:

Si la plantilla Attribute se utiliza como argumento del macro de lista, ésta también generará atributos derivados de asociaciones ejecutando la plantilla apropiada de LinkedAttribute.
Si la plantilla ClassBase se usa como un argumento al macro de lista, esto también generará bases de clase derivadas desde los vínculos en el modelo ejecutando la plantilla LinkedClassBase apropiada.
Si la plantilla ClassInterface se usa como un argumento al macro de lista, esto también generará bases de clase derivada desde los Vínculos en el modelo ejecutando la plantilla de LinkedClassInterface.
Si InnerClass o InnerClassImpl se utiliza como argumento del macro de lista, se generan estas clases usando las plantillas Clase e ClassImpl respectivamente. Estos argumentos dicen a EA que este debería procesar las plantillas basadas en las clases internas de la clase objetivo.

 

Ramificación (construcciones si-entonces-sino)

El CTF soporta una forma limitada de ramificación con las macros siguientes:

if
elseIf
endIf
endTemplate

 

La estructura básica de las macros if y elseIf:

%if <test> <operator> <test>%

donde <operador> puede ser uno de:

==
! =

 

y <test> puede ser uno de:

un literal de string, incluido dentro de comillas dobles.
una macro de substitución directa, sin estar incluidos entre símbolos porcentaje
una referencia variable.

 

Las ramas pueden ser anidadas, y las condiciones múltiples se pueden especificar usando:

y
o

Nota: Al especificar condiciones múltiples, "y" u "o" tienen el mismo orden de procedencia y las condiciones se procesan de izquierda a derecha.

 

Los macros endif o endTemplate se deben utilizar para significar el extremo de una rama. Además, el macro endTemplate hace que la plantilla vuelva inmediatamente, si la rama correspondiente se esta ejecutando.

 

Ejemplo:

%if elemType == "Interface"%

;

%else%

%OperationBody%

%endIf%

 

Ejemplo:

$bases=%list="ClassBase" @separator=", "%

$interfaces=%list="ClassInterface" @separator=", "%

%if $bases != "" and $interfaces != ""%

: $bases, $interfaces

%elseIf $bases != ""%

: $bases

%elseIf $interfaces != ""%

: $interfaces

%endIf%

 

La Macro PI

 

Hay dos medios principales de generar espacios en blanco desde las plantillas:

Usando explícitamente la nueva línea, los caracteres espacio y pestaña (\n, ,\t) como parte del Texto Literal.
Usando el macro PI para líneas de formato en la plantilla que resulta en sustituciones no vacías en la producción.

 

Por Defecto, cada plantilla que genera una sustitución no vacía también resulta una nueva linea que se produce en la producción. Esta conducta se puede cambiar a través del macro PI. 

 

Para demostrar el uso del macro PI, considerar la Plantilla de Operación C# determinada:

 

%opTag:"Attribute"%

%PI=" "%

%opTag:"unsafe"=="true" ? "unsafe" : ""%

%CONVERT_SCOPE(opScope)%

%opTag:"new"=="true" ? "new" : ""%

%opAbstract=="T" ? "abstract" : ""%

%opConst=="T" ? "sealed" : ""%

%opStatic=="T" ? "static" : ""%

%opTag:"extern"=="true" ? "extern" : ""%

%opTag:"delegate"=="true" ? "delegate" : ""%

%opTag:"override"=="true" ? "override" : ""%

%opTag:"virtual"=="true" ? "virtual" : ""%

%opReturnType%%opReturnArray=="T" ? "[]" : ""%

%opStereotype=="operator" ? "operator" : ""%

%opName%(%list="Parameter" @separator=", "%)

 

El PI predeterminado es  \n, entonces cualquier atributo estaría en su propia linea.

 

Las Líneas en blanco no tienen efecto en la producción.

 

Configurar el PI, entonces las claves se separan por un espacio.

 

Cualquier clave que no se aplica, es decir el macro produce un resultado vacío, no resultará en un espacio.

 

Solo un espacio se genera para esta linea.

 

La linea final en la plantilla no generará un espacio.

 

En el ejemplo de arriba queremos organizar macros para las claves varias verticalmente para que estén listos. Sin embargo en la salida, queremos que cada clave relevante sea separada por un espacio simple. Esto se logra por la linea: 

%PI=" "%

 

Tener en cuenta como no necesitamos especificar el espacio entre cada una de las claves posibles. Este espacio ya esta implicado configurando el PI a un solo espacio. Esencialmente el PI actúa como un mecanismo conveniente para formatear la salida desde adentro de las plantillas.

 

La estructura para configurar la instrucción del proceso es:

 

%PI=<value>%

 

donde <value> puede ser un string literal incluido entre comillas.

 

Los puntos siguientes se aplican al macro PI:

El valor de PI no se accede explícitamente.
Solo las líneas de plantilla que resultan en una sustitución no vacía causa que se genere el PI.
La última línea de plantilla no vacía causa que se genere el PI. 
El PI no es agregado a la última sustitución, indiferentemente de que línea de plantilla causó esa sustitución.

 

Los Macros de Sincronización

Los Macros de Sincronización se usan para proveer un formato para EA cuando se insertan nuevas secciones en el código fuente, durante la sincronización directa. Los valores para sincronizar macros deben ser configurados en la plantilla de Archivo.  

 

La estructura para configurar macros de sincronización es:

 

%<name>=<value>%

 

donde <name> puede ser uno de los macros listados abajo y <value> es un string literal incluido entre comillas.

 

Nombre del macro

Description

synchNewClassNotesSpace

Espacio para añadir a una nota de clase nueva. Valor predeterminado: \n

synchNewAttributeNotesSpace

Espacio para añadir a una nota de atributo nuevo. Valor predeterminado: \n

synchNewOperationNotesSpace

Espacio para añadir una nota de operación nueva. Valor predeterminado: \n

synchNewOperationBodySpace

Espacio para añadir un cuerpo de operación nuevo. Valor predeterminado: \n

synchNamespaceBodyIndent

Indent aplicado a clases dentro de espacios de nombres no globales. Valor predeterminado: \t