Les variables
Une variable est un identifiant qui peut avoir plusieurs valeurs, quoique seulement une à la
fois. La variable doit être déclarée avant d’être utilisée. Vous pouvez déclarer autant de
variables que vous voulez. Toutes les déclarations de variables doivent être placées avant
les définitions de règle dans un fichier gabarit. Une déclaration de variable respecte cette
syntaxe :
NEW [EXTERN] <variable_type> <variable_name> = <initial_value>;
Où <variable_name> est un identifiant valide et <variable_type> représente le type de
valeurs que la variable peut avoir. Les types de variable permis sont STRING, BOOLEAN et
INTEGER. Le mot-clé EXTERN est facultatif, quoiqu’il ne peut qu’être spécifié sur des variables
de type booléen. Une valeur initiale doit être définie pour chaque variable. Pour des
variables de type booléen, la valeur initiale est TRUE ou FALSE. Pour des variables de chaîne,
la valeur initiale est une chaîne de caractères placée entre guillemets ("). Pour des variables
d'entier, la valeur initiale doit être une expression d'entier valide. Voici des déclarations de
variables valides :
NEW BOOLEAN generateHeaders = TRUE;
NEW EXTERN BOOLEAN generateHtml = FALSE;
NEW STRING defaultName = "default";
NEW INTEGER indentation = 2;
Dès qu’elle est déclarée, une valeur peut être associée à une variable. L'attribution d’une
valeur à une variable est exécutée par la classe de règle SET. Cette classe de règle respecte
cette syntaxe :
<setrule_name> SET(<variable_name>, <variable_value>);
Où <setrule_name> représente le nom qui identifie la règle SET; <variable_name> représente
le nom d'une variable déclarée antérieurement et <variable_value> représente la
valeur qui sera inscrite dans la variable (en écrasant la valeur précédente); <variable_value>
dépend du type de variable.
Si la variable est de type STRING (qui signifie que <variable_name> a été déclaré avec le
mot-clé STRING), donc <variable_value> est, soit une règle qui devra être traité, soit une
expression de chaîne.
Si <variable_value> est une règle, son résultat sera inscrit dans la variable. Les règles de
toutes les classes peuvent attribuer des variables de type chaîne. Si <variable_value>
est une expression de chaîne, l'expression est évaluée et son résultat est inscrit dans la
variable. Voici un exemple de règle SET, où <variable_value> est une règle :
setLanguage SET(language, english); //english is a subrule
english TEMPL "English";
Voici un exemple de règle SET, où <variable_value> est une expression de chaîne :
NEW STRING english = "English"; //english is a string variable
setLanguage SET(language, STRING(english)); //STRING(english) is a string expression
Les deux exemples produisent le même résultat. Consultez la section Expressions de
chaînes pour plus de détails sur ces expressions.
Il est préférable de donner à <setrule_name> un nom tel que setX, si la variable impliquée
est nommée x. Ainsi, quand vous faites référence à cette règle SET dans une règle parent,
vous saurez quelle variable est impliquée. Par exemple, si nous avons :
templ TEMPL "$setLanguage;A new value has been assigned to
the language variable.";
nous savons que la valeur de la variable nommée ‘language’ changera au traitement de
templ. Le résultat de templ sera :
A new value has been assigned to the language variable.
Car le résultat d'une règle SET est toujours une chaîne vide. Le texte English n'est pas
montré à cette étape, il est seulement stocké dans la variable language. Pour obtenir la
valeur stockée dans une variable, vous employez une règle GET dont la syntaxe est :
<getrule_name> GET(<variable_name>);
Rappelez-vous, il est préférable de donner à <getrule_name> le nom getLanguage si la
variable impliquée est nommée language. Pour obtenir la valeur du langage et l'utilisation
dans une chaîne de gabarit, nous pouvons définir ces règles :
displayValue TEMPL "The current language is : $getLanguage;.";
getLanguage GET(language);
Si la valeur stockée dans la variable language est English, le résultat de displayValue
sera :
The current language is : English.