Les paramètres de génération des pages sont multiples et très évolutifs en fonction des générateurs. Leur enregistrement comme attributs des tables de la base de données oblige l'adaptation fréquente de sa structure et la définition superflue de beaucoup de valeurs non utilisée pour une page. Pour éviter ça, un attribut parameters dans les tables spaces et generators enregistre une liste de valeurs qui seront utilisées dans les processus de génération des pages ; chaque paramètre est de plus définit en cascade suivant l'arbre des espaces.
1. Format des paramètres
Chaque attribut parameters est un texte dont chaque ligne définit la valeur d'un paramètre.
Toutes les valeurs sont traitées comme des chaines de caractères.
1.1. Syntaxe d'une ligne
[+|–] cle_alphanum[(:| =>| =) (valeur|'valeur'|"valeur")] [# commentaire]
Une ligne comporte, dans l'ordre :
- un indicateur d'importance, facultatif ;
- un identifiant de paramètre, obligatoire ;
- un groupe valeur facultatif comprenant :
- un séparateur d'affectation « : » (non précédé d'une espace), « => » ou « = »,
- une chaine de valeur ;
- un groupe commentaire facultatif comprenant :
- un séparateur « # » de commentaires,
- une chaine de commentaire, facultatif.
Des espaces ou assimilées (tabulations, retour-chariot, saut de ligne...) peuvent être ajoutées entre les champs précédents ainsi qu'en début ou en fin de ligne.
Les lignes vides ou blanches ou ne comportant que des commentaires sont ignorées.
1.2. Indicateur d'importance
L'indicateur d'importance peut être l'un des suivants :
- le signe plus « + », indiquant que la valeur ne peut pas être redéfinie ;
- le signe moins « – », indiquant que la valeur ne peut pas être héritée.
1.3. Identifiant
Un identifiant est composé d'un ou plusieurs caractères parmi les lettres minuscules ou majuscules, les chiffres et le caractère « _ » de soulignement. La casse des lettres est significative.
Par convention, la partie précédent le premier souligné désignera le composant de référence.
1.4. Valeur
La valeur est extraite après le signe égale,
- soit entre deux apostrophes simples « ' » ;
- soit entre deux apostrophes doubles « '' » ;
- soit du premier caractère non blanc jusqu'au signe « # » de commentaire ou la fin de la ligne.
L'absence de signe égale et de valeur est équivalent à la valeur Vrai (true).
1.5. Valeur indirecte
Si la valeur est extraite après le signe égale commence par une étoile « * » (la valeur ne doit pas être entre apostrophes), alors la chaine qui suit l'étoile donne le nom de l'identifiant dont il faut prendre la valeur.
1.6. Valeur « nil »
Une valeur peut être supprimée en lui donnant la valeur « nil
» sans la placer entre apostrophes. Son usage est utile pour arrêter sa transmission lors de la collecte des valeurs décrite au chapitre suivant.
NB : Placée entre apostrophes ("nil" ou 'nil'), la valeur sera réelle et celle des trois lettres n, i, et l.
1.7. Valeurs « true » et « false »
De même, les valeurs Vrai (true) et Faux (false) sont définies en plaçant les mentions « true » et « false » directement après le signe égale (=), sans apostrophes simples ou doubles.
1.8. Exemples
Syntaxe correcte : + p9001_contact = 'Atelier' site_code=CM +valeur_vide footer_with_comments => nil – préfixe: *site_code |
Syntaxe incorrecte :
= indicateur incorrect cle : valeur # espace avant :
param = 'valeur # pas de 2° apostrophe
couleur = *bordure (si bordure non définie) |
Syntaxe ambigüe :
fond_clair = #336699 écrire : fond_clair = '#336699' |
interprétée comme
fond_clair = '' → # commentaire 336699 |
2. Priorité des valeurs
2.1. Ordre de collecte des valeurs
Les attributs parameters sont collectés et concaténés sur les enregistrements, dans l'ordre suivant :
- du générateur associé à l'espace courant ;
- des ancêtres de l'espace courant, en partant de l'espace racine jusqu'à cet espace courant.
La liste concaténée est alors analysée de la première à la dernière ligne.
2.2. Gestion des collisions
Si la valeur d'un même paramètre est définie plusieurs fois, celle qui sera prise en compte sera :
- la première marquée importante (par le signe +),
- sinon la dernière rencontrée, une valeur peu importante (signe –) étant ignorée si elle n'est pas sur l'espace courant.
Une valeur importante (+) ne peut donc être redéfinie.
Une valeur peu importante (–) sur un espace n'est prise en compte que pour cet espace. Sur un générateur, elle sera ignorée, car effacée au niveau des espaces.
NB : Il est possible de définir une valeur applicable sur toute une branche d'espaces sauf à sa racine. Pour ça, il faut la déclarer deux fois dans les paramètres de la racine, une première fois normalement, puis comme valeur nulle peu importante.
Ex. : |
couleur_fond: yellow - couleur_fond: '#3cc' |
footer_with_comments - footer_with_comments: nil |
La première ligne définit la valeur qui sera héritée par les espaces fils, la seconde la redéfinit localement pour l'espace courant. Il est à noter dans l'exemple de droite que la première ligne définit une valeur vide (pas de valeur) et la seconde la supprime (pseudo-valeur nil
).