SmartDoc : Différence entre versions
(26 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 12 : | Ligne 12 : | ||
<h2 id="metadonn-es-datastore-options-list-labels">Metadonnées, datastore, options, list labels</h2> | <h2 id="metadonn-es-datastore-options-list-labels">Metadonnées, datastore, options, list labels</h2> | ||
[[Fichier:Smartdoc options 1.png|sans_cadre|1200px|néant]] | [[Fichier:Smartdoc options 1.png|sans_cadre|1200px|néant]] | ||
− | + | === Métadonnées === | |
+ | |||
<p> C'est un simple espace de commentaire </p> | <p> C'est un simple espace de commentaire </p> | ||
− | + | ||
+ | === DataStore === | ||
+ | |||
<p>[[DataStore]] : C’est l'id du [[DataStore]] auquel les variables utilisées dans le document sont associées. Par défaut, mainstore.</p> | <p>[[DataStore]] : C’est l'id du [[DataStore]] auquel les variables utilisées dans le document sont associées. Par défaut, mainstore.</p> | ||
− | + | ||
− | + | === Options === | |
− | < | + | |
− | + | La colonne "Options" permet de définir des options relatives au document courant. | |
− | + | Cette cellule attend un contenu au format YAML. | |
− | + | ||
− | + | ==== L'option "title-num-display" ==== | |
− | < | + | |
− | < | + | L'option "title-num-display" permet de définir le format d’affichage pour la numérotation de chaque titre du document. |
− | + | ||
− | + | Si cette option vaut <code>none</code> ou <code>disabled</code> les titres et les références affichées dans ce document seront "désactivées" et ne s'afficheront donc pas. | |
− | < | + | |
+ | Au contraire, pour personnaliser le format de la numérotation, cette option attend une liste clés-valeurs (texte indenté, YAML), où chaque clé est un niveau de titre (de 1 à 6 inclus), et pour chaque niveau, trois attributs peuvent être saisis : <code>style</code>, <code>format</code>, et <code>format-ref</code> (voir exemple imagée ci-dessous). | ||
+ | |||
+ | Les valeurs possible pour l'attribut <code>style</code> sont : | ||
+ | :: - "decimal" : numérotation décimale classique en chiffre arabe (1, 2 , 3 …) ; | ||
+ | :: - "upper-roman" : nombre romain majuscule (I, II, III, IV etc.) ; | ||
+ | :: - "lower-roman" : nombre romain minuscule (i, ii, iii, iv etc.) ; | ||
+ | :: - "upper-alpha" : numérotation alphabétique majuscule (A, B, C, D, E) ; | ||
+ | :: - "lower-roman" : numérotation alphabétique minuscule (a, b, c, d...) ; | ||
+ | :: - "none" : aucune numérotation pour ce niveau de titre ; | ||
+ | |||
+ | L'attribut <code>format</code> attend une chaîne de caractère qui permet de représenter le contexte (préfixe, suffixe…) de la numérotation à afficher avant chaque Titre. | ||
+ | Cette chaîne doit contenir au moins une fois un $1, $2, $3 … $6, qui seront remplacés par la numérotation pur le niveau concerné. | ||
+ | L'attribut <code>format-ref</code> fonctionne de la même façon que l'attribut précédent mais il permet de représenter la numérotation à afficher dans chaque référence intégrée au sein du document (voir [[Smartdoc/titre-et-references|SmartDocument, faire une référence à un titre]]). | ||
+ | |||
+ | Ces attributs doivent contenir au moins une fois un code numéroté tel que <code>$1</code>, <code>$2</code>, <code>$3</code> … <code>$6</code>, qui permettra d'être remplacé par la numérotation du niveau concerné. | ||
+ | |||
+ | '''Exemple''' : le format “<code>$1)</code>“ s'affichera “''A)''”, "''B)''", "''C)''" etc. (s'il est combiné au style <code>"upper-alpha"</code>), ou "i)", "ii)", "iii)" (style <code>"lower-roman"</code>). | ||
+ | |||
+ | '''Autre exemple''' : “<code>Article $1.$2</code>“ s'affichera “Article 1.A”, "Article 1.B", "Article 2.A" … (combiné avec un niveau 1 au style <code>décimal</code> et un niveau 2 en <code>upper-roman</code>). | ||
+ | |||
+ | '''Exemple complet :''' | ||
[[Fichier:Gestion des titres.png|frame|none|Gestion du format des titres]] | [[Fichier:Gestion des titres.png|frame|none|Gestion du format des titres]] | ||
− | + | D'après la configuration de l'image ci-dessus, les titres : | |
− | + | * de niveau 1 seront de la forme : “ARTICLE 8 - Lorem ipsum” | |
− | + | * de niveau 2 seront de la forme : “2 Lorem ipsum ” | |
− | + | * de niveau 3 seront de la forme : “2-5 Lorem ipsum ” | |
− | + | * de niveau 4 seront de la forme : “2-5-10 Lorem ipsum ” | |
− | + | * de niveau 5 seront de la forme : “a. Lorem ipsum ” | |
− | + | * de niveau 6 seront de la forme : “ iv ) Lorem ipsum | |
− | + | ||
+ | === List-Labels === | ||
<p><strong>Introduction</strong></p> | <p><strong>Introduction</strong></p> | ||
<p>List-Labels : cette colonne permet d’effectuer une conversion entre des choix d’une variable de type “choices” du SmartForm et le SmartDoc. Autrement dit, elle permet d'établir des "dictionnaires de correspondance" permettant de faire correspondre un libellé à une valeur.</p> | <p>List-Labels : cette colonne permet d’effectuer une conversion entre des choix d’une variable de type “choices” du SmartForm et le SmartDoc. Autrement dit, elle permet d'établir des "dictionnaires de correspondance" permettant de faire correspondre un libellé à une valeur.</p> | ||
Ligne 117 : | Ligne 142 : | ||
<p>C’est ici qu’il faut entrer le contenu “brut” du texte : c’est-à-dire le corps du texte.</p> | <p>C’est ici qu’il faut entrer le contenu “brut” du texte : c’est-à-dire le corps du texte.</p> | ||
<p>On peut se servir des [https://developer.mozilla.org/fr/docs/Apprendre/Commencer_avec_le_web/Les_bases_HTML balises HTML basiques] pour mettre en forme le texte rentré ici.</p> | <p>On peut se servir des [https://developer.mozilla.org/fr/docs/Apprendre/Commencer_avec_le_web/Les_bases_HTML balises HTML basiques] pour mettre en forme le texte rentré ici.</p> | ||
− | <p>Les balises | + | <p>Les balises suivantes sont utilisables</p> |
<p> | <p> | ||
* a, | * a, | ||
Ligne 129 : | Ligne 154 : | ||
* li, | * li, | ||
* hr, | * hr, | ||
− | * span | + | * span, |
− | </p> | + | * br |
+ | |||
+ | </p> </br> | ||
+ | <h4 id="bases">Avertissement sur l'utilisation des balises HTML </h4> | ||
+ | <p>Veuillez prendre en compte qu'une fois que le système détecte qu'un [[Élément_de_contenu|éléments de contenu]] utilise directement une ou plusieurs balises HTML, l'ensemble de l'élément de contenu est converti au format HTML.</p> | ||
+ | <p>En conséquence, l'élément de contenu concerné ne peut <b>plus prendre en compte tout autre élément de mise en forme non-HTML</b>.</p> </br> | ||
+ | Par exemple, un saut de ligne inséré à l'aide de la combinaison ALT + ENTREE ne sera plus pris en compte dans cet élément de contenu. Il conviendra alors d'utiliser la balise <nowiki></br></nowiki> pour sauter une ligne. | ||
==== Contenu spécial ou dynamique ==== | ==== Contenu spécial ou dynamique ==== | ||
Ligne 147 : | Ligne 178 : | ||
:::: Une chaine de caractère étant retournée, il est possible d’appliquer les filtres classiques. | :::: Une chaine de caractère étant retournée, il est possible d’appliquer les filtres classiques. | ||
− | :::: Exemple : Comme décrit dans la section <code>{@ref:droit-acheteur:uppercase}</code>. | + | :::: Exemple : ''Comme décrit dans la section'' <code>{@ref:droit-acheteur:uppercase}</code>. |
:::: Le traitement <code>:num</code> peut-être appliqué dans la syntaxe afin d’afficher la référence sous forme numérique et tenant compte des titres parents. | :::: Le traitement <code>:num</code> peut-être appliqué dans la syntaxe afin d’afficher la référence sous forme numérique et tenant compte des titres parents. | ||
:::: Exemple : ''Comme décrit dans la section ''<code>{@ref:droit-acheteur:num}</code>… => ''Comme décrit dans la section '' '''3.1.1.2''' | :::: Exemple : ''Comme décrit dans la section ''<code>{@ref:droit-acheteur:num}</code>… => ''Comme décrit dans la section '' '''3.1.1.2''' | ||
Ligne 156 : | Ligne 187 : | ||
:: — <code>{@summary}</code>Ajout d’un sommaire automatique : il est possible d’ajouter un sommaire automatique au document (table of contents) en utilisant la syntaxe suivante : <code>{@summary}</code> | :: — <code>{@summary}</code>Ajout d’un sommaire automatique : il est possible d’ajouter un sommaire automatique au document (table of contents) en utilisant la syntaxe suivante : <code>{@summary}</code> | ||
− | :: — <code>{ @doc-meta(title) }</code> : permet d'insérer une méta-donnée du document courant. Les 3 paramètres possibles sont : <code>title</code>, <code>description</code>, ou <code>id</code>. Pratique, par exemple, pour citer le titre du document au sein du contenu, malgré peut-être la présence d'un clausier et de blocs injectés d'un autre document. | + | :: — <code>{ @doc-meta(title) }</code> : permet d'insérer une méta-donnée du document courant. Les 3 paramètres possibles sont : <code>title</code>, <code>description</code>, ou <code>id</code>. Pratique, par exemple, pour citer le titre du document au sein du contenu, malgré peut-être la présence d'un clausier et de blocs injectés d'un autre document. |
+ | |||
+ | ==== Comment rendre dynamique le contenu d'un [[SmartDoc]] ? ==== | ||
+ | |||
+ | Pour rendre dynamique le contenu du SmartDoc, il est possible de lui intégrer les valeurs des variables telles qu'elles ont été collectée dans un formulaire, ou calculée via une variable dynamique etc. | ||
+ | |||
+ | La syntaxe pour intégrer un contenu dynamique est reconnaissable car il est systématiquement placé entre accolades : <code>{ … }</code>. | ||
+ | |||
+ | Une variable peut être intégrée de façon brute (Exemple : ''"Je m'appelle { PRENOM }."''). | ||
+ | L'affichage brut pouvant parfois être trop limitatif, une syntaxe de "traitements SmartDoc" est disponible. Par exemple, le traitement <code>:uppercase</code> appliqué sur une variable la fera afficher en majuscule. Exemple :: ''"Je m'appelle <code>{ PRENOM:uppercase }</code>."''). | ||
− | |||
− | |||
− | |||
<h5 id="les-primitives">Les primitives</h5> | <h5 id="les-primitives">Les primitives</h5> | ||
<p>Une primitive est un élément qui a une valeur.</p> | <p>Une primitive est un élément qui a une valeur.</p> | ||
Ligne 167 : | Ligne 204 : | ||
Exemple : | Exemple : | ||
Le vendeur, né le <code>{DATE_NAISSANCE}</code>, à <code>{VILLE_NAISSANCE}</code> ... </p> | Le vendeur, né le <code>{DATE_NAISSANCE}</code>, à <code>{VILLE_NAISSANCE}</code> ... </p> | ||
− | + | ||
− | <p>Les traitements peuvent être définies comme une modification appliquée sur | + | ==== Les traitements dans le SmartDoc ==== |
+ | |||
+ | <p>Les traitements peuvent être définies comme une modification appliquée sur un contenu. Par exemple, le traitement <code>uppercase</code> permet de mettre en majuscule une primitive de catégorie chaîne-de-caractère. </p> | ||
<p>Pour appliquer un traitement sur une primitive, on utilise le signe : <code>:</code> Ce qui donne Mon prénom est <code>{PRENOM:uppercase}</code> qui donne Mon prénom est DAMIEN même quand la variable <code>PRENOM</code> vaut “DaMien”.</p> | <p>Pour appliquer un traitement sur une primitive, on utilise le signe : <code>:</code> Ce qui donne Mon prénom est <code>{PRENOM:uppercase}</code> qui donne Mon prénom est DAMIEN même quand la variable <code>PRENOM</code> vaut “DaMien”.</p> | ||
<p>Comme vu précédemment, pour intégrer une valeur avec un traitement, on procède en utilisant : <code>:</code></p> | <p>Comme vu précédemment, pour intégrer une valeur avec un traitement, on procède en utilisant : <code>:</code></p> | ||
Ligne 174 : | Ligne 213 : | ||
Le vendeur s’appelle <code>{PRENOM:uppercase}</code></p> | Le vendeur s’appelle <code>{PRENOM:uppercase}</code></p> | ||
<p>Il est possible d'enchaîner les traitements. </p> | <p>Il est possible d'enchaîner les traitements. </p> | ||
− | <p><strong>Exemple :</strong> | + | <p><strong>Exemple :</strong>L'acheteur a payé <code>{PRIX:letters:uppercase}</code> euros. |
− | L'acheteur a payé <code>{PRIX:letters:uppercase}</code> euros. | ||
Ici, la valeur contenue dans la variable "PRIX" sera d'abord convertie en lettres, puis mise automatiquement en MAJUSCULES. | Ici, la valeur contenue dans la variable "PRIX" sera d'abord convertie en lettres, puis mise automatiquement en MAJUSCULES. | ||
On obtiendra un résultat du type : "L'acheteur a payé TRENTE euros", alors que la valeur de départ sera "30".</p> | On obtiendra un résultat du type : "L'acheteur a payé TRENTE euros", alors que la valeur de départ sera "30".</p> | ||
<p><strong>A noter</strong> : les traitements peuvent s’appliquer aussi sur de simples chaînes de caractères et pas seulement des variables. Ex : L'acheteur a payé {"32 000":letters:uppercase} euros.</p> | <p><strong>A noter</strong> : les traitements peuvent s’appliquer aussi sur de simples chaînes de caractères et pas seulement des variables. Ex : L'acheteur a payé {"32 000":letters:uppercase} euros.</p> | ||
− | < | + | |
− | <p> | + | ==== Traitements disponibles et syntaxe spécifique ==== |
+ | |||
+ | <p><code>:uppercase</code> : ne s'applique que sur une chaine de caractères, et permet de forcer l’affichage de la chaîne en majuscule.<br/> | ||
+ | : Exemple: Avec la variable VAR qui vaudrait "Hello", <code>{ VAR:uppercase } world!</code> => ''"HELLO world!"''. | ||
+ | </p><br/> | ||
+ | <p><code>:lowercase</code> : ne s'applique que sur une chaine de caractères, et permet de forcer l’affichage de la chaîne en minuscule.</p> | ||
<br/> | <br/> | ||
− | <p><code>: | + | <p><code>:capitalize</code> : permet de passer en majuscule la première lettre de chaque mot, et ne s'applique que sur une chaine de caractères. <br/> |
+ | : Exemple: <code>NOM:capitalize</code> => ''"Jean Baptiste vous salue"'' avec la variable NOM qui vaudrait ''"jean baptiste"''. <br/> | ||
+ | : Option : Il est possible de fournir un paramètre (valeur 1 ou "yes") à ce traitement pour indiquer que seule la première lettre du premier mot doit être mise en majuscule. Exemple : <code>NOM:capitalize(yes)</code> => ''"Jean baptiste vous salue"'' </p> | ||
<br/> | <br/> | ||
− | <p><code>: | + | <p><code>:letters</code> : permet de la convertir la valeur numérique associée en "toutes-lettres" (Français). Ne s'applique que sur une valeur numérique.<br/> |
− | <br/> | + | : Par exemple : <code>{ 312:letters }</code> => ''"Trois-cent-douze"'').<br/> |
− | < | + | : Il existe aussi des formatages spéciaux pour les devises ou certaines unités particulières permettant ainsi de mieux nommer les décimales et d'ajuster automatiquement les singuliers / pluriels. <br/> |
− | <br/> | + | : Le code de formatage est passé comme paramètre du traitement. Les codes existants sont les devises : <code>EUR</code>, <code>USD</code>, <code>CAN</code>, <code>CHF</code>, et l'unité <code>HECTARE</code>. <br/> |
− | + | : Exemple : | |
− | + | :: - <code>{ 12.03:letters(EUR) }</code> => ''"douze euros et trois centimes"'' <br/> | |
+ | :: - <code>{ 13.01:letters(EUR) }</code> => ''"Treize euros et un centime"'' (remarquer le singulier à "centime"). <br/> | ||
+ | :: - <code>{ 0.14:letters(EUR) }</code> => ''"quatorze centimes"'' (remarquer l'absence du nombre entier). <br/> | ||
+ | :: - <code>{ 1.14:letters(USD) }</code> => ''"un dollar des États-Unis et quatorze cents"'' (remarquer l'unité en dollar et singulier à dollar). <br/> | ||
+ | :: - <code>{ 10.560:letters(USD) }</code> => ''"dix dollars des États-Unis et cinquante-six cents"''. <br/> | ||
+ | :: - <code>{ 5.12:letters(HECTARE) }</code> => ''"cinq hectares et douze ares"''. <br/> | ||
+ | :: - <code>{ 0:letters(EUR) }</code> => ''"zero euro"''. <br/> | ||
+ | </p> | ||
<br/> | <br/> | ||
<p><code>:img</code> : transforme une chaine de caractère (url) en image dans le document. Ex : <code>{"https://api.memegen.link/images/puffin.jpg":img}</code> va permettre d'intégrer l'image présente à cette URL dans le document. | <p><code>:img</code> : transforme une chaine de caractère (url) en image dans le document. Ex : <code>{"https://api.memegen.link/images/puffin.jpg":img}</code> va permettre d'intégrer l'image présente à cette URL dans le document. | ||
Ligne 196 : | Ligne 248 : | ||
<br/> | <br/> | ||
<p><code>:num</code>: (uniquement pour les références). Pour une référence à un titre, affiche son numéro au lieu d’afficher le titre. | <p><code>:num</code>: (uniquement pour les références). Pour une référence à un titre, affiche son numéro au lieu d’afficher le titre. | ||
− | Exemple : </code>Comme décrit dans la section {@ref:droit-acheteur:num}, vous...</code>. Le fonctionnement des références croisées est décrit en détail [[http://wiki.hercule.co:3002/index.php/Smartdoc/titre-et-references|ici | + | Exemple : </code>Comme décrit dans la section {@ref:droit-acheteur:num}, vous...</code>. Le fonctionnement des références croisées est décrit en détail [http://wiki.hercule.co:3002/index.php/Smartdoc/titre-et-references|ici]<br/> |
+ | Exemple : <code>"Comme décrit dans la section {@ref:droit-acheteur:num}, vous..."</code>. Le fonctionnement des références croisées est décrit en détail [http://wiki.hercule.co:3002/index.php/Smartdoc/titre-et-references|ici]</p> | ||
<br/> | <br/> | ||
− | <p><code>: | + | |
+ | <p><code>:numeral</code>: (uniquement pour les valeurs numériques). Permet de transformer un nombre en sa version numérale. Ex: <code>3</code> => <code>3ème</code>. Ce traitement accepte le paramètre "m" ou "f" ("f" par défaut), afin de résoudre le 1 => "1ère, ou 1 => "1er".</p> | ||
<br/> | <br/> | ||
− | <p><code>:french-date</code> : ne s'applique que sur une date ou une chaîne de caractère au format "YYYY-MM-DD" (format international). Ce traitement permet de transformer la date fournie dans le format Français "jj/mm/aaaa" | + | |
+ | <p><code>:tel</code>: Permet de vérifier et de transformer une chaîne ou un nombre en numéro de téléphone (avec les bons espacements etc.). Ce traitement peut être utile pour éviter que le numéro de téléphone ne soit interprété comme un nombre et ne soit formaté avec les espacements des milliers etc. <br/> | ||
+ | Ce traitement accepte deux paramètres facultatifs : <br/> | ||
+ | : - Le premier concerne son formatage : <code>"national"</code> (par défaut, ex:''06 62 04 63 55'') indique que le numéro s'affichera dans son format national, <code>"international"</code> (format ''+33 662 04 63 55''), ou <code>"raw"</code> (tel que la chaîne fournie, sans formatage).<br/> | ||
+ | : - Le second paramètre permet d'indiquer d'être silencieux. Par défaut, si le numéro fourni n'est pas un numéro valide, un texte rouge apparaitra pour l'indiquer. Si ce second paramètre indique <code>true</code>, alors le traitement restera silencieux et, en cas de numéro invalide, le traitement ne renverra rien (chaîne vide).<br/> | ||
+ | : Exemple: <code>{ MA_VAR_TEL:tel(international, true) }</code>. | ||
+ | </p> | ||
+ | |||
+ | <br/> | ||
+ | |||
+ | <p><code>:date-format</code> : permet de forcer l'affichage d'une chaine sous forme de date, ou pour formater une date dans un format différent. | ||
+ | :: Par défaut, si aucun paramètre n'est précisé, le format "dd/MM/yyyy" sera utilisé. | ||
+ | :: Un paramètre peut être fourni pour indiquer le format souhaité ([https://unicode-org.github.io/icu/userguide/format_parse/datetime/#datetime-format-syntax voir la norme Unicode ici]). | ||
+ | :: Ex: <code>MA_DATE:date-format('d MMMM Y')</code> pour afficher la date avec le mois en toutes lettres.</p> | ||
+ | <br/> | ||
+ | |||
+ | <p><code>:french-date</code> ou <code>:french-datetime</code> : ''❌ Deprecated depuis 02/2020 : depuis la v0.10 car un formateur "fr" est appliqué par défaut sur variables de Dates ou les chaînes ayant un format de date.'' Ce traitement ne s'applique que sur une date ou une chaîne de caractère au format "YYYY-MM-DD" (format international). Ce traitement permet de transformer la date fournie dans le format Français "jj/mm/aaaa". </p> | ||
+ | |||
+ | |||
+ | |||
<br/> | <br/> | ||
<p><code>:num-format</code> : ne s'applique que sur une valeur numérique, et permet de la formater pour son affichage. Ce traitement peut prendre 3 paramètres '''facultatifs'''. <br/> | <p><code>:num-format</code> : ne s'applique que sur une valeur numérique, et permet de la formater pour son affichage. Ce traitement peut prendre 3 paramètres '''facultatifs'''. <br/> | ||
Ligne 215 : | Ligne 288 : | ||
<br/> | <br/> | ||
− | + | ||
+ | <code>:join</code> : limité à une variable de liste plate (issue d'un [[Fields-Form|multiples-choices]] principalement) → permet d'afficher les différentes valeurs de la liste sous la forme suivante : <code>Valeur1, Valeur2, Valeur3, et Valeur4</code>. Les différentes valeurs contenues dans la variable sont affichées les unes à la suite des autres, séparées par des virgules; la dernière valeur est précédée de la conjonction de coordination <code>et</code>. | ||
:: Il est possible de personnaliser le séparateur, par exemple <code>LIST:join(" ou ")</code> → renvoie <code>Valeur1 ou Valeur2 ou Valeur3</code>. | :: Il est possible de personnaliser le séparateur, par exemple <code>LIST:join(" ou ")</code> → renvoie <code>Valeur1 ou Valeur2 ou Valeur3</code>. | ||
− | :: Et il est même possible de personnaliser indépendamment le séparateur du dernier élément grâce à un second paramètre. Exemple <code>LIST:join(" ou ", " ou bien même ")</code> → renvoie <code>Valeur1 ou Valeur2 ou bien même Valeur3</code>. | + | :: Et il est même possible de personnaliser indépendamment le séparateur du dernier élément grâce à un second paramètre. Exemple <code>LIST:join(" ou ", " ou bien même ")</code> → renvoie <code>Valeur1 ou Valeur2 ou bien même Valeur3</code>. |
+ | |||
<br/> | <br/> | ||
Ligne 233 : | Ligne 308 : | ||
A savoir : un saut de ligne se note <code>"\n"</code>, il est donc aussi possible de remplacer, par exemple, des tirets <code>-</code> par des sauts de ligne avec l'expression <code>ADDRESS:string-replace("\n", "-")</code>. | A savoir : un saut de ligne se note <code>"\n"</code>, il est donc aussi possible de remplacer, par exemple, des tirets <code>-</code> par des sauts de ligne avec l'expression <code>ADDRESS:string-replace("\n", "-")</code>. | ||
</p> | </p> | ||
+ | |||
+ | <br/> | ||
+ | |||
+ | <p><code>:default("texte par défaut")</code> permet de définir une valeur "par défaut" à afficher dans le SmartDoc si la variable sur laquelle le filtre est appliqué est vide.</p> | ||
+ | |||
+ | |||
+ | <code>:item-of(LISTE, 'SOUSVAR')</code> permet d'obtenir l'élément d'une liste à partir de sa clé (équivalent d'un <code>get_value(…)</code> côté SmartDoc). Le premier paramètre correspond à la liste concernée, et le deuxième (facultatif) à l'éventuelle sous-variable à récupérer.<br/> | ||
+ | :: '''''Exemple :''''' <code>BEST_EMPLOYEE_KEY:item-of(EMPLOYES, 'NOM')</code> | ||
+ | |||
+ | |||
+ | <code>:item-by-key(LISTE)</code> est équivalent au <code>:item-of</code> précédent mais permet d'obtenir un élément grâce à l'index et non pas de sa clé. <br/> | ||
+ | :: '''''Exemple :''''' <code>3:item-by-key(EMPLOYES_NAMES)</code> (obtenir le 3ème noms de la liste). | ||
+ | |||
+ | |||
+ | |||
+ | |||
Ligne 248 : | Ligne 339 : | ||
Quand cette option est à “true”, le titre sera considéré comme un “titre d’article”. Il sera donc préfixé par "ARTICLE 1 - " ou le nombre “1” sera remplacé par l’index de l’article en question.</p> | Quand cette option est à “true”, le titre sera considéré comme un “titre d’article”. Il sera donc préfixé par "ARTICLE 1 - " ou le nombre “1” sera remplacé par l’index de l’article en question.</p> | ||
*<code>title-no-count</code> (facultatif) : valeur booléenne attendue. Par défaut, la valeur est “false”. Quand cette option est à “true”, le titre ne sera pas numéroté, ni dans les sommaires, ni préfixe par aucun type de numérotation. | *<code>title-no-count</code> (facultatif) : valeur booléenne attendue. Par défaut, la valeur est “false”. Quand cette option est à “true”, le titre ne sera pas numéroté, ni dans les sommaires, ni préfixe par aucun type de numérotation. | ||
− | + | ||
− | + | === Styles === | |
− | < | + | |
− | + | La colonne Styles est facultative, et permet de personnaliser les styles de la ligne de contenu concernée. | |
− | + | ||
− | + | Les styles sont fournies dans un format inspiré de la norme [https://www.w3schools.com/css CSS] (mais fortement simplifiée). | |
− | + | Ce format permet de définir plusieurs instructions stylistiques, chacune se terminant par un point-virgule (<code>;</code>) et un saut de ligne. Exemple d'une cellule dont le texte devra être en taille 18px et dans la couleur rouge (''#FF0000'' en couleur hexadécimale) : | |
− | + | font-size:18px; | |
− | + | color:#FF0000; | |
− | + | ||
− | < | + | Chaque instruction est donc formée : d'un attribut de style (voir la liste ci-dessous), puis d'un séparateur (caractère <code>:</code>), puis de la valeur du style souhaité, et se termine par un point-virgule (<code>;</code>) et un saut de ligne. |
− | + | Il est autorisé de placer un espace après le séparateur "<code>:</code>" mais attention à ce que ce espace ne soit pas "particulier" (espace insécable etc.) car cela mettrait en danger l'interprétation du style et il se peut qu'il ne soit pas du tout pris en compte. | |
− | < | + | |
− | < | + | Les instructions de styles autorisées sont : |
− | + | ||
− | <code> | + | :: '''Définir une police de caractère spécifique :''' |
− | + | :::: L'attribut “<code>font-family</code>” permet de spécifier la police à utiliser. | |
− | <code> | + | :::: Plusieurs noms de police peuvent être proposées (dans l'ordre de priorité). Si le lecteur (navigateur, logiciel de traitement de texte…) utilisé ne supporte pas la première police, le système tentera d’utiliser la deuxième police, puis la troisième, ainsi de suite ... |
− | + | :::: Exemple : <code>font-family:Times New Roman, Times;</code> | |
− | <code> | + | :::: Dans cet exemple, on prévoit d’utiliser Times New Roman en priorité. Le cas échéant, on utilisera "Times". |
+ | |||
+ | :: '''Définir la taille du texte''' | ||
+ | :::: <code>font-size:14px;</code> | ||
+ | :::: Dans cet exemple, la taille du texte sera forcée à 14px. | ||
+ | |||
+ | :: '''Italique :''' | ||
+ | :::: <code>font-style:italic;</code> | ||
+ | |||
+ | :: '''Gras :''' | ||
+ | :::: <code>font-weight:bold</code> | ||
+ | |||
+ | :: '''Souligner le texte :''' | ||
+ | :::: <code>text-decoration:underline;</code></p> | ||
+ | |||
+ | :: '''Alignement :''' | ||
+ | :::: <code>text-align:right;</code> (aligner à droite) | ||
+ | :::: <code>text-align:left;</code> (aligner à gauche) | ||
+ | :::: <code>text-align:center</code> (centrer sur la page) | ||
+ | :::: <code>text-align:justify</p></code> (justifier) | ||
+ | |||
+ | :: '''Indentation :''' | ||
+ | :::: <code>indentation-left: 200;</code> (Indenter à gauche de 200 ''twips'', soit environ 8 pixels ou 10pt) | ||
+ | :::: <code>indentation-right: 200;</code> (Idem que pour l'indentation gauche mais à partir de la droite) | ||
+ | :::: <code>indentation-first-line: 200;</code> (Indenter à gauche de 200 ''twips'' mais uniquement la première ligne du paragraphe) | ||
+ | |||
+ | :: '''Espacement de paragraphe :''' | ||
+ | :::: <code>spacing-after: 200;</code> (Ajouter un espacement de 200 ''twips'', soit environ 8 pixels ou 10pt, '''après''' le paragraphe) | ||
+ | :::: <code>spacing-before: 200;</code> (Ajouter un espacement de 200 ''twips'', soit environ 8 pixels ou 10pt, '''avant''' le paragraphe) | ||
+ | :::: <code>line-height: 1.5em;</code> (Ajouter une interligne sur le paragraphe d'un facteur de 1.5 hauteurs de ligne) | ||
+ | |||
+ | |||
+ | NOTE : ''la suite est à finaliser et mettre au propre'' | ||
+ | |||
*Définir une bordure</p> | *Définir une bordure</p> | ||
<p><code>border: 1px #777777 solid</code></p> | <p><code>border: 1px #777777 solid</code></p> | ||
− | + | ||
− | |||
− | |||
− | |||
− | |||
*Choisir une couleur de fond pour le texte | *Choisir une couleur de fond pour le texte | ||
<p><code>background-color: #FFFF00</code></p> | <p><code>background-color: #FFFF00</code></p> | ||
Ligne 283 : | Ligne 403 : | ||
<h3 id="refs">[[Smartdoc/titre-et-references|Les références croisées]]</h3> | <h3 id="refs">[[Smartdoc/titre-et-references|Les références croisées]]</h3> | ||
Les références croisées font l'objet d'une [[Smartdoc/titre-et-references|page dédiée]]. | Les références croisées font l'objet d'une [[Smartdoc/titre-et-references|page dédiée]]. | ||
− | + | ||
− | + | === Visible if === | |
− | Le fonctionnement est similaire au reste du système, et est détaillé dans la page relative aux [[Conditions|Visible ifs]]</ | + | |
− | + | Ici, les [[Conditions|visible ifs]] permettront de conditionner l’apparition des contenus dans le Document. | |
− | + | Le fonctionnement est similaire au reste du système, et est détaillé dans la page relative aux [[Conditions|Visible ifs]]. | |
− | + | ||
+ | '''Particularité :''' les [[Conditions|visible ifs]] des SmartDocs peuvent utiliser la variable spéciale <code>_CURRENT_DOC_ID</code> (type ''string'') qui contient l'identifiant du document courant. | ||
+ | |||
+ | === Utiliser les [[Boucles]] === | ||
+ | Les boucles permettent de répéter un groupe d'informations autant de fois que nécessaire, cette notion est détaillée dans la [[Boucles|page correspondante]]. | ||
+ | |||
+ | === Commentaire === | ||
<p>Ce champ permet à celui qui paramètre de laisser toute indication utile à la compréhension de son fichier de paramétrage.</p> | <p>Ce champ permet à celui qui paramètre de laisser toute indication utile à la compréhension de son fichier de paramétrage.</p> | ||
<p>L’utilisateur final ne verra jamais ce qui est écrit dans ce champ.</p> | <p>L’utilisateur final ne verra jamais ce qui est écrit dans ce champ.</p> | ||
<h2 id="autre">Autres fonctionnalités présentes dans le SmartDoc</h2> | <h2 id="autre">Autres fonctionnalités présentes dans le SmartDoc</h2> |
Version actuelle datée du 7 avril 2025 à 09:07
Sommaire
- 1 SmartDoc
- 1.1 Introduction
- 1.2 Metadonnées, datastore, options, list labels
- 1.3 Les modèles .docx
- 1.4 Contenu, options, styles, visible ifs, commentaires
- 1.5 Autres fonctionnalités présentes dans le SmartDoc
SmartDoc
Introduction
En premier lieu, un SmartDoc doit être clairement identifié par son doc-id, qui doit être strictement le même que le doc-id spécifié dans la DocList
La nouvelle feuille du Fichier de Paramétrage qui a vocation à être un SmartDoc doit donc se nommer précisément : Doc “le_doc-id”
Par exemple :
Ici, la DocList mentionne un seul SmartDoc, dont le doc-id est “demo-hercule” :
En conséquence, la feuille correspondante se nomme demo-hercule
Quant aux colonnes détaillées ci-dessous, elles doivent toutes obligatoirement être remplies, à l’exception de la colonne D “List Labels”
Metadonnées, datastore, options, list labels
Métadonnées
C'est un simple espace de commentaire
DataStore
DataStore : C’est l'id du DataStore auquel les variables utilisées dans le document sont associées. Par défaut, mainstore.
Options
La colonne "Options" permet de définir des options relatives au document courant. Cette cellule attend un contenu au format YAML.
L'option "title-num-display"
L'option "title-num-display" permet de définir le format d’affichage pour la numérotation de chaque titre du document.
Si cette option vaut none
ou disabled
les titres et les références affichées dans ce document seront "désactivées" et ne s'afficheront donc pas.
Au contraire, pour personnaliser le format de la numérotation, cette option attend une liste clés-valeurs (texte indenté, YAML), où chaque clé est un niveau de titre (de 1 à 6 inclus), et pour chaque niveau, trois attributs peuvent être saisis : style
, format
, et format-ref
(voir exemple imagée ci-dessous).
Les valeurs possible pour l'attribut style
sont :
- - "decimal" : numérotation décimale classique en chiffre arabe (1, 2 , 3 …) ;
- - "upper-roman" : nombre romain majuscule (I, II, III, IV etc.) ;
- - "lower-roman" : nombre romain minuscule (i, ii, iii, iv etc.) ;
- - "upper-alpha" : numérotation alphabétique majuscule (A, B, C, D, E) ;
- - "lower-roman" : numérotation alphabétique minuscule (a, b, c, d...) ;
- - "none" : aucune numérotation pour ce niveau de titre ;
L'attribut format
attend une chaîne de caractère qui permet de représenter le contexte (préfixe, suffixe…) de la numérotation à afficher avant chaque Titre.
Cette chaîne doit contenir au moins une fois un $1, $2, $3 … $6, qui seront remplacés par la numérotation pur le niveau concerné.
L'attribut format-ref
fonctionne de la même façon que l'attribut précédent mais il permet de représenter la numérotation à afficher dans chaque référence intégrée au sein du document (voir SmartDocument, faire une référence à un titre).
Ces attributs doivent contenir au moins une fois un code numéroté tel que $1
, $2
, $3
… $6
, qui permettra d'être remplacé par la numérotation du niveau concerné.
Exemple : le format “$1)
“ s'affichera “A)”, "B)", "C)" etc. (s'il est combiné au style "upper-alpha"
), ou "i)", "ii)", "iii)" (style "lower-roman"
).
Autre exemple : “Article $1.$2
“ s'affichera “Article 1.A”, "Article 1.B", "Article 2.A" … (combiné avec un niveau 1 au style décimal
et un niveau 2 en upper-roman
).
Exemple complet :
D'après la configuration de l'image ci-dessus, les titres :
- de niveau 1 seront de la forme : “ARTICLE 8 - Lorem ipsum”
- de niveau 2 seront de la forme : “2 Lorem ipsum ”
- de niveau 3 seront de la forme : “2-5 Lorem ipsum ”
- de niveau 4 seront de la forme : “2-5-10 Lorem ipsum ”
- de niveau 5 seront de la forme : “a. Lorem ipsum ”
- de niveau 6 seront de la forme : “ iv ) Lorem ipsum
List-Labels
Introduction
List-Labels : cette colonne permet d’effectuer une conversion entre des choix d’une variable de type “choices” du SmartForm et le SmartDoc. Autrement dit, elle permet d'établir des "dictionnaires de correspondance" permettant de faire correspondre un libellé à une valeur.
Par exemple :
Une fois un List-Label préparé, il est possible de l'utiliser grâce au traitement Label
Contexte
La colonne "Choices" du `Fields-Form` vous permet de spécifier les choix qui doivent apparaitre dans le formulaire. Chaque choix :
- s'écrit sur une ligne différente, ligne qui doit se terminer par un point-virgule ;
- chaque choix s'écrit en deux parties séparées par un ":" afin d'indiquer, à gauche, la valeur à stocker en base de données (et à utiliser dans les visible ifs) et à droite la valeur à afficher dans le formulaire. On parle de couple "valeur : libellé".
Par exemple
Mise en place
Le document n'est pas à même de décider sous quelle forme afficher la variable correspondante aux choix d'un champ de type "choix"
Si rien n'est spécifié, le document affichera ce qui est stocké dans la base de données
Il est toutefois possible d'indiquer au document des libellés et pour cela intervient le filtre :label(xxx)`
.
Par exemple, on peut imaginer un dictionnaire nommé "fonctions" pour indiquer que "dg" doit s'afficher "Directeur Général", et un autre dictionnaire nommé "fonctions_abrégées" qui indiquerait au contraire que "dg" doit s'afficher "Dir. G.".
Il sera alors possible, dans le contenu du SmartDoc, de faire appel au dictionnaire de votre choix :
- - M. Dupond occupant le poste de
{VARFONCT:label(" fonctions")}
- - M. Dupond occupant le poste de
{VARFONCT:label(" fonctions_abrégées")}
Les dictionnaires sont définis via la case D2 (List Labels) des onglets "Doc".
Ils sont écrits sous la forme suivante :
⚠ Notez les espaces d'indentation qui permettent d'indiquer au système l'imbrication / hiérarchie de l'info. C'est à dire qu'ici, val1 et val2 appartiennent au premier dictionnaire, alors que valA et valB appartiennent au second dictionnaire. Sans cette indentation, le système ne saurait pas reconnaitre si la ligne correspond à la déclaration d'un nouveau dictionnaire ou à un couple valeur/libellé.
→ A noter : On peut aussi utiliser un libellé référencé dans une “Choice-List”.
Par exemple, il est possible de créer un List Label nommé “countries” qu’on configurerait de la manière suivante : countries: @pays
.
On peut alors l’utiliser de la même façon au sein d’un document avec, par exemple, {PAYS_NAISS:label("countries")}
.
La colonne A qui donne France si la variable PAYS_NAISS vaut “FR”.
Les modèles .docx
Le SmartDoc consiste à définir du "contenu dynamique", bien qu'il soit possible de définir certains styles de base (couleurs, gras, italiques, titres etc.), la mise en page du document lui même reste limitée. C'est en cela que les "modèles .docx" peuvent être utile.
Chaque SmartDoc peut se baser sur un modèle de fichier, au format .docx. Le contenu dynamique sera tout simplement "injecté" dans le document à l'endroit indiqué. Le modèle peut, par exemple, prévoir un habillage (page de couverture, page de garde etc.), prévoir des entêtes et pieds-de-page, mais surtout, peut permettre de définir les marges du document et les styles des paragraphes et des titres (tailles, couleurs, espacement...). Le contenu dynamique, créé au travers du SmartDoc, se retrouvera simplement injecté dans le modèle prédéfini.
Définir un modèle et l'associer à un ou plusieurs SmartDoc
Pour pouvoir utiliser un modèle, il suffit de le rajouter dans la Doc-List, en lui donnant un identifiant unique, et en indiquant le type docx-template
(vous pouvez aussi préciser un titre, une description).
Une fois le modèle présent dans la Doc-List, il est possible de l'associer à un SmartDoc en utilisant l'option : docx-template: mon-template
.
Préparer son modèle et l'injection du contenu
Le modèle .docx peut être préparé comme un document classique : définir les styles des titres et des paragraphes, définir les marges et les interlignes, une page de couverture et des pieds-de-pages etc.
Pour définir où le contenu dynamique devra être injecté, il faut utiliser la syntaxe suivante : ${ @inject all }
. Ainsi, l'intégralité du contenu du SmartDoc sera intégrée à cet endroit même du modèle.
Il est aussi possible de demander l'intégration d'un seul bloc du SmartDoc, en indiquant, à la place de all
, l'identifiant du SmartDoc et le nom exact du bloc.
Par exemple, dans un SmartDoc nommé contrat
, un bloc défini par #BLOC dénomination
, pourra être injecté dans le modèle .docx avec la syntaxe suivante :
${ @inject contrats :: dénomination }
Nb : notez les 2 fois 2 points (::
) pour séparer l'identifiant du SmartDoc concerné et le nom exact du bloc à injecter.
Pour aller plus loin :
- Vous pouvez trouver plus d'informations sur les modèles docx et sur la manière de les mettre en place sur la page dédiée du Wiki.
- Il est parfaitement possible d'utiliser plusieurs injections dans un même modèle .docx. Il vous suffit d'utiliser plusieurs fois la syntaxe
${ @inject ... }
dans le document modèle. - Le contenu injecté peut lui-même inclure d'autres blocs (voir les "inclusions" (includes) d'un SmartDoc), des boucles, des titres etc.
- Dans certains cas, il peut être problématique d'injecter un bloc, lui même contenu dans une boucle du SmartDoc. En effet, la boucle a pour conséquence de "contextualiser" la variable sur laquelle elle boucle, si vous injectez ce contenu hors de ce contexte, le SmartDoc ne saura pas comment interpréter la variable correspondante à une occurence de la boucle.
Contenu, options, styles, visible ifs, commentaires
Contenu
Un SmartDoc est constitué d'une suite ordonnée d'éléments de contenu. Dans la feuille du tableur de paramétrage, il faut créer autant de ligne que d'éléments de contenu dynamique. On défini un nouvel élément pour lui associer une condition de visibilité spécifique (ex : car cet élément ne doit pas s'afficher dans certains cas), ou on veut lui associer un "style" spécifique (ex : mettre une partie du paragraphe en couleur rouge).
Le “contenu” du SmartDoc est ce qui sera effectivement “imprimé” dans le document final qui sera transmis à l’utilisateur.
Ce contenu, en plus d’être dynamique grâce au “visible-ifs” comme le reste du système, accepte aussi l’utilisation de variables.
Bases
C’est ici qu’il faut entrer le contenu “brut” du texte : c’est-à-dire le corps du texte.
On peut se servir des balises HTML basiques pour mettre en forme le texte rentré ici.
Les balises suivantes sont utilisables
- a,
- br,
- b,
- strong,
- i,
- em,
- ol,
- ul,
- li,
- hr,
- span,
- br
Avertissement sur l'utilisation des balises HTML
Veuillez prendre en compte qu'une fois que le système détecte qu'un éléments de contenu utilise directement une ou plusieurs balises HTML, l'ensemble de l'élément de contenu est converti au format HTML.
En conséquence, l'élément de contenu concerné ne peut plus prendre en compte tout autre élément de mise en forme non-HTML.
Par exemple, un saut de ligne inséré à l'aide de la combinaison ALT + ENTREE ne sera plus pris en compte dans cet élément de contenu. Il conviendra alors d'utiliser la balise </br> pour sauter une ligne.
Contenu spécial ou dynamique
Ils sont de la forme { @… }
et s'integre parmi le contenu.
- —
{ @line-break }
: ajout un saut de ligne : il est possible de forcer un saut de ligne (ou plusieurs) en utilisant la syntaxe suivante dans un contenu HTML :{@line-break}
Plusieurs saut de ligne (par exemple 2) :{@line-break:2}
- —
- —
{@page-break
} : ajout d’un saut de page : il est possible de forcer un saut de page en utilisant la syntaxe suivante dans un contenu HTML :{@page-break}
. - Le saut de page est effectif dans les exports .docx ou .pdf, mais est simulé par une simple ligne verticale dans les prévisualisations HTML.
- —
- —
{@ref:my title id}
: ajout d’une référence vers un titre : comme pour intégrer une variable, il est possible d’intégrer un lien vers un titre du document (le titre peut se trouver avant ou après la référence dans le contenu). Pour intégrer une référence, il suffit d’utiliser la syntaxe{@ref:my title id}
pour laquelle “my title id” correspond à l’attribut title-id d’un bloc-titre existant dans le document. Le fonctionnement des références croisées est décrit en détail ici.- Nb : si plusieurs titres ont le même title-id alors la référence pointe vers le premier de la page.
- Nb : si la référence pointe vers un titre qui n’existe pas dans le document (ou est invisible), elle sera remplacée par le texte “[référence manquante]”.
- Par défaut, la référence à un titre se contente d’afficher le titre (càd, le contenu du bloc titre).
- —
- Une chaine de caractère étant retournée, il est possible d’appliquer les filtres classiques.
- Exemple : Comme décrit dans la section
{@ref:droit-acheteur:uppercase}
. - Le traitement
:num
peut-être appliqué dans la syntaxe afin d’afficher la référence sous forme numérique et tenant compte des titres parents. - Exemple : Comme décrit dans la section
{@ref:droit-acheteur:num}
… => Comme décrit dans la section 3.1.1.2
- Pour les cas des références vers des titres ayant l’option title-article à “true” le nombre retourné sera simplement celui de l’article dans le cas du traitement “:num”.
- Pour les cas des références vers des titres ayant l’option title-no-count , le traitement “:num” n’aura alors aucun effet.
- —
{@summary}
Ajout d’un sommaire automatique : il est possible d’ajouter un sommaire automatique au document (table of contents) en utilisant la syntaxe suivante :{@summary}
- —
- —
{ @doc-meta(title) }
: permet d'insérer une méta-donnée du document courant. Les 3 paramètres possibles sont :title
,description
, ouid
. Pratique, par exemple, pour citer le titre du document au sein du contenu, malgré peut-être la présence d'un clausier et de blocs injectés d'un autre document.
- —
Comment rendre dynamique le contenu d'un SmartDoc ?
Pour rendre dynamique le contenu du SmartDoc, il est possible de lui intégrer les valeurs des variables telles qu'elles ont été collectée dans un formulaire, ou calculée via une variable dynamique etc.
La syntaxe pour intégrer un contenu dynamique est reconnaissable car il est systématiquement placé entre accolades : { … }
.
Une variable peut être intégrée de façon brute (Exemple : "Je m'appelle { PRENOM }.").
L'affichage brut pouvant parfois être trop limitatif, une syntaxe de "traitements SmartDoc" est disponible. Par exemple, le traitement :uppercase
appliqué sur une variable la fera afficher en majuscule. Exemple :: "Je m'appelle { PRENOM:uppercase }
.").
Les primitives
Une primitive est un élément qui a une valeur.
Par exemple: la variable PRENOM va valoir “Damien”. Ou tout simplement un nombre (ex: 36) ou une chaine de caractère (ex: "une chaise")
Pour intégrer une valeur : les variables du dataset sont intégrées dans le contenu à partir d’une syntaxe simple : la variable est placée, sans espace, entre deux accolades.
Exemple :
Le vendeur, né le {DATE_NAISSANCE}
, à {VILLE_NAISSANCE}
...
Les traitements dans le SmartDoc
Les traitements peuvent être définies comme une modification appliquée sur un contenu. Par exemple, le traitement uppercase
permet de mettre en majuscule une primitive de catégorie chaîne-de-caractère.
Pour appliquer un traitement sur une primitive, on utilise le signe : :
Ce qui donne Mon prénom est {PRENOM:uppercase}
qui donne Mon prénom est DAMIEN même quand la variable PRENOM
vaut “DaMien”.
Comme vu précédemment, pour intégrer une valeur avec un traitement, on procède en utilisant : :
Exemple :
Le vendeur s’appelle {PRENOM:uppercase}
Il est possible d'enchaîner les traitements.
Exemple :L'acheteur a payé {PRIX:letters:uppercase}
euros.
Ici, la valeur contenue dans la variable "PRIX" sera d'abord convertie en lettres, puis mise automatiquement en MAJUSCULES.
On obtiendra un résultat du type : "L'acheteur a payé TRENTE euros", alors que la valeur de départ sera "30".
A noter : les traitements peuvent s’appliquer aussi sur de simples chaînes de caractères et pas seulement des variables. Ex : L'acheteur a payé {"32 000":letters:uppercase} euros.
Traitements disponibles et syntaxe spécifique
:uppercase
: ne s'applique que sur une chaine de caractères, et permet de forcer l’affichage de la chaîne en majuscule.
- Exemple: Avec la variable VAR qui vaudrait "Hello",
{ VAR:uppercase } world!
=> "HELLO world!".
:lowercase
: ne s'applique que sur une chaine de caractères, et permet de forcer l’affichage de la chaîne en minuscule.
:capitalize
: permet de passer en majuscule la première lettre de chaque mot, et ne s'applique que sur une chaine de caractères.
- Exemple:
NOM:capitalize
=> "Jean Baptiste vous salue" avec la variable NOM qui vaudrait "jean baptiste". - Option : Il est possible de fournir un paramètre (valeur 1 ou "yes") à ce traitement pour indiquer que seule la première lettre du premier mot doit être mise en majuscule. Exemple :
NOM:capitalize(yes)
=> "Jean baptiste vous salue"
:letters
: permet de la convertir la valeur numérique associée en "toutes-lettres" (Français). Ne s'applique que sur une valeur numérique.
- Par exemple :
{ 312:letters }
=> "Trois-cent-douze"). - Il existe aussi des formatages spéciaux pour les devises ou certaines unités particulières permettant ainsi de mieux nommer les décimales et d'ajuster automatiquement les singuliers / pluriels.
- Le code de formatage est passé comme paramètre du traitement. Les codes existants sont les devises :
EUR
,USD
,CAN
,CHF
, et l'unitéHECTARE
. - Exemple :
- -
{ 12.03:letters(EUR) }
=> "douze euros et trois centimes" - -
{ 13.01:letters(EUR) }
=> "Treize euros et un centime" (remarquer le singulier à "centime"). - -
{ 0.14:letters(EUR) }
=> "quatorze centimes" (remarquer l'absence du nombre entier). - -
{ 1.14:letters(USD) }
=> "un dollar des États-Unis et quatorze cents" (remarquer l'unité en dollar et singulier à dollar). - -
{ 10.560:letters(USD) }
=> "dix dollars des États-Unis et cinquante-six cents". - -
{ 5.12:letters(HECTARE) }
=> "cinq hectares et douze ares". - -
{ 0:letters(EUR) }
=> "zero euro".
- -
:img
: transforme une chaine de caractère (url) en image dans le document. Ex : {"https://api.memegen.link/images/puffin.jpg":img}
va permettre d'intégrer l'image présente à cette URL dans le document.
Nb: dans les version v0.9-v0.11 l'intégration d'une image distante (via :img
) n'est plus possible dans les exports .docx / .pdf si un modèle de document (voir docx template) est utilisé. En effet, la norme DocX ne permet pas/plus l'intégration d'image / objet si le fichier est créé par un TemplateEngine.
:num
: (uniquement pour les références). Pour une référence à un titre, affiche son numéro au lieu d’afficher le titre.
Exemple : Comme décrit dans la section {@ref:droit-acheteur:num}, vous.... Le fonctionnement des références croisées est décrit en détail [1]
Exemple : "Comme décrit dans la section {@ref:droit-acheteur:num}, vous..."
. Le fonctionnement des références croisées est décrit en détail [2]
:numeral
: (uniquement pour les valeurs numériques). Permet de transformer un nombre en sa version numérale. Ex: 3
=> 3ème
. Ce traitement accepte le paramètre "m" ou "f" ("f" par défaut), afin de résoudre le 1 => "1ère, ou 1 => "1er".
:tel
: Permet de vérifier et de transformer une chaîne ou un nombre en numéro de téléphone (avec les bons espacements etc.). Ce traitement peut être utile pour éviter que le numéro de téléphone ne soit interprété comme un nombre et ne soit formaté avec les espacements des milliers etc.
Ce traitement accepte deux paramètres facultatifs :
- - Le premier concerne son formatage :
"national"
(par défaut, ex:06 62 04 63 55) indique que le numéro s'affichera dans son format national,"international"
(format +33 662 04 63 55), ou"raw"
(tel que la chaîne fournie, sans formatage). - - Le second paramètre permet d'indiquer d'être silencieux. Par défaut, si le numéro fourni n'est pas un numéro valide, un texte rouge apparaitra pour l'indiquer. Si ce second paramètre indique
true
, alors le traitement restera silencieux et, en cas de numéro invalide, le traitement ne renverra rien (chaîne vide). - Exemple:
{ MA_VAR_TEL:tel(international, true) }
.
:date-format
: permet de forcer l'affichage d'une chaine sous forme de date, ou pour formater une date dans un format différent.
- Par défaut, si aucun paramètre n'est précisé, le format "dd/MM/yyyy" sera utilisé.
- Un paramètre peut être fourni pour indiquer le format souhaité (voir la norme Unicode ici).
- Ex:
MA_DATE:date-format('d MMMM Y')
pour afficher la date avec le mois en toutes lettres.
:french-date
ou :french-datetime
: ❌ Deprecated depuis 02/2020 : depuis la v0.10 car un formateur "fr" est appliqué par défaut sur variables de Dates ou les chaînes ayant un format de date. Ce traitement ne s'applique que sur une date ou une chaîne de caractère au format "YYYY-MM-DD" (format international). Ce traitement permet de transformer la date fournie dans le format Français "jj/mm/aaaa".
:num-format
: ne s'applique que sur une valeur numérique, et permet de la formater pour son affichage. Ce traitement peut prendre 3 paramètres facultatifs.
- Le 1er permet (numérique et facultatif) permet d'indiquer le nombre de décimale souhaitées (par défaut, 2 chiffres ou 0 si la partie décimale est nulle).
- Le second paramètre (chaîne, facultative) correspond au séparateur des milliers (par défaut : un espace).
- Le troisième paramètre (chaîne, facultative) correspond au caractère à afficher pour le séparateur décimal (par défaut :
,
).
Quelques exemples :
- - soit une variable numérique VAR_PI qui vaut
3,1451
. L'affichage par défaut{ VAR_PI }
affichera3,14
.
L'affichage{ VAR_PI:num-format(3) }
affichera3,145
. - - pour la variable PRICE (numérique) qui vaudrait
9 999,99
, l'affichage{ PRICE:num-format }
affichera9 999,99
(dans ce cas le `:num-format` est facultatif).
Par contre, l'affichage{ PRICE:num-format(1,',', '.') }
affichera9,999.9
(1 chiffre après la virgule, séparateur des milliers et décimaux modifiés).
:join
: limité à une variable de liste plate (issue d'un multiples-choices principalement) → permet d'afficher les différentes valeurs de la liste sous la forme suivante : Valeur1, Valeur2, Valeur3, et Valeur4
. Les différentes valeurs contenues dans la variable sont affichées les unes à la suite des autres, séparées par des virgules; la dernière valeur est précédée de la conjonction de coordination et
.
- Il est possible de personnaliser le séparateur, par exemple
LIST:join(" ou ")
→ renvoieValeur1 ou Valeur2 ou Valeur3
. - Et il est même possible de personnaliser indépendamment le séparateur du dernier élément grâce à un second paramètre. Exemple
LIST:join(" ou ", " ou bien même ")
→ renvoieValeur1 ou Valeur2 ou bien même Valeur3
.
- Il est possible de personnaliser le séparateur, par exemple
:list
: utilisable uniquement pour les variables multiples-choices → permet d'afficher les différentes valeurs de la liste dans le SmartDoc sous la forme d'une liste à puce; chacune des valeurs de la liste démarre une nouvelle puce
:label
: dont le fonctionnement est expliqué plus haut.
:substr(x,y)
: permet de tronquer une chaîne de caractères. Par exemple pour une variable PRENOM qui vaudrait "Maximilien", on pourra utiliser la notation suivante : {PRENOM:substr(2,4)}
, qui donnera en pratique "ximi" ;
:string-replace([remplaceur], [remplacé])
: permet de remplacer une chaîne par une autre chaîne dans le contenu d'une variable de type "string".
Par exemple pour une variable VAR qui vaudrait "Damien", l'expression VAR:string-replace("F", "D")
donnera "Famien".
Si le paramètre "remplacé" n'est pas fourni, ce sera par défaut un saut de ligne qui sera recherché. Par exemple pour une variable ADDRESS qui contient des sauts de ligne, l'expression ADDRESS:string-replace(", ")
va remplacer chaque saut de ligne de l'adresse par ,
ce qui permet de passer un texte multi-lignes dans un format une-ligne.
A savoir : un saut de ligne se note "\n"
, il est donc aussi possible de remplacer, par exemple, des tirets -
par des sauts de ligne avec l'expression ADDRESS:string-replace("\n", "-")
.
:default("texte par défaut")
permet de définir une valeur "par défaut" à afficher dans le SmartDoc si la variable sur laquelle le filtre est appliqué est vide.
:item-of(LISTE, 'SOUSVAR')
permet d'obtenir l'élément d'une liste à partir de sa clé (équivalent d'un get_value(…)
côté SmartDoc). Le premier paramètre correspond à la liste concernée, et le deuxième (facultatif) à l'éventuelle sous-variable à récupérer.
- Exemple :
BEST_EMPLOYEE_KEY:item-of(EMPLOYES, 'NOM')
- Exemple :
:item-by-key(LISTE)
est équivalent au :item-of
précédent mais permet d'obtenir un élément grâce à l'index et non pas de sa clé.
- Exemple :
3:item-by-key(EMPLOYES_NAMES)
(obtenir le 3ème noms de la liste).
- Exemple :
Options
break
(facultatif) : valeur possiblenone
,before
ouafter
.
Permet d’intégrer un saut de ligne. Par défaut, toutes les entrées sont en break: after.
Si after est indiqué (ou si rien n’est indiqué puisque c’est la valeur par défaut), alors le bloc se terminera par un saut de ligne et le bloc suivant s’affichera sur une nouvelle ligne.
Si before est indiqué, l’entrée s’affiche sur une nouvelle ligne (le saut de ligne intervient avant l’entrée).
Si none est indiqué, il n’y a pas de saut de ligne, les entrées s'enchaînent.
title-level
(facultatif) : valeurs possibles : 1, 2, 3, 4, 5, 6.title-id
(facultatif) : la valeur attendue est une chaîne de caractères alpha-numériques sans sauts de ligne et dont les caractères suivants sont interdits : :, {, }, "
Cette option permet d’assigner un identifiant au titre concerné, de cette façon il sera possible de faire référence à ce titre via un “bookmark” (voir plus haut, “ajout de référence”).
Nb: cet attribut n’est possible QUE si l’attribut title-level est lui aussi renseigné.
title-article
(facultatif) : valeur booléenne attendue. Par défaut, la valeur est “false”.
Quand cette option est à “true”, le titre sera considéré comme un “titre d’article”. Il sera donc préfixé par "ARTICLE 1 - " ou le nombre “1” sera remplacé par l’index de l’article en question.
title-no-count
(facultatif) : valeur booléenne attendue. Par défaut, la valeur est “false”. Quand cette option est à “true”, le titre ne sera pas numéroté, ni dans les sommaires, ni préfixe par aucun type de numérotation.
Styles
La colonne Styles est facultative, et permet de personnaliser les styles de la ligne de contenu concernée.
Les styles sont fournies dans un format inspiré de la norme CSS (mais fortement simplifiée).
Ce format permet de définir plusieurs instructions stylistiques, chacune se terminant par un point-virgule (;
) et un saut de ligne. Exemple d'une cellule dont le texte devra être en taille 18px et dans la couleur rouge (#FF0000 en couleur hexadécimale) :
font-size:18px; color:#FF0000;
Chaque instruction est donc formée : d'un attribut de style (voir la liste ci-dessous), puis d'un séparateur (caractère :
), puis de la valeur du style souhaité, et se termine par un point-virgule (;
) et un saut de ligne.
Il est autorisé de placer un espace après le séparateur ":
" mais attention à ce que ce espace ne soit pas "particulier" (espace insécable etc.) car cela mettrait en danger l'interprétation du style et il se peut qu'il ne soit pas du tout pris en compte.
Les instructions de styles autorisées sont :
- Définir une police de caractère spécifique :
- L'attribut “
font-family
” permet de spécifier la police à utiliser. - Plusieurs noms de police peuvent être proposées (dans l'ordre de priorité). Si le lecteur (navigateur, logiciel de traitement de texte…) utilisé ne supporte pas la première police, le système tentera d’utiliser la deuxième police, puis la troisième, ainsi de suite ...
- Exemple :
font-family:Times New Roman, Times;
- Dans cet exemple, on prévoit d’utiliser Times New Roman en priorité. Le cas échéant, on utilisera "Times".
- L'attribut “
- Définir une police de caractère spécifique :
- Définir la taille du texte
font-size:14px;
- Dans cet exemple, la taille du texte sera forcée à 14px.
- Définir la taille du texte
- Italique :
font-style:italic;
- Italique :
- Gras :
font-weight:bold
- Gras :
- Souligner le texte :
text-decoration:underline;
- Souligner le texte :
- Alignement :
text-align:right;
(aligner à droite)text-align:left;
(aligner à gauche)text-align:center
(centrer sur la page)text-align:justify
(justifier)
- Alignement :
- Indentation :
indentation-left: 200;
(Indenter à gauche de 200 twips, soit environ 8 pixels ou 10pt)indentation-right: 200;
(Idem que pour l'indentation gauche mais à partir de la droite)indentation-first-line: 200;
(Indenter à gauche de 200 twips mais uniquement la première ligne du paragraphe)
- Indentation :
- Espacement de paragraphe :
spacing-after: 200;
(Ajouter un espacement de 200 twips, soit environ 8 pixels ou 10pt, après le paragraphe)spacing-before: 200;
(Ajouter un espacement de 200 twips, soit environ 8 pixels ou 10pt, avant le paragraphe)line-height: 1.5em;
(Ajouter une interligne sur le paragraphe d'un facteur de 1.5 hauteurs de ligne)
- Espacement de paragraphe :
NOTE : la suite est à finaliser et mettre au propre
- Définir une bordure
border: 1px #777777 solid
- Choisir une couleur de fond pour le texte
background-color: #FFFF00
La couleur doit être indiquée au format hexadecimal
- Choisir une couleur pour le texte
color: #FF0000
La couleur doit être indiquée au format hexadecimal
Les références croisées
Les références croisées font l'objet d'une page dédiée.
Visible if
Ici, les visible ifs permettront de conditionner l’apparition des contenus dans le Document. Le fonctionnement est similaire au reste du système, et est détaillé dans la page relative aux Visible ifs.
Particularité : les visible ifs des SmartDocs peuvent utiliser la variable spéciale _CURRENT_DOC_ID
(type string) qui contient l'identifiant du document courant.
Utiliser les Boucles
Les boucles permettent de répéter un groupe d'informations autant de fois que nécessaire, cette notion est détaillée dans la page correspondante.
Commentaire
Ce champ permet à celui qui paramètre de laisser toute indication utile à la compréhension de son fichier de paramétrage.
L’utilisateur final ne verra jamais ce qui est écrit dans ce champ.