Utilisation de nouvelles lignes dans la chaîne d'en-tête et de fin

Les chaînes d'en-tête et de fin sont utiles car elles ne sont générées que lorsque nécessaire, cela est particulièrement utile lorsque vous utilisez de nouvelles lignes '\n'. Elles sont ajoutées respectivement au début et à la fin du code généré, la chaîne d'en-tête et la chaîne de fin n'apparaissant pas dans le code généré.

Exemple

Vous souhaitez générer le nom d'une classe et ses attributs sous le format suivant (une ligne vide entre les attributs et la classe) :

Attribute 1  attr1
Attribute 2  attr2

Class

Vous pouvez insérer le séparateur "\n" après l'instruction .foreach pour vous assurer que chaque attribut s'affiche dans une ligne séparée. Vous pouvez également ajouter "\n\n " après l'instruction .endfor pour insérer une ligne vide après la liste d'attributs et avant le mot "Class".

.foreach (Attribute) ("\n")
Attribute %Code%
.endfor ("\n\n")
Class

Exemple supplémentaire

Considérons une classe nommée Nurse, ayant pour code de classe Nurse, et dotée de deux attributs :

Attribut

Type de données

Valeur initiale

NurseName

String

__

NurseGender

Char

'F'

Les templates suivants sont fournis à titre d'exemple, avec le texte généré pour chacune d'entre eux, ainsi qu'une description de chaque résultat :

Template 1

class "%Code%" {
 // Attributes
 .foreach_item(Attributes)
 %DataType% %Code%
  .if (%InitialValue%)
 = %InitialValue%
  .endif
 .next
 // Operations
 .foreach_item(Operations)
 %ReturnType% %Code%(...)
 .next
}

Texte généré 1

class "Nurse" {
 // Attributes String nurseName char nurseGender = 'F' // Operations}

Description 1

Au-dessous du code de classe, le code est généré sur une ligne. Il s'agit d'un exemple d'une macro de bloc (macro .if, .endif).

Template 2 (nouvelle ligne)

class "%Code%" {
 // Attributes
 .foreach_item(Attributes)
 %DataType% %Code%
  .if (%InitialValue%)
 = %InitialValue%
  .endif
 .next(\n)
 // Operations
 .foreach_item(Operations)
 %ReturnType% %Code%(...)
 .next(\n)
}

Texte généré 2

class "Nurse" {
 // Attributes String nurseName
 char nurseGender = 'F' // Operations}

Description 2

String nurseName et char nurseGender se trouvent sur deux lignes distinctes

Dans Template 1, String nurseName et char nurseGender se trouvaient sur la même ligne, alors que dans Template 2, l'ajout de \n à la fin de .next(\n) place String nurseName et char nurseGender sur deux lignes distinctes.

En outre, // Operations est affiché dans le résultat et ce, même en l'absence d'opération (voir Description 3).

Template 3 (blanc)

class "%Code%" {
 .foreach_item(Attributes, // Attributes\n,\n)
 %DataType% %Code%
  .if (%InitialValue%)
 = %InitialValue%
  .endif
 .next(\n)
 .foreach_item(Operations, // Operations\n,\n)
 %ReturnType% %Code%(...)
 .next(\n)
}

Texte généré 3

class "Nurse" {// Attributes
 String nurseName
 char nurseGender = 'F'
}

Description 3

L'espace entre .foreach_item(Attributes, et // Attributes\n,\n) n'est pas généré, comme indiqué dans le résultat suivant : class "Nurse" {// Attributes au lieu de .... { // Attributes

// Operations n'est pas affiché dans le résultat car il est placé dans la macro .foreach_item. Il est placé dans l'en-tête de la macro à cet effet.

Template 4 (blanc)

class "%Code%" {\n
 .foreach_item(Attributes," // Attributes\n",\n)
 %DataType% %Code%[ = %InitialValue%]
 .next(\n)
 .foreach_item(Operations," // Operations\n",\n)
 %ReturnType% %Code%(...)
 .next(\n)
}

Texte généré 4

class "Nurse" {
 // Attributes
 String nurseName
 char nurseGender = 'F'
}

Description 4

Le caractères guillemet ("") dans " // Attributes\n" permet d'insérer un espace comme indiqué dans le résultat : // Attributes

Remarque :

La nouvelle ligne qui précède immédiatement une macro est ignorée, de même que celle qui la suit, comme dans l'exemple suivant :

Jack .set_value(v, John) Paul yields: JackPaul

instead of: Jack Paul