diff --git a/README.md b/README.md
index 2fa0ed137..4208caf14 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,43 @@
-# rougaildoc
+# Generate documentation
+
+> **🛈 Informations**
+>
+> **doc**\
+> `basic` *`disabled`*\
+> **Disabled**: when "[Generate documentation](#doc)" is not set in "[Select for output](#step.output)"
+
+| Variable | Description |
+|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **doc.title_level** [`integer`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` **Command line**: --doc.title_level, -dt **Environment variable**: ROUGAILCLI_DOC.TITLE_LEVEL | Starting title level. **Default**: 1 |
+| **doc.contents** [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` `unique` `multiple` **Command line**: --doc.contents **Environment variable**: ROUGAILCLI_DOC.CONTENTS | Generated content. **Choices**: • variables **← (default)** • example • changelog |
+| **doc.previous_json_file** [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` *`disabled`* **Command line**: --doc.previous_json_file **Environment variable**: ROUGAILCLI_DOC.PREVIOUS_JSON_FILE | Previous description file in JSON format. **Disabled**: changelog is not selected in "[Generated content](#doc.contents)" |
+| **doc.without_family** [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` *`disabled`* **Command line**: • --doc.without_family • --doc.no-without_family **Environment variable**: ROUGAILCLI_DOC.WITHOUT_FAMILY | Do not add families in documentation. **Default**: false **Disabled**: variables is not selected in "[Generated content](#doc.contents)" |
+| **doc.root** [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` **Command line**: --doc.root **Environment variable**: ROUGAILCLI_DOC.ROOT | Document the variables from this family. |
+| **doc.with_commandline** [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` *`disabled`* **Command line**: • --doc.with_commandline • --doc.no-with_commandline **Environment variable**: ROUGAILCLI_DOC.WITH_COMMANDLINE | Add command line informations in documentation. **Default**: false **Disabled**: if "[Generate document in format](#doc.output_format)" is json or variables is not selected in "[Generated content](#doc.contents)" |
+| **doc.with_environment** [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` *`disabled`* **Command line**: • --doc.with_environment • --doc.no-with_environment **Environment variable**: ROUGAILCLI_DOC.WITH_ENVIRONMENT | Add environment variable informations in documentation. **Default**: false **Disabled**: if "[Generate document in format](#doc.output_format)" is json or variables is not selected in "[Generated content](#doc.contents)" |
+| **doc.environment_default_environment_name** [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` *`disabled`* **Command line**: --doc.environment_default_environment_name **Environment variable**: ROUGAILCLI_DOC.ENVIRONMENT_DEFAULT_ENVIRONMENT_NAME | Name of the default environment prefix. **Validator**: should only user uppercase characters **Default**: ROUGAIL **Disabled**: when "__.main_namespace" is not set or "[Add environment variable informations in documentation](#doc.with_environment)" is false |
+
+# Families or variables for this family are in an other file name
+
+> **🛈 Informations**
+>
+> **doc.other_root_filenames**\
+> This family contains lists of variable blocks.\
+> `basic` *`disabled`*\
+> **Disabled**: documentation must be splitted
+
+| Variable | Description |
+|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **doc.other_root_filenames.root_path** [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `unique` `multiple` **Command line**: --doc.other_root_filenames.root_path **Environment variable**: ROUGAILCLI_DOC.OTHER_ROOT_FILENAMES.ROOT_PATH | Root family name. |
+| **doc.other_root_filenames.filename** [`unix_filename`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` **Command line**: --doc.other_root_filenames.filename **Environment variable**: ROUGAILCLI_DOC.OTHER_ROOT_FILENAMES.FILENAME | Name of the file. **Validators**: • this filename could be a relative path • file type allowed: "directory" and "file" |
+
+| Variable | Description |
+|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **doc.disabled_modes** [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` *`disabled`* `unique` `multiple` **Command line**: --doc.disabled_modes **Environment variable**: ROUGAILCLI_DOC.DISABLED_MODES | Disable documentation for variables with those modes. **Validator**: verify if disable modes already exists **Disabled**: disabled when there is no mode available |
+| **doc.change_default_value** [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` **Command line**: • --doc.change_default_value • --doc.no-change_default_value **Environment variable**: ROUGAILCLI_DOC.CHANGE_DEFAULT_VALUE | Modify values to document leaderships and dynamics families. **Default**: true |
+| **doc.comment_examples** [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` *`disabled`* **Command line**: • --doc.comment_examples • --doc.no-comment_examples **Environment variable**: ROUGAILCLI_DOC.COMMENT_EXAMPLES | Add description of variables and families when generate examples. **Default**: false **Disabled**: disabled when example in not in contents |
+| **doc.comment_examples_column** [`integer`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` *`disabled`* **Command line**: --doc.comment_examples_column **Environment variable**: ROUGAILCLI_DOC.COMMENT_EXAMPLES_COLUMN | Comment in examples starts at column. **Default**: 30 **Disabled**: when the variable "[Add description of variables and families when generate examples](#doc.comment_examples)" is accessible and has the value "false" |
+| **doc.output_format** [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` **Command line**: --doc.output_format, -do **Environment variable**: ROUGAILCLI_DOC.OUTPUT_FORMAT | Generate document in format. **Validator**: json output_format is not compatible with "changelog" and "example" contents **Choices**: • console **← (default)** • asciidoc • html • github • gitlab • json |
+| **doc.force_true_color_terminal** [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` **Command line**: • --doc.force_true_color_terminal • --doc.no-force_true_color_terminal **Environment variable**: ROUGAILCLI_DOC.FORCE_TRUE_COLOR_TERMINAL | Force true color terminal. **Default**: false |
+
diff --git a/locale/fr/LC_MESSAGES/rougail_output_doc.po b/locale/fr/LC_MESSAGES/rougail_output_doc.po
index 9dc0c5ba9..d06c24226 100644
--- a/locale/fr/LC_MESSAGES/rougail_output_doc.po
+++ b/locale/fr/LC_MESSAGES/rougail_output_doc.po
@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
-"POT-Creation-Date: 2025-10-29 11:01+0100\n"
-"PO-Revision-Date: 2025-10-29 11:02+0100\n"
+"POT-Creation-Date: 2025-11-27 22:14+0100\n"
+"PO-Revision-Date: 2025-11-27 22:14+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: fr\n"
@@ -14,128 +14,170 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
-"X-Generator: Poedit 3.7\n"
+"X-Generator: Poedit 3.8\n"
-#: src/rougail/output_doc/annotator.py:325
+#: src/rougail/output_doc/annotator.py:350
msgid "the value of the information \"{0}\" of the variable \"{1}\""
msgstr "la valeur de l'information \"{0}\" de la variable \"{1}\""
-#: src/rougail/output_doc/annotator.py:328
+#: src/rougail/output_doc/annotator.py:353
msgid "the value of the global information \"{0}\""
msgstr "la valeur de l'information globale \"{0}\""
-#: src/rougail/output_doc/annotator.py:335
+#: src/rougail/output_doc/annotator.py:360
msgid "when the identifier is \"{0}\""
msgstr "lorsque l'identifiant est \"{0}\""
-#: src/rougail/output_doc/annotator.py:337
+#: src/rougail/output_doc/annotator.py:362
msgid "when the identifier is not \"{0}\""
msgstr "lorsque l'identifiant n'est pas \"{0}\""
-#: src/rougail/output_doc/changelog.py:144
+#: src/rougail/output_doc/changelog.py:155
msgid "New variable"
msgstr "Nouvelle variable"
-#: src/rougail/output_doc/changelog.py:146
+#: src/rougail/output_doc/changelog.py:157
msgid "New variables"
msgstr "Nouvelles variables"
-#: src/rougail/output_doc/changelog.py:158
+#: src/rougail/output_doc/changelog.py:169
msgid "Modified variable"
msgstr "Variable modifiée"
-#: src/rougail/output_doc/changelog.py:160
+#: src/rougail/output_doc/changelog.py:171
msgid "Modified variables"
msgstr "Variables modifiées"
-#: src/rougail/output_doc/changelog.py:172
+#: src/rougail/output_doc/changelog.py:183
msgid "Deleted variable"
msgstr "Variable supprimée"
-#: src/rougail/output_doc/changelog.py:174
+#: src/rougail/output_doc/changelog.py:185
msgid "Deleted variables"
msgstr "Variables supprimées"
-#: src/rougail/output_doc/config.py:43
+#: src/rougail/output_doc/config.py:41
msgid "duplicated level rougail-doc for output \"{0}\": {1} and {2}"
msgstr "niveau dupliqué pour rougail-doc pour la sortie \"{0}\": {1} et {2}"
-#: src/rougail/output_doc/config.py:75
-msgid "Configuration rougail-doc"
-msgstr "Configuration de rougail-doc"
+#: src/rougail/output_doc/config.py:73
+msgid "Generate documentation"
+msgstr "Générer la documentation"
-#: src/rougail/output_doc/config.py:83
+#: src/rougail/output_doc/config.py:79
+msgid "when \"doc\" is not set in \"step.output\""
+msgstr "lorsque \"doc\" n'est pas spécifié dans \"step.output\""
+
+#: src/rougail/output_doc/config.py:82
msgid "Starting title level"
msgstr "Niveau de titre de départ"
-#: src/rougail/output_doc/config.py:88
+#: src/rougail/output_doc/config.py:87
msgid "Generated content"
msgstr "Contenu générer"
-#: src/rougail/output_doc/config.py:97
+#: src/rougail/output_doc/config.py:96
msgid "Previous description file in JSON format"
msgstr "Précédent fichier de description au format JSON"
-#: src/rougail/output_doc/config.py:105
+#: src/rougail/output_doc/config.py:101
+msgid "changelog is not selected in \"_.contents\""
+msgstr "changelog n'est pas sélectionné dans \"_.contents\""
+
+#: src/rougail/output_doc/config.py:104
msgid "Do not add families in documentation"
msgstr "Ne pas ajouter les familles dans la documentation"
-#: src/rougail/output_doc/config.py:114
+#: src/rougail/output_doc/config.py:110
+msgid "variables is not selected in \"_.contents\""
+msgstr "variables n'est pas sélectionné dans \"_.contents\""
+
+#: src/rougail/output_doc/config.py:113
msgid "Document the variables from this family"
msgstr "Documente les variables depuis cette famille"
-#: src/rougail/output_doc/config.py:118
+#: src/rougail/output_doc/config.py:117
+msgid "Add command line informations in documentation"
+msgstr "Ajoute les informations de la ligne de commande dans la documentation"
+
+#: src/rougail/output_doc/config.py:123 src/rougail/output_doc/config.py:132
+msgid ""
+"if \"_.output_format\" is json or variables is not selected in \"_.contents\""
+msgstr ""
+"si \"_.output_format\" est json ou si variables n'est pas sélectionné dans "
+"\"_.contents\""
+
+#: src/rougail/output_doc/config.py:126
+msgid "Add environment variable informations in documentation"
+msgstr ""
+"Ajoute les informations de variable d'environnement dans la documentation"
+
+#: src/rougail/output_doc/config.py:135
+msgid "Name of the default environment prefix"
+msgstr "Nom du préfixe d'environnement par défaut"
+
+#: src/rougail/output_doc/config.py:141
+msgid "should only user uppercase characters"
+msgstr "doit seulement utilise des caractères en majuscule"
+
+#: src/rougail/output_doc/config.py:146
+msgid ""
+"when \"__.main_namespace\" is not set or \"_.with_environment\" is false"
+msgstr ""
+"si \"__.main_namespace\" n'est pas défini ou \"_.with_environment\" est false"
+
+#: src/rougail/output_doc/config.py:149
msgid "Families or variables for this family are in an other file name"
msgstr ""
"Les familles ou variables pour cette famille sont dans un autre fichier"
-#: src/rougail/output_doc/config.py:128
-msgid "documentation must be splitted and in gitlab format"
-msgstr "documentation doit être séparée et au format gitlab"
+#: src/rougail/output_doc/config.py:156
+msgid "documentation must be splitted"
+msgstr "documentation doit être séparée"
-#: src/rougail/output_doc/config.py:131
+#: src/rougail/output_doc/config.py:159
msgid "Root family name"
msgstr "Nom de la famille racine"
-#: src/rougail/output_doc/config.py:135
+#: src/rougail/output_doc/config.py:163
msgid "Name of the file"
msgstr "Nom du fichier"
-#: src/rougail/output_doc/config.py:141
+#: src/rougail/output_doc/config.py:169
msgid "Disable documentation for variables with those modes"
msgstr "Désactiver la documentation des variables avec ces modes"
-#: src/rougail/output_doc/config.py:149
+#: src/rougail/output_doc/config.py:177
msgid "disabled when there is no mode available"
msgstr "désactiver lorsqu'il n'y a pas de mode valable"
-#: src/rougail/output_doc/config.py:155
+#: src/rougail/output_doc/config.py:183
msgid "verify if disable modes already exists"
msgstr "vérifier le mode existe déjà"
-#: src/rougail/output_doc/config.py:157
+#: src/rougail/output_doc/config.py:185
msgid "Modify values to document leaderships and dynamics families"
msgstr "Valeurs modifiées pour documenter les familles leader ou dynamique"
-#: src/rougail/output_doc/config.py:160
+#: src/rougail/output_doc/config.py:188
msgid "Add description of variables and families when generate examples"
msgstr ""
"Ajouter la description des variables et des familles lorsqu'on génère des "
"exemples"
-#: src/rougail/output_doc/config.py:166
+#: src/rougail/output_doc/config.py:194
msgid "disabled when example in not in contents"
msgstr "désactiver lorsqu'il example n'est pas dans contents"
-#: src/rougail/output_doc/config.py:169
+#: src/rougail/output_doc/config.py:197
msgid "Comment in examples starts at column"
msgstr "Commentaire dans les exemples commence à la colonne"
-#: src/rougail/output_doc/config.py:177
+#: src/rougail/output_doc/config.py:205
msgid "Generate document in format"
msgstr "Générer le document au format"
-#: src/rougail/output_doc/config.py:187
+#: src/rougail/output_doc/config.py:215
msgid ""
"json output_format is not compatible with \"changelog\" and \"example\" "
"contents"
@@ -143,107 +185,107 @@ msgstr ""
"le format de sortie json n'est pas compatible avec \"changelog\" et "
"example\" de la variable contents"
-#: src/rougail/output_doc/config.py:196
+#: src/rougail/output_doc/config.py:224
msgid "Force true color terminal"
msgstr "Force les vrais couleurs dans le terminal"
-#: src/rougail/output_doc/doc.py:358
+#: src/rougail/output_doc/doc.py:330
msgid "This family contains lists of variable blocks"
msgstr "Cette famille contient des listes de bloc de variable"
-#: src/rougail/output_doc/doc.py:368
+#: src/rougail/output_doc/doc.py:340
msgid "This family builds families dynamically"
msgstr "Cette famille construit des familles dynamiquement"
-#: src/rougail/output_doc/doc.py:382
+#: src/rougail/output_doc/doc.py:354
msgid "Default"
msgstr "Défaut"
-#: src/rougail/output_doc/doc.py:397
+#: src/rougail/output_doc/doc.py:369
msgid "multiple"
msgstr "multiple"
-#: src/rougail/output_doc/doc.py:405
+#: src/rougail/output_doc/doc.py:377
msgid "Example"
msgstr "Exemple"
-#: src/rougail/output_doc/doc.py:408
+#: src/rougail/output_doc/doc.py:380
msgid "Examples"
msgstr "Exemples"
-#: src/rougail/output_doc/doc.py:417
+#: src/rougail/output_doc/doc.py:389
msgid "Tag"
msgstr "Étiquette"
-#: src/rougail/output_doc/doc.py:420
+#: src/rougail/output_doc/doc.py:392
msgid "Tags"
msgstr "Étiquettes"
-#: src/rougail/output_doc/doc.py:449
+#: src/rougail/output_doc/doc.py:424
msgid "No attribute \"description\" for \"{0}\" in {1}"
msgstr "Aucun attribut \"description\" pour \"{0}\" dans {1}"
-#: src/rougail/output_doc/doc.py:587
+#: src/rougail/output_doc/doc.py:562
msgid "text based with regular expressions \"{0}\""
msgstr "texte avec expression rationnelle \"{0}\""
-#: src/rougail/output_doc/doc.py:591
+#: src/rougail/output_doc/doc.py:566
msgid "Validator"
msgstr "Validateur"
-#: src/rougail/output_doc/doc.py:594
+#: src/rougail/output_doc/doc.py:569
msgid "Validators"
msgstr "Validateurs"
-#: src/rougail/output_doc/doc.py:603
+#: src/rougail/output_doc/doc.py:578
msgid "Choices"
msgstr "Choix"
-#: src/rougail/output_doc/doc.py:706
+#: src/rougail/output_doc/doc.py:681
msgid "the value of the identifier"
msgstr "la valeur de l'identifiant"
-#: src/rougail/output_doc/doc.py:710
+#: src/rougail/output_doc/doc.py:685
msgid "the value of the {0}"
msgstr "la valeur de l'{0}"
-#: src/rougail/output_doc/doc.py:719
+#: src/rougail/output_doc/doc.py:694
msgid "depends on a calculation"
msgstr "dépend d'un calcul"
-#: src/rougail/output_doc/doc.py:725
+#: src/rougail/output_doc/doc.py:700
msgid "\"{0}\" is a calculation for {1} but has no description in {2}"
msgstr "\"{0}\" est un calcul pour {1} mais n'a pas de description dans {2}"
-#: src/rougail/output_doc/doc.py:753
+#: src/rougail/output_doc/doc.py:728
msgid "the value of the variable \"{0}\""
msgstr "la valeur de la variable \"{0}\""
-#: src/rougail/output_doc/doc.py:755
+#: src/rougail/output_doc/doc.py:730
msgid "the value of the variable \"{0}\" if it is defined"
msgstr "la valeur de la variable \"{0}\" si elle est définie"
-#: src/rougail/output_doc/doc.py:775
+#: src/rougail/output_doc/doc.py:750
msgid "the value of an undocumented variable"
msgstr "la valeur d'une variable non documentée"
-#: src/rougail/output_doc/doc.py:778
+#: src/rougail/output_doc/doc.py:753
msgid "the values of undocumented variables"
msgstr "les valeurs de variables non documentées"
-#: src/rougail/output_doc/doc.py:801
+#: src/rougail/output_doc/doc.py:776
msgid "(from an undocumented variable)"
msgstr "(issue d'une variable non documentée)"
-#: src/rougail/output_doc/doc.py:809
+#: src/rougail/output_doc/doc.py:784
msgid "{0} (from an undocumented variable)"
msgstr "{0} (issue d'une variable non documentée)"
-#: src/rougail/output_doc/doc.py:813 src/rougail/output_doc/doc.py:862
+#: src/rougail/output_doc/doc.py:788 src/rougail/output_doc/doc.py:840
msgid "depends on an undocumented variable"
msgstr "dépends d'une variable non documentée"
-#: src/rougail/output_doc/doc.py:884
+#: src/rougail/output_doc/doc.py:862
msgid ""
"when the variable \"{{0}}\" is defined, accessible and hasn't the value "
"\"{0}\""
@@ -251,184 +293,194 @@ msgstr ""
"lorsque la variable \"{{0}}\" est définie, accessible et n'a pas la valeur "
"\"{0}\""
-#: src/rougail/output_doc/doc.py:888
+#: src/rougail/output_doc/doc.py:866
msgid "when the variable \"{{0}}\" is defined and hasn't the value \"{0}\""
msgstr "lorsque la variable \"{{0}}\" est définie et n'a pas la valeur \"{0}\""
-#: src/rougail/output_doc/doc.py:892
+#: src/rougail/output_doc/doc.py:870
msgid "when the variable \"{{0}}\" is accessible and hasn't the value \"{0}\""
msgstr ""
"lorsque la variable \"{{0}}\" est acessible et n'a pas la valeur \"{0}\""
-#: src/rougail/output_doc/doc.py:894
+#: src/rougail/output_doc/doc.py:872
msgid "when the variable \"{{0}}\" hasn't the value \"{0}\""
msgstr "lorsque la variable \"{{0}}\" n'a pas la valeur \"{0}\""
-#: src/rougail/output_doc/doc.py:898
+#: src/rougail/output_doc/doc.py:876
msgid ""
"when the variable \"{{0}}\" is defined, is accessible and has the value "
"\"{0}\""
msgstr ""
"lorsque la variable \"{{0}}\" est définie, accessible et a la valeur \"{0}\""
-#: src/rougail/output_doc/doc.py:902
+#: src/rougail/output_doc/doc.py:880
msgid "when the variable \"{{0}}\" is defined and has the value \"{0}\""
msgstr "lorsque la variable \"{{0}}\" est définie et a la valeur \"{0}\""
-#: src/rougail/output_doc/doc.py:906
+#: src/rougail/output_doc/doc.py:884
msgid "when the variable \"{{0}}\" is accessible and has the value \"{0}\""
msgstr "lorsque la variable \"{{0}}\" est accessible et a la valeur \"{0}\""
-#: src/rougail/output_doc/doc.py:908
+#: src/rougail/output_doc/doc.py:886
msgid "when the variable \"{{0}}\" has the value \"{0}\""
msgstr "lorsque la variable \"{{0}}\" a la valeur \"{0}\""
-#: src/rougail/output_doc/example.py:38
+#: src/rougail/output_doc/example.py:45
msgid "Example with mandatory variables not filled in"
msgstr "Exemple avec des variables obligatoire non renseignée"
-#: src/rougail/output_doc/example.py:43
+#: src/rougail/output_doc/example.py:52
msgid "Example with all variables modifiable"
msgstr "Exemple avec toutes les variables modifiable"
-#: src/rougail/output_doc/output/console.py:165
-#: src/rougail/output_doc/utils.py:820
-msgid "Variable"
-msgstr "Variable"
-
-#: src/rougail/output_doc/output/console.py:166
-#: src/rougail/output_doc/utils.py:820
-msgid "Description"
-msgstr "Description"
-
-#: src/rougail/output_doc/output/gitlab.py:68
+#: src/rougail/output_doc/output/asciidoc.py:152
+#: src/rougail/output_doc/output/console.py:189
+#: src/rougail/output_doc/output/github.py:188
+#: src/rougail/output_doc/output/gitlab.py:44
msgid "Informations"
msgstr "Informations"
-#: src/rougail/output_doc/utils.py:44
+#: src/rougail/output_doc/output/console.py:182
+#: src/rougail/output_doc/utils.py:896
+msgid "Variable"
+msgstr "Variable"
+
+#: src/rougail/output_doc/output/console.py:183
+#: src/rougail/output_doc/utils.py:896
+msgid "Description"
+msgstr "Description"
+
+#: src/rougail/output_doc/utils.py:48
msgid "the domain name can starts by a dot"
msgstr "le nom de domaine peut commencer par un point"
-#: src/rougail/output_doc/utils.py:45
+#: src/rougail/output_doc/utils.py:49
msgid "the domain name can be a hostname"
msgstr "le nom de domaine peut être un nom d'hôte"
-#: src/rougail/output_doc/utils.py:46
+#: src/rougail/output_doc/utils.py:50
msgid "the domain name can be an IP"
msgstr "le nom de domaine peut être une IP"
-#: src/rougail/output_doc/utils.py:47
+#: src/rougail/output_doc/utils.py:51
msgid "the domain name can be network in CIDR format"
msgstr "le nom de domaine peut être un réseau au format CIDR"
-#: src/rougail/output_doc/utils.py:52 src/rougail/output_doc/utils.py:58
+#: src/rougail/output_doc/utils.py:56 src/rougail/output_doc/utils.py:62
msgid "the minimum value is {0}"
msgstr "le valeur minimal est {0}"
-#: src/rougail/output_doc/utils.py:53 src/rougail/output_doc/utils.py:59
+#: src/rougail/output_doc/utils.py:57 src/rougail/output_doc/utils.py:63
msgid "the maximum value is {0}"
msgstr "le valeur maximal est {0}"
-#: src/rougail/output_doc/utils.py:65
+#: src/rougail/output_doc/utils.py:69
msgid "IP must be in CIDR format"
msgstr "IP doit être au format CIDR"
-#: src/rougail/output_doc/utils.py:66
+#: src/rougail/output_doc/utils.py:70
msgid "private IP are allowed"
msgstr "les IP privées sont autorisés"
-#: src/rougail/output_doc/utils.py:67
+#: src/rougail/output_doc/utils.py:71
msgid "reserved IP are allowed"
msgstr "les IP réservés sont autorisés"
-#: src/rougail/output_doc/utils.py:72
+#: src/rougail/output_doc/utils.py:76
msgid "network must be in CIDR format"
msgstr "réseau doit être au format CIDR"
-#: src/rougail/output_doc/utils.py:77
+#: src/rougail/output_doc/utils.py:81
msgid "the host name can be an IP"
msgstr "le nom d'hôte peut être une IP"
-#: src/rougail/output_doc/utils.py:82
+#: src/rougail/output_doc/utils.py:86
msgid "the domain name in web address can be an IP"
msgstr "le nom de domaine dans l'adresse web peut être une IP"
-#: src/rougail/output_doc/utils.py:83
+#: src/rougail/output_doc/utils.py:87
msgid "the domain name in web address can be only a hostname"
msgstr "le nom de domaine dans l'adresse web ne peut être qu'un nom d'hôte"
-#: src/rougail/output_doc/utils.py:90
+#: src/rougail/output_doc/utils.py:94
msgid "can be range of port"
msgstr "peut être un range de port"
-#: src/rougail/output_doc/utils.py:91
+#: src/rougail/output_doc/utils.py:95
msgid "can have the protocol"
msgstr "peut avoir un protocole"
-#: src/rougail/output_doc/utils.py:92
+#: src/rougail/output_doc/utils.py:96
msgid "port 0 is allowed"
msgstr "le port 0 est autorisé"
-#: src/rougail/output_doc/utils.py:93
+#: src/rougail/output_doc/utils.py:97
msgid "well-known ports (1 to 1023) are allowed"
msgstr "les ports connus (de 1 à 1023) sont autorisés"
-#: src/rougail/output_doc/utils.py:94
+#: src/rougail/output_doc/utils.py:98
msgid "registred ports (1024 to 49151) are allowed"
msgstr "les ports enregistrés (de 1024 à 49151) sont autorisés"
-#: src/rougail/output_doc/utils.py:95
+#: src/rougail/output_doc/utils.py:99
msgid "private ports (greater than 49152) are allowed"
msgstr "les ports privés (supérieurs à 49152) sont autorisés"
-#: src/rougail/output_doc/utils.py:100
+#: src/rougail/output_doc/utils.py:104
msgid "minimum length for the secret is {0} characters"
msgstr "longueur minimum pour le secret est de {0} caractères"
-#: src/rougail/output_doc/utils.py:101
+#: src/rougail/output_doc/utils.py:105
msgid "maximum length for the secret is {0} characters"
msgstr "longueur maximal pour le secret est de {0} caractères"
-#: src/rougail/output_doc/utils.py:102
+#: src/rougail/output_doc/utils.py:106
msgid "forbidden characters: {0}"
msgstr "caractères interdits: {0}"
-#: src/rougail/output_doc/utils.py:107
+#: src/rougail/output_doc/utils.py:111
msgid "this filename could be a relative path"
msgstr "ce nom de fichier peut être un chemin relative"
-#: src/rougail/output_doc/utils.py:108
+#: src/rougail/output_doc/utils.py:112
msgid "this file must exists"
msgstr "ce fichier doit exister"
-#: src/rougail/output_doc/utils.py:109
+#: src/rougail/output_doc/utils.py:113
msgid "file type allowed: {0}"
msgstr "type de fichier autorisé : {0}"
-#: src/rougail/output_doc/utils.py:362
-msgid "Variables for \"{0}\""
-msgstr "Variables pour \"{0}\""
-
-#: src/rougail/output_doc/utils.py:392
+#: src/rougail/output_doc/utils.py:432
msgid "Identifiers"
msgstr "Identifiants"
-#: src/rougail/output_doc/utils.py:697 src/rougail/output_doc/utils.py:706
-#: src/rougail/output_doc/utils.py:712 src/rougail/output_doc/utils.py:718
-#: src/rougail/output_doc/utils.py:722
+#: src/rougail/output_doc/utils.py:578
+msgid "Command line"
+msgstr "Ligne de commande"
+
+#: src/rougail/output_doc/utils.py:581
+msgid "Environment variable"
+msgstr "Variable d'environnement"
+
+#: src/rougail/output_doc/utils.py:762 src/rougail/output_doc/utils.py:771
+#: src/rougail/output_doc/utils.py:777 src/rougail/output_doc/utils.py:783
+#: src/rougail/output_doc/utils.py:787
msgid "(default)"
msgstr "(défaut)"
-#: src/rougail/output_doc/utils.py:877
+#: src/rougail/output_doc/utils.py:973
msgid "{0}: {1}"
msgstr "{0} : {1}"
+#~ msgid "Configuration rougail-doc"
+#~ msgstr "Configuration de rougail-doc"
+
+#~ msgid "Variables for \"{0}\""
+#~ msgstr "Variables pour \"{0}\""
+
#~ msgid "Generate example"
#~ msgstr "Génération de l'exemple"
-#~ msgid "Add families in documentation"
-#~ msgstr "Ajouter les familles dans la documentation"
-
#~ msgid "Display example in documentation"
#~ msgstr "Afficher un exemple dans la documentation"
diff --git a/locale/rougail_output_doc.pot b/locale/rougail_output_doc.pot
index 80017ddb5..23d8acf21 100644
--- a/locale/rougail_output_doc.pot
+++ b/locale/rougail_output_doc.pot
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2025-10-29 11:02+0100\n"
+"POT-Creation-Date: 2025-11-27 22:14+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -15,395 +15,438 @@ msgstr ""
"Generated-By: pygettext.py 1.5\n"
-#: src/rougail/output_doc/annotator.py:325
+#: src/rougail/output_doc/annotator.py:350
msgid "the value of the information \"{0}\" of the variable \"{1}\""
msgstr ""
-#: src/rougail/output_doc/annotator.py:328
+#: src/rougail/output_doc/annotator.py:353
msgid "the value of the global information \"{0}\""
msgstr ""
-#: src/rougail/output_doc/annotator.py:335
+#: src/rougail/output_doc/annotator.py:360
msgid "when the identifier is \"{0}\""
msgstr ""
-#: src/rougail/output_doc/annotator.py:337
+#: src/rougail/output_doc/annotator.py:362
msgid "when the identifier is not \"{0}\""
msgstr ""
-#: src/rougail/output_doc/changelog.py:144
+#: src/rougail/output_doc/changelog.py:155
msgid "New variable"
msgstr ""
-#: src/rougail/output_doc/changelog.py:146
+#: src/rougail/output_doc/changelog.py:157
msgid "New variables"
msgstr ""
-#: src/rougail/output_doc/changelog.py:158
+#: src/rougail/output_doc/changelog.py:169
msgid "Modified variable"
msgstr ""
-#: src/rougail/output_doc/changelog.py:160
+#: src/rougail/output_doc/changelog.py:171
msgid "Modified variables"
msgstr ""
-#: src/rougail/output_doc/changelog.py:172
+#: src/rougail/output_doc/changelog.py:183
msgid "Deleted variable"
msgstr ""
-#: src/rougail/output_doc/changelog.py:174
+#: src/rougail/output_doc/changelog.py:185
msgid "Deleted variables"
msgstr ""
-#: src/rougail/output_doc/config.py:43
+#: src/rougail/output_doc/config.py:41
msgid "duplicated level rougail-doc for output \"{0}\": {1} and {2}"
msgstr ""
-#: src/rougail/output_doc/config.py:75
-msgid "Configuration rougail-doc"
+#: src/rougail/output_doc/config.py:73
+msgid "Generate documentation"
msgstr ""
-#: src/rougail/output_doc/config.py:83
+#: src/rougail/output_doc/config.py:79
+msgid "when \"doc\" is not set in \"step.output\""
+msgstr ""
+
+#: src/rougail/output_doc/config.py:82
msgid "Starting title level"
msgstr ""
-#: src/rougail/output_doc/config.py:88
+#: src/rougail/output_doc/config.py:87
msgid "Generated content"
msgstr ""
-#: src/rougail/output_doc/config.py:97
+#: src/rougail/output_doc/config.py:96
msgid "Previous description file in JSON format"
msgstr ""
-#: src/rougail/output_doc/config.py:105
+#: src/rougail/output_doc/config.py:101
+msgid "changelog is not selected in \"_.contents\""
+msgstr ""
+
+#: src/rougail/output_doc/config.py:104
msgid "Do not add families in documentation"
msgstr ""
-#: src/rougail/output_doc/config.py:114
+#: src/rougail/output_doc/config.py:110
+msgid "variables is not selected in \"_.contents\""
+msgstr ""
+
+#: src/rougail/output_doc/config.py:113
msgid "Document the variables from this family"
msgstr ""
-#: src/rougail/output_doc/config.py:118
-msgid "Families or variables for this family are in an other file name"
+#: src/rougail/output_doc/config.py:117
+msgid "Add command line informations in documentation"
msgstr ""
-#: src/rougail/output_doc/config.py:128
-msgid "documentation must be splitted and in gitlab format"
+#: src/rougail/output_doc/config.py:123 src/rougail/output_doc/config.py:132
+msgid "if \"_.output_format\" is json or variables is not selected in \"_.contents\""
msgstr ""
-#: src/rougail/output_doc/config.py:131
-msgid "Root family name"
+#: src/rougail/output_doc/config.py:126
+msgid "Add environment variable informations in documentation"
msgstr ""
#: src/rougail/output_doc/config.py:135
-msgid "Name of the file"
+msgid "Name of the default environment prefix"
msgstr ""
#: src/rougail/output_doc/config.py:141
-msgid "Disable documentation for variables with those modes"
+msgid "should only user uppercase characters"
+msgstr ""
+
+#: src/rougail/output_doc/config.py:146
+msgid "when \"__.main_namespace\" is not set or \"_.with_environment\" is false"
msgstr ""
#: src/rougail/output_doc/config.py:149
-msgid "disabled when there is no mode available"
+msgid "Families or variables for this family are in an other file name"
msgstr ""
-#: src/rougail/output_doc/config.py:155
-msgid "verify if disable modes already exists"
+#: src/rougail/output_doc/config.py:156
+msgid "documentation must be splitted"
msgstr ""
-#: src/rougail/output_doc/config.py:157
-msgid "Modify values to document leaderships and dynamics families"
+#: src/rougail/output_doc/config.py:159
+msgid "Root family name"
msgstr ""
-#: src/rougail/output_doc/config.py:160
-msgid "Add description of variables and families when generate examples"
-msgstr ""
-
-#: src/rougail/output_doc/config.py:166
-msgid "disabled when example in not in contents"
+#: src/rougail/output_doc/config.py:163
+msgid "Name of the file"
msgstr ""
#: src/rougail/output_doc/config.py:169
-msgid "Comment in examples starts at column"
+msgid "Disable documentation for variables with those modes"
msgstr ""
#: src/rougail/output_doc/config.py:177
+msgid "disabled when there is no mode available"
+msgstr ""
+
+#: src/rougail/output_doc/config.py:183
+msgid "verify if disable modes already exists"
+msgstr ""
+
+#: src/rougail/output_doc/config.py:185
+msgid "Modify values to document leaderships and dynamics families"
+msgstr ""
+
+#: src/rougail/output_doc/config.py:188
+msgid "Add description of variables and families when generate examples"
+msgstr ""
+
+#: src/rougail/output_doc/config.py:194
+msgid "disabled when example in not in contents"
+msgstr ""
+
+#: src/rougail/output_doc/config.py:197
+msgid "Comment in examples starts at column"
+msgstr ""
+
+#: src/rougail/output_doc/config.py:205
msgid "Generate document in format"
msgstr ""
-#: src/rougail/output_doc/config.py:187
+#: src/rougail/output_doc/config.py:215
msgid "json output_format is not compatible with \"changelog\" and \"example\" contents"
msgstr ""
-#: src/rougail/output_doc/config.py:196
+#: src/rougail/output_doc/config.py:224
msgid "Force true color terminal"
msgstr ""
-#: src/rougail/output_doc/doc.py:358
+#: src/rougail/output_doc/doc.py:330
msgid "This family contains lists of variable blocks"
msgstr ""
-#: src/rougail/output_doc/doc.py:368
+#: src/rougail/output_doc/doc.py:340
msgid "This family builds families dynamically"
msgstr ""
-#: src/rougail/output_doc/doc.py:382
+#: src/rougail/output_doc/doc.py:354
msgid "Default"
msgstr ""
-#: src/rougail/output_doc/doc.py:397
+#: src/rougail/output_doc/doc.py:369
msgid "multiple"
msgstr ""
-#: src/rougail/output_doc/doc.py:405
+#: src/rougail/output_doc/doc.py:377
msgid "Example"
msgstr ""
-#: src/rougail/output_doc/doc.py:408
+#: src/rougail/output_doc/doc.py:380
msgid "Examples"
msgstr ""
-#: src/rougail/output_doc/doc.py:417
+#: src/rougail/output_doc/doc.py:389
msgid "Tag"
msgstr ""
-#: src/rougail/output_doc/doc.py:420
+#: src/rougail/output_doc/doc.py:392
msgid "Tags"
msgstr ""
-#: src/rougail/output_doc/doc.py:449
+#: src/rougail/output_doc/doc.py:424
msgid "No attribute \"description\" for \"{0}\" in {1}"
msgstr ""
-#: src/rougail/output_doc/doc.py:587
+#: src/rougail/output_doc/doc.py:562
msgid "text based with regular expressions \"{0}\""
msgstr ""
-#: src/rougail/output_doc/doc.py:591
+#: src/rougail/output_doc/doc.py:566
msgid "Validator"
msgstr ""
-#: src/rougail/output_doc/doc.py:594
+#: src/rougail/output_doc/doc.py:569
msgid "Validators"
msgstr ""
-#: src/rougail/output_doc/doc.py:603
+#: src/rougail/output_doc/doc.py:578
msgid "Choices"
msgstr ""
-#: src/rougail/output_doc/doc.py:706
+#: src/rougail/output_doc/doc.py:681
msgid "the value of the identifier"
msgstr ""
-#: src/rougail/output_doc/doc.py:710
+#: src/rougail/output_doc/doc.py:685
msgid "the value of the {0}"
msgstr ""
-#: src/rougail/output_doc/doc.py:719
+#: src/rougail/output_doc/doc.py:694
msgid "depends on a calculation"
msgstr ""
-#: src/rougail/output_doc/doc.py:725
+#: src/rougail/output_doc/doc.py:700
msgid "\"{0}\" is a calculation for {1} but has no description in {2}"
msgstr ""
-#: src/rougail/output_doc/doc.py:753
+#: src/rougail/output_doc/doc.py:728
msgid "the value of the variable \"{0}\""
msgstr ""
-#: src/rougail/output_doc/doc.py:755
+#: src/rougail/output_doc/doc.py:730
msgid "the value of the variable \"{0}\" if it is defined"
msgstr ""
-#: src/rougail/output_doc/doc.py:775
+#: src/rougail/output_doc/doc.py:750
msgid "the value of an undocumented variable"
msgstr ""
-#: src/rougail/output_doc/doc.py:778
+#: src/rougail/output_doc/doc.py:753
msgid "the values of undocumented variables"
msgstr ""
-#: src/rougail/output_doc/doc.py:801
+#: src/rougail/output_doc/doc.py:776
msgid "(from an undocumented variable)"
msgstr ""
-#: src/rougail/output_doc/doc.py:809
+#: src/rougail/output_doc/doc.py:784
msgid "{0} (from an undocumented variable)"
msgstr ""
-#: src/rougail/output_doc/doc.py:813 src/rougail/output_doc/doc.py:862
+#: src/rougail/output_doc/doc.py:788 src/rougail/output_doc/doc.py:840
msgid "depends on an undocumented variable"
msgstr ""
-#: src/rougail/output_doc/doc.py:884
+#: src/rougail/output_doc/doc.py:862
msgid "when the variable \"{{0}}\" is defined, accessible and hasn't the value \"{0}\""
msgstr ""
-#: src/rougail/output_doc/doc.py:888
+#: src/rougail/output_doc/doc.py:866
msgid "when the variable \"{{0}}\" is defined and hasn't the value \"{0}\""
msgstr ""
-#: src/rougail/output_doc/doc.py:892
+#: src/rougail/output_doc/doc.py:870
msgid "when the variable \"{{0}}\" is accessible and hasn't the value \"{0}\""
msgstr ""
-#: src/rougail/output_doc/doc.py:894
+#: src/rougail/output_doc/doc.py:872
msgid "when the variable \"{{0}}\" hasn't the value \"{0}\""
msgstr ""
-#: src/rougail/output_doc/doc.py:898
+#: src/rougail/output_doc/doc.py:876
msgid "when the variable \"{{0}}\" is defined, is accessible and has the value \"{0}\""
msgstr ""
-#: src/rougail/output_doc/doc.py:902
+#: src/rougail/output_doc/doc.py:880
msgid "when the variable \"{{0}}\" is defined and has the value \"{0}\""
msgstr ""
-#: src/rougail/output_doc/doc.py:906
+#: src/rougail/output_doc/doc.py:884
msgid "when the variable \"{{0}}\" is accessible and has the value \"{0}\""
msgstr ""
-#: src/rougail/output_doc/doc.py:908
+#: src/rougail/output_doc/doc.py:886
msgid "when the variable \"{{0}}\" has the value \"{0}\""
msgstr ""
-#: src/rougail/output_doc/example.py:38
+#: src/rougail/output_doc/example.py:45
msgid "Example with mandatory variables not filled in"
msgstr ""
-#: src/rougail/output_doc/example.py:43
+#: src/rougail/output_doc/example.py:52
msgid "Example with all variables modifiable"
msgstr ""
-#: src/rougail/output_doc/output/console.py:165
-#: src/rougail/output_doc/utils.py:820
-msgid "Variable"
-msgstr ""
-
-#: src/rougail/output_doc/output/console.py:166
-#: src/rougail/output_doc/utils.py:820
-msgid "Description"
-msgstr ""
-
-#: src/rougail/output_doc/output/gitlab.py:68
+#: src/rougail/output_doc/output/asciidoc.py:152
+#: src/rougail/output_doc/output/console.py:189
+#: src/rougail/output_doc/output/github.py:188
+#: src/rougail/output_doc/output/gitlab.py:44
msgid "Informations"
msgstr ""
-#: src/rougail/output_doc/utils.py:44
+#: src/rougail/output_doc/output/console.py:182
+#: src/rougail/output_doc/utils.py:896
+msgid "Variable"
+msgstr ""
+
+#: src/rougail/output_doc/output/console.py:183
+#: src/rougail/output_doc/utils.py:896
+msgid "Description"
+msgstr ""
+
+#: src/rougail/output_doc/utils.py:48
msgid "the domain name can starts by a dot"
msgstr ""
-#: src/rougail/output_doc/utils.py:45
+#: src/rougail/output_doc/utils.py:49
msgid "the domain name can be a hostname"
msgstr ""
-#: src/rougail/output_doc/utils.py:46
+#: src/rougail/output_doc/utils.py:50
msgid "the domain name can be an IP"
msgstr ""
-#: src/rougail/output_doc/utils.py:47
+#: src/rougail/output_doc/utils.py:51
msgid "the domain name can be network in CIDR format"
msgstr ""
-#: src/rougail/output_doc/utils.py:52 src/rougail/output_doc/utils.py:58
+#: src/rougail/output_doc/utils.py:56 src/rougail/output_doc/utils.py:62
msgid "the minimum value is {0}"
msgstr ""
-#: src/rougail/output_doc/utils.py:53 src/rougail/output_doc/utils.py:59
+#: src/rougail/output_doc/utils.py:57 src/rougail/output_doc/utils.py:63
msgid "the maximum value is {0}"
msgstr ""
-#: src/rougail/output_doc/utils.py:65
+#: src/rougail/output_doc/utils.py:69
msgid "IP must be in CIDR format"
msgstr ""
-#: src/rougail/output_doc/utils.py:66
+#: src/rougail/output_doc/utils.py:70
msgid "private IP are allowed"
msgstr ""
-#: src/rougail/output_doc/utils.py:67
+#: src/rougail/output_doc/utils.py:71
msgid "reserved IP are allowed"
msgstr ""
-#: src/rougail/output_doc/utils.py:72
+#: src/rougail/output_doc/utils.py:76
msgid "network must be in CIDR format"
msgstr ""
-#: src/rougail/output_doc/utils.py:77
+#: src/rougail/output_doc/utils.py:81
msgid "the host name can be an IP"
msgstr ""
-#: src/rougail/output_doc/utils.py:82
+#: src/rougail/output_doc/utils.py:86
msgid "the domain name in web address can be an IP"
msgstr ""
-#: src/rougail/output_doc/utils.py:83
+#: src/rougail/output_doc/utils.py:87
msgid "the domain name in web address can be only a hostname"
msgstr ""
-#: src/rougail/output_doc/utils.py:90
+#: src/rougail/output_doc/utils.py:94
msgid "can be range of port"
msgstr ""
-#: src/rougail/output_doc/utils.py:91
+#: src/rougail/output_doc/utils.py:95
msgid "can have the protocol"
msgstr ""
-#: src/rougail/output_doc/utils.py:92
+#: src/rougail/output_doc/utils.py:96
msgid "port 0 is allowed"
msgstr ""
-#: src/rougail/output_doc/utils.py:93
+#: src/rougail/output_doc/utils.py:97
msgid "well-known ports (1 to 1023) are allowed"
msgstr ""
-#: src/rougail/output_doc/utils.py:94
+#: src/rougail/output_doc/utils.py:98
msgid "registred ports (1024 to 49151) are allowed"
msgstr ""
-#: src/rougail/output_doc/utils.py:95
+#: src/rougail/output_doc/utils.py:99
msgid "private ports (greater than 49152) are allowed"
msgstr ""
-#: src/rougail/output_doc/utils.py:100
+#: src/rougail/output_doc/utils.py:104
msgid "minimum length for the secret is {0} characters"
msgstr ""
-#: src/rougail/output_doc/utils.py:101
+#: src/rougail/output_doc/utils.py:105
msgid "maximum length for the secret is {0} characters"
msgstr ""
-#: src/rougail/output_doc/utils.py:102
+#: src/rougail/output_doc/utils.py:106
msgid "forbidden characters: {0}"
msgstr ""
-#: src/rougail/output_doc/utils.py:107
+#: src/rougail/output_doc/utils.py:111
msgid "this filename could be a relative path"
msgstr ""
-#: src/rougail/output_doc/utils.py:108
+#: src/rougail/output_doc/utils.py:112
msgid "this file must exists"
msgstr ""
-#: src/rougail/output_doc/utils.py:109
+#: src/rougail/output_doc/utils.py:113
msgid "file type allowed: {0}"
msgstr ""
-#: src/rougail/output_doc/utils.py:362
-msgid "Variables for \"{0}\""
-msgstr ""
-
-#: src/rougail/output_doc/utils.py:392
+#: src/rougail/output_doc/utils.py:432
msgid "Identifiers"
msgstr ""
-#: src/rougail/output_doc/utils.py:697 src/rougail/output_doc/utils.py:706
-#: src/rougail/output_doc/utils.py:712 src/rougail/output_doc/utils.py:718
-#: src/rougail/output_doc/utils.py:722
+#: src/rougail/output_doc/utils.py:578
+msgid "Command line"
+msgstr ""
+
+#: src/rougail/output_doc/utils.py:581
+msgid "Environment variable"
+msgstr ""
+
+#: src/rougail/output_doc/utils.py:762 src/rougail/output_doc/utils.py:771
+#: src/rougail/output_doc/utils.py:777 src/rougail/output_doc/utils.py:783
+#: src/rougail/output_doc/utils.py:787
msgid "(default)"
msgstr ""
-#: src/rougail/output_doc/utils.py:877
+#: src/rougail/output_doc/utils.py:973
msgid "{0}: {1}"
msgstr ""
diff --git a/src/rougail/output_doc/config.py b/src/rougail/output_doc/config.py
index 272ba18b2..29ad2ec53 100644
--- a/src/rougail/output_doc/config.py
+++ b/src/rougail/output_doc/config.py
@@ -1,6 +1,4 @@
"""
-Config file for Rougail-doc
-
Silique (https://www.silique.fr)
Copyright (C) 2024-2025
@@ -72,12 +70,13 @@ def get_rougail_config(
output_format_default = outputs[0]
rougail_options = f"""
doc:
- description: {_('Configuration rougail-doc')}
+ description: {_('Generate documentation')}
disabled:
jinja: |
{{% if step.output is propertyerror or step.output != 'doc' %}}
disabled
{{% endif %}}
+ description: {_('when "doc" is not set in "step.output"')}
title_level:
description: {_('Starting title level')}
@@ -99,7 +98,7 @@ doc:
jinja: |-
{{{{ "changelog" not in _.contents }}}}
return_type: boolean
- description: changelog is not selected
+ description: {_('changelog is not selected in "_.contents"')}
without_family:
description: {_('Do not add families in documentation')}
@@ -108,12 +107,44 @@ doc:
jinja: |-
{{{{ "variables" not in _.contents and "changelog" not in _.contents and _.output_format != "json" }}}}
return_type: boolean
- description: variables is not selected
+ description: {_('variables is not selected in "_.contents"')}
root:
description: {_('Document the variables from this family')}
mandatory: false
+ with_commandline:
+ description: {_('Add command line informations in documentation')}
+ default: false
+ disabled:
+ jinja: |-
+ {{{{ _.output_format == "json" or "variables" not in _.contents }}}}
+ return_type: boolean
+ description: {_('if "_.output_format" is json or variables is not selected in "_.contents"')}
+
+ with_environment:
+ description: {_('Add environment variable informations in documentation')}
+ default: false
+ disabled:
+ jinja: |-
+ {{{{ _.output_format == "json" or "variables" not in _.contents }}}}
+ return_type: boolean
+ description: {_('if "_.output_format" is json or variables is not selected in "_.contents"')}
+
+ environment_default_environment_name:
+ description: {_("Name of the default environment prefix")}
+ default: ROUGAIL
+ validators:
+ - jinja: |-
+ {{{{ _.environment_default_environment_name | upper != _.environment_default_environment_name }}}}
+ return_type: boolean
+ description: {_("should only user uppercase characters")}
+ disabled:
+ jinja: |-
+ {{{{ __.main_namespace or _.with_environment is false }}}}
+ return_type: boolean
+ description: {_('when "__.main_namespace" is not set or "_.with_environment" is false')}
+
other_root_filenames:
description: {_("Families or variables for this family are in an other file name")}
type: leadership
@@ -122,10 +153,7 @@ doc:
{{% if not _.root %}}
Documents are not splitted
{{% endif %}}
- {{% if _.output_format != 'gitlab' %}}
- anchor is available only for gitlab output_format
- {{% endif %}}
- description: {_('documentation must be splitted and in gitlab format')}
+ description: {_('documentation must be splitted')}
root_path:
description: {_("Root family name")}
diff --git a/src/rougail/output_doc/doc.py b/src/rougail/output_doc/doc.py
index ef45e4b2c..6e7f9f194 100644
--- a/src/rougail/output_doc/doc.py
+++ b/src/rougail/output_doc/doc.py
@@ -104,7 +104,7 @@ class RougailOutputDoc(Examples, Changelog):
def load_formatter(self) -> str:
output_format = self.rougailconfig["doc.output_format"]
- self.formatter = self.outputs[output_format](self.rougailconfig)
+ self.formatter = self.outputs[output_format](self.rougailconfig, support_namespace=self.support_namespace)
def print(self) -> None:
ret, data = self.run()
@@ -395,6 +395,9 @@ class RougailOutputDoc(Examples, Changelog):
"name": name,
"values": values,
}
+ alternative_name = variable.information.get("alternative_name", None)
+ if alternative_name:
+ informations["alternative_name"] = alternative_name
return True
def _populate(
diff --git a/src/rougail/output_doc/locale/fr/LC_MESSAGES/rougail_output_doc.mo b/src/rougail/output_doc/locale/fr/LC_MESSAGES/rougail_output_doc.mo
index 11d78f006..34ac4d3b5 100644
Binary files a/src/rougail/output_doc/locale/fr/LC_MESSAGES/rougail_output_doc.mo and b/src/rougail/output_doc/locale/fr/LC_MESSAGES/rougail_output_doc.mo differ
diff --git a/src/rougail/output_doc/output/console.py b/src/rougail/output_doc/output/console.py
index 6ffc8f6a4..c3045a38b 100644
--- a/src/rougail/output_doc/output/console.py
+++ b/src/rougail/output_doc/output/console.py
@@ -36,7 +36,7 @@ class Formatter(CommonFormatter):
"title5": "dark_green underline bold",
}
- def __init__(self, rougailconfig) -> None:
+ def __init__(self, rougailconfig, **kwargs) -> None:
from rich.table import Table
from rich.theme import Theme
from rich.console import Console
@@ -47,11 +47,11 @@ class Formatter(CommonFormatter):
self.rich_syntaxt = Syntax
self.custom_theme = Theme(self.titles_color)
self.max_line = 0
- super().__init__(rougailconfig)
+ super().__init__(rougailconfig, **kwargs)
def _run(self, dico: dict, level: int, dico_is_already_treated=False) -> str:
if not dico_is_already_treated:
- dico = self.dict_to_dict(dico, level)
+ dico = self.dict_to_dict(dico, level, init=True)
return self.compute(dico)
def compute(self, dico):
diff --git a/src/rougail/output_doc/output/github.py b/src/rougail/output_doc/output/github.py
index 7a1b6ad74..95dd8b950 100644
--- a/src/rougail/output_doc/output/github.py
+++ b/src/rougail/output_doc/output/github.py
@@ -39,7 +39,7 @@ class Formatter(CommonFormatter):
def __init__(self, rougailconfig, **kwarg) -> None:
self.max_line_variable = 0
self.max_line_description = 0
- super().__init__(rougailconfig)
+ super().__init__(rougailconfig, **kwarg)
def title(
self,
diff --git a/src/rougail/output_doc/utils.py b/src/rougail/output_doc/utils.py
index 7db769bda..7ff59dd44 100644
--- a/src/rougail/output_doc/utils.py
+++ b/src/rougail/output_doc/utils.py
@@ -21,12 +21,15 @@ from typing import Tuple, List, Optional
from io import BytesIO
from ruamel.yaml import YAML
import tabulate as tabulate_module
-from tiramisu.error import display_list
from tabulate import tabulate
from rougail.tiramisu import normalize_family
from tiramisu import undefined
-from tiramisu.error import PropertiesOptionError
+from tiramisu.error import PropertiesOptionError, display_list
+try:
+ from tiramisu_cmdline_parser.api import gen_argument_name
+except:
+ gen_argument_name = None
from .i18n import _
@@ -153,10 +156,11 @@ class CommonFormatter:
# tabulate module name
name = None
- def __init__(self, rougailconfig, **kwarg):
+ def __init__(self, rougailconfig, support_namespace, **kwarg):
tabulate_module.PRESERVE_WHITESPACE = True
self.header_setted = False
self.rougailconfig = rougailconfig
+ self.support_namespace = support_namespace
def run(
self, informations: dict, *, dico_is_already_treated=False
@@ -168,12 +172,22 @@ class CommonFormatter:
if self.root:
current = informations
for path in self.root.split('.'):
+ info = current[path]['informations']
current = current[path]["children"]
- informations = current
+ informations = {"informations": info, "children": current}
return self._run(informations, level, dico_is_already_treated)
return ""
def options(self):
+ self.with_commandline = self.rougailconfig["doc.with_commandline"]
+ self.with_environment = self.rougailconfig["doc.with_environment"]
+ if self.with_environment and not gen_argument_name:
+ raise Exception('please install tiramisu_cmdline_parser')
+ if not self.rougailconfig["main_namespace"] and self.with_environment:
+ if self.support_namespace:
+ self.prefix = ""
+ else:
+ self.prefix = self.rougailconfig["doc.environment_default_environment_name"] + "_"
self.with_family = not self.rougailconfig["doc.without_family"]
self.root = self.rougailconfig["doc.root"]
self.other_root_filenames = None
@@ -285,15 +299,29 @@ class CommonFormatter:
modified_attributes: dict,
force_identifiers: Optional[str],
*,
- is_variable=False
+ is_variable=False,
+ variable_prefix: str="",
+ is_bold: bool=True,
+ is_upper: bool=False,
) -> str:
ret_paths = []
path = informations["path"]
+ if is_bold:
+ bold = self.bold
+ else:
+ def bold(value):
+ return value
+ if is_upper:
+ def upper(value):
+ return value.upper()
+ else:
+ def upper(value):
+ return value
if "identifiers" in modified_attributes:
name, previous, new = modified_attributes["identifiers"]
ret_paths.extend(
[
- self.bold(self.delete(calc_path(path, self, identifier)))
+ bold(self.delete(upper(variable_prefix + calc_path(path, self, identifier))))
for identifier in previous
]
)
@@ -304,13 +332,15 @@ class CommonFormatter:
if force_identifiers and identifier != force_identifiers:
continue
path_ = calc_path(path, self, identifier)
+ if variable_prefix:
+ path_ = variable_prefix + upper(path_)
if not idx:
path_ = self.anchor(path_, path)
if identifier in new:
path_ = self.underline(path_)
- ret_paths.append(self.bold(path_))
+ ret_paths.append(bold(path_))
else:
- ret_paths.append(self.bold(self.anchor(path, path)))
+ ret_paths.append(bold(self.anchor(variable_prefix + upper(path), path)))
return ret_paths
def table_header(
@@ -341,6 +371,10 @@ class CommonFormatter:
else:
table_datas = []
ori_level = None
+ if init and self.root:
+ if self.with_family:
+ msg.extend(self.family_to_string(dico["informations"], level, False))
+ dico = dico["children"]
for value in dico.values():
if value["type"] == "variable":
self.variable_to_string(value, table_datas)
@@ -525,10 +559,26 @@ class CommonFormatter:
multi, properties = self.property_to_string(
informations, calculated_properties, modified_attributes,
)
+ paths = self.display_paths(informations, modified_attributes, force_identifiers, is_variable=True)
first_col = [
- self.join(self.display_paths(informations, modified_attributes, force_identifiers, is_variable=True)),
+ self.join(paths),
properties,
]
+ if self.with_commandline:
+ paths = self.display_paths(informations, modified_attributes, force_identifiers, is_variable=True, is_bold=False, variable_prefix="--")
+ variable_type = informations["properties"][0]["name"]
+ if variable_type == 'boolean':
+ for path in list(paths):
+ paths.append(gen_argument_name(path, False, True, False))
+ if "alternative_name" in informations:
+ alternative_name = informations["alternative_name"]
+ paths[0] += f", -{alternative_name}"
+ if variable_type == 'boolean':
+ paths[1] += ", -" + gen_argument_name(alternative_name, True, True, False)
+ first_col.append(self.section(_("Command line"), paths))
+ if self.with_environment:
+ paths = self.display_paths(informations, modified_attributes, force_identifiers, is_variable=True, is_bold=False, is_upper=True, variable_prefix=self.prefix)
+ first_col.append(self.section(_("Environment variable"), paths))
self.columns(first_col)
return multi, first_col
diff --git a/tests/changelog/40_dynamic_variable_description_mod/after/rougail/00-base.yml b/tests/changelog/40_dynamic_variable_description_mod/after/rougail/00-base.yml
new file mode 100644
index 000000000..295de6f56
--- /dev/null
+++ b/tests/changelog/40_dynamic_variable_description_mod/after/rougail/00-base.yml
@@ -0,0 +1,14 @@
+%YAML 1.2
+---
+version: 1.1
+
+var: # A suffix variable
+ - val1
+ - val2
+
+"dyn{{ identifier }}":
+ description: A dynamic family
+ dynamic:
+ variable: _.var
+ var: # A dynamic variable
+...
diff --git a/tests/changelog/40_dynamic_variable_description_mod/before/rougail/00-base.yml b/tests/changelog/40_dynamic_variable_description_mod/before/rougail/00-base.yml
new file mode 100644
index 000000000..3001ba971
--- /dev/null
+++ b/tests/changelog/40_dynamic_variable_description_mod/before/rougail/00-base.yml
@@ -0,0 +1,14 @@
+%YAML 1.2
+---
+version: 1.1
+
+var: # A suffix variable
+ - val1
+ - val2
+
+"dyn{{ identifier }}":
+ description: A dynamic family {{ identifier }}
+ dynamic:
+ variable: _.var
+ var: # A dynamic variable {{ identifier }}
+...
diff --git a/tests/changelog/40_dynamic_variable_description_mod/result.adoc b/tests/changelog/40_dynamic_variable_description_mod/result.adoc
new file mode 100644
index 000000000..1252b20a2
--- /dev/null
+++ b/tests/changelog/40_dynamic_variable_description_mod/result.adoc
@@ -0,0 +1,11 @@
+== Modified variable
+
+[cols="1a,1a"]
+|====
+| Variable | Description
+| **dyn__val1__.var** +
+**dyn__val2__.var** +
+`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `basic` `mandatory` | +++A dynamic variable {{ identifier }}.+++ +
+#A dynamic variable.#
+|====
+
diff --git a/tests/changelog/40_dynamic_variable_description_mod/result.gitlab.md b/tests/changelog/40_dynamic_variable_description_mod/result.gitlab.md
new file mode 100644
index 000000000..b71c48128
--- /dev/null
+++ b/tests/changelog/40_dynamic_variable_description_mod/result.gitlab.md
@@ -0,0 +1,8 @@
+Modified variable
+
+| Variable | Description |
+|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
+| **dyn*val1*.var** **dyn*val2*.var** [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` | ~~A dynamic variable {{ identifier }}.~~ A dynamic variable. |
+
+
+
diff --git a/tests/changelog/40_dynamic_variable_description_mod/result.html b/tests/changelog/40_dynamic_variable_description_mod/result.html
new file mode 100644
index 000000000..33bf946fd
--- /dev/null
+++ b/tests/changelog/40_dynamic_variable_description_mod/result.html
@@ -0,0 +1,11 @@
+