Compare commits
4 commits
e06c9b1829
...
d76e676d4e
| Author | SHA1 | Date | |
|---|---|---|---|
| d76e676d4e | |||
| 0271bf430a | |||
| 48668bce75 | |||
| 76a0a9080b |
4367 changed files with 61512 additions and 47559 deletions
|
|
@ -11,7 +11,7 @@ include_toc: true
|
||||||
> Les fichiers de structure contiennent toutes les informations relatif aux variables. Cette sortie génère la documentation pour tout ou partie de ces variables.\
|
> Les fichiers de structure contiennent toutes les informations relatif aux variables. Cette sortie génère la documentation pour tout ou partie de ces variables.\
|
||||||
> **Chemin** : doc\
|
> **Chemin** : doc\
|
||||||
> *`désactivé`*\
|
> *`désactivé`*\
|
||||||
> **Désactivé** : si doc n'est pas spécifié dans "[Sélection pour sortie](#step.output)"
|
> **Désactivé** : si "[Sélection pour sortie](#step.output)" n'est pas doc
|
||||||
|
|
||||||
| Variable | Description | Valeur par défaut | Type | Contrôle des accès | Validateur |
|
| Variable | Description | Valeur par défaut | Type | Contrôle des accès | Validateur |
|
||||||
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------|-------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------|
|
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------|-------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ include_toc: true
|
||||||
> The structural files contain all the information related to the variables. This output generates the documentation for all or some of these variables.\
|
> The structural files contain all the information related to the variables. This output generates the documentation for all or some of these variables.\
|
||||||
> **Path**: doc\
|
> **Path**: doc\
|
||||||
> *`disabled`*\
|
> *`disabled`*\
|
||||||
> **Disabled**: if doc is not set in "[Select for output](#step.output)"
|
> **Disabled**: if "[Select for output](#step.output)" is not doc
|
||||||
|
|
||||||
| Variable | Description | Default value | Type | Access control | Validator |
|
| Variable | Description | Default value | Type | Access control | Validator |
|
||||||
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------|-----------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------|
|
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------|-----------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: 2026-01-29 08:31+0100\n"
|
"POT-Creation-Date: 2026-03-29 10:57+0200\n"
|
||||||
"PO-Revision-Date: 2026-01-29 08:33+0100\n"
|
"PO-Revision-Date: 2026-03-29 10:58+0200\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
"Language: fr\n"
|
"Language: fr\n"
|
||||||
|
|
@ -16,38 +16,175 @@ msgstr ""
|
||||||
"Generated-By: pygettext.py 1.5\n"
|
"Generated-By: pygettext.py 1.5\n"
|
||||||
"X-Generator: Poedit 3.8\n"
|
"X-Generator: Poedit 3.8\n"
|
||||||
|
|
||||||
#: src/rougail/output_doc/annotator.py:371
|
#: src/rougail/output_doc/changelog.py:153
|
||||||
msgid "when the identifier is \"{0}\""
|
|
||||||
msgstr "lorsque l'identifiant est \"{0}\""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/annotator.py:373
|
|
||||||
msgid "when the identifier is not \"{0}\""
|
|
||||||
msgstr "lorsque l'identifiant n'est pas \"{0}\""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/changelog.py:137
|
|
||||||
msgid "New variable"
|
msgid "New variable"
|
||||||
msgstr "Nouvelle variable"
|
msgstr "Nouvelle variable"
|
||||||
|
|
||||||
#: src/rougail/output_doc/changelog.py:139
|
#: src/rougail/output_doc/changelog.py:155
|
||||||
msgid "New variables"
|
msgid "New variables"
|
||||||
msgstr "Nouvelles variables"
|
msgstr "Nouvelles variables"
|
||||||
|
|
||||||
#: src/rougail/output_doc/changelog.py:153
|
#: src/rougail/output_doc/changelog.py:169
|
||||||
msgid "Modified variable"
|
msgid "Modified variable"
|
||||||
msgstr "Variable modifiée"
|
msgstr "Variable modifiée"
|
||||||
|
|
||||||
#: src/rougail/output_doc/changelog.py:155
|
#: src/rougail/output_doc/changelog.py:171
|
||||||
msgid "Modified variables"
|
msgid "Modified variables"
|
||||||
msgstr "Variables modifiées"
|
msgstr "Variables modifiées"
|
||||||
|
|
||||||
#: src/rougail/output_doc/changelog.py:169
|
#: src/rougail/output_doc/changelog.py:185
|
||||||
msgid "Deleted variable"
|
msgid "Deleted variable"
|
||||||
msgstr "Variable supprimée"
|
msgstr "Variable supprimée"
|
||||||
|
|
||||||
#: src/rougail/output_doc/changelog.py:171
|
#: src/rougail/output_doc/changelog.py:187
|
||||||
msgid "Deleted variables"
|
msgid "Deleted variables"
|
||||||
msgstr "Variables supprimées"
|
msgstr "Variables supprimées"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:52
|
||||||
|
msgid ""
|
||||||
|
"cannot find \"{0}_calculation\" information, do you have annotate this "
|
||||||
|
"configuration?"
|
||||||
|
msgstr ""
|
||||||
|
"ne peut trouver l'information \"{0}_calculation\", avez-vous annoté cette "
|
||||||
|
"configuration ?"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:93
|
||||||
|
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/collect.py:97
|
||||||
|
msgid "the value of the global information \"{0}\""
|
||||||
|
msgstr "la valeur de l'information globale \"{0}\""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:101
|
||||||
|
msgid "the value of the {0}"
|
||||||
|
msgstr "la valeur de l'{0}"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:108
|
||||||
|
msgid "depends on a calculation"
|
||||||
|
msgstr "dépend d'un calcul"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:109
|
||||||
|
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/collect.py:172
|
||||||
|
msgid "depends on an undocumented variable"
|
||||||
|
msgstr "dépends d'une variable non documentée"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:190
|
||||||
|
msgid "is \"{0}\""
|
||||||
|
msgstr "est \"{0}\""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:195
|
||||||
|
msgid "is accessible"
|
||||||
|
msgstr "est accessible"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:197
|
||||||
|
msgid "is defined"
|
||||||
|
msgstr "est définie"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:202
|
||||||
|
msgid "hasn't the value \"{0}\""
|
||||||
|
msgstr "n'a pas la valeur \"{0}\""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:204
|
||||||
|
msgid "has the value \"{0}\""
|
||||||
|
msgstr "a la valeur \"{0}\""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:208
|
||||||
|
msgid "is {0}"
|
||||||
|
msgstr "est {0}"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:210
|
||||||
|
msgid "when the variable \"{{0}}\" {0}"
|
||||||
|
msgstr "lorsque la variable \"{{0}}\" {0}"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:237
|
||||||
|
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/collect.py:239
|
||||||
|
msgid "the value of the variable \"{0}\""
|
||||||
|
msgstr "la valeur de la variable \"{0}\""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:255
|
||||||
|
msgid "(from an undocumented variable)"
|
||||||
|
msgstr "(issue d'une variable non documentée)"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:261
|
||||||
|
msgid "{0} (from an undocumented variable)"
|
||||||
|
msgstr "{0} (issue d'une variable non documentée)"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:265
|
||||||
|
msgid "the value of an undocumented variable"
|
||||||
|
msgstr "la valeur d'une variable non documentée"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:302
|
||||||
|
msgid "when the identifier is \"{0}\""
|
||||||
|
msgstr "lorsque l'identifiant est \"{0}\""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:304
|
||||||
|
msgid "when the identifier is not \"{0}\""
|
||||||
|
msgstr "lorsque l'identifiant n'est pas \"{0}\""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:309
|
||||||
|
msgid "the value of the identifier"
|
||||||
|
msgstr "la valeur de l'identifiant"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:396
|
||||||
|
msgid "This family contains lists of variable blocks"
|
||||||
|
msgstr "Cette famille contient des listes de bloc de variable"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:400
|
||||||
|
msgid "This family builds families dynamically"
|
||||||
|
msgstr "Cette famille construit des familles dynamiquement"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:410
|
||||||
|
msgid "This family is a namespace"
|
||||||
|
msgstr "Cette famille est un espace de nom"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:461
|
||||||
|
msgid "Example"
|
||||||
|
msgstr "Exemple"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:464
|
||||||
|
msgid "Examples"
|
||||||
|
msgstr "Exemples"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:470
|
||||||
|
msgid "Tag"
|
||||||
|
msgstr "Étiquette"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:473
|
||||||
|
msgid "Tags"
|
||||||
|
msgstr "Étiquettes"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:567
|
||||||
|
msgid "text based with regular expressions \"{0}\""
|
||||||
|
msgstr "texte avec expression rationnelle \"{0}\""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:571
|
||||||
|
#: src/rougail/output_doc/tabular/six_columns.py:83
|
||||||
|
msgid "Validator"
|
||||||
|
msgstr "Validateur"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:574
|
||||||
|
msgid "Validators"
|
||||||
|
msgstr "Validateurs"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:583
|
||||||
|
msgid "Choices"
|
||||||
|
msgstr "Choix"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:633
|
||||||
|
msgid "Default"
|
||||||
|
msgstr "Défaut"
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:643
|
||||||
|
msgid "No attribute \"description\" for \"{0}\" in {1}"
|
||||||
|
msgstr "Aucun attribut \"description\" pour \"{0}\" dans {1}"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:54
|
#: src/rougail/output_doc/config.py:54
|
||||||
msgid "duplicated level rougail-output-doc for {0} \"{1}\": {2} and {3}"
|
msgid "duplicated level rougail-output-doc for {0} \"{1}\": {2} and {3}"
|
||||||
msgstr "niveau dupliqué pour rougail-doc pour {0} \"{1}\": {2} et {3}"
|
msgstr "niveau dupliqué pour rougail-doc pour {0} \"{1}\": {2} et {3}"
|
||||||
|
|
@ -56,15 +193,15 @@ msgstr "niveau dupliqué pour rougail-doc pour {0} \"{1}\": {2} et {3}"
|
||||||
msgid "duplicated name \"{0}\" in rougail-output-doc"
|
msgid "duplicated name \"{0}\" in rougail-output-doc"
|
||||||
msgstr "nom dupliqué \"{0}\" dans rougail-output-doc"
|
msgstr "nom dupliqué \"{0}\" dans rougail-output-doc"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:118
|
#: src/rougail/output_doc/config.py:116
|
||||||
msgid "is true if doc is activate"
|
msgid "is true if doc is activate"
|
||||||
msgstr "est true si doc est activé"
|
msgstr "est true si doc est activé"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:121
|
#: src/rougail/output_doc/config.py:119
|
||||||
msgid "Generate documentation from structural files"
|
msgid "Generate documentation from structural files"
|
||||||
msgstr "Générer la documentation depuis les fichiers de structure"
|
msgstr "Générer la documentation depuis les fichiers de structure"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:122
|
#: src/rougail/output_doc/config.py:120
|
||||||
msgid ""
|
msgid ""
|
||||||
"The structural files contain all the information related to the variables. "
|
"The structural files contain all the information related to the variables. "
|
||||||
"This output generates the documentation for all or some of these variables."
|
"This output generates the documentation for all or some of these variables."
|
||||||
|
|
@ -73,19 +210,19 @@ msgstr ""
|
||||||
"variables. Cette sortie génère la documentation pour tout ou partie de ces "
|
"variables. Cette sortie génère la documentation pour tout ou partie de ces "
|
||||||
"variables."
|
"variables."
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:127
|
#: src/rougail/output_doc/config.py:125
|
||||||
msgid "if doc is not set in \"step.output\""
|
msgid "if \"step.output\" is not doc"
|
||||||
msgstr "si doc n'est pas spécifié dans \"step.output\""
|
msgstr "si \"step.output\" n'est pas doc"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:130
|
#: src/rougail/output_doc/config.py:128
|
||||||
msgid "The output format of the generated documentation"
|
msgid "The output format of the generated documentation"
|
||||||
msgstr "Le format de sortie de la documentation générée"
|
msgstr "Le format de sortie de la documentation générée"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:139
|
#: src/rougail/output_doc/config.py:137
|
||||||
msgid "Generate document with this tabular model"
|
msgid "Generate document with this tabular model"
|
||||||
msgstr "Génère la documentation avec ce modèle de tableau"
|
msgstr "Génère la documentation avec ce modèle de tableau"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:140
|
#: src/rougail/output_doc/config.py:138
|
||||||
msgid ""
|
msgid ""
|
||||||
"The variables are documented with a tabular view. A template selection "
|
"The variables are documented with a tabular view. A template selection "
|
||||||
"allows you to choose the content of each column."
|
"allows you to choose the content of each column."
|
||||||
|
|
@ -93,15 +230,15 @@ msgstr ""
|
||||||
"Les variables sont documentées avec une vue tableau. Une sélection de modèle "
|
"Les variables sont documentées avec une vue tableau. Une sélection de modèle "
|
||||||
"vous permet de choisir le contenu de chaque colonne."
|
"vous permet de choisir le contenu de chaque colonne."
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:148
|
#: src/rougail/output_doc/config.py:146
|
||||||
msgid "\"_.output_format\" in json is not compatible with this variable"
|
msgid "\"_.output_format\" in json is not compatible with this variable"
|
||||||
msgstr "\"_.output_format\" en json n\\'est pas compatible avec cette variable"
|
msgstr "\"_.output_format\" en json n\\'est pas compatible avec cette variable"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:155
|
#: src/rougail/output_doc/config.py:153
|
||||||
msgid "Generated content"
|
msgid "Generated content"
|
||||||
msgstr "Contenu généré"
|
msgstr "Contenu généré"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:156
|
#: src/rougail/output_doc/config.py:154
|
||||||
msgid ""
|
msgid ""
|
||||||
"You can generate three type of document. All variables (\"variables\"), an "
|
"You can generate three type of document. All variables (\"variables\"), an "
|
||||||
"example file in YAML format (\"example\") or change log (\"changelog\")."
|
"example file in YAML format (\"example\") or change log (\"changelog\")."
|
||||||
|
|
@ -110,7 +247,7 @@ msgstr ""
|
||||||
"(\"variables\"), un exemple de fichier au format YAML (\"example\") ou le "
|
"(\"variables\"), un exemple de fichier au format YAML (\"example\") ou le "
|
||||||
"journal des changements (\"changelog\")."
|
"journal des changements (\"changelog\")."
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:169
|
#: src/rougail/output_doc/config.py:167
|
||||||
msgid ""
|
msgid ""
|
||||||
"\"_.output_format\" in json is not compatible with changelog or example "
|
"\"_.output_format\" in json is not compatible with changelog or example "
|
||||||
"\"_.contents\""
|
"\"_.contents\""
|
||||||
|
|
@ -118,15 +255,15 @@ msgstr ""
|
||||||
"\"_.output_format\" en json n'est pas compatible avec \"_.contents\" "
|
"\"_.output_format\" en json n'est pas compatible avec \"_.contents\" "
|
||||||
"changelog or example"
|
"changelog or example"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:172
|
#: src/rougail/output_doc/config.py:170
|
||||||
msgid "Starting title level"
|
msgid "Starting title level"
|
||||||
msgstr "Niveau de titre de départ"
|
msgstr "Niveau de titre de départ"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:177
|
#: src/rougail/output_doc/config.py:175
|
||||||
msgid "Modify values to document all variables"
|
msgid "Modify values to document all variables"
|
||||||
msgstr "Modifier les valeurs pour documenter toutes les variables"
|
msgstr "Modifier les valeurs pour documenter toutes les variables"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:178
|
#: src/rougail/output_doc/config.py:176
|
||||||
msgid ""
|
msgid ""
|
||||||
"To document leadership or dynamic family variables, it is sometimes "
|
"To document leadership or dynamic family variables, it is sometimes "
|
||||||
"necessary to generate values, which can change the values in the "
|
"necessary to generate values, which can change the values in the "
|
||||||
|
|
@ -137,17 +274,17 @@ msgstr ""
|
||||||
"valeurs de la configuration. Soyez vigilent si vous réutilisez cette "
|
"valeurs de la configuration. Soyez vigilent si vous réutilisez cette "
|
||||||
"configuration."
|
"configuration."
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:182
|
#: src/rougail/output_doc/config.py:180
|
||||||
msgid "Display documentation in console always with true color terminal"
|
msgid "Display documentation in console always with true color terminal"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Afficher la documentation dans la console en permanence avec un terminal en "
|
"Afficher la documentation dans la console en permanence avec un terminal en "
|
||||||
"couleurs réelles"
|
"couleurs réelles"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:189
|
#: src/rougail/output_doc/config.py:187
|
||||||
msgid "The variables in this family are documented in another file"
|
msgid "The variables in this family are documented in another file"
|
||||||
msgstr "Les variables pour cette famille sont documentés dans un autre fichier"
|
msgstr "Les variables pour cette famille sont documentés dans un autre fichier"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:190
|
#: src/rougail/output_doc/config.py:188
|
||||||
msgid ""
|
msgid ""
|
||||||
"If you separate the variables into different files, the links between the "
|
"If you separate the variables into different files, the links between the "
|
||||||
"variables will break. Therefore, you must define different filenames for the "
|
"variables will break. Therefore, you must define different filenames for the "
|
||||||
|
|
@ -157,23 +294,23 @@ msgstr ""
|
||||||
"variables va être cassé. Dans ce cas, vous devez définit différents nom de "
|
"variables va être cassé. Dans ce cas, vous devez définit différents nom de "
|
||||||
"fichiers pour les fichiers contenant ces variables."
|
"fichiers pour les fichiers contenant ces variables."
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:194
|
#: src/rougail/output_doc/config.py:192
|
||||||
msgid "This file contains child variables of the family"
|
msgid "This file contains child variables of the family"
|
||||||
msgstr "Ce fichier contient les variables enfants de la famille"
|
msgstr "Ce fichier contient les variables enfants de la famille"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:198
|
#: src/rougail/output_doc/config.py:196
|
||||||
msgid "Name of the file"
|
msgid "Name of the file"
|
||||||
msgstr "Nom du fichier"
|
msgstr "Nom du fichier"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:206
|
#: src/rougail/output_doc/config.py:204
|
||||||
msgid "Documentation a structural type"
|
msgid "Documentation a structural type"
|
||||||
msgstr "Documenter type de structure"
|
msgstr "Documenter type de structure"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:210
|
#: src/rougail/output_doc/config.py:208
|
||||||
msgid "Variables and changelog documentation"
|
msgid "Variables and changelog documentation"
|
||||||
msgstr "Documentation des variables et journal de changements"
|
msgstr "Documentation des variables et journal de changements"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:215
|
#: src/rougail/output_doc/config.py:213
|
||||||
msgid ""
|
msgid ""
|
||||||
"if \"_.output_format\" is json or \"_.contents\" hasn't variables or "
|
"if \"_.output_format\" is json or \"_.contents\" hasn't variables or "
|
||||||
"changelog"
|
"changelog"
|
||||||
|
|
@ -181,45 +318,45 @@ msgstr ""
|
||||||
"si \"_.output_format\" en json ou si \"_.contents\" n'est pas variables ou "
|
"si \"_.output_format\" en json ou si \"_.contents\" n'est pas variables ou "
|
||||||
"changelog"
|
"changelog"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:218
|
#: src/rougail/output_doc/config.py:216
|
||||||
msgid "Do not add families in documentation"
|
msgid "Do not add families in documentation"
|
||||||
msgstr "Ne pas ajouter les familles dans la documentation"
|
msgstr "Ne pas ajouter les familles dans la documentation"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:223
|
#: src/rougail/output_doc/config.py:221
|
||||||
msgid "Add command line informations in documentation"
|
msgid "Add command line informations in documentation"
|
||||||
msgstr "Ajoute les informations de la ligne de commande dans la documentation"
|
msgstr "Ajoute les informations de la ligne de commande dans la documentation"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:228
|
#: src/rougail/output_doc/config.py:226
|
||||||
msgid "Add environment variable informations in documentation"
|
msgid "Add environment variable informations in documentation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ajoute les informations de variable d'environnement dans la documentation"
|
"Ajoute les informations de variable d'environnement dans la documentation"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:233
|
#: src/rougail/output_doc/config.py:231
|
||||||
msgid "Environment variables prefix name"
|
msgid "Environment variables prefix name"
|
||||||
msgstr "Préfixe du nom des variables d'environnement"
|
msgstr "Préfixe du nom des variables d'environnement"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:240
|
#: src/rougail/output_doc/config.py:238
|
||||||
msgid "should only use uppercase characters"
|
msgid "should only use uppercase characters"
|
||||||
msgstr "doit seulement utilise des caractères en majuscule"
|
msgstr "doit seulement utilise des caractères en majuscule"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:245
|
#: src/rougail/output_doc/config.py:243
|
||||||
msgid "if \"main_namespace\" is not set or \"_.with_environment\" is false"
|
msgid "if \"main_namespace\" is not set or \"_.with_environment\" is false"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"si \"main_namespace\" n'est pas défini ou \"_.with_environment\" est false"
|
"si \"main_namespace\" n'est pas défini ou \"_.with_environment\" est false"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:248
|
#: src/rougail/output_doc/config.py:246
|
||||||
msgid "Changelog documentation"
|
msgid "Changelog documentation"
|
||||||
msgstr "Documentation du journal des changements"
|
msgstr "Documentation du journal des changements"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:253
|
#: src/rougail/output_doc/config.py:251
|
||||||
msgid "if changelog in not in \"_.contents\""
|
msgid "if changelog in not in \"_.contents\""
|
||||||
msgstr "changelog n'est pas défini dans \"_.contents\""
|
msgstr "changelog n'est pas défini dans \"_.contents\""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:256
|
#: src/rougail/output_doc/config.py:254
|
||||||
msgid "Previous description file in JSON format"
|
msgid "Previous description file in JSON format"
|
||||||
msgstr "Précédent fichier de description au format JSON"
|
msgstr "Précédent fichier de description au format JSON"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:257
|
#: src/rougail/output_doc/config.py:255
|
||||||
msgid ""
|
msgid ""
|
||||||
"To generate the changelog, you need to compare the old list of variables (in "
|
"To generate the changelog, you need to compare the old list of variables (in "
|
||||||
"json format) with the current variables."
|
"json format) with the current variables."
|
||||||
|
|
@ -227,217 +364,94 @@ msgstr ""
|
||||||
"Pour générer le journal des changements, vous devez comparer l'ancienne "
|
"Pour générer le journal des changements, vous devez comparer l'ancienne "
|
||||||
"liste des variables (au format json) avec les variables courantes."
|
"liste des variables (au format json) avec les variables courantes."
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:261
|
#: src/rougail/output_doc/config.py:259
|
||||||
msgid "Examples configuration"
|
msgid "Examples configuration"
|
||||||
msgstr "Configuration des exemples"
|
msgstr "Configuration des exemples"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:266
|
#: src/rougail/output_doc/config.py:264
|
||||||
msgid "if example is not in \"_.contents\""
|
msgid "if example is not in \"_.contents\""
|
||||||
msgstr "si example n'est pas défini dans \"_.contents\""
|
msgstr "si example n'est pas défini dans \"_.contents\""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:269
|
#: src/rougail/output_doc/config.py:267
|
||||||
msgid "Add description of variables and families when generate examples"
|
msgid "Add description of variables and families when generate examples"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ajouter la description des variables et des familles lorsqu'on génère des "
|
"Ajouter la description des variables et des familles lorsqu'on génère des "
|
||||||
"exemples"
|
"exemples"
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:274
|
#: src/rougail/output_doc/config.py:272
|
||||||
msgid "Comment in examples starts at column"
|
msgid "Comment in examples starts at column"
|
||||||
msgstr "Commentaire dans les exemples commence à la colonne"
|
msgstr "Commentaire dans les exemples commence à la colonne"
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:70
|
#: src/rougail/output_doc/doc.py:58
|
||||||
msgid "{0} is not set as step.output"
|
msgid "{0} is not set as step.output"
|
||||||
msgstr "{0} n'est pas défini dans step.output"
|
msgstr "{0} n'est pas défini dans step.output"
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:363
|
#: src/rougail/output_doc/example.py:96
|
||||||
msgid "This family contains lists of variable blocks"
|
|
||||||
msgstr "Cette famille contient des listes de bloc de variable"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:373
|
|
||||||
msgid "This family builds families dynamically"
|
|
||||||
msgstr "Cette famille construit des familles dynamiquement"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:387
|
|
||||||
msgid "Default"
|
|
||||||
msgstr "Défaut"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:405
|
|
||||||
msgid "Example"
|
|
||||||
msgstr "Exemple"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:408
|
|
||||||
msgid "Examples"
|
|
||||||
msgstr "Exemples"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:417
|
|
||||||
msgid "Tag"
|
|
||||||
msgstr "Étiquette"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:420
|
|
||||||
msgid "Tags"
|
|
||||||
msgstr "Étiquettes"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:452
|
|
||||||
msgid "No attribute \"description\" for \"{0}\" in {1}"
|
|
||||||
msgstr "Aucun attribut \"description\" pour \"{0}\" dans {1}"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:587
|
|
||||||
msgid "text based with regular expressions \"{0}\""
|
|
||||||
msgstr "texte avec expression rationnelle \"{0}\""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:591
|
|
||||||
#: src/rougail/output_doc/tabular/six_columns.py:65
|
|
||||||
msgid "Validator"
|
|
||||||
msgstr "Validateur"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:594
|
|
||||||
msgid "Validators"
|
|
||||||
msgstr "Validateurs"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:603
|
|
||||||
msgid "Choices"
|
|
||||||
msgstr "Choix"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:707
|
|
||||||
msgid "the value of the identifier"
|
|
||||||
msgstr "la valeur de l'identifiant"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:711
|
|
||||||
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/doc.py:715
|
|
||||||
msgid "the value of the global information \"{0}\""
|
|
||||||
msgstr "la valeur de l'information globale \"{0}\""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:717
|
|
||||||
msgid "the value of the {0}"
|
|
||||||
msgstr "la valeur de l'{0}"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:724
|
|
||||||
msgid "depends on a calculation"
|
|
||||||
msgstr "dépend d'un calcul"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:730
|
|
||||||
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:786 src/rougail/output_doc/doc.py:913
|
|
||||||
msgid "depends on an undocumented variable"
|
|
||||||
msgstr "dépends d'une variable non documentée"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:804
|
|
||||||
msgid "is \"{0}\""
|
|
||||||
msgstr "est \"{0}\""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:809
|
|
||||||
msgid "is accessible"
|
|
||||||
msgstr "est accessible"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:811
|
|
||||||
msgid "is defined"
|
|
||||||
msgstr "est définie"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:816
|
|
||||||
msgid "hasn't the value \"{0}\""
|
|
||||||
msgstr "n'a pas la valeur \"{0}\""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:820
|
|
||||||
msgid "has the value \"{0}\""
|
|
||||||
msgstr "a la valeur \"{0}\""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:825
|
|
||||||
msgid "is {0}"
|
|
||||||
msgstr "est {0}"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:826
|
|
||||||
msgid "when the variable \"{{0}}\" {0}"
|
|
||||||
msgstr "lorsque la variable \"{{0}}\" {0}"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:853
|
|
||||||
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:855
|
|
||||||
msgid "the value of the variable \"{0}\""
|
|
||||||
msgstr "la valeur de la variable \"{0}\""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:875
|
|
||||||
msgid "the value of an undocumented variable"
|
|
||||||
msgstr "la valeur d'une variable non documentée"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:878
|
|
||||||
msgid "the values of undocumented variables"
|
|
||||||
msgstr "les valeurs de variables non documentées"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:901
|
|
||||||
msgid "(from an undocumented variable)"
|
|
||||||
msgstr "(issue d'une variable non documentée)"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:909
|
|
||||||
msgid "{0} (from an undocumented variable)"
|
|
||||||
msgstr "{0} (issue d'une variable non documentée)"
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/example.py:70
|
|
||||||
msgid "Example with mandatory variables not filled in"
|
msgid "Example with mandatory variables not filled in"
|
||||||
msgstr "Exemple avec des variables obligatoire non renseignée"
|
msgstr "Exemple avec des variables obligatoire non renseignée"
|
||||||
|
|
||||||
#: src/rougail/output_doc/example.py:85
|
#: src/rougail/output_doc/example.py:98
|
||||||
msgid "Example with all variables modifiable"
|
msgid "Example with all variables modifiable"
|
||||||
msgstr "Exemple avec toutes les variables modifiable"
|
msgstr "Exemple avec toutes les variables modifiable"
|
||||||
|
|
||||||
#: src/rougail/output_doc/output/asciidoc.py:156
|
#: src/rougail/output_doc/output/asciidoc.py:156
|
||||||
#: src/rougail/output_doc/output/console.py:199
|
#: src/rougail/output_doc/output/console.py:201
|
||||||
#: src/rougail/output_doc/output/gitlab.py:44
|
#: src/rougail/output_doc/output/gitlab.py:44
|
||||||
msgid "Informations"
|
msgid "Informations"
|
||||||
msgstr "Informations"
|
msgstr "Informations"
|
||||||
|
|
||||||
#: src/rougail/output_doc/tabular/five_columns.py:59
|
#: src/rougail/output_doc/tabular/five_columns.py:72
|
||||||
msgid "Access control"
|
msgid "Access control"
|
||||||
msgstr "Contrôle des accès"
|
msgstr "Contrôle des accès"
|
||||||
|
|
||||||
#: src/rougail/output_doc/tabular/four_columns.py:53
|
#: src/rougail/output_doc/tabular/four_columns.py:64
|
||||||
msgid "Type"
|
msgid "Type"
|
||||||
msgstr "Type"
|
msgstr "Type"
|
||||||
|
|
||||||
#: src/rougail/output_doc/tabular/three_columns.py:46
|
#: src/rougail/output_doc/tabular/three_columns.py:54
|
||||||
msgid "Default value"
|
msgid "Default value"
|
||||||
msgstr "Valeur par défaut"
|
msgstr "Valeur par défaut"
|
||||||
|
|
||||||
#: src/rougail/output_doc/tabular/two_columns.py:45
|
#: src/rougail/output_doc/tabular/two_columns.py:56
|
||||||
msgid "Variable"
|
msgid "Variable"
|
||||||
msgstr "Variable"
|
msgstr "Variable"
|
||||||
|
|
||||||
#: src/rougail/output_doc/tabular/two_columns.py:47
|
#: src/rougail/output_doc/tabular/two_columns.py:58
|
||||||
msgid "Description"
|
msgid "Description"
|
||||||
msgstr "Description"
|
msgstr "Description"
|
||||||
|
|
||||||
#: src/rougail/output_doc/utils.py:152
|
#: src/rougail/output_doc/utils.py:198
|
||||||
msgid "Command line"
|
msgid "Command line"
|
||||||
msgstr "Ligne de commande"
|
msgstr "Ligne de commande"
|
||||||
|
|
||||||
#: src/rougail/output_doc/utils.py:159
|
#: src/rougail/output_doc/utils.py:216
|
||||||
msgid "Environment variable"
|
msgid "Environment variable"
|
||||||
msgstr "Variable d'environnement"
|
msgstr "Variable d'environnement"
|
||||||
|
|
||||||
#: src/rougail/output_doc/utils.py:438
|
#: src/rougail/output_doc/utils.py:526
|
||||||
msgid "Path"
|
msgid "Path"
|
||||||
msgstr "Chemin"
|
msgstr "Chemin"
|
||||||
|
|
||||||
#: src/rougail/output_doc/utils.py:448
|
#: src/rougail/output_doc/utils.py:536
|
||||||
msgid "Identifiers"
|
msgid "Identifiers"
|
||||||
msgstr "Identifiants"
|
msgstr "Identifiants"
|
||||||
|
|
||||||
#: src/rougail/output_doc/utils.py:668 src/rougail/output_doc/utils.py:677
|
#: src/rougail/output_doc/utils.py:790 src/rougail/output_doc/utils.py:799
|
||||||
#: src/rougail/output_doc/utils.py:683 src/rougail/output_doc/utils.py:689
|
#: src/rougail/output_doc/utils.py:805 src/rougail/output_doc/utils.py:811
|
||||||
#: src/rougail/output_doc/utils.py:693
|
#: src/rougail/output_doc/utils.py:815
|
||||||
msgid "(default)"
|
msgid "(default)"
|
||||||
msgstr "(défaut)"
|
msgstr "(défaut)"
|
||||||
|
|
||||||
#: src/rougail/output_doc/utils.py:945
|
#: src/rougail/output_doc/utils.py:1123
|
||||||
msgid "{0}: {1}"
|
msgid "{0}: {1}"
|
||||||
msgstr "{0} : {1}"
|
msgstr "{0} : {1}"
|
||||||
|
|
||||||
|
#~ msgid "if doc is not set in \"step.output\""
|
||||||
|
#~ msgstr "si doc n'est pas spécifié dans \"step.output\""
|
||||||
|
|
||||||
|
#~ msgid "the values of undocumented variables"
|
||||||
|
#~ msgstr "les valeurs de variables non documentées"
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "when the variable \"{{0}}\" is defined, accessible and hasn't the value "
|
#~ "when the variable \"{{0}}\" is defined, accessible and hasn't the value "
|
||||||
#~ "\"{0}\""
|
#~ "\"{0}\""
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"POT-Creation-Date: 2026-01-29 08:33+0100\n"
|
"POT-Creation-Date: 2026-03-29 10:58+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
|
@ -15,38 +15,171 @@ msgstr ""
|
||||||
"Generated-By: pygettext.py 1.5\n"
|
"Generated-By: pygettext.py 1.5\n"
|
||||||
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/annotator.py:371
|
#: src/rougail/output_doc/changelog.py:153
|
||||||
msgid "when the identifier is \"{0}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/annotator.py:373
|
|
||||||
msgid "when the identifier is not \"{0}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/changelog.py:137
|
|
||||||
msgid "New variable"
|
msgid "New variable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/changelog.py:139
|
#: src/rougail/output_doc/changelog.py:155
|
||||||
msgid "New variables"
|
msgid "New variables"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/changelog.py:153
|
#: src/rougail/output_doc/changelog.py:169
|
||||||
msgid "Modified variable"
|
msgid "Modified variable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/changelog.py:155
|
#: src/rougail/output_doc/changelog.py:171
|
||||||
msgid "Modified variables"
|
msgid "Modified variables"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/changelog.py:169
|
#: src/rougail/output_doc/changelog.py:185
|
||||||
msgid "Deleted variable"
|
msgid "Deleted variable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/changelog.py:171
|
#: src/rougail/output_doc/changelog.py:187
|
||||||
msgid "Deleted variables"
|
msgid "Deleted variables"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:52
|
||||||
|
msgid "cannot find \"{0}_calculation\" information, do you have annotate this configuration?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:93
|
||||||
|
msgid "the value of the information \"{0}\" of the variable \"{1}\""
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:97
|
||||||
|
msgid "the value of the global information \"{0}\""
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:101
|
||||||
|
msgid "the value of the {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:108
|
||||||
|
msgid "depends on a calculation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:109
|
||||||
|
msgid "\"{0}\" is a calculation for {1} but has no description in {2}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:172
|
||||||
|
msgid "depends on an undocumented variable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:190
|
||||||
|
msgid "is \"{0}\""
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:195
|
||||||
|
msgid "is accessible"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:197
|
||||||
|
msgid "is defined"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:202
|
||||||
|
msgid "hasn't the value \"{0}\""
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:204
|
||||||
|
msgid "has the value \"{0}\""
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:208
|
||||||
|
msgid "is {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:210
|
||||||
|
msgid "when the variable \"{{0}}\" {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:237
|
||||||
|
msgid "the value of the variable \"{0}\" if it is defined"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:239
|
||||||
|
msgid "the value of the variable \"{0}\""
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:255
|
||||||
|
msgid "(from an undocumented variable)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:261
|
||||||
|
msgid "{0} (from an undocumented variable)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:265
|
||||||
|
msgid "the value of an undocumented variable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:302
|
||||||
|
msgid "when the identifier is \"{0}\""
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:304
|
||||||
|
msgid "when the identifier is not \"{0}\""
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:309
|
||||||
|
msgid "the value of the identifier"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:396
|
||||||
|
msgid "This family contains lists of variable blocks"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:400
|
||||||
|
msgid "This family builds families dynamically"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:410
|
||||||
|
msgid "This family is a namespace"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:461
|
||||||
|
msgid "Example"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:464
|
||||||
|
msgid "Examples"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:470
|
||||||
|
msgid "Tag"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:473
|
||||||
|
msgid "Tags"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:567
|
||||||
|
msgid "text based with regular expressions \"{0}\""
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:571
|
||||||
|
#: src/rougail/output_doc/tabular/six_columns.py:83
|
||||||
|
msgid "Validator"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:574
|
||||||
|
msgid "Validators"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:583
|
||||||
|
msgid "Choices"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:633
|
||||||
|
msgid "Default"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/rougail/output_doc/collect.py:643
|
||||||
|
msgid "No attribute \"description\" for \"{0}\" in {1}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:54
|
#: src/rougail/output_doc/config.py:54
|
||||||
msgid "duplicated level rougail-output-doc for {0} \"{1}\": {2} and {3}"
|
msgid "duplicated level rougail-output-doc for {0} \"{1}\": {2} and {3}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
@ -55,340 +188,211 @@ msgstr ""
|
||||||
msgid "duplicated name \"{0}\" in rougail-output-doc"
|
msgid "duplicated name \"{0}\" in rougail-output-doc"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:118
|
#: src/rougail/output_doc/config.py:116
|
||||||
msgid "is true if doc is activate"
|
msgid "is true if doc is activate"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:121
|
#: src/rougail/output_doc/config.py:119
|
||||||
msgid "Generate documentation from structural files"
|
msgid "Generate documentation from structural files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:122
|
#: src/rougail/output_doc/config.py:120
|
||||||
msgid "The structural files contain all the information related to the variables. This output generates the documentation for all or some of these variables."
|
msgid "The structural files contain all the information related to the variables. This output generates the documentation for all or some of these variables."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:127
|
#: src/rougail/output_doc/config.py:125
|
||||||
msgid "if doc is not set in \"step.output\""
|
msgid "if \"step.output\" is not doc"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:130
|
#: src/rougail/output_doc/config.py:128
|
||||||
msgid "The output format of the generated documentation"
|
msgid "The output format of the generated documentation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:139
|
#: src/rougail/output_doc/config.py:137
|
||||||
msgid "Generate document with this tabular model"
|
msgid "Generate document with this tabular model"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:140
|
#: src/rougail/output_doc/config.py:138
|
||||||
msgid "The variables are documented with a tabular view. A template selection allows you to choose the content of each column."
|
msgid "The variables are documented with a tabular view. A template selection allows you to choose the content of each column."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:148
|
#: src/rougail/output_doc/config.py:146
|
||||||
msgid "\"_.output_format\" in json is not compatible with this variable"
|
msgid "\"_.output_format\" in json is not compatible with this variable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:155
|
#: src/rougail/output_doc/config.py:153
|
||||||
msgid "Generated content"
|
msgid "Generated content"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:156
|
#: src/rougail/output_doc/config.py:154
|
||||||
msgid "You can generate three type of document. All variables (\"variables\"), an example file in YAML format (\"example\") or change log (\"changelog\")."
|
msgid "You can generate three type of document. All variables (\"variables\"), an example file in YAML format (\"example\") or change log (\"changelog\")."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:169
|
#: src/rougail/output_doc/config.py:167
|
||||||
msgid "\"_.output_format\" in json is not compatible with changelog or example \"_.contents\""
|
msgid "\"_.output_format\" in json is not compatible with changelog or example \"_.contents\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:172
|
#: src/rougail/output_doc/config.py:170
|
||||||
msgid "Starting title level"
|
msgid "Starting title level"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:177
|
#: src/rougail/output_doc/config.py:175
|
||||||
msgid "Modify values to document all variables"
|
msgid "Modify values to document all variables"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:178
|
#: src/rougail/output_doc/config.py:176
|
||||||
msgid "To document leadership or dynamic family variables, it is sometimes necessary to generate values, which can change the values in the configuration. Be careful if you reuse this configuration."
|
msgid "To document leadership or dynamic family variables, it is sometimes necessary to generate values, which can change the values in the configuration. Be careful if you reuse this configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:182
|
#: src/rougail/output_doc/config.py:180
|
||||||
msgid "Display documentation in console always with true color terminal"
|
msgid "Display documentation in console always with true color terminal"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:189
|
#: src/rougail/output_doc/config.py:187
|
||||||
msgid "The variables in this family are documented in another file"
|
msgid "The variables in this family are documented in another file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:190
|
#: src/rougail/output_doc/config.py:188
|
||||||
msgid "If you separate the variables into different files, the links between the variables will break. Therefore, you must define different filenames for the files containing these variables."
|
msgid "If you separate the variables into different files, the links between the variables will break. Therefore, you must define different filenames for the files containing these variables."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:194
|
#: src/rougail/output_doc/config.py:192
|
||||||
msgid "This file contains child variables of the family"
|
msgid "This file contains child variables of the family"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:198
|
#: src/rougail/output_doc/config.py:196
|
||||||
msgid "Name of the file"
|
msgid "Name of the file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:206
|
#: src/rougail/output_doc/config.py:204
|
||||||
msgid "Documentation a structural type"
|
msgid "Documentation a structural type"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:210
|
#: src/rougail/output_doc/config.py:208
|
||||||
msgid "Variables and changelog documentation"
|
msgid "Variables and changelog documentation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:215
|
#: src/rougail/output_doc/config.py:213
|
||||||
msgid "if \"_.output_format\" is json or \"_.contents\" hasn't variables or changelog"
|
msgid "if \"_.output_format\" is json or \"_.contents\" hasn't variables or changelog"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:218
|
#: src/rougail/output_doc/config.py:216
|
||||||
msgid "Do not add families in documentation"
|
msgid "Do not add families in documentation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:223
|
#: src/rougail/output_doc/config.py:221
|
||||||
msgid "Add command line informations in documentation"
|
msgid "Add command line informations in documentation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:228
|
#: src/rougail/output_doc/config.py:226
|
||||||
msgid "Add environment variable informations in documentation"
|
msgid "Add environment variable informations in documentation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:233
|
#: src/rougail/output_doc/config.py:231
|
||||||
msgid "Environment variables prefix name"
|
msgid "Environment variables prefix name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:240
|
#: src/rougail/output_doc/config.py:238
|
||||||
msgid "should only use uppercase characters"
|
msgid "should only use uppercase characters"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:245
|
#: src/rougail/output_doc/config.py:243
|
||||||
msgid "if \"main_namespace\" is not set or \"_.with_environment\" is false"
|
msgid "if \"main_namespace\" is not set or \"_.with_environment\" is false"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:248
|
#: src/rougail/output_doc/config.py:246
|
||||||
msgid "Changelog documentation"
|
msgid "Changelog documentation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:253
|
#: src/rougail/output_doc/config.py:251
|
||||||
msgid "if changelog in not in \"_.contents\""
|
msgid "if changelog in not in \"_.contents\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:256
|
#: src/rougail/output_doc/config.py:254
|
||||||
msgid "Previous description file in JSON format"
|
msgid "Previous description file in JSON format"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:257
|
#: src/rougail/output_doc/config.py:255
|
||||||
msgid "To generate the changelog, you need to compare the old list of variables (in json format) with the current variables."
|
msgid "To generate the changelog, you need to compare the old list of variables (in json format) with the current variables."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:261
|
#: src/rougail/output_doc/config.py:259
|
||||||
msgid "Examples configuration"
|
msgid "Examples configuration"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:266
|
#: src/rougail/output_doc/config.py:264
|
||||||
msgid "if example is not in \"_.contents\""
|
msgid "if example is not in \"_.contents\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:269
|
#: src/rougail/output_doc/config.py:267
|
||||||
msgid "Add description of variables and families when generate examples"
|
msgid "Add description of variables and families when generate examples"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/config.py:274
|
#: src/rougail/output_doc/config.py:272
|
||||||
msgid "Comment in examples starts at column"
|
msgid "Comment in examples starts at column"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:70
|
#: src/rougail/output_doc/doc.py:58
|
||||||
msgid "{0} is not set as step.output"
|
msgid "{0} is not set as step.output"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:363
|
#: src/rougail/output_doc/example.py:96
|
||||||
msgid "This family contains lists of variable blocks"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:373
|
|
||||||
msgid "This family builds families dynamically"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:387
|
|
||||||
msgid "Default"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:405
|
|
||||||
msgid "Example"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:408
|
|
||||||
msgid "Examples"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:417
|
|
||||||
msgid "Tag"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:420
|
|
||||||
msgid "Tags"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:452
|
|
||||||
msgid "No attribute \"description\" for \"{0}\" in {1}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:587
|
|
||||||
msgid "text based with regular expressions \"{0}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:591
|
|
||||||
#: src/rougail/output_doc/tabular/six_columns.py:65
|
|
||||||
msgid "Validator"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:594
|
|
||||||
msgid "Validators"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:603
|
|
||||||
msgid "Choices"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:707
|
|
||||||
msgid "the value of the identifier"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:711
|
|
||||||
msgid "the value of the information \"{0}\" of the variable \"{1}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:715
|
|
||||||
msgid "the value of the global information \"{0}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:717
|
|
||||||
msgid "the value of the {0}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:724
|
|
||||||
msgid "depends on a calculation"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:730
|
|
||||||
msgid "\"{0}\" is a calculation for {1} but has no description in {2}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:786 src/rougail/output_doc/doc.py:913
|
|
||||||
msgid "depends on an undocumented variable"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:804
|
|
||||||
msgid "is \"{0}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:809
|
|
||||||
msgid "is accessible"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:811
|
|
||||||
msgid "is defined"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:816
|
|
||||||
msgid "hasn't the value \"{0}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:820
|
|
||||||
msgid "has the value \"{0}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:825
|
|
||||||
msgid "is {0}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:826
|
|
||||||
msgid "when the variable \"{{0}}\" {0}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:853
|
|
||||||
msgid "the value of the variable \"{0}\" if it is defined"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:855
|
|
||||||
msgid "the value of the variable \"{0}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:875
|
|
||||||
msgid "the value of an undocumented variable"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:878
|
|
||||||
msgid "the values of undocumented variables"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:901
|
|
||||||
msgid "(from an undocumented variable)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/doc.py:909
|
|
||||||
msgid "{0} (from an undocumented variable)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/rougail/output_doc/example.py:70
|
|
||||||
msgid "Example with mandatory variables not filled in"
|
msgid "Example with mandatory variables not filled in"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/example.py:85
|
#: src/rougail/output_doc/example.py:98
|
||||||
msgid "Example with all variables modifiable"
|
msgid "Example with all variables modifiable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/output/asciidoc.py:156
|
#: src/rougail/output_doc/output/asciidoc.py:156
|
||||||
#: src/rougail/output_doc/output/console.py:199
|
#: src/rougail/output_doc/output/console.py:201
|
||||||
#: src/rougail/output_doc/output/gitlab.py:44
|
#: src/rougail/output_doc/output/gitlab.py:44
|
||||||
msgid "Informations"
|
msgid "Informations"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/tabular/five_columns.py:59
|
#: src/rougail/output_doc/tabular/five_columns.py:72
|
||||||
msgid "Access control"
|
msgid "Access control"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/tabular/four_columns.py:53
|
#: src/rougail/output_doc/tabular/four_columns.py:64
|
||||||
msgid "Type"
|
msgid "Type"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/tabular/three_columns.py:46
|
#: src/rougail/output_doc/tabular/three_columns.py:54
|
||||||
msgid "Default value"
|
msgid "Default value"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/tabular/two_columns.py:45
|
#: src/rougail/output_doc/tabular/two_columns.py:56
|
||||||
msgid "Variable"
|
msgid "Variable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/tabular/two_columns.py:47
|
#: src/rougail/output_doc/tabular/two_columns.py:58
|
||||||
msgid "Description"
|
msgid "Description"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/utils.py:152
|
#: src/rougail/output_doc/utils.py:198
|
||||||
msgid "Command line"
|
msgid "Command line"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/utils.py:159
|
#: src/rougail/output_doc/utils.py:216
|
||||||
msgid "Environment variable"
|
msgid "Environment variable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/utils.py:438
|
#: src/rougail/output_doc/utils.py:526
|
||||||
msgid "Path"
|
msgid "Path"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/utils.py:448
|
#: src/rougail/output_doc/utils.py:536
|
||||||
msgid "Identifiers"
|
msgid "Identifiers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/utils.py:668 src/rougail/output_doc/utils.py:677
|
#: src/rougail/output_doc/utils.py:790 src/rougail/output_doc/utils.py:799
|
||||||
#: src/rougail/output_doc/utils.py:683 src/rougail/output_doc/utils.py:689
|
#: src/rougail/output_doc/utils.py:805 src/rougail/output_doc/utils.py:811
|
||||||
#: src/rougail/output_doc/utils.py:693
|
#: src/rougail/output_doc/utils.py:815
|
||||||
msgid "(default)"
|
msgid "(default)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rougail/output_doc/utils.py:945
|
#: src/rougail/output_doc/utils.py:1123
|
||||||
msgid "{0}: {1}"
|
msgid "{0}: {1}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,11 @@ from rougail.convert.object_model import (
|
||||||
CONVERT_OPTION,
|
CONVERT_OPTION,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
|
from rougail.user_data_risotto.utils import RisottoCalculation
|
||||||
|
except ImportError as err:
|
||||||
|
RisottoCalculation = None
|
||||||
|
|
||||||
|
|
||||||
class Annotator(Walk):
|
class Annotator(Walk):
|
||||||
"""Annotate for documentation"""
|
"""Annotate for documentation"""
|
||||||
|
|
@ -57,9 +62,7 @@ class Annotator(Walk):
|
||||||
if "force_default_value" in kwargs:
|
if "force_default_value" in kwargs:
|
||||||
self.default_values = kwargs["force_default_value"]
|
self.default_values = kwargs["force_default_value"]
|
||||||
else:
|
else:
|
||||||
self.default_values = self.objectspace.rougailconfig[
|
self.default_values = self.objectspace.rougailconfig["doc.default_values"]
|
||||||
"doc.default_values"
|
|
||||||
]
|
|
||||||
self.regexp_description_get_paths = None
|
self.regexp_description_get_paths = None
|
||||||
self.populate_family()
|
self.populate_family()
|
||||||
self.populate_variable()
|
self.populate_variable()
|
||||||
|
|
@ -152,6 +155,7 @@ class Annotator(Walk):
|
||||||
variable.choices,
|
variable.choices,
|
||||||
variable.version,
|
variable.version,
|
||||||
)
|
)
|
||||||
|
self.manage_test(variable)
|
||||||
default = variable.default
|
default = variable.default
|
||||||
if default is None and path in self.objectspace.default_multi:
|
if default is None and path in self.objectspace.default_multi:
|
||||||
default = self.objectspace.default_multi[path]
|
default = self.objectspace.default_multi[path]
|
||||||
|
|
@ -167,12 +171,6 @@ class Annotator(Walk):
|
||||||
variable.validators,
|
variable.validators,
|
||||||
variable.version,
|
variable.version,
|
||||||
)
|
)
|
||||||
if (
|
|
||||||
self.default_values
|
|
||||||
and path in self.objectspace.leaders
|
|
||||||
and not default
|
|
||||||
):
|
|
||||||
self.add_examples_values(variable)
|
|
||||||
self.add_informations_from_properties(variable)
|
self.add_informations_from_properties(variable)
|
||||||
if path in self.objectspace.forced_descriptions:
|
if path in self.objectspace.forced_descriptions:
|
||||||
self.objectspace.informations.add(
|
self.objectspace.informations.add(
|
||||||
|
|
@ -181,6 +179,15 @@ class Annotator(Walk):
|
||||||
True,
|
True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def manage_test(self, variable):
|
||||||
|
# for version 1.0 and 1.1
|
||||||
|
values = self.objectspace.informations.get(variable.path).get("examples", None)
|
||||||
|
if values:
|
||||||
|
return
|
||||||
|
values = self.objectspace.informations.get(variable.path).get("test", None)
|
||||||
|
if values:
|
||||||
|
self.objectspace.informations.add(variable.path, "examples", values)
|
||||||
|
|
||||||
def add_informations_from_properties(
|
def add_informations_from_properties(
|
||||||
self,
|
self,
|
||||||
variable: dict,
|
variable: dict,
|
||||||
|
|
@ -287,16 +294,14 @@ class Annotator(Walk):
|
||||||
"propertyerror": values.propertyerror,
|
"propertyerror": values.propertyerror,
|
||||||
}
|
}
|
||||||
if isinstance(values, InformationCalculation):
|
if isinstance(values, InformationCalculation):
|
||||||
return self.calculation_to_information_information(
|
return self.calculation_to_information_information(values, version, path)
|
||||||
values, version, path
|
if isinstance(values, IdentifierPropertyCalculation):
|
||||||
)
|
ret = {}
|
||||||
if isinstance(values, (IdentifierCalculation, IdentifierPropertyCalculation)):
|
self.when_to_condition(values, ret)
|
||||||
return {
|
ret["type"] = "identifier"
|
||||||
"type": "identifier",
|
return ret
|
||||||
"value": self.calculation_to_information_identifier(
|
if isinstance(values, IdentifierCalculation):
|
||||||
values, prop, version
|
return {"type": "identifier"}
|
||||||
),
|
|
||||||
}
|
|
||||||
if isinstance(values, IndexCalculation):
|
if isinstance(values, IndexCalculation):
|
||||||
return {
|
return {
|
||||||
"type": "index",
|
"type": "index",
|
||||||
|
|
@ -307,25 +312,39 @@ class Annotator(Walk):
|
||||||
"type": "namespace",
|
"type": "namespace",
|
||||||
"value": True,
|
"value": True,
|
||||||
}
|
}
|
||||||
|
if RisottoCalculation and isinstance(values, RisottoCalculation):
|
||||||
|
# FIXME
|
||||||
|
return {
|
||||||
|
"type": "risotto",
|
||||||
|
"value": True,
|
||||||
|
}
|
||||||
raise Exception(f'unknown calculation {type(values)} "{values}"')
|
raise Exception(f'unknown calculation {type(values)} "{values}"')
|
||||||
|
|
||||||
def calculation_to_information_variable(
|
def calculation_to_information_variable(
|
||||||
self, variable_path: str, values, prop: str, version: str, path: str
|
self, variable_path: str, values, prop: str, version: str, path: str
|
||||||
) -> str:
|
) -> str:
|
||||||
# is optional
|
variable, identifiers = self.objectspace.paths.get_with_dynamic(
|
||||||
variable = self.objectspace.paths.get_with_dynamic(
|
|
||||||
variable_path,
|
variable_path,
|
||||||
path,
|
path,
|
||||||
values.version,
|
values.version,
|
||||||
values.namespace,
|
values.namespace,
|
||||||
values.xmlfiles,
|
values.xmlfiles,
|
||||||
)[0]
|
)
|
||||||
if not variable or (isinstance(values, VariableCalculation) and values.optional and not variable):
|
if not variable or (
|
||||||
|
isinstance(values, VariableCalculation) and values.optional and not variable
|
||||||
|
):
|
||||||
return None
|
return None
|
||||||
values_calculation = {"path": variable.path}
|
values_calculation = {"path": variable.path}
|
||||||
|
if identifiers:
|
||||||
|
values_calculation["identifiers"] = identifiers
|
||||||
if prop in PROPERTY_ATTRIBUTE:
|
if prop in PROPERTY_ATTRIBUTE:
|
||||||
# get comparative value
|
# get comparative value
|
||||||
# values_calculation["transitive"] = values.propertyerror == "transitive"
|
self.when_to_condition(values, values_calculation)
|
||||||
|
else:
|
||||||
|
values_calculation["type"] = "variable"
|
||||||
|
return values_calculation
|
||||||
|
|
||||||
|
def when_to_condition(self, values, values_calculation):
|
||||||
if values.when_not is not undefined:
|
if values.when_not is not undefined:
|
||||||
values_calculation["type"] = "condition"
|
values_calculation["type"] = "condition"
|
||||||
values_calculation["value"] = values.when_not
|
values_calculation["value"] = values.when_not
|
||||||
|
|
@ -340,14 +359,12 @@ class Annotator(Walk):
|
||||||
values_calculation["type"] = "condition"
|
values_calculation["type"] = "condition"
|
||||||
values_calculation["value"] = True
|
values_calculation["value"] = True
|
||||||
values_calculation["condition"] = "when"
|
values_calculation["condition"] = "when"
|
||||||
else:
|
|
||||||
values_calculation["type"] = "variable"
|
|
||||||
return values_calculation
|
|
||||||
|
|
||||||
def calculation_to_information_information(
|
def calculation_to_information_information(
|
||||||
self, values, version: str, path: str
|
self, values, version: str, path: str
|
||||||
) -> Union[str, bool]:
|
) -> Union[str, bool]:
|
||||||
values_calculation = {"type": "information",
|
values_calculation = {
|
||||||
|
"type": "information",
|
||||||
"information": values.information,
|
"information": values.information,
|
||||||
}
|
}
|
||||||
if values.variable:
|
if values.variable:
|
||||||
|
|
@ -363,16 +380,6 @@ class Annotator(Walk):
|
||||||
values_calculation["path"] = variable.path
|
values_calculation["path"] = variable.path
|
||||||
return values_calculation
|
return values_calculation
|
||||||
|
|
||||||
def calculation_to_information_identifier(
|
|
||||||
self, values, prop: str, version: str
|
|
||||||
) -> Union[str, bool]:
|
|
||||||
if version != "1.0" and prop in PROPERTY_ATTRIBUTE:
|
|
||||||
if values.when is not undefined:
|
|
||||||
return _('when the identifier is "{0}"').format(values.when)
|
|
||||||
if values.when_not is not undefined:
|
|
||||||
return _('when the identifier is not "{0}"').format(values.when_not)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def get_path_from_variable(self, values, version: str, path: str) -> str:
|
def get_path_from_variable(self, values, version: str, path: str) -> str:
|
||||||
variable_path = values.variable
|
variable_path = values.variable
|
||||||
paths = self.objectspace.paths
|
paths = self.objectspace.paths
|
||||||
|
|
|
||||||
|
|
@ -58,18 +58,34 @@ class Changelog: # pylint: disable=no-member,too-few-public-methods
|
||||||
if previous["type"] == "variable":
|
if previous["type"] == "variable":
|
||||||
if "identifiers" in previous:
|
if "identifiers" in previous:
|
||||||
for identifiers in previous["identifiers"]:
|
for identifiers in previous["identifiers"]:
|
||||||
self._removed_variables.append(calc_path(previous["path"], self.formatter, identifiers))
|
self._removed_variables.append(
|
||||||
|
calc_path(
|
||||||
|
previous["path"],
|
||||||
|
formatter=self.formatter,
|
||||||
|
identifiers=identifiers,
|
||||||
|
)
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
self._removed_variables.append(calc_path(previous["path"], self.formatter))
|
self._removed_variables.append(
|
||||||
|
calc_path(previous["path"], formatter=self.formatter)
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
self.parser(previous["children"], {})
|
self.parser(previous["children"], {})
|
||||||
elif previous["type"] != new["type"]:
|
elif previous["type"] != new["type"]:
|
||||||
if previous["type"] == "variable":
|
if previous["type"] == "variable":
|
||||||
if "identifiers" in previous:
|
if "identifiers" in previous:
|
||||||
for identifiers in previous["identifiers"]:
|
for identifiers in previous["identifiers"]:
|
||||||
self._removed_variables.append(calc_path(previous["path"], self.formatter, identifiers))
|
self._removed_variables.append(
|
||||||
|
calc_path(
|
||||||
|
previous["path"],
|
||||||
|
formatter=self.formatter,
|
||||||
|
identifiers=identifiers,
|
||||||
|
)
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
self._removed_variables.append(calc_path(previous["path"], self.formatter))
|
self._removed_variables.append(
|
||||||
|
calc_path(previous["path"], formatter=self.formatter)
|
||||||
|
)
|
||||||
self.parser({}, new["children"])
|
self.parser({}, new["children"])
|
||||||
else:
|
else:
|
||||||
self._added_variables.append(new)
|
self._added_variables.append(new)
|
||||||
|
|
@ -143,7 +159,7 @@ class Changelog: # pylint: disable=no-member,too-few-public-methods
|
||||||
[
|
[
|
||||||
self.formatter.title(title, self.level),
|
self.formatter.title(title, self.level),
|
||||||
self.formatter.tabular(),
|
self.formatter.tabular(),
|
||||||
self.formatter.end_family(self.level)
|
self.formatter.end_family(self.level),
|
||||||
],
|
],
|
||||||
self.level,
|
self.level,
|
||||||
dico_is_already_treated=True,
|
dico_is_already_treated=True,
|
||||||
|
|
@ -159,7 +175,7 @@ class Changelog: # pylint: disable=no-member,too-few-public-methods
|
||||||
[
|
[
|
||||||
self.formatter.title(title, self.level),
|
self.formatter.title(title, self.level),
|
||||||
self.formatter.tabular(),
|
self.formatter.tabular(),
|
||||||
self.formatter.end_family(self.level)
|
self.formatter.end_family(self.level),
|
||||||
],
|
],
|
||||||
self.level,
|
self.level,
|
||||||
dico_is_already_treated=True,
|
dico_is_already_treated=True,
|
||||||
|
|
@ -173,7 +189,7 @@ class Changelog: # pylint: disable=no-member,too-few-public-methods
|
||||||
[
|
[
|
||||||
self.formatter.title(title, self.level),
|
self.formatter.title(title, self.level),
|
||||||
self.formatter.list(self._removed_variables, inside_tabular=False),
|
self.formatter.list(self._removed_variables, inside_tabular=False),
|
||||||
self.formatter.end_family(self.level)
|
self.formatter.end_family(self.level),
|
||||||
],
|
],
|
||||||
self.level,
|
self.level,
|
||||||
dico_is_already_treated=True,
|
dico_is_already_treated=True,
|
||||||
|
|
|
||||||
739
src/rougail/output_doc/collect.py
Normal file
739
src/rougail/output_doc/collect.py
Normal file
|
|
@ -0,0 +1,739 @@
|
||||||
|
"""
|
||||||
|
Silique (https://www.silique.fr)
|
||||||
|
Copyright (C) 2024-2026
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Lesser General Public License as published by the
|
||||||
|
Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
|
||||||
|
details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from warnings import warn
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
from tiramisu import Calculation, groups
|
||||||
|
from tiramisu.error import display_list, PropertiesOptionError
|
||||||
|
from rougail.tiramisu import display_xmlfiles
|
||||||
|
from rougail.utils import PROPERTY_ATTRIBUTE
|
||||||
|
from rougail.error import VariableCalculationDependencyError, RougailWarning, ExtensionError
|
||||||
|
|
||||||
|
from .utils import dump, to_phrase, calc_path
|
||||||
|
from .i18n import _
|
||||||
|
|
||||||
|
|
||||||
|
HIDDEN_PROPERTIES = [
|
||||||
|
"hidden",
|
||||||
|
"disabled",
|
||||||
|
]
|
||||||
|
|
||||||
|
DISABLED_PROPERTIES = ["disabled"]
|
||||||
|
|
||||||
|
|
||||||
|
class _ToString:
|
||||||
|
def _to_string(
|
||||||
|
self,
|
||||||
|
child,
|
||||||
|
prop,
|
||||||
|
do_not_raise=False,
|
||||||
|
):
|
||||||
|
calculation = child.information.get(f"{prop}_calculation", None)
|
||||||
|
if not calculation:
|
||||||
|
if do_not_raise:
|
||||||
|
return None
|
||||||
|
raise ExtensionError(
|
||||||
|
_(
|
||||||
|
'cannot find "{0}_calculation" information, '
|
||||||
|
"do you have annotate this configuration?"
|
||||||
|
).format(prop)
|
||||||
|
)
|
||||||
|
if isinstance(calculation, list):
|
||||||
|
values = []
|
||||||
|
for cal in calculation:
|
||||||
|
value = self._calculation_to_string(child, cal, prop)
|
||||||
|
if value is not None:
|
||||||
|
values.append(value)
|
||||||
|
return values
|
||||||
|
ret = self._calculation_to_string(child, calculation, prop)
|
||||||
|
if isinstance(ret, list) and len(ret) == 1:
|
||||||
|
return ret[0]
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def _calculation_to_string(self, child, calculation, attribute_type):
|
||||||
|
if "description" in calculation:
|
||||||
|
values = calculation
|
||||||
|
if self.document_a_type and "variables" in values:
|
||||||
|
for variable in list(values["variables"]):
|
||||||
|
variable["path"] = self.doc_path(variable["path"])
|
||||||
|
|
||||||
|
elif "type" not in calculation:
|
||||||
|
values = calculation["value"]
|
||||||
|
elif calculation["type"] == "jinja":
|
||||||
|
values = self._calculation_jinja_to_string(
|
||||||
|
child, calculation, attribute_type
|
||||||
|
)
|
||||||
|
elif calculation["type"] == "variable":
|
||||||
|
values = self._calculation_variable_to_string(
|
||||||
|
child, calculation, attribute_type
|
||||||
|
)
|
||||||
|
elif calculation["type"] == "identifier":
|
||||||
|
values = self._calculation_identifier_to_string(
|
||||||
|
child, calculation, attribute_type
|
||||||
|
)
|
||||||
|
elif calculation["type"] == "information":
|
||||||
|
if "path" in calculation:
|
||||||
|
variable_path = self.doc_path(calculation["path"])
|
||||||
|
values = _(
|
||||||
|
'the value of the information "{0}" of the variable "{1}"'
|
||||||
|
).format(calculation["information"], variable_path)
|
||||||
|
else:
|
||||||
|
values = _('the value of the global information "{0}"').format(
|
||||||
|
calculation["information"]
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
values = _("the value of the {0}").format(calculation["type"])
|
||||||
|
return values
|
||||||
|
|
||||||
|
def _calculation_jinja_to_string(self, child, calculation, attribute_type):
|
||||||
|
if calculation["value"] is not True:
|
||||||
|
values = calculation["value"]
|
||||||
|
else:
|
||||||
|
values = _("depends on a calculation")
|
||||||
|
warning = _(
|
||||||
|
'"{0}" is a calculation for {1} but has no description in {2}'
|
||||||
|
).format(
|
||||||
|
attribute_type,
|
||||||
|
self.doc_path(child.path(uncalculated=True)),
|
||||||
|
display_xmlfiles(child.information.get("ymlfiles")),
|
||||||
|
)
|
||||||
|
warn(
|
||||||
|
warning,
|
||||||
|
RougailWarning,
|
||||||
|
)
|
||||||
|
return values
|
||||||
|
|
||||||
|
def _calculation_variable_to_string(self, child, calculation, attribute_type):
|
||||||
|
if attribute_type in PROPERTY_ATTRIBUTE:
|
||||||
|
func = self._calculation_variable_to_string_known_property
|
||||||
|
else:
|
||||||
|
func = self._calculation_variable_to_string_not_properties
|
||||||
|
return func(child, calculation, attribute_type)
|
||||||
|
|
||||||
|
def _calculation_variable_to_string_known_property(self, child, informations, prop):
|
||||||
|
condition = informations["value"]
|
||||||
|
variable_path = condition["path"]
|
||||||
|
values = []
|
||||||
|
option = self.true_config.option(variable_path)
|
||||||
|
if option.isdynamic():
|
||||||
|
variables = self._get_annotation_variable(
|
||||||
|
option, condition.get("identifiers")
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
option = self.true_config.option(variable_path)
|
||||||
|
try:
|
||||||
|
is_inaccessible = self.is_inaccessible_user_data(option)
|
||||||
|
except AttributeError as err:
|
||||||
|
if err.code != "option-not-found":
|
||||||
|
raise err from err
|
||||||
|
is_inaccessible = True
|
||||||
|
if is_inaccessible:
|
||||||
|
variables = [[None, None, None]]
|
||||||
|
else:
|
||||||
|
description = self._convert_description(
|
||||||
|
option.description(uncalculated=True),
|
||||||
|
"description",
|
||||||
|
its_a_path=False,
|
||||||
|
)
|
||||||
|
variables = [[variable_path, description, None]]
|
||||||
|
for cpath, description, identifiers in variables:
|
||||||
|
if not cpath:
|
||||||
|
# we cannot access to this variable, so try with permissive
|
||||||
|
if condition["type"] == "transitive":
|
||||||
|
value = None
|
||||||
|
else:
|
||||||
|
value = condition["value"]
|
||||||
|
option = self.true_config.forcepermissive.option(variable_path)
|
||||||
|
try:
|
||||||
|
variable_value = self._get_unmodified_default_value(option)
|
||||||
|
except PropertiesOptionError as err:
|
||||||
|
if informations["propertyerror"] is True:
|
||||||
|
raise err from err
|
||||||
|
if informations["propertyerror"] == "transitive":
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
except VariableCalculationDependencyError:
|
||||||
|
values.append(_("depends on an undocumented variable"))
|
||||||
|
continue
|
||||||
|
except AttributeError as err:
|
||||||
|
return informations.get("default", False)
|
||||||
|
if condition["type"] == "transitive":
|
||||||
|
return True
|
||||||
|
if prop in HIDDEN_PROPERTIES:
|
||||||
|
condition_type = condition["condition"]
|
||||||
|
if (
|
||||||
|
condition_type == "when"
|
||||||
|
and value == variable_value
|
||||||
|
or condition_type == "when_not"
|
||||||
|
and value != variable_value
|
||||||
|
):
|
||||||
|
# always "prop"
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
if condition["type"] == "transitive":
|
||||||
|
submsg = _('is "{0}"').format(prop)
|
||||||
|
else:
|
||||||
|
condition_type = condition["condition"]
|
||||||
|
conditions = []
|
||||||
|
if not informations["propertyerror"]:
|
||||||
|
conditions.append(_("is accessible"))
|
||||||
|
if informations["optional"]:
|
||||||
|
conditions.append(_("is defined"))
|
||||||
|
value = condition["value"]
|
||||||
|
if not isinstance(value, str):
|
||||||
|
value = dump(value)
|
||||||
|
if condition_type == "when_not":
|
||||||
|
conditions.append(_('hasn\'t the value "{0}"').format(value))
|
||||||
|
else:
|
||||||
|
conditions.append(_('has the value "{0}"').format(value))
|
||||||
|
submsg = display_list(conditions, sort=False)
|
||||||
|
if informations["propertyerror"] == "transitive":
|
||||||
|
submsg = display_list(
|
||||||
|
[_("is {0}").format(prop), submsg], separator="or", sort=False
|
||||||
|
)
|
||||||
|
msg = _('when the variable "{{0}}" {0}').format(submsg)
|
||||||
|
path_obj = {
|
||||||
|
"path": self.doc_path(variable_path),
|
||||||
|
}
|
||||||
|
if identifiers:
|
||||||
|
path_obj["identifiers"] = identifiers
|
||||||
|
|
||||||
|
values.append(
|
||||||
|
{
|
||||||
|
"message": msg,
|
||||||
|
"path": path_obj,
|
||||||
|
"description": description,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
if len(values) == 1:
|
||||||
|
return values[0]
|
||||||
|
return values
|
||||||
|
|
||||||
|
def _calculation_variable_to_string_not_properties(
|
||||||
|
self, child, calculation, attribute_type
|
||||||
|
):
|
||||||
|
variable = self.true_config.unrestraint.option(calculation["value"]["path"])
|
||||||
|
if calculation["optional"]:
|
||||||
|
try:
|
||||||
|
variable.get()
|
||||||
|
except AttributeError:
|
||||||
|
return None
|
||||||
|
true_msg = _('the value of the variable "{0}" if it is defined')
|
||||||
|
else:
|
||||||
|
true_msg = _('the value of the variable "{0}"')
|
||||||
|
if not variable.isdynamic():
|
||||||
|
func = self._calculation_normal_variable_to_string_not_properties
|
||||||
|
else:
|
||||||
|
func = self._calculation_dynamic_variable_to_string_not_properties
|
||||||
|
return func(variable, calculation["value"], true_msg)
|
||||||
|
|
||||||
|
def _calculation_normal_variable_to_string_not_properties(
|
||||||
|
self, child, obj, true_msg
|
||||||
|
):
|
||||||
|
isfollower = child.isfollower()
|
||||||
|
if not isfollower and self.is_inaccessible_user_data(child):
|
||||||
|
uncalculated = child.value.default(uncalculated=True)
|
||||||
|
if uncalculated and not isinstance(uncalculated, Calculation):
|
||||||
|
if isinstance(uncalculated, list):
|
||||||
|
return {
|
||||||
|
"submessage": _("(from an undocumented variable)"),
|
||||||
|
"values": uncalculated,
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
if not isinstance(uncalculated, str):
|
||||||
|
uncalculated = dump(uncalculated)
|
||||||
|
true_msg = _("{0} (from an undocumented variable)").format(
|
||||||
|
uncalculated
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
true_msg = _("the value of an undocumented variable")
|
||||||
|
try:
|
||||||
|
description = self._convert_description(
|
||||||
|
child.description(uncalculated=True), "description", its_a_path=False
|
||||||
|
)
|
||||||
|
except AttributeError:
|
||||||
|
description = path
|
||||||
|
return {
|
||||||
|
"message": true_msg,
|
||||||
|
"path": obj,
|
||||||
|
"description": description,
|
||||||
|
}
|
||||||
|
|
||||||
|
def _calculation_dynamic_variable_to_string_not_properties(
|
||||||
|
self, child, obj, true_msg
|
||||||
|
):
|
||||||
|
values = []
|
||||||
|
for path, description, identifiers in self._get_annotation_variable(
|
||||||
|
child, obj.get("identifiers")
|
||||||
|
):
|
||||||
|
cpath = calc_path(path, identifiers=identifiers)
|
||||||
|
variable = self.true_config.option(cpath)
|
||||||
|
path_obj = {
|
||||||
|
"path": self.doc_path(path),
|
||||||
|
}
|
||||||
|
if identifiers:
|
||||||
|
path_obj["identifiers"] = identifiers
|
||||||
|
values.append(
|
||||||
|
self._calculation_normal_variable_to_string_not_properties(
|
||||||
|
variable, path_obj, true_msg
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return values
|
||||||
|
|
||||||
|
def _calculation_identifier_to_string(self, child, calculation, attribute_type):
|
||||||
|
if attribute_type in PROPERTY_ATTRIBUTE:
|
||||||
|
if calculation["condition"] == "when":
|
||||||
|
return _('when the identifier is "{0}"').format(calculation["value"])
|
||||||
|
if calculation["condition"] == "when_not":
|
||||||
|
return _('when the identifier is not "{0}"').format(
|
||||||
|
calculation["value"]
|
||||||
|
)
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return _("the value of the identifier")
|
||||||
|
|
||||||
|
def doc_path(self, path):
|
||||||
|
if self.document_a_type:
|
||||||
|
if not "." in path:
|
||||||
|
return None
|
||||||
|
return path.split(".", 1)[-1]
|
||||||
|
return path
|
||||||
|
|
||||||
|
def _get_annotation_variable(self, child, ori_identifiers):
|
||||||
|
path = child.path(uncalculated=True)
|
||||||
|
if ori_identifiers:
|
||||||
|
if None in ori_identifiers:
|
||||||
|
all_identifiers = self.true_config.option(
|
||||||
|
calc_path(path, identifiers=ori_identifiers)
|
||||||
|
).identifiers()
|
||||||
|
else:
|
||||||
|
all_identifiers = [ori_identifiers]
|
||||||
|
else:
|
||||||
|
all_identifiers = child.identifiers()
|
||||||
|
for identifiers in all_identifiers:
|
||||||
|
cpath = calc_path(path, identifiers=identifiers)
|
||||||
|
description = self._convert_description(
|
||||||
|
child.description(uncalculated=True), "description", its_a_path=False
|
||||||
|
)
|
||||||
|
if child.isdynamic():
|
||||||
|
yield path, description, identifiers.copy()
|
||||||
|
else:
|
||||||
|
yield path, description, None
|
||||||
|
|
||||||
|
|
||||||
|
class Collect(_ToString):
|
||||||
|
def collect_families(self, family) -> dict:
|
||||||
|
informations = {}
|
||||||
|
for child in family.list(uncalculated=True):
|
||||||
|
if child.type(only_self=True) == "symlink" or (
|
||||||
|
not child.isdynamic() and self.is_inaccessible_user_data(child)
|
||||||
|
):
|
||||||
|
# do not document symlink option or inacesssible variable
|
||||||
|
# (dynamic variable could be accessible only in one context)
|
||||||
|
continue
|
||||||
|
if child.isoptiondescription():
|
||||||
|
func = self.collect_family
|
||||||
|
else:
|
||||||
|
func = self.collect_variable
|
||||||
|
func(child, informations)
|
||||||
|
return informations
|
||||||
|
|
||||||
|
def collect_family(self, family, informations: dict) -> None:
|
||||||
|
family_type = self._get_family_type(family)
|
||||||
|
family_informations = self._collect_family(family, family_type)
|
||||||
|
if family_informations is False:
|
||||||
|
return
|
||||||
|
sub_informations = self.collect_families(family)
|
||||||
|
if not sub_informations:
|
||||||
|
# a family without subfamily/subvariable
|
||||||
|
return
|
||||||
|
name = family.name(uncalculated=True)
|
||||||
|
informations[name] = {
|
||||||
|
"type": family_type,
|
||||||
|
"informations": family_informations,
|
||||||
|
"children": sub_informations,
|
||||||
|
}
|
||||||
|
|
||||||
|
def _get_family_type(self, family) -> str:
|
||||||
|
if self.support_namespace and family.group_type() is groups.namespace:
|
||||||
|
return "namespace"
|
||||||
|
if family.isleadership():
|
||||||
|
return "leadership"
|
||||||
|
if family.isdynamic(only_self=True):
|
||||||
|
return "dynamic"
|
||||||
|
return "family"
|
||||||
|
|
||||||
|
def _collect_family(
|
||||||
|
self,
|
||||||
|
family,
|
||||||
|
family_type,
|
||||||
|
*,
|
||||||
|
with_identifier: bool = True,
|
||||||
|
current_identifier_only: bool = False,
|
||||||
|
) -> dict:
|
||||||
|
path = family.path(uncalculated=True)
|
||||||
|
informations = {}
|
||||||
|
if not self._collect(family, informations, family_type=family_type):
|
||||||
|
return False, []
|
||||||
|
if family_type == "leadership":
|
||||||
|
informations.setdefault("help", []).append(
|
||||||
|
_("This family contains lists of variable blocks")
|
||||||
|
)
|
||||||
|
elif family_type == "dynamic":
|
||||||
|
informations.setdefault("help", []).append(
|
||||||
|
_("This family builds families dynamically")
|
||||||
|
)
|
||||||
|
if with_identifier:
|
||||||
|
identifier = self._to_string(family, "dynamic", do_not_raise=True)
|
||||||
|
if identifier is None:
|
||||||
|
identifier = family.identifiers(only_self=True)
|
||||||
|
if not isinstance(identifier, list):
|
||||||
|
identifier = [identifier]
|
||||||
|
informations["identifier"] = identifier
|
||||||
|
elif family_type == "namespace":
|
||||||
|
informations.setdefault("help", []).append(_("This family is a namespace"))
|
||||||
|
return informations
|
||||||
|
|
||||||
|
def collect_variable(
|
||||||
|
self,
|
||||||
|
child,
|
||||||
|
informations: dict,
|
||||||
|
*,
|
||||||
|
only_one=False,
|
||||||
|
) -> Optional[dict]:
|
||||||
|
name = child.name(uncalculated=True)
|
||||||
|
sub_informations = {}
|
||||||
|
if not self._collect_variable(
|
||||||
|
child,
|
||||||
|
sub_informations,
|
||||||
|
):
|
||||||
|
return None
|
||||||
|
informations[name] = sub_informations
|
||||||
|
if child.isleader():
|
||||||
|
# if not self.default_values:
|
||||||
|
# child.value.set(sub_informations["gen_examples"][0])
|
||||||
|
return sub_informations
|
||||||
|
return None
|
||||||
|
|
||||||
|
def _collect_variable(
|
||||||
|
self,
|
||||||
|
child,
|
||||||
|
informations: dict,
|
||||||
|
):
|
||||||
|
if not self._collect(child, informations):
|
||||||
|
return False
|
||||||
|
informations["type"] = "variable"
|
||||||
|
default = self._set_default(
|
||||||
|
child,
|
||||||
|
informations,
|
||||||
|
)
|
||||||
|
self._parse_type(
|
||||||
|
child,
|
||||||
|
informations,
|
||||||
|
)
|
||||||
|
if child.ismulti():
|
||||||
|
multi = not child.isfollower() or child.issubmulti()
|
||||||
|
else:
|
||||||
|
multi = False
|
||||||
|
if multi:
|
||||||
|
informations["multiple"] = True
|
||||||
|
examples = child.information.get("examples", None)
|
||||||
|
if examples is None:
|
||||||
|
examples = child.information.get("test", None)
|
||||||
|
if examples is not None:
|
||||||
|
if len(examples) == 1:
|
||||||
|
name = _("Example")
|
||||||
|
values = examples[0]
|
||||||
|
else:
|
||||||
|
name = _("Examples")
|
||||||
|
values = list(examples)
|
||||||
|
informations["examples"] = {"name": name, "values": values}
|
||||||
|
tags = child.information.get("tags", None)
|
||||||
|
if tags:
|
||||||
|
if len(tags) == 1:
|
||||||
|
name = _("Tag")
|
||||||
|
values = tags[0]
|
||||||
|
else:
|
||||||
|
name = _("Tags")
|
||||||
|
values = list(tags)
|
||||||
|
informations["tags"] = {
|
||||||
|
"name": name,
|
||||||
|
"values": values,
|
||||||
|
}
|
||||||
|
alternative_name = child.information.get("alternative_name", None)
|
||||||
|
if alternative_name:
|
||||||
|
informations["alternative_name"] = alternative_name
|
||||||
|
return True
|
||||||
|
|
||||||
|
def _collect(
|
||||||
|
self,
|
||||||
|
child,
|
||||||
|
informations: dict,
|
||||||
|
*,
|
||||||
|
family_type: str = None,
|
||||||
|
):
|
||||||
|
display, properties = self._get_properties(child, informations)
|
||||||
|
if not display:
|
||||||
|
return False
|
||||||
|
informations["path"] = self.doc_path(child.path(uncalculated=True))
|
||||||
|
informations["name"] = child.name(uncalculated=True)
|
||||||
|
description = self._get_description(child, family_type)
|
||||||
|
if description is not None:
|
||||||
|
informations["description"] = description
|
||||||
|
help_ = child.information.get("help", None)
|
||||||
|
if help_:
|
||||||
|
informations["help"] = [to_phrase(help_)]
|
||||||
|
if "properties" in informations:
|
||||||
|
informations["properties"].extend(properties)
|
||||||
|
else:
|
||||||
|
informations["properties"] = properties
|
||||||
|
properties = child.property.get(uncalculated=True)
|
||||||
|
for mode in self.modes_level:
|
||||||
|
if mode not in properties:
|
||||||
|
continue
|
||||||
|
informations["mode"] = mode
|
||||||
|
break
|
||||||
|
if child.isdynamic():
|
||||||
|
informations["identifiers"] = []
|
||||||
|
path = child.path(uncalculated=True)
|
||||||
|
if child.has_identifiers():
|
||||||
|
identifiers = child.identifiers()
|
||||||
|
else:
|
||||||
|
identifiers = [child.identifiers()]
|
||||||
|
for identifier in identifiers:
|
||||||
|
cpath = calc_path(path, identifiers=identifier)
|
||||||
|
child_identifier = self.true_config.option(cpath)
|
||||||
|
if not self.is_inaccessible_user_data(child_identifier):
|
||||||
|
informations["identifiers"].append(identifier)
|
||||||
|
if not informations["identifiers"]:
|
||||||
|
informations["identifiers"] = [["example"]]
|
||||||
|
return True
|
||||||
|
|
||||||
|
def _parse_type(
|
||||||
|
self,
|
||||||
|
child,
|
||||||
|
informations,
|
||||||
|
):
|
||||||
|
variable_type = child.information.get("type")
|
||||||
|
doc_type = self.convert_option.get(variable_type, {"params": {}})
|
||||||
|
informations["variable_type"] = doc_type.get("msg", variable_type)
|
||||||
|
# extra parameters for types
|
||||||
|
option = child.get()
|
||||||
|
validators = []
|
||||||
|
if "params" in doc_type:
|
||||||
|
for param, msg in doc_type["params"].items():
|
||||||
|
value = option.impl_get_extra(f"_{param}")
|
||||||
|
if value is None:
|
||||||
|
value = option.impl_get_extra(param)
|
||||||
|
if value is not None and value is not False:
|
||||||
|
if isinstance(value, set):
|
||||||
|
value = list(value)
|
||||||
|
if isinstance(value, list):
|
||||||
|
value = display_list(value, add_quote=True)
|
||||||
|
if "doc" in msg:
|
||||||
|
validators.append(msg["doc"].format(value))
|
||||||
|
else:
|
||||||
|
validators.append(msg["description"].format(value))
|
||||||
|
|
||||||
|
# get validation information from annotator
|
||||||
|
for name in child.information.list():
|
||||||
|
if not name.startswith("validators_calculation"):
|
||||||
|
continue
|
||||||
|
validators.extend(
|
||||||
|
self._to_string(
|
||||||
|
child,
|
||||||
|
"validators",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
break
|
||||||
|
if variable_type == "regexp":
|
||||||
|
validators.append(
|
||||||
|
_('text based with regular expressions "{0}"').format(child.pattern())
|
||||||
|
)
|
||||||
|
if validators:
|
||||||
|
if len(validators) == 1:
|
||||||
|
key = _("Validator")
|
||||||
|
validators = validators[0]
|
||||||
|
else:
|
||||||
|
key = _("Validators")
|
||||||
|
informations["validators"] = {"name": key, "values": validators}
|
||||||
|
if variable_type == "choice":
|
||||||
|
choices = self._to_string(child, "choice", do_not_raise=True)
|
||||||
|
if choices is None:
|
||||||
|
choices = child.value.list(uncalculated=True)
|
||||||
|
for idx, val in enumerate(choices):
|
||||||
|
if isinstance(val, Calculation):
|
||||||
|
choices[idx] = self._to_string(child, "choice", f"_{idx}")
|
||||||
|
informations["choices"] = {"name": _("Choices"), "values": choices}
|
||||||
|
|
||||||
|
def _get_properties(
|
||||||
|
self,
|
||||||
|
child,
|
||||||
|
child_informations,
|
||||||
|
):
|
||||||
|
informations = []
|
||||||
|
properties = child.property.get(uncalculated=True)
|
||||||
|
if "not_for_commandline" in properties:
|
||||||
|
child_informations["not_for_commandline"] = True
|
||||||
|
for prop, translated_prop in self.property_to_string:
|
||||||
|
annotation = False
|
||||||
|
if child.information.get(f"{prop}_calculation", False):
|
||||||
|
annotation = self._to_string(child, prop)
|
||||||
|
if annotation is None and prop in HIDDEN_PROPERTIES:
|
||||||
|
return False, []
|
||||||
|
if annotation is True and prop in DISABLED_PROPERTIES:
|
||||||
|
return False, []
|
||||||
|
if not annotation:
|
||||||
|
continue
|
||||||
|
elif prop not in properties:
|
||||||
|
# this property is not in the variable so, do not comment it
|
||||||
|
continue
|
||||||
|
elif prop in HIDDEN_PROPERTIES:
|
||||||
|
return False, []
|
||||||
|
prop_obj = {
|
||||||
|
"type": "property",
|
||||||
|
"name": translated_prop,
|
||||||
|
"ori_name": prop,
|
||||||
|
"access_control": prop in HIDDEN_PROPERTIES,
|
||||||
|
}
|
||||||
|
if annotation:
|
||||||
|
prop_obj["annotation"] = annotation
|
||||||
|
informations.append(prop_obj)
|
||||||
|
return True, informations
|
||||||
|
|
||||||
|
def _set_default(
|
||||||
|
self,
|
||||||
|
child,
|
||||||
|
informations,
|
||||||
|
):
|
||||||
|
default = self._to_string(child, "default", do_not_raise=True)
|
||||||
|
if default is None and child.information.get("default_value_makes_sense", True):
|
||||||
|
default_ = child.value.default(uncalculated=True)
|
||||||
|
if not isinstance(default_, Calculation):
|
||||||
|
default = default_
|
||||||
|
if default == []:
|
||||||
|
default = None
|
||||||
|
if default is not None:
|
||||||
|
informations["default"] = {"name": _("Default"), "values": default}
|
||||||
|
|
||||||
|
def _get_description(self, child, family_type):
|
||||||
|
if child.information.get("forced_description", False):
|
||||||
|
if (
|
||||||
|
child.isoptiondescription()
|
||||||
|
or not child.isfollower()
|
||||||
|
or not child.index()
|
||||||
|
):
|
||||||
|
# all variables must have description but display error only for first slave
|
||||||
|
msg = _('No attribute "description" for "{0}" in {1}').format(
|
||||||
|
child.path(uncalculated=True),
|
||||||
|
display_xmlfiles(child.information.get("ymlfiles")),
|
||||||
|
)
|
||||||
|
warn(
|
||||||
|
msg,
|
||||||
|
RougailWarning,
|
||||||
|
)
|
||||||
|
if family_type is not None:
|
||||||
|
# it's a vaariable
|
||||||
|
return self._convert_description(
|
||||||
|
child.description(uncalculated=True), "family", its_a_path=True
|
||||||
|
)
|
||||||
|
return None
|
||||||
|
var_type = "variable" if family_type is None else "family"
|
||||||
|
return self._convert_description(
|
||||||
|
child.description(uncalculated=True), var_type, its_a_path=False
|
||||||
|
)
|
||||||
|
|
||||||
|
def _convert_description(self, description, type_, its_a_path=False):
|
||||||
|
if not its_a_path:
|
||||||
|
description = to_phrase(description, type_)
|
||||||
|
return description
|
||||||
|
|
||||||
|
def is_inaccessible_user_data(self, child, *, only_disabled=False):
|
||||||
|
"""If family is not accessible in read_write mode (to load user_data),
|
||||||
|
do not comment this family
|
||||||
|
"""
|
||||||
|
properties = child.property.get(uncalculated=True)
|
||||||
|
if only_disabled:
|
||||||
|
hidden_properties = DISABLED_PROPERTIES
|
||||||
|
else:
|
||||||
|
hidden_properties = HIDDEN_PROPERTIES
|
||||||
|
for hidden_property in hidden_properties:
|
||||||
|
if hidden_property in properties:
|
||||||
|
return True
|
||||||
|
|
||||||
|
calculation = child.information.get(f"{hidden_property}_calculation", None)
|
||||||
|
if calculation:
|
||||||
|
calculation_type = calculation.get("type")
|
||||||
|
if (
|
||||||
|
calculation_type == "variable"
|
||||||
|
and calculation["value"]["type"] == "condition"
|
||||||
|
):
|
||||||
|
condition = calculation["value"]
|
||||||
|
variable = self.true_config.forcepermissive.option(
|
||||||
|
condition["path"]
|
||||||
|
)
|
||||||
|
try:
|
||||||
|
variable.value.get()
|
||||||
|
except AttributeError:
|
||||||
|
variable = None
|
||||||
|
if variable and self.is_inaccessible_user_data(
|
||||||
|
variable, only_disabled=only_disabled
|
||||||
|
):
|
||||||
|
try:
|
||||||
|
variable_value = self._get_unmodified_default_value(
|
||||||
|
variable
|
||||||
|
)
|
||||||
|
except VariableCalculationDependencyError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
condition_type = condition["condition"]
|
||||||
|
value = condition["value"]
|
||||||
|
if self.calc_condition_when(
|
||||||
|
condition_type, value, variable_value
|
||||||
|
):
|
||||||
|
return True
|
||||||
|
elif calculation_type == "identifier":
|
||||||
|
if self.calc_condition_when(
|
||||||
|
calculation["condition"],
|
||||||
|
calculation["value"],
|
||||||
|
child.identifiers()[-1],
|
||||||
|
):
|
||||||
|
return True
|
||||||
|
if not child.isoptiondescription():
|
||||||
|
for hidden_property in self.disabled_modes:
|
||||||
|
if hidden_property in properties:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def calc_condition_when(self, condition, value, current_value):
|
||||||
|
return (condition == "when" and value == current_value) or (
|
||||||
|
condition == "when_not" and value != current_value
|
||||||
|
)
|
||||||
|
|
||||||
|
def _get_unmodified_default_value(self, child):
|
||||||
|
calculation = child.information.get(f"default_calculation", None)
|
||||||
|
if not calculation:
|
||||||
|
return child.value.get()
|
||||||
|
if calculation["type"] == "variable":
|
||||||
|
variable = self.true_config.forcepermissive.option(
|
||||||
|
calculation["value"]["path"]
|
||||||
|
)
|
||||||
|
if variable and self.is_inaccessible_user_data(variable):
|
||||||
|
return self._get_unmodified_default_value(variable)
|
||||||
|
raise VariableCalculationDependencyError()
|
||||||
|
|
@ -51,15 +51,13 @@ def get_outputs_or_tabulars(type_) -> None:
|
||||||
level = obj_class.level
|
level = obj_class.level
|
||||||
if level in outputs:
|
if level in outputs:
|
||||||
raise ImportError(
|
raise ImportError(
|
||||||
_('duplicated level rougail-output-doc for {0} "{1}": {2} and {3}').format(
|
_(
|
||||||
type_, level, obj_class.name, outputs[level].name
|
'duplicated level rougail-output-doc for {0} "{1}": {2} and {3}'
|
||||||
)
|
).format(type_, level, obj_class.name, outputs[level].name)
|
||||||
)
|
)
|
||||||
if obj_class.name in names:
|
if obj_class.name in names:
|
||||||
raise ImportError(
|
raise ImportError(
|
||||||
_('duplicated name "{0}" in rougail-output-doc').format(
|
_('duplicated name "{0}" in rougail-output-doc').format(obj_class.name)
|
||||||
obj_class.name
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
names.append(obj_class.name)
|
names.append(obj_class.name)
|
||||||
outputs[level] = obj_class
|
outputs[level] = obj_class
|
||||||
|
|
@ -114,7 +112,7 @@ cli:
|
||||||
type: boolean
|
type: boolean
|
||||||
default:
|
default:
|
||||||
jinja: |-
|
jinja: |-
|
||||||
{{{{ __.step.output is not propertyerror and "doc" in __.step.output }}}}
|
{{{{ step.output is not propertyerror and step.output != "doc" }}}}
|
||||||
description: {_('is true if doc is activate')}
|
description: {_('is true if doc is activate')}
|
||||||
|
|
||||||
doc:
|
doc:
|
||||||
|
|
@ -124,7 +122,7 @@ doc:
|
||||||
jinja: |-
|
jinja: |-
|
||||||
{{{{ step.output is propertyerror or step.output != 'doc' }}}}
|
{{{{ step.output is propertyerror or step.output != 'doc' }}}}
|
||||||
return_type: boolean
|
return_type: boolean
|
||||||
description: {_('if doc is not set in "step.output"')}
|
description: {_('if "step.output" is not doc')}
|
||||||
|
|
||||||
output_format:
|
output_format:
|
||||||
description: {_('The output format of the generated documentation')}
|
description: {_('The output format of the generated documentation')}
|
||||||
|
|
@ -210,7 +208,7 @@ doc:
|
||||||
description: {_('Variables and changelog documentation')}
|
description: {_('Variables and changelog documentation')}
|
||||||
disabled:
|
disabled:
|
||||||
jinja: |-
|
jinja: |-
|
||||||
{{{{ step.output is propertyerror or "doc" not in step.output or _.output_format == "json" or ("variables" not in _.contents and "changelog" not in _.contents) }}}}
|
{{{{ step.output is propertyerror or step.output != "doc" or _.output_format == "json" or ("variables" not in _.contents and "changelog" not in _.contents) }}}}
|
||||||
return_type: boolean
|
return_type: boolean
|
||||||
description: {_('if "_.output_format" is json or "_.contents" hasn\'t variables or changelog')}
|
description: {_('if "_.output_format" is json or "_.contents" hasn\'t variables or changelog')}
|
||||||
|
|
||||||
|
|
@ -248,7 +246,7 @@ doc:
|
||||||
description: {_('Changelog documentation')}
|
description: {_('Changelog documentation')}
|
||||||
disabled:
|
disabled:
|
||||||
jinja: |-
|
jinja: |-
|
||||||
{{{{ step.output is propertyerror or "doc" not in step.output or _.output_format == "json" or "changelog" not in _.contents }}}}
|
{{{{ step.output is propertyerror or step.output != "doc" or _.output_format == "json" or "changelog" not in _.contents }}}}
|
||||||
return_type: boolean
|
return_type: boolean
|
||||||
description: {_('if changelog in not in "_.contents"')}
|
description: {_('if changelog in not in "_.contents"')}
|
||||||
|
|
||||||
|
|
@ -261,7 +259,7 @@ doc:
|
||||||
description: {_('Examples configuration')}
|
description: {_('Examples configuration')}
|
||||||
disabled:
|
disabled:
|
||||||
jinja: |-
|
jinja: |-
|
||||||
{{{{ step.output is propertyerror or "doc" not in step.output or "example" not in _.contents }}}}
|
{{{{ step.output is propertyerror or step.output != "doc" or "example" not in _.contents }}}}
|
||||||
return_type: boolean
|
return_type: boolean
|
||||||
description: {_('if example is not in "_.contents"')}
|
description: {_('if example is not in "_.contents"')}
|
||||||
|
|
||||||
|
|
@ -285,4 +283,5 @@ doc:
|
||||||
"level": 50,
|
"level": 50,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
__all__ = ("OutPuts", "get_rougail_config")
|
__all__ = ("OutPuts", "get_rougail_config")
|
||||||
|
|
|
||||||
|
|
@ -16,36 +16,23 @@ You should have received a copy of the GNU Lesser General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from warnings import warn
|
from typing import Union
|
||||||
from typing import Optional, Union
|
|
||||||
from itertools import chain
|
|
||||||
from re import compile
|
|
||||||
|
|
||||||
from tiramisu import Calculation, groups
|
from tiramisu import groups
|
||||||
from tiramisu.error import ConfigError, display_list, PropertiesOptionError
|
from rougail.utils import get_properties_to_string
|
||||||
from rougail.tiramisu import display_xmlfiles, normalize_family
|
|
||||||
from rougail.utils import undefined, get_properties_to_string, PROPERTY_ATTRIBUTE
|
|
||||||
from rougail.error import VariableCalculationDependencyError, RougailWarning
|
|
||||||
|
|
||||||
from .config import OutPuts
|
from .config import OutPuts
|
||||||
from .i18n import _
|
from .i18n import _
|
||||||
from .utils import dump, to_phrase, calc_path
|
from .collect import Collect
|
||||||
from .example import Examples
|
|
||||||
from .changelog import Changelog
|
from .changelog import Changelog
|
||||||
|
from .example import Examples
|
||||||
|
|
||||||
|
|
||||||
HIDDEN_PROPERTIES = [
|
class RougailOutputDoc(Collect, Examples, Changelog):
|
||||||
"hidden",
|
|
||||||
"disabled",
|
|
||||||
]
|
|
||||||
|
|
||||||
DISABLED_PROPERTIES = ["disabled"]
|
|
||||||
|
|
||||||
|
|
||||||
class RougailOutputDoc(Examples, Changelog):
|
|
||||||
"""Rougail Output Doc:
|
"""Rougail Output Doc:
|
||||||
Generate documentation from rougail description files
|
Generate documentation from rougail description files
|
||||||
"""
|
"""
|
||||||
|
|
||||||
output_name = "doc"
|
output_name = "doc"
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
|
|
@ -54,6 +41,7 @@ class RougailOutputDoc(Examples, Changelog):
|
||||||
*,
|
*,
|
||||||
rougailconfig: "RougailConfig" = None,
|
rougailconfig: "RougailConfig" = None,
|
||||||
true_config: "Config" = None,
|
true_config: "Config" = None,
|
||||||
|
root_config: "Config" = None,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
):
|
):
|
||||||
# Import here to avoid circular import
|
# Import here to avoid circular import
|
||||||
|
|
@ -73,6 +61,10 @@ class RougailOutputDoc(Examples, Changelog):
|
||||||
self.true_config = config
|
self.true_config = config
|
||||||
else:
|
else:
|
||||||
self.true_config = true_config
|
self.true_config = true_config
|
||||||
|
if root_config is None:
|
||||||
|
self.root_config = self.true_config
|
||||||
|
else:
|
||||||
|
self.root_config = root_config
|
||||||
self.rougailconfig = rougailconfig
|
self.rougailconfig = rougailconfig
|
||||||
self.informations = None
|
self.informations = None
|
||||||
self.formatter = None
|
self.formatter = None
|
||||||
|
|
@ -94,7 +86,9 @@ class RougailOutputDoc(Examples, Changelog):
|
||||||
|
|
||||||
def load_formatter(self) -> str:
|
def load_formatter(self) -> str:
|
||||||
output_format = self.rougailconfig["doc.output_format"]
|
output_format = self.rougailconfig["doc.output_format"]
|
||||||
self.formatter = self.outputs[output_format](self.rougailconfig, support_namespace=self.support_namespace)
|
self.formatter = self.outputs[output_format](
|
||||||
|
self.rougailconfig, support_namespace=self.support_namespace
|
||||||
|
)
|
||||||
|
|
||||||
def print(self) -> None:
|
def print(self) -> None:
|
||||||
ret, data = self.run()
|
ret, data = self.run()
|
||||||
|
|
@ -104,6 +98,7 @@ class RougailOutputDoc(Examples, Changelog):
|
||||||
def load(self):
|
def load(self):
|
||||||
self.document_a_type = self.rougailconfig["doc.document_a_type"]
|
self.document_a_type = self.rougailconfig["doc.document_a_type"]
|
||||||
self.modes_level = self.rougailconfig["modes_level"]
|
self.modes_level = self.rougailconfig["modes_level"]
|
||||||
|
self.default_values = self.rougailconfig["doc.default_values"]
|
||||||
self.disabled_modes = []
|
self.disabled_modes = []
|
||||||
if self.modes_level:
|
if self.modes_level:
|
||||||
for mode in self.modes_level:
|
for mode in self.modes_level:
|
||||||
|
|
@ -119,854 +114,46 @@ class RougailOutputDoc(Examples, Changelog):
|
||||||
self.property_to_string = get_properties_to_string()
|
self.property_to_string = get_properties_to_string()
|
||||||
self.outputs = OutPuts().get()
|
self.outputs = OutPuts().get()
|
||||||
self.dynamic_paths = {}
|
self.dynamic_paths = {}
|
||||||
if not self.config.isoptiondescription():
|
if self.config.isoptiondescription():
|
||||||
informations = {}
|
informations = self.collect_families(self.config.unrestraint)
|
||||||
self.parse_variable(self.config, None, informations)
|
|
||||||
else:
|
else:
|
||||||
config = self.config.unrestraint
|
informations = {}
|
||||||
self.populate_dynamics(config=config)
|
self.collect_variable(self.config, informations)
|
||||||
informations = self.parse_families(config)
|
|
||||||
if informations is None:
|
if informations is None:
|
||||||
informations = {}
|
informations = {}
|
||||||
elif self.config.type() not in ['config', 'metaconfig', 'groupconfig', 'mixconfig']:
|
if self.true_config != self.config:
|
||||||
|
# build cache for dyn family
|
||||||
root_informations = {}
|
root_informations = {}
|
||||||
infos = root_informations
|
infos = root_informations
|
||||||
family = self.true_config
|
family = self.root_config
|
||||||
for path in self.config.path().split('.'):
|
for path in self.config.path().split("."):
|
||||||
family = family.option(path)
|
family = family.option(path)
|
||||||
name = family.name(uncalculated=True)
|
name = family.name(uncalculated=True)
|
||||||
if family.isoptiondescription():
|
if family.isoptiondescription():
|
||||||
infos[name] = self.get_root_family(family)
|
infos[name] = self.get_root_family(family)
|
||||||
infos = infos[name]["children"]
|
infos = infos[name]["children"]
|
||||||
|
else:
|
||||||
|
if name not in informations:
|
||||||
|
informations = {}
|
||||||
|
else:
|
||||||
|
infos[name] = informations[name]
|
||||||
|
break
|
||||||
|
else:
|
||||||
infos.update(informations)
|
infos.update(informations)
|
||||||
informations = root_informations
|
informations = root_informations
|
||||||
self.informations = informations
|
self.informations = informations
|
||||||
|
|
||||||
def get_root_family(self, family):
|
def get_root_family(self, family):
|
||||||
family_informations = self._populate_family(
|
family_type = self._get_family_type(family)
|
||||||
|
family_informations = self._collect_family(
|
||||||
family,
|
family,
|
||||||
|
family_type,
|
||||||
|
with_identifier=False,
|
||||||
|
current_identifier_only=False,
|
||||||
)
|
)
|
||||||
if family_informations is not False:
|
if family_informations is not False:
|
||||||
return {
|
return {
|
||||||
"type": self._get_family_type(family),
|
"type": family_type,
|
||||||
"informations": family_informations,
|
"informations": family_informations,
|
||||||
"children": {},
|
"children": {},
|
||||||
}
|
}
|
||||||
|
|
||||||
def populate_dynamics(self, *, config=None, reload=False):
|
|
||||||
if config is None:
|
|
||||||
config = self.config.unrestraint
|
|
||||||
self._populate_dynamics(config, reload)
|
|
||||||
|
|
||||||
def _populate_dynamics(self, family, reload, uncalculated=False) -> None:
|
|
||||||
def populate(child, uncalculated):
|
|
||||||
if child.isoptiondescription():
|
|
||||||
type_ = "family"
|
|
||||||
else:
|
|
||||||
type_ = "variable"
|
|
||||||
if child.isdynamic():
|
|
||||||
self.populate_dynamic(child, type_, reload, uncalculated)
|
|
||||||
if child.isoptiondescription():
|
|
||||||
self._populate_dynamics(child, reload, uncalculated)
|
|
||||||
for child in family.list(uncalculated=uncalculated):
|
|
||||||
populate(child, uncalculated)
|
|
||||||
if not uncalculated:
|
|
||||||
for child in family.list(uncalculated=True):
|
|
||||||
if child.isdynamic() and child.path(uncalculated=True) not in self.dynamic_paths:
|
|
||||||
populate(family, uncalculated=True)
|
|
||||||
|
|
||||||
def populate_dynamic(self, obj, type_, reload, uncalculated) -> None:
|
|
||||||
path = obj.path(uncalculated=True)
|
|
||||||
if path not in self.dynamic_paths:
|
|
||||||
new_name = True
|
|
||||||
description = obj.description(uncalculated=True)
|
|
||||||
name = obj.name(uncalculated=True)
|
|
||||||
self.dynamic_paths[path] = {
|
|
||||||
"names": [],
|
|
||||||
"identifiers": [],
|
|
||||||
"path": self.doc_path(path),
|
|
||||||
}
|
|
||||||
if not obj.information.get("forced_description", False):
|
|
||||||
self.dynamic_paths[path]["description"] = self._convert_description(
|
|
||||||
description, type_, its_a_path=False
|
|
||||||
)
|
|
||||||
elif obj.isoptiondescription():
|
|
||||||
self.dynamic_paths[path]["description"] = self._convert_description(
|
|
||||||
description, type_, its_a_path=True
|
|
||||||
)
|
|
||||||
if uncalculated:
|
|
||||||
return
|
|
||||||
dynamic_obj = self.dynamic_paths[path]
|
|
||||||
if reload and obj.identifiers() in dynamic_obj["identifiers"]:
|
|
||||||
return
|
|
||||||
dynamic_obj["names"].append(obj.name())
|
|
||||||
dynamic_obj["identifiers"].append(obj.identifiers())
|
|
||||||
|
|
||||||
def parse_families(self, family) -> dict:
|
|
||||||
informations = {}
|
|
||||||
leader = None
|
|
||||||
for child in family.list():
|
|
||||||
if self.is_inaccessible_user_data(child):
|
|
||||||
continue
|
|
||||||
if child.type(only_self=True) == "symlink":
|
|
||||||
continue
|
|
||||||
if not child.isoptiondescription():
|
|
||||||
leader = self.parse_variable(child, leader, informations)
|
|
||||||
else:
|
|
||||||
self.parse_family(child, informations)
|
|
||||||
return informations
|
|
||||||
|
|
||||||
def is_inaccessible_user_data(self, child):
|
|
||||||
"""If family is not accessible in read_write mode (to load user_data),
|
|
||||||
do not comment this family
|
|
||||||
"""
|
|
||||||
properties = child.property.get(uncalculated=True)
|
|
||||||
for hidden_property in HIDDEN_PROPERTIES:
|
|
||||||
if hidden_property in properties:
|
|
||||||
return True
|
|
||||||
|
|
||||||
calculation = child.information.get(f"{hidden_property}_calculation", None)
|
|
||||||
if calculation and calculation.get("type") == "variable" and calculation["value"]["type"] == "condition":
|
|
||||||
condition = calculation["value"]
|
|
||||||
variable = self.true_config.forcepermissive.option(condition["path"])
|
|
||||||
try:
|
|
||||||
variable.value.get()
|
|
||||||
except AttributeError:
|
|
||||||
variable = None
|
|
||||||
if variable and self.is_inaccessible_user_data(variable):
|
|
||||||
try:
|
|
||||||
variable_value = self._get_unmodified_default_value(variable)
|
|
||||||
except VariableCalculationDependencyError:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
condition_type = condition["condition"]
|
|
||||||
value = condition["value"]
|
|
||||||
if (condition_type == "when" and value == variable_value) or (condition_type == "when_not" and value != variable_value):
|
|
||||||
return True
|
|
||||||
if not child.isoptiondescription():
|
|
||||||
for hidden_property in self.disabled_modes:
|
|
||||||
if hidden_property in properties:
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def parse_family(self, family, informations: dict, *, force_injection=False) -> None:
|
|
||||||
sub_informations = self.parse_families(family)
|
|
||||||
if not force_injection and not sub_informations:
|
|
||||||
return
|
|
||||||
# if self.with_family:
|
|
||||||
family_informations = self._populate_family(
|
|
||||||
family,
|
|
||||||
)
|
|
||||||
if family_informations is not False:
|
|
||||||
name = family.name(uncalculated=True)
|
|
||||||
informations[name] = {
|
|
||||||
"type": self._get_family_type(family),
|
|
||||||
"informations": family_informations,
|
|
||||||
"children": sub_informations,
|
|
||||||
}
|
|
||||||
|
|
||||||
def parse_variable(
|
|
||||||
self,
|
|
||||||
variable,
|
|
||||||
leader: dict,
|
|
||||||
informations: dict,
|
|
||||||
*,
|
|
||||||
only_one=False,
|
|
||||||
) -> Optional[dict]:
|
|
||||||
path = variable.path(uncalculated=True)
|
|
||||||
name = variable.name(uncalculated=True)
|
|
||||||
potential_leader = None
|
|
||||||
if variable.isdynamic():
|
|
||||||
# information is already set
|
|
||||||
potential_leader = self._parse_variable_dynamic(
|
|
||||||
variable, leader, name, path, informations, only_one
|
|
||||||
)
|
|
||||||
elif variable.isfollower() and variable.index():
|
|
||||||
self._parse_variable_follower_with_index(
|
|
||||||
variable, leader, name, informations
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
potential_leader = self.parse_variable_normal(
|
|
||||||
variable, leader, name, path, informations
|
|
||||||
)
|
|
||||||
if potential_leader:
|
|
||||||
leader = potential_leader
|
|
||||||
return leader
|
|
||||||
|
|
||||||
def parse_variable_normal(
|
|
||||||
self, variable, leader, name: str, path: str, informations: dict
|
|
||||||
) -> Optional[dict]:
|
|
||||||
if variable.isdynamic():
|
|
||||||
sub_informations = self.dynamic_paths[path]
|
|
||||||
elif variable.isfollower() and path in informations: # variable.index():
|
|
||||||
sub_informations = informations[name]
|
|
||||||
else:
|
|
||||||
sub_informations = {}
|
|
||||||
if not self._populate_variable(
|
|
||||||
variable,
|
|
||||||
sub_informations,
|
|
||||||
):
|
|
||||||
return None
|
|
||||||
self._add_examples(variable, sub_informations, leader)
|
|
||||||
informations[name] = sub_informations
|
|
||||||
if variable.isleader():
|
|
||||||
return sub_informations
|
|
||||||
return None
|
|
||||||
|
|
||||||
def _parse_variable_follower_with_index(
|
|
||||||
self, variable, leader: dict, name: str, informations: dict
|
|
||||||
) -> None:
|
|
||||||
if (variable.index() + 1) > len(leader["gen_examples"][-1]):
|
|
||||||
return
|
|
||||||
informations[name]["gen_examples"][-1][variable.index()] = self._get_example(
|
|
||||||
variable, informations[name], None
|
|
||||||
)
|
|
||||||
|
|
||||||
def _parse_variable_dynamic(
|
|
||||||
self, variable, leader, name, path, informations, only_one
|
|
||||||
) -> None:
|
|
||||||
# if path not in self.dynamic_paths:
|
|
||||||
# self.populate_dynamic(variable, path)
|
|
||||||
dynamic_variable = self.dynamic_paths[path]
|
|
||||||
if (not only_one or path in informations) and "type" in dynamic_variable:
|
|
||||||
dynamic_variable["gen_examples"].append(
|
|
||||||
self._get_example(variable, dynamic_variable, leader)
|
|
||||||
)
|
|
||||||
if variable.isleader():
|
|
||||||
return dynamic_variable
|
|
||||||
if not only_one:
|
|
||||||
return None
|
|
||||||
return self.parse_variable_normal(variable, leader, name, path, informations)
|
|
||||||
|
|
||||||
def _get_family_type(self, family) -> str:
|
|
||||||
if self.support_namespace and family.group_type() is groups.namespace:
|
|
||||||
return "namespace"
|
|
||||||
if family.isleadership():
|
|
||||||
return "leadership"
|
|
||||||
if family.isdynamic(only_self=True):
|
|
||||||
return "dynamic"
|
|
||||||
return "family"
|
|
||||||
|
|
||||||
def _populate_family(
|
|
||||||
self,
|
|
||||||
family,
|
|
||||||
) -> dict:
|
|
||||||
path = family.path(uncalculated=True)
|
|
||||||
if family.isdynamic():
|
|
||||||
informations = self.dynamic_paths[path]
|
|
||||||
else:
|
|
||||||
informations = {}
|
|
||||||
if not self._populate(family, informations, "family"):
|
|
||||||
return False
|
|
||||||
if family.isleadership():
|
|
||||||
informations.setdefault("help", []).append(
|
|
||||||
_("This family contains lists of variable blocks")
|
|
||||||
)
|
|
||||||
if family.isdynamic(only_self=True):
|
|
||||||
identifiers = self._to_string(family, "dynamic", do_not_raise=True)
|
|
||||||
if identifiers is None:
|
|
||||||
identifiers = family.identifiers(only_self=True)
|
|
||||||
if not isinstance(identifiers, list):
|
|
||||||
identifiers = [identifiers]
|
|
||||||
informations["identifier"] = identifiers
|
|
||||||
informations.setdefault("help", []).append(
|
|
||||||
_("This family builds families dynamically")
|
|
||||||
)
|
|
||||||
return informations
|
|
||||||
|
|
||||||
def _populate_variable(
|
|
||||||
self,
|
|
||||||
variable,
|
|
||||||
informations: dict,
|
|
||||||
):
|
|
||||||
informations["type"] = "variable"
|
|
||||||
default = self._get_default(
|
|
||||||
variable,
|
|
||||||
)
|
|
||||||
if default is not None:
|
|
||||||
informations["default"] = {"name": _("Default"), "values": default}
|
|
||||||
self._parse_type(
|
|
||||||
variable,
|
|
||||||
informations,
|
|
||||||
)
|
|
||||||
if not self._populate(variable, informations, "variable"):
|
|
||||||
return False
|
|
||||||
if variable.ismulti():
|
|
||||||
multi = not variable.isfollower() or variable.issubmulti()
|
|
||||||
else:
|
|
||||||
multi = False
|
|
||||||
if multi:
|
|
||||||
informations["multiple"] = True
|
|
||||||
examples = variable.information.get("examples", None)
|
|
||||||
if examples is None:
|
|
||||||
examples = variable.information.get("test", None)
|
|
||||||
if examples is not None:
|
|
||||||
if len(examples) == 1:
|
|
||||||
name = _("Example")
|
|
||||||
values = examples[0]
|
|
||||||
else:
|
|
||||||
name = _("Examples")
|
|
||||||
values = list(examples)
|
|
||||||
informations["examples"] = {
|
|
||||||
"name": name,
|
|
||||||
"values": values
|
|
||||||
}
|
|
||||||
tags = variable.information.get("tags", None)
|
|
||||||
if tags:
|
|
||||||
if len(tags) == 1:
|
|
||||||
name = _("Tag")
|
|
||||||
values = tags[0]
|
|
||||||
else:
|
|
||||||
name = _("Tags")
|
|
||||||
values = list(tags)
|
|
||||||
informations["tags"] = {
|
|
||||||
"name": name,
|
|
||||||
"values": values,
|
|
||||||
}
|
|
||||||
alternative_name = variable.information.get("alternative_name", None)
|
|
||||||
if alternative_name:
|
|
||||||
informations["alternative_name"] = alternative_name
|
|
||||||
return True
|
|
||||||
|
|
||||||
def _populate(
|
|
||||||
self,
|
|
||||||
child,
|
|
||||||
informations: dict,
|
|
||||||
type_: str,
|
|
||||||
):
|
|
||||||
need_disabled, properties = self._parse_properties(child, informations)
|
|
||||||
if not need_disabled:
|
|
||||||
return False
|
|
||||||
name = child.name(uncalculated=True)
|
|
||||||
if child.information.get("forced_description", False):
|
|
||||||
if (
|
|
||||||
not child.isoptiondescription()
|
|
||||||
or not self.support_namespace
|
|
||||||
or child.group_type() is not groups.namespace
|
|
||||||
):
|
|
||||||
if (
|
|
||||||
child.isoptiondescription()
|
|
||||||
or not child.isfollower()
|
|
||||||
or not child.index()
|
|
||||||
):
|
|
||||||
warning = _('No attribute "description" for "{0}" in {1}').format(
|
|
||||||
child.path(uncalculated=True),
|
|
||||||
display_xmlfiles(child.information.get("ymlfiles")),
|
|
||||||
)
|
|
||||||
warn(
|
|
||||||
warning,
|
|
||||||
RougailWarning,
|
|
||||||
)
|
|
||||||
if child.isoptiondescription():
|
|
||||||
description = self._convert_description(
|
|
||||||
child.description(uncalculated=True), type_, its_a_path=True
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
description = None
|
|
||||||
else:
|
|
||||||
description = self._convert_description(
|
|
||||||
child.description(uncalculated=True), type_, its_a_path=False
|
|
||||||
)
|
|
||||||
if not child.isdynamic():
|
|
||||||
informations["path"] = self.doc_path(child.path(uncalculated=True))
|
|
||||||
informations["names"] = [child.name()]
|
|
||||||
if description is not None:
|
|
||||||
informations["description"] = description
|
|
||||||
help_ = child.information.get("help", None)
|
|
||||||
if help_:
|
|
||||||
informations["help"] = [to_phrase(help_)]
|
|
||||||
if "properties" in informations:
|
|
||||||
informations["properties"].extend(properties)
|
|
||||||
else:
|
|
||||||
informations["properties"] = properties
|
|
||||||
properties = child.property.get(uncalculated=True)
|
|
||||||
for mode in self.modes_level:
|
|
||||||
if mode not in properties:
|
|
||||||
continue
|
|
||||||
informations["mode"] = mode
|
|
||||||
break
|
|
||||||
return True
|
|
||||||
|
|
||||||
def _convert_description(self, description, type_, its_a_path=False):
|
|
||||||
if not its_a_path:
|
|
||||||
description = to_phrase(description, type_)
|
|
||||||
return description
|
|
||||||
|
|
||||||
def _add_examples(self, variable, informations: dict, leader) -> None:
|
|
||||||
if not variable.index():
|
|
||||||
example = self._get_example(variable, informations, leader)
|
|
||||||
informations["gen_examples"] = [example]
|
|
||||||
informations["mandatory_without_value"] = "mandatory" in variable.property.get(
|
|
||||||
uncalculated=True
|
|
||||||
) and (
|
|
||||||
not variable.information.get("default_value_makes_sense", True)
|
|
||||||
or variable.value.get(uncalculated=True) in [None, []]
|
|
||||||
)
|
|
||||||
|
|
||||||
def _get_example(self, variable, informations: dict, leader):
|
|
||||||
example = informations.get("examples", {}).get("values")
|
|
||||||
if example is not None:
|
|
||||||
if isinstance(example, tuple):
|
|
||||||
example = list(example)
|
|
||||||
if informations.get("multiple"):
|
|
||||||
if not isinstance(example, list):
|
|
||||||
example = [example]
|
|
||||||
else:
|
|
||||||
if isinstance(example, list):
|
|
||||||
index = variable.index()
|
|
||||||
if index is None or len(example) - 1 >= index:
|
|
||||||
index = 0
|
|
||||||
example = example[index]
|
|
||||||
else:
|
|
||||||
if variable.information.get("fake_default", False):
|
|
||||||
default = None
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
default = variable.value.get()
|
|
||||||
except ConfigError:
|
|
||||||
default = None
|
|
||||||
if default not in [None, []]:
|
|
||||||
example = default
|
|
||||||
else:
|
|
||||||
example = self.get_type_default_value(
|
|
||||||
variable, informations
|
|
||||||
)
|
|
||||||
if leader is not None and variable.isfollower():
|
|
||||||
example = [example] + [undefined] * (len(leader["gen_examples"][-1]) - 1)
|
|
||||||
return example
|
|
||||||
|
|
||||||
def get_type_default_value(self, variable, informations):
|
|
||||||
example = self.convert_option.get(variable.information.get("type"), {}).get(
|
|
||||||
"example", None
|
|
||||||
)
|
|
||||||
if example is None:
|
|
||||||
example = "xxx"
|
|
||||||
if informations.get("multiple"):
|
|
||||||
example = [example]
|
|
||||||
return example
|
|
||||||
|
|
||||||
def _parse_type(
|
|
||||||
self,
|
|
||||||
child,
|
|
||||||
informations,
|
|
||||||
):
|
|
||||||
variable_type = child.information.get("type")
|
|
||||||
doc_type = self.convert_option.get(variable_type, {"params": {}})
|
|
||||||
informations["variable_type"] = doc_type.get("msg", variable_type)
|
|
||||||
# extra parameters for types
|
|
||||||
option = child.get()
|
|
||||||
validators = []
|
|
||||||
if "params" in doc_type:
|
|
||||||
for param, msg in doc_type["params"].items():
|
|
||||||
value = option.impl_get_extra(f"_{param}")
|
|
||||||
if value is None:
|
|
||||||
value = option.impl_get_extra(param)
|
|
||||||
if value is not None and value is not False:
|
|
||||||
if isinstance(value, set):
|
|
||||||
value = list(value)
|
|
||||||
if isinstance(value, list):
|
|
||||||
value = display_list(value, add_quote=True)
|
|
||||||
if "doc" in msg:
|
|
||||||
validators.append(msg['doc'].format(value))
|
|
||||||
else:
|
|
||||||
validators.append(msg['description'].format(value))
|
|
||||||
|
|
||||||
# get validation information from annotator
|
|
||||||
for name in child.information.list():
|
|
||||||
if not name.startswith("validators_calculation"):
|
|
||||||
continue
|
|
||||||
validators.extend(
|
|
||||||
self._to_string(
|
|
||||||
child,
|
|
||||||
"validators",
|
|
||||||
)
|
|
||||||
)
|
|
||||||
break
|
|
||||||
if variable_type == "regexp":
|
|
||||||
validators.append(
|
|
||||||
_('text based with regular expressions "{0}"').format(child.pattern())
|
|
||||||
)
|
|
||||||
if validators:
|
|
||||||
if len(validators) == 1:
|
|
||||||
key = _("Validator")
|
|
||||||
validators = validators[0]
|
|
||||||
else:
|
|
||||||
key = _("Validators")
|
|
||||||
informations["validators"] = {"name": key, "values": validators}
|
|
||||||
if variable_type == "choice":
|
|
||||||
choices = self._to_string(child, "choice", do_not_raise=True)
|
|
||||||
if choices is None:
|
|
||||||
choices = child.value.list()
|
|
||||||
for idx, val in enumerate(choices):
|
|
||||||
if isinstance(val, Calculation):
|
|
||||||
choices[idx] = self._to_string(child, "choice", f"_{idx}")
|
|
||||||
informations["choices"] = {"name": _("Choices"), "values": choices}
|
|
||||||
|
|
||||||
def _parse_properties(
|
|
||||||
self,
|
|
||||||
child,
|
|
||||||
child_informations,
|
|
||||||
):
|
|
||||||
informations = []
|
|
||||||
properties = child.property.get(uncalculated=True)
|
|
||||||
for prop, translated_prop in self.property_to_string:
|
|
||||||
if "not_for_commandline" in properties:
|
|
||||||
child_informations["not_for_commandline"] = True
|
|
||||||
continue
|
|
||||||
if prop in properties:
|
|
||||||
prop_obj = {
|
|
||||||
"type": "property",
|
|
||||||
"name": translated_prop,
|
|
||||||
"ori_name": prop,
|
|
||||||
"access_control": prop in HIDDEN_PROPERTIES,
|
|
||||||
}
|
|
||||||
elif child.information.get(f"{prop}_calculation", False):
|
|
||||||
annotation = self._to_string(child, prop)
|
|
||||||
if annotation is None or isinstance(annotation, bool):
|
|
||||||
if (annotation is None and prop in HIDDEN_PROPERTIES) or (annotation is True and prop in DISABLED_PROPERTIES):
|
|
||||||
return False, {}
|
|
||||||
if not annotation or prop in DISABLED_PROPERTIES:
|
|
||||||
continue
|
|
||||||
prop_obj = {
|
|
||||||
"type": "property",
|
|
||||||
"name": translated_prop,
|
|
||||||
"ori_name": prop,
|
|
||||||
"access_control": prop in HIDDEN_PROPERTIES,
|
|
||||||
}
|
|
||||||
else:
|
|
||||||
prop_obj = {
|
|
||||||
"type": "property",
|
|
||||||
"name": translated_prop,
|
|
||||||
"ori_name": prop,
|
|
||||||
"access_control": prop in HIDDEN_PROPERTIES,
|
|
||||||
"annotation": annotation,
|
|
||||||
}
|
|
||||||
else:
|
|
||||||
# this property is not in the variable so, do not comment it
|
|
||||||
continue
|
|
||||||
informations.append(prop_obj)
|
|
||||||
return True, informations
|
|
||||||
|
|
||||||
def _get_default(
|
|
||||||
self,
|
|
||||||
variable,
|
|
||||||
):
|
|
||||||
default = self._to_string(variable, "default", do_not_raise=True)
|
|
||||||
if default is not None:
|
|
||||||
if default == []:
|
|
||||||
default = None
|
|
||||||
return default
|
|
||||||
if variable.information.get("default_value_makes_sense", True):
|
|
||||||
default_ = variable.value.get(uncalculated=True)
|
|
||||||
if not isinstance(default_, Calculation):
|
|
||||||
default = default_
|
|
||||||
if default == []:
|
|
||||||
default = None
|
|
||||||
return default
|
|
||||||
|
|
||||||
def _to_string(
|
|
||||||
self,
|
|
||||||
child,
|
|
||||||
prop,
|
|
||||||
do_not_raise=False,
|
|
||||||
):
|
|
||||||
calculation = child.information.get(f"{prop}_calculation", None)
|
|
||||||
if not calculation:
|
|
||||||
if do_not_raise:
|
|
||||||
return None
|
|
||||||
raise Exception(
|
|
||||||
f'cannot find "{prop}_calculation" information, '
|
|
||||||
"do you have declare doc has a plugins?"
|
|
||||||
)
|
|
||||||
if isinstance(calculation, list):
|
|
||||||
values = []
|
|
||||||
for cal in calculation:
|
|
||||||
value = self._calculation_to_string(child, cal, prop)
|
|
||||||
if value is not None:
|
|
||||||
values.append(value)
|
|
||||||
return values
|
|
||||||
return self._calculation_to_string(child, calculation, prop)
|
|
||||||
|
|
||||||
def _calculation_to_string(self, child, calculation, attribute_type):
|
|
||||||
if "description" in calculation:
|
|
||||||
values = calculation
|
|
||||||
if self.document_a_type and "variables" in values:
|
|
||||||
for variable in list(values["variables"]):
|
|
||||||
variable["path"] = self.doc_path(variable["path"])
|
|
||||||
|
|
||||||
elif "type" not in calculation:
|
|
||||||
values = calculation["value"]
|
|
||||||
elif calculation["type"] == "jinja":
|
|
||||||
values = self._calculation_jinja_to_string(child, calculation, attribute_type)
|
|
||||||
elif calculation["type"] == "variable":
|
|
||||||
values = self._calculation_variable_to_string(child, calculation, attribute_type)
|
|
||||||
elif calculation["type"] == "identifier":
|
|
||||||
if attribute_type in PROPERTY_ATTRIBUTE:
|
|
||||||
values = calculation["value"]
|
|
||||||
else:
|
|
||||||
values = _("the value of the identifier")
|
|
||||||
elif calculation["type"] == "information":
|
|
||||||
if "path" in calculation:
|
|
||||||
variable_path = self.doc_path(calculation["path"])
|
|
||||||
values = _('the value of the information "{0}" of the variable "{1}"').format(
|
|
||||||
calculation["information"], variable_path
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
values = _('the value of the global information "{0}"').format(calculation["information"])
|
|
||||||
else:
|
|
||||||
values = _("the value of the {0}").format(calculation["type"])
|
|
||||||
return values
|
|
||||||
|
|
||||||
def _calculation_jinja_to_string(self, child, calculation, attribute_type):
|
|
||||||
if calculation["value"] is not True:
|
|
||||||
values = calculation["value"]
|
|
||||||
else:
|
|
||||||
values = _("depends on a calculation")
|
|
||||||
if (
|
|
||||||
child.isoptiondescription()
|
|
||||||
or not child.isfollower()
|
|
||||||
or not child.index()
|
|
||||||
):
|
|
||||||
warning = _(
|
|
||||||
'"{0}" is a calculation for {1} but has no description in {2}'
|
|
||||||
).format(
|
|
||||||
attribute_type,
|
|
||||||
self.doc_path(child.path()),
|
|
||||||
display_xmlfiles(child.information.get("ymlfiles")),
|
|
||||||
)
|
|
||||||
warn(
|
|
||||||
warning,
|
|
||||||
RougailWarning,
|
|
||||||
)
|
|
||||||
return values
|
|
||||||
|
|
||||||
def _calculation_variable_to_string(self, child, calculation, attribute_type):
|
|
||||||
if attribute_type in PROPERTY_ATTRIBUTE:
|
|
||||||
func = self._calculation_variable_to_string_known_property
|
|
||||||
else:
|
|
||||||
func = self._calculation_variable_to_string_not_properties
|
|
||||||
return func(child, calculation, attribute_type)
|
|
||||||
|
|
||||||
def _calculation_variable_to_string_known_property(self, child, calculation, prop):
|
|
||||||
condition = calculation["value"]
|
|
||||||
variable_path = condition["path"]
|
|
||||||
values = []
|
|
||||||
if "{{ identifier }}" in calculation["ori_path"] or "{{ identifier }}" in variable_path:
|
|
||||||
variables = self.get_annotation_variable(variable_path, calculation["ori_path"])
|
|
||||||
else:
|
|
||||||
option = self.true_config.option(variable_path)
|
|
||||||
try:
|
|
||||||
is_inaccessible = self.is_inaccessible_user_data(option)
|
|
||||||
except AttributeError as err:
|
|
||||||
if err.code != "option-not-found":
|
|
||||||
raise err from err
|
|
||||||
is_inaccessible = True
|
|
||||||
if is_inaccessible:
|
|
||||||
variables = [[None, None, None]]
|
|
||||||
else:
|
|
||||||
description = self._convert_description(option.description(uncalculated=True), "description", its_a_path=False)
|
|
||||||
variables = [[variable_path, description, None]]
|
|
||||||
for cpath, description, identifiers in variables:
|
|
||||||
if not cpath:
|
|
||||||
# we cannot access to this variable, so try with permissive
|
|
||||||
if condition["type"] == "transitive":
|
|
||||||
value = None
|
|
||||||
else:
|
|
||||||
value = condition["value"]
|
|
||||||
option = self.true_config.forcepermissive.option(variable_path)
|
|
||||||
try:
|
|
||||||
variable_value = self._get_unmodified_default_value(option)
|
|
||||||
except PropertiesOptionError as err:
|
|
||||||
if calculation["propertyerror"] is True:
|
|
||||||
raise err from err
|
|
||||||
if calculation["propertyerror"] == "transitive":
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
except VariableCalculationDependencyError:
|
|
||||||
values.append(_("depends on an undocumented variable"))
|
|
||||||
continue
|
|
||||||
except AttributeError as err:
|
|
||||||
return calculation.get("default", False)
|
|
||||||
if condition["type"] == "transitive":
|
|
||||||
return True
|
|
||||||
if prop in HIDDEN_PROPERTIES:
|
|
||||||
condition_type = condition["condition"]
|
|
||||||
if (
|
|
||||||
condition_type == "when"
|
|
||||||
and value == variable_value
|
|
||||||
or condition_type == "when_not"
|
|
||||||
and value != variable_value
|
|
||||||
):
|
|
||||||
# always "prop"
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
if condition["type"] == "transitive":
|
|
||||||
submsg = _('is "{0}"').format(prop)
|
|
||||||
else:
|
|
||||||
condition_type = condition["condition"]
|
|
||||||
conditions = []
|
|
||||||
if not calculation["propertyerror"]:
|
|
||||||
conditions.append(_("is accessible"))
|
|
||||||
if calculation["optional"]:
|
|
||||||
conditions.append(_("is defined"))
|
|
||||||
value = condition["value"]
|
|
||||||
if not isinstance(value, str):
|
|
||||||
value = dump(value)
|
|
||||||
if condition_type == "when_not":
|
|
||||||
conditions.append(_(
|
|
||||||
'hasn\'t the value "{0}"'
|
|
||||||
).format(value))
|
|
||||||
else:
|
|
||||||
conditions.append(_(
|
|
||||||
'has the value "{0}"'
|
|
||||||
).format(value))
|
|
||||||
submsg = display_list(conditions, sort=False)
|
|
||||||
if calculation["propertyerror"] == "transitive":
|
|
||||||
submsg = display_list([_("is {0}").format(prop), submsg], separator="or", sort=False)
|
|
||||||
msg = _('when the variable "{{0}}" {0}').format(submsg)
|
|
||||||
path_obj = {
|
|
||||||
"path": self.doc_path(variable_path),
|
|
||||||
}
|
|
||||||
if identifiers:
|
|
||||||
path_obj["identifiers"] = identifiers
|
|
||||||
|
|
||||||
values.append({
|
|
||||||
"message": msg,
|
|
||||||
"path": path_obj,
|
|
||||||
"description": description,
|
|
||||||
})
|
|
||||||
if len(values) == 1:
|
|
||||||
return values[0]
|
|
||||||
return values
|
|
||||||
|
|
||||||
def _calculation_variable_to_string_not_properties(self, child, calculation, attribute_type):
|
|
||||||
if calculation["optional"]:
|
|
||||||
path = calculation["value"]["path"]
|
|
||||||
if "{{ identifier }}" in path:
|
|
||||||
if path not in self.dynamic_paths:
|
|
||||||
return None
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
self.true_config.forcepermissive.option(path).get()
|
|
||||||
except AttributeError:
|
|
||||||
return None
|
|
||||||
true_msg = _('the value of the variable "{0}" if it is defined')
|
|
||||||
else:
|
|
||||||
true_msg = _('the value of the variable "{0}"')
|
|
||||||
if "{{ identifier }}" in calculation["ori_path"]:
|
|
||||||
values = []
|
|
||||||
all_is_undocumented = False
|
|
||||||
for cpath, description, identifiers in self.get_annotation_variable(calculation["value"]["path"], calculation["ori_path"]):
|
|
||||||
if cpath:
|
|
||||||
all_is_undocumented = False
|
|
||||||
path_obj = {
|
|
||||||
"path": self.doc_path(cpath),
|
|
||||||
}
|
|
||||||
if identifiers:
|
|
||||||
path_obj["identifiers"] = identifiers
|
|
||||||
values.append({
|
|
||||||
"message": true_msg,
|
|
||||||
"path": path_obj,
|
|
||||||
"description": description,
|
|
||||||
})
|
|
||||||
else:
|
|
||||||
if all_is_undocumented is None:
|
|
||||||
all_is_undocumented = True
|
|
||||||
values.append(_("the value of an undocumented variable"))
|
|
||||||
if all_is_undocumented:
|
|
||||||
if len(values) > 1:
|
|
||||||
values = _("the values of undocumented variables")
|
|
||||||
else:
|
|
||||||
values = values[0]
|
|
||||||
else:
|
|
||||||
# FIXME A MUTUALISER AUSSI
|
|
||||||
variable_path = calculation["ori_path"]
|
|
||||||
variable = self.true_config.unrestraint.option(variable_path)
|
|
||||||
try:
|
|
||||||
isfollower = variable.isfollower()
|
|
||||||
except AttributeError:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
if not isfollower and self.is_inaccessible_user_data(variable):
|
|
||||||
try:
|
|
||||||
uncalculated = variable.value.get(uncalculated=True)
|
|
||||||
except PropertiesOptionError:
|
|
||||||
true_msg = None
|
|
||||||
else:
|
|
||||||
if uncalculated and not isinstance(
|
|
||||||
uncalculated, Calculation
|
|
||||||
):
|
|
||||||
if isinstance(uncalculated, list):
|
|
||||||
true_msg = {
|
|
||||||
"submessage": _(
|
|
||||||
"(from an undocumented variable)"
|
|
||||||
),
|
|
||||||
"values": uncalculated,
|
|
||||||
}
|
|
||||||
else:
|
|
||||||
if not isinstance(uncalculated, str):
|
|
||||||
uncalculated = dump(uncalculated)
|
|
||||||
true_msg = _(
|
|
||||||
"{0} (from an undocumented variable)"
|
|
||||||
).format(uncalculated)
|
|
||||||
else:
|
|
||||||
true_msg = _("depends on an undocumented variable")
|
|
||||||
if true_msg:
|
|
||||||
if isinstance(true_msg, dict):
|
|
||||||
values = true_msg
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
description = self._convert_description(self.true_config.option(calculation["ori_path"]).description(uncalculated=True), "description", its_a_path=False)
|
|
||||||
except AttributeError:
|
|
||||||
description = calculation["ori_path"]
|
|
||||||
values = {
|
|
||||||
"message": true_msg,
|
|
||||||
"path": {
|
|
||||||
"path": self.doc_path(calculation["ori_path"]),
|
|
||||||
},
|
|
||||||
"description": description,
|
|
||||||
}
|
|
||||||
else:
|
|
||||||
values = None
|
|
||||||
return values
|
|
||||||
|
|
||||||
def get_annotation_variable(self, current_path, ori_path):
|
|
||||||
if current_path == ori_path:
|
|
||||||
regexp = None
|
|
||||||
else:
|
|
||||||
regexp = compile(
|
|
||||||
"^"
|
|
||||||
+ ori_path.replace("{{ identifier }}", "(.*)")
|
|
||||||
+ "$"
|
|
||||||
)
|
|
||||||
information = self.dynamic_paths[current_path]
|
|
||||||
path = current_path
|
|
||||||
for identifiers in information["identifiers"]:
|
|
||||||
cpath = calc_path(path, identifiers=identifiers)
|
|
||||||
if regexp and not regexp.search(cpath):
|
|
||||||
continue
|
|
||||||
if self.is_inaccessible_user_data(self.true_config.option(cpath)):
|
|
||||||
yield None, None, None
|
|
||||||
else:
|
|
||||||
description = self._convert_description(self.true_config.option(path).description(uncalculated=True), "description", its_a_path=False)
|
|
||||||
if "{{ identifier }}" in path:
|
|
||||||
yield path, description, identifiers.copy()
|
|
||||||
else:
|
|
||||||
yield path, description, None
|
|
||||||
|
|
||||||
def _get_unmodified_default_value(self, child):
|
|
||||||
calculation = child.information.get(f"default_calculation", None)
|
|
||||||
if not calculation:
|
|
||||||
return child.value.get()
|
|
||||||
if calculation["type"] == "variable":
|
|
||||||
variable = self.true_config.forcepermissive.option(calculation["value"]["path"])
|
|
||||||
if variable and self.is_inaccessible_user_data(variable):
|
|
||||||
return self._get_unmodified_default_value(variable)
|
|
||||||
raise VariableCalculationDependencyError()
|
|
||||||
|
|
||||||
def doc_path(self, path):
|
|
||||||
if self.document_a_type:
|
|
||||||
if not '.' in path:
|
|
||||||
return None
|
|
||||||
return path.split('.', 1)[-1]
|
|
||||||
return path
|
|
||||||
|
|
|
||||||
|
|
@ -16,20 +16,23 @@ You should have received a copy of the GNU Lesser General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from typing import Optional
|
|
||||||
from ruamel.yaml import CommentedMap
|
from ruamel.yaml import CommentedMap
|
||||||
from ruamel.yaml.representer import RoundTripRepresenter
|
from ruamel.yaml.representer import RoundTripRepresenter
|
||||||
|
|
||||||
|
from tiramisu import Calculation, owners
|
||||||
from .utils import _, calc_path, dump
|
|
||||||
|
|
||||||
|
|
||||||
# XXX explicit null (see rougail-output-formatter
|
from .utils import _, dump, to_phrase
|
||||||
def represent_none(self, data):
|
|
||||||
|
|
||||||
|
# XXX explicit null (see rougail-output-formatter # pylint: disable=W0511
|
||||||
|
def represent_none(
|
||||||
|
self, data
|
||||||
|
): # pylint: disable=missing-function-docstring,unused-argument
|
||||||
return self.represent_scalar("tag:yaml.org,2002:null", "null")
|
return self.represent_scalar("tag:yaml.org,2002:null", "null")
|
||||||
|
|
||||||
|
|
||||||
def represent_str(self, data):
|
def represent_str(self, data): # pylint: disable=missing-function-docstring
|
||||||
if data == "":
|
if data == "":
|
||||||
return self.represent_scalar("tag:yaml.org,2002:null", "")
|
return self.represent_scalar("tag:yaml.org,2002:null", "")
|
||||||
return self.represent_scalar("tag:yaml.org,2002:str", data)
|
return self.represent_scalar("tag:yaml.org,2002:str", data)
|
||||||
|
|
@ -37,217 +40,201 @@ def represent_str(self, data):
|
||||||
|
|
||||||
RoundTripRepresenter.add_representer(type(None), represent_none)
|
RoundTripRepresenter.add_representer(type(None), represent_none)
|
||||||
RoundTripRepresenter.add_representer(str, represent_str)
|
RoundTripRepresenter.add_representer(str, represent_str)
|
||||||
# XXX
|
# XXX # pylint: disable=W0511
|
||||||
|
|
||||||
|
|
||||||
class Examples: # pylint: disable=no-member,too-few-public-methods
|
class Examples: # pylint: disable=no-member,too-few-public-methods
|
||||||
"""Build examples"""
|
"""Build examples"""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.examples = None
|
self.comment_examples = None
|
||||||
self.examples_mandatories = None
|
self.level = None
|
||||||
|
self.comment_examples_column = None
|
||||||
|
|
||||||
def gen_doc_examples(self):
|
def gen_doc_examples(self):
|
||||||
"""Return examples"""
|
"""Return examples"""
|
||||||
self.comment_examples = self.rougailconfig["doc.examples.comment"]
|
self.comment_examples = self.rougailconfig["doc.examples.comment"]
|
||||||
self.level = self.rougailconfig["doc.title_level"]
|
self.level = self.rougailconfig["doc.title_level"]
|
||||||
if self.comment_examples:
|
if self.comment_examples:
|
||||||
self.comment_examples_column = self.rougailconfig["doc.examples.comment_column"]
|
self.comment_examples_column = self.rougailconfig[
|
||||||
self._build_examples()
|
"doc.examples.comment_column"
|
||||||
return_string = ""
|
]
|
||||||
|
config = self.true_config.config.copy()
|
||||||
|
config.information.set("description_type", "description")
|
||||||
|
config.property.read_write()
|
||||||
|
self._set_mandatories(config)
|
||||||
datas = []
|
datas = []
|
||||||
if self.examples_mandatories:
|
for only_modified in [True, False]:
|
||||||
if self.document_a_type:
|
if not only_modified:
|
||||||
col = list(self.examples_mandatories)
|
self._set_examples(config)
|
||||||
if len(col) == 1:
|
results = CommentedMap()
|
||||||
examples_mandatories = self.examples_mandatories[col[0]]
|
true_results = results
|
||||||
|
if self.true_config == self.config:
|
||||||
|
root_config = config
|
||||||
else:
|
else:
|
||||||
examples_mandatories = self.examples_mandatories
|
root_config = config.option(self.config.path())
|
||||||
|
current_option = self.true_config
|
||||||
|
subpaths = self.config.path().split(".")
|
||||||
|
if not self.config.isoptiondescription():
|
||||||
|
subpaths = subpaths[:-1]
|
||||||
|
for subpath in subpaths:
|
||||||
|
current_option = current_option.option(subpath)
|
||||||
|
name = current_option.name()
|
||||||
|
results[name] = CommentedMap()
|
||||||
|
self._set_description(results, name, current_option)
|
||||||
|
results = results[name]
|
||||||
|
if root_config.isoptiondescription():
|
||||||
|
self._example_parse_family(
|
||||||
|
root_config.value.get(), results, only_modified
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
examples_mandatories = self.examples_mandatories
|
self._set_example_value(
|
||||||
datas.extend([
|
results, root_config, root_config.value.get(), only_modified
|
||||||
self.formatter.title(
|
)
|
||||||
_("Example with mandatory variables not filled in"), self.level
|
if results:
|
||||||
),
|
if only_modified:
|
||||||
self.formatter.yaml(dump(examples_mandatories)),
|
title = _("Example with mandatory variables not filled in")
|
||||||
|
else:
|
||||||
|
title = _("Example with all variables modifiable")
|
||||||
|
datas.extend(
|
||||||
|
[
|
||||||
|
self.formatter.title(title, self.level),
|
||||||
|
self.formatter.yaml(dump(true_results)),
|
||||||
self.formatter.end_family(self.level),
|
self.formatter.end_family(self.level),
|
||||||
])
|
]
|
||||||
if self.examples:
|
)
|
||||||
if self.document_a_type:
|
|
||||||
col = list(self.examples)
|
|
||||||
if len(col) == 1:
|
|
||||||
examples = self.examples[col[0]]
|
|
||||||
else:
|
|
||||||
examples = self.examples
|
|
||||||
else:
|
|
||||||
examples = self.examples
|
|
||||||
datas.extend([self.formatter.title(
|
|
||||||
_("Example with all variables modifiable"), self.level
|
|
||||||
),
|
|
||||||
self.formatter.yaml(dump(examples)),
|
|
||||||
self.formatter.end_family(self.level),
|
|
||||||
])
|
|
||||||
return self.formatter.compute(datas)
|
return self.formatter.compute(datas)
|
||||||
|
|
||||||
def _build_examples(self):
|
def _set_mandatories(self, config):
|
||||||
examples, examples_mandatories = self._parse_examples(
|
for calculated_too in [False, True]:
|
||||||
self.informations
|
for option in config.value.mandatory():
|
||||||
)
|
if not calculated_too:
|
||||||
self.examples = examples
|
uncalculated = option.value.default(uncalculated=True)
|
||||||
self.examples_mandatories = examples_mandatories
|
if isinstance(uncalculated, Calculation):
|
||||||
|
|
||||||
def _parse_examples(self, dico, dyn_parent: Optional[str] = None) -> tuple:
|
|
||||||
if self.comment_examples:
|
|
||||||
examples = CommentedMap()
|
|
||||||
examples_mandatories = CommentedMap()
|
|
||||||
else:
|
|
||||||
examples = {}
|
|
||||||
examples_mandatories = {}
|
|
||||||
for value in dico.values():
|
|
||||||
if value["type"] == "variable":
|
|
||||||
parse = self._parse_examples_variable
|
|
||||||
else:
|
|
||||||
parse = self._parse_examples_family
|
|
||||||
parse(
|
|
||||||
value, dyn_parent, examples, examples_mandatories
|
|
||||||
)
|
|
||||||
return examples, examples_mandatories
|
|
||||||
|
|
||||||
def _parse_examples_variable(
|
|
||||||
self,
|
|
||||||
variable,
|
|
||||||
dyn_parent: Optional[str],
|
|
||||||
examples: dict,
|
|
||||||
examples_mandatories: dict,
|
|
||||||
) -> None:
|
|
||||||
paths = []
|
|
||||||
ori_path = variable["path"]
|
|
||||||
if "identifiers" in variable:
|
|
||||||
for idx, identifiers in enumerate(variable["identifiers"]):
|
|
||||||
paths.append(calc_path(ori_path, identifiers=identifiers))
|
|
||||||
else:
|
|
||||||
paths.append(ori_path)
|
|
||||||
for idx, path in enumerate(paths):
|
|
||||||
path = calc_path(path)
|
|
||||||
if dyn_parent is not None and not path.startswith(dyn_parent):
|
|
||||||
continue
|
continue
|
||||||
if len(variable["names"]) == 1:
|
self._set_value_example(option, self._get_an_example(option))
|
||||||
name = variable["names"][0]
|
|
||||||
else:
|
|
||||||
name = variable["names"][idx]
|
|
||||||
value = variable["gen_examples"][idx]
|
|
||||||
examples[name] = value
|
|
||||||
if self.comment_examples and "description" in variable:
|
|
||||||
description = variable["description"]
|
|
||||||
if description.endswith('.'):
|
|
||||||
description = description[:-1]
|
|
||||||
examples.yaml_add_eol_comment(description, name, column=self.comment_examples_column)
|
|
||||||
if variable["mandatory_without_value"]:
|
|
||||||
examples_mandatories[name] = value
|
|
||||||
if self.comment_examples and "description" in variable:
|
|
||||||
description = variable["description"]
|
|
||||||
if description.endswith('.'):
|
|
||||||
description = description[:-1]
|
|
||||||
examples_mandatories.yaml_add_eol_comment(description, name, column=self.comment_examples_column)
|
|
||||||
break
|
|
||||||
|
|
||||||
def _parse_examples_family(
|
def _get_an_example(self, option):
|
||||||
self,
|
value = self._get_value_from_example(option)
|
||||||
family,
|
if value is None:
|
||||||
dyn_parent: Optional[str],
|
variable_type = option.information.get("type")
|
||||||
examples: dict,
|
if variable_type == "choice":
|
||||||
examples_mandatories: dict,
|
value = option.value.list()
|
||||||
) -> None:
|
if not self._is_multi(option) and value:
|
||||||
def _set_example(idx, identifiers):
|
if value[0] is not None:
|
||||||
path = calc_path(ori_path, identifiers=identifiers)
|
value = value[0]
|
||||||
if dyn_parent is not None and not path.startswith(dyn_parent):
|
elif len(value) > 1:
|
||||||
|
value = value[1]
|
||||||
|
else:
|
||||||
|
value = self.convert_option.get(option.information.get("type"), {}).get(
|
||||||
|
"example"
|
||||||
|
)
|
||||||
|
if value is None:
|
||||||
|
value = "example"
|
||||||
|
if self._is_multi(option):
|
||||||
|
value = [value]
|
||||||
|
if option.isfollower() and option.index() and variable_type == "string":
|
||||||
|
value += str(option.index())
|
||||||
|
return value
|
||||||
|
|
||||||
|
def _set_examples(self, config):
|
||||||
|
def _set_example(subconfig):
|
||||||
|
for option in subconfig:
|
||||||
|
if option.isoptiondescription():
|
||||||
|
_set_example(option)
|
||||||
|
else:
|
||||||
|
# force examples value + do not let empty value
|
||||||
|
examples = self._get_value_from_example(option)
|
||||||
|
if examples is None:
|
||||||
|
if self._is_multi(option):
|
||||||
|
if not option.value.get():
|
||||||
|
examples = self._get_an_example(option)
|
||||||
|
elif option.value.get() is None:
|
||||||
|
examples = self._get_an_example(option)
|
||||||
|
if examples is None:
|
||||||
|
continue
|
||||||
|
self._set_value_example(option, examples)
|
||||||
|
|
||||||
|
_set_example(config)
|
||||||
|
self._set_mandatories(config)
|
||||||
|
|
||||||
|
def _set_value_example(self, option, value):
|
||||||
|
if option.isleader():
|
||||||
|
ori_len = option.value.len()
|
||||||
|
current_len = len(value)
|
||||||
|
if ori_len > current_len:
|
||||||
|
for idx in reversed(range(current_len, ori_len)):
|
||||||
|
option.value.pop(idx)
|
||||||
|
option.value.set(value)
|
||||||
|
|
||||||
|
def _get_value_from_example(self, option):
|
||||||
|
examples = option.information.get("examples", None)
|
||||||
|
if examples is None:
|
||||||
|
return None
|
||||||
|
if self._is_multi(option):
|
||||||
|
examples = list(examples)
|
||||||
|
else:
|
||||||
|
examples = examples[0]
|
||||||
|
return examples
|
||||||
|
|
||||||
|
def _is_multi(self, option):
|
||||||
|
if option.isfollower():
|
||||||
|
return option.issubmulti()
|
||||||
|
return option.ismulti()
|
||||||
|
|
||||||
|
def _example_parse_family(self, config, results, only_modified):
|
||||||
|
for option, values in config.items():
|
||||||
|
if option.isoptiondescription():
|
||||||
|
if option.isleadership():
|
||||||
|
subresults = self._example_parse_leadership(values, only_modified)
|
||||||
|
if subresults:
|
||||||
|
name = option.name()
|
||||||
|
results[name] = subresults
|
||||||
|
self._set_description(results, name, option)
|
||||||
|
else:
|
||||||
|
subresults = CommentedMap()
|
||||||
|
self._example_parse_family(values, subresults, only_modified)
|
||||||
|
if subresults:
|
||||||
|
name = option.name()
|
||||||
|
results[name] = subresults
|
||||||
|
self._set_description(results, name, option)
|
||||||
|
else:
|
||||||
|
self._set_example_value(results, option, values, only_modified)
|
||||||
|
|
||||||
|
def _set_example_value(self, results, option, values, only_modified):
|
||||||
|
if self._is_valid_owner(option, only_modified):
|
||||||
|
name = option.name()
|
||||||
|
results[name] = values
|
||||||
|
self._set_description(results, name, option)
|
||||||
|
|
||||||
|
def _is_valid_owner(self, option, only_modified):
|
||||||
|
return (
|
||||||
|
option.type(only_self=True, translation=False) != "symlink"
|
||||||
|
and not only_modified
|
||||||
|
or (not option.owner.isdefault() and option.owner.get() != owners.forced)
|
||||||
|
)
|
||||||
|
|
||||||
|
def _example_parse_leadership(self, values, only_modified):
|
||||||
|
leadership_iter = iter(values.items())
|
||||||
|
leader, leader_values = next(leadership_iter)
|
||||||
|
if not self._is_valid_owner(leader, only_modified):
|
||||||
|
return None
|
||||||
|
leadership = [CommentedMap() for idx in range(len(leader_values))]
|
||||||
|
for idx, value in enumerate(leader_values):
|
||||||
|
self._set_example_value(leadership[idx], leader, value, only_modified)
|
||||||
|
for option, value in leadership_iter:
|
||||||
|
idx = option.index()
|
||||||
|
self._set_example_value(leadership[idx], option, value, only_modified)
|
||||||
|
return leadership
|
||||||
|
|
||||||
|
def _set_description(self, results, name, option):
|
||||||
|
if not self.comment_examples or option.information.get(
|
||||||
|
"forced_description", False
|
||||||
|
):
|
||||||
return
|
return
|
||||||
if len(family["informations"]["names"]) == 1:
|
description = to_phrase(option.description())
|
||||||
name = family["informations"]["names"][0]
|
if description.endswith("."):
|
||||||
else:
|
description = description[:-1]
|
||||||
name = family["informations"]["names"][idx]
|
results.yaml_add_eol_comment(
|
||||||
if family["type"] == "leadership":
|
description, name, column=self.comment_examples_column
|
||||||
func = self._parse_examples_leadership
|
|
||||||
else:
|
|
||||||
func = self._parse_examples
|
|
||||||
ret_e, ret_m = func(
|
|
||||||
family["children"],
|
|
||||||
path + "." if family["type"] == "dynamic" else dyn_parent,
|
|
||||||
)
|
)
|
||||||
if ret_m:
|
|
||||||
examples_mandatories[name] = ret_m
|
|
||||||
if self.comment_examples and "description" in family["informations"]:
|
|
||||||
description = family["informations"]["description"]
|
|
||||||
if description.endswith('.'):
|
|
||||||
description = description[:-1]
|
|
||||||
examples_mandatories.yaml_add_eol_comment(description, name, column=self.comment_examples_column)
|
|
||||||
if ret_e:
|
|
||||||
examples[name] = ret_e
|
|
||||||
if self.comment_examples and "description" in family["informations"]:
|
|
||||||
description = family["informations"]["description"]
|
|
||||||
if description.endswith('.'):
|
|
||||||
description = description[:-1]
|
|
||||||
examples.yaml_add_eol_comment(description, name, column=self.comment_examples_column)
|
|
||||||
|
|
||||||
ori_path = family["informations"]["path"]
|
|
||||||
if "identifiers" in family["informations"]:
|
|
||||||
for idx, identifiers in enumerate(family["informations"]["identifiers"]):
|
|
||||||
_set_example(idx, identifiers)
|
|
||||||
else:
|
|
||||||
_set_example(0, None)
|
|
||||||
|
|
||||||
def _parse_examples_leadership(
|
|
||||||
self, leadership, dyn_parent: Optional[str] = None
|
|
||||||
) -> tuple:
|
|
||||||
examples = []
|
|
||||||
examples_mandatories = []
|
|
||||||
leader = next(iter(leadership.values()))
|
|
||||||
paths = []
|
|
||||||
ori_path = leader["path"]
|
|
||||||
if "identifiers" in leader:
|
|
||||||
for idx, identifiers in enumerate(leader["identifiers"]):
|
|
||||||
paths.append(calc_path(ori_path, identifiers=identifiers))
|
|
||||||
else:
|
|
||||||
paths.append(ori_path)
|
|
||||||
for path_idx, path in enumerate(paths):
|
|
||||||
path = calc_path(path)
|
|
||||||
if dyn_parent is not None and not path.startswith(dyn_parent):
|
|
||||||
continue
|
|
||||||
for leader_idx in range(len(leader["gen_examples"][path_idx])):
|
|
||||||
if self.comment_examples:
|
|
||||||
followers = CommentedMap()
|
|
||||||
else:
|
|
||||||
followers = {}
|
|
||||||
for follower in leadership.values():
|
|
||||||
if len(follower["names"]) == 1:
|
|
||||||
name = follower["names"][0]
|
|
||||||
else:
|
|
||||||
name = follower["names"][path_idx]
|
|
||||||
followers[name] = follower["gen_examples"][path_idx][leader_idx]
|
|
||||||
if self.comment_examples and "description" in follower:
|
|
||||||
description = follower["description"]
|
|
||||||
if description.endswith('.'):
|
|
||||||
description = description[:-1]
|
|
||||||
followers.yaml_add_eol_comment(description, name, column=self.comment_examples_column)
|
|
||||||
examples.append(followers)
|
|
||||||
if leader["mandatory_without_value"]:
|
|
||||||
if self.comment_examples:
|
|
||||||
followers = CommentedMap()
|
|
||||||
else:
|
|
||||||
followers = {}
|
|
||||||
for follower in leadership.values():
|
|
||||||
if not follower["mandatory_without_value"]:
|
|
||||||
continue
|
|
||||||
if len(follower["names"]) == 1:
|
|
||||||
name = follower["names"][0]
|
|
||||||
else:
|
|
||||||
name = follower["names"][path_idx]
|
|
||||||
followers[name] = follower["gen_examples"][path_idx][leader_idx]
|
|
||||||
if self.comment_examples and "description" in follower:
|
|
||||||
description = follower["description"]
|
|
||||||
if description.endswith('.'):
|
|
||||||
description = description[:-1]
|
|
||||||
followers.yaml_add_eol_comment(description, name, column=self.comment_examples_column)
|
|
||||||
examples_mandatories.append(followers)
|
|
||||||
break
|
|
||||||
return examples, examples_mandatories
|
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -94,8 +94,8 @@ class Formatter(CommonFormatter):
|
||||||
self,
|
self,
|
||||||
choices: list,
|
choices: list,
|
||||||
*,
|
*,
|
||||||
inside_tabular: bool=True,
|
inside_tabular: bool = True,
|
||||||
type_: str="variable",
|
type_: str = "variable",
|
||||||
with_enter: bool = True,
|
with_enter: bool = True,
|
||||||
) -> str:
|
) -> str:
|
||||||
"""Display a liste of element"""
|
"""Display a liste of element"""
|
||||||
|
|
|
||||||
|
|
@ -56,10 +56,12 @@ class Formatter(CommonFormatter):
|
||||||
|
|
||||||
def compute(self, dico):
|
def compute(self, dico):
|
||||||
if self.rougailconfig["doc.true_color"]:
|
if self.rougailconfig["doc.true_color"]:
|
||||||
force_terminal = 'xterm-256color'
|
force_terminal = "xterm-256color"
|
||||||
else:
|
else:
|
||||||
force_terminal = None
|
force_terminal = None
|
||||||
console = self.rich_console(theme=self.custom_theme, force_terminal=force_terminal)
|
console = self.rich_console(
|
||||||
|
theme=self.custom_theme, force_terminal=force_terminal
|
||||||
|
)
|
||||||
with console.capture() as capture:
|
with console.capture() as capture:
|
||||||
for data in dico:
|
for data in dico:
|
||||||
console.print(data)
|
console.print(data)
|
||||||
|
|
@ -120,8 +122,8 @@ class Formatter(CommonFormatter):
|
||||||
self,
|
self,
|
||||||
choices: list,
|
choices: list,
|
||||||
*,
|
*,
|
||||||
inside_tabular: bool=True,
|
inside_tabular: bool = True,
|
||||||
type_: str="variable",
|
type_: str = "variable",
|
||||||
with_enter: bool = True,
|
with_enter: bool = True,
|
||||||
) -> str:
|
) -> str:
|
||||||
"""Display a liste of element"""
|
"""Display a liste of element"""
|
||||||
|
|
@ -164,7 +166,7 @@ class Formatter(CommonFormatter):
|
||||||
|
|
||||||
def yaml(self, _dump):
|
def yaml(self, _dump):
|
||||||
"""Dump yaml part of documentation"""
|
"""Dump yaml part of documentation"""
|
||||||
return self.rich_syntaxt(f'---\n{_dump}', 'yaml')
|
return self.rich_syntaxt(f"---\n{_dump}", "yaml")
|
||||||
|
|
||||||
def link(
|
def link(
|
||||||
self,
|
self,
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ from ..i18n import _
|
||||||
|
|
||||||
def to_id(path):
|
def to_id(path):
|
||||||
# https://www.w3.org/TR/html4/types.html#type-name
|
# https://www.w3.org/TR/html4/types.html#type-name
|
||||||
return ''.join(e if e in ["-", "_", ":", "."] or e.isalnum() else ":" for e in path )
|
return "".join(e if e in ["-", "_", ":", "."] or e.isalnum() else ":" for e in path)
|
||||||
|
|
||||||
|
|
||||||
class Formatter(CommonFormatter):
|
class Formatter(CommonFormatter):
|
||||||
|
|
@ -55,7 +55,9 @@ class Formatter(CommonFormatter):
|
||||||
lst: List[str],
|
lst: List[str],
|
||||||
) -> str:
|
) -> str:
|
||||||
"""Display line in tabular from a list"""
|
"""Display line in tabular from a list"""
|
||||||
return self.enter_tabular.join([l.replace("\n", self.enter_tabular) for l in lst])
|
return self.enter_tabular.join(
|
||||||
|
[l.replace("\n", self.enter_tabular) for l in lst]
|
||||||
|
)
|
||||||
|
|
||||||
def bold(
|
def bold(
|
||||||
self,
|
self,
|
||||||
|
|
@ -96,12 +98,12 @@ class Formatter(CommonFormatter):
|
||||||
self,
|
self,
|
||||||
choices: list,
|
choices: list,
|
||||||
*,
|
*,
|
||||||
inside_tabular: bool=True,
|
inside_tabular: bool = True,
|
||||||
type_: str="variable",
|
type_: str = "variable",
|
||||||
with_enter: bool = True,
|
with_enter: bool = True,
|
||||||
):
|
):
|
||||||
"""Display a liste of element"""
|
"""Display a liste of element"""
|
||||||
if type_ == 'variable':
|
if type_ == "variable":
|
||||||
if inside_tabular:
|
if inside_tabular:
|
||||||
if with_enter:
|
if with_enter:
|
||||||
char = first_char = f"{self.enter_tabular}• "
|
char = first_char = f"{self.enter_tabular}• "
|
||||||
|
|
@ -149,7 +151,8 @@ class Formatter(CommonFormatter):
|
||||||
"""Dump yaml part of documentation"""
|
"""Dump yaml part of documentation"""
|
||||||
return f"```yaml\n---\n{_dump}\n```\n"
|
return f"```yaml\n---\n{_dump}\n```\n"
|
||||||
|
|
||||||
def link_variable(self,
|
def link_variable(
|
||||||
|
self,
|
||||||
path: str,
|
path: str,
|
||||||
true_path: str,
|
true_path: str,
|
||||||
description: str,
|
description: str,
|
||||||
|
|
@ -157,12 +160,13 @@ class Formatter(CommonFormatter):
|
||||||
) -> str:
|
) -> str:
|
||||||
name = to_id(true_path)
|
name = to_id(true_path)
|
||||||
if filename:
|
if filename:
|
||||||
link = f'{filename}#{name}'
|
link = f"{filename}#{name}"
|
||||||
else:
|
else:
|
||||||
link = f'#{name}'
|
link = f"#{name}"
|
||||||
return f"[{description}]({link})"
|
return f"[{description}]({link})"
|
||||||
|
|
||||||
def anchor(self,
|
def anchor(
|
||||||
|
self,
|
||||||
path: str,
|
path: str,
|
||||||
true_path: str,
|
true_path: str,
|
||||||
) -> str:
|
) -> str:
|
||||||
|
|
@ -201,6 +205,8 @@ class Formatter(CommonFormatter):
|
||||||
|
|
||||||
def family_informations_ends_line(self) -> str:
|
def family_informations_ends_line(self) -> str:
|
||||||
return "\\\n"
|
return "\\\n"
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# def family_to_string(self, *args, **kwargs) -> List[str]:
|
# def family_to_string(self, *args, **kwargs) -> List[str]:
|
||||||
# lst = super().family_to_string(*args, **kwargs)
|
# lst = super().family_to_string(*args, **kwargs)
|
||||||
|
|
|
||||||
|
|
@ -93,8 +93,8 @@ class Formatter(CommonFormatter):
|
||||||
self,
|
self,
|
||||||
choices: list,
|
choices: list,
|
||||||
*,
|
*,
|
||||||
inside_tabular: bool=True,
|
inside_tabular: bool = True,
|
||||||
type_: str="variable",
|
type_: str = "variable",
|
||||||
with_enter: bool = True,
|
with_enter: bool = True,
|
||||||
) -> str:
|
) -> str:
|
||||||
"""Display a liste of element"""
|
"""Display a liste of element"""
|
||||||
|
|
|
||||||
|
|
@ -31,9 +31,9 @@ class Formatter:
|
||||||
|
|
||||||
def run(self, informations: dict, *args) -> str: # pylint: disable=unused-argument
|
def run(self, informations: dict, *args) -> str: # pylint: disable=unused-argument
|
||||||
"""Transform to string"""
|
"""Transform to string"""
|
||||||
# if root:
|
# if root:
|
||||||
# current = informations
|
# current = informations
|
||||||
# for path in root.split('.'):
|
# for path in root.split('.'):
|
||||||
# current = current[path]["children"]
|
# current = current[path]["children"]
|
||||||
# informations = current
|
# informations = current
|
||||||
return dumps(informations, ensure_ascii=False, indent=2)
|
return dumps(informations, ensure_ascii=False, indent=2)
|
||||||
|
|
|
||||||
|
|
@ -33,20 +33,33 @@ class Tabular(FourTabular):
|
||||||
|
|
||||||
def _add(self) -> tuple:
|
def _add(self) -> tuple:
|
||||||
first_column = self.add_first_column()
|
first_column = self.add_first_column()
|
||||||
second_column = self.get_column(self.description, self.help_, self.validators, self.choices, self.examples, self.tags)
|
second_column = self.get_column(
|
||||||
|
self.description,
|
||||||
|
self.help_,
|
||||||
|
self.validators,
|
||||||
|
self.choices,
|
||||||
|
self.examples,
|
||||||
|
self.tags,
|
||||||
|
)
|
||||||
if second_column:
|
if second_column:
|
||||||
self.second_column = True
|
self.second_column = True
|
||||||
third_column = self.get_column(self.default)
|
third_column = self.get_column(self.default)
|
||||||
if third_column:
|
if third_column:
|
||||||
self.third_column = True
|
self.third_column = True
|
||||||
types = self.formatter.property_to_string(
|
types = self.formatter.property_to_string(
|
||||||
self.informations, self.calculated_properties, self.modified_attributes, contents=["type"],
|
self.informations,
|
||||||
|
self.calculated_properties,
|
||||||
|
self.modified_attributes,
|
||||||
|
contents=["type"],
|
||||||
)
|
)
|
||||||
four_column = self.get_column(types)
|
four_column = self.get_column(types)
|
||||||
if four_column:
|
if four_column:
|
||||||
self.four_column = True
|
self.four_column = True
|
||||||
mode = self.formatter.property_to_string(
|
mode = self.formatter.property_to_string(
|
||||||
self.informations, self.calculated_properties, self.modified_attributes, contents=["mode", "access_control"],
|
self.informations,
|
||||||
|
self.calculated_properties,
|
||||||
|
self.modified_attributes,
|
||||||
|
contents=["mode", "access_control"],
|
||||||
)
|
)
|
||||||
five_column = self.get_column(mode, *self.calculated_properties)
|
five_column = self.get_column(mode, *self.calculated_properties)
|
||||||
if five_column:
|
if five_column:
|
||||||
|
|
@ -74,5 +87,8 @@ class Tabular(FourTabular):
|
||||||
|
|
||||||
def set_properties(self):
|
def set_properties(self):
|
||||||
self.properties = self.formatter.property_to_string(
|
self.properties = self.formatter.property_to_string(
|
||||||
self.informations, self.calculated_properties, self.modified_attributes, contents=["properties", "validator"],
|
self.informations,
|
||||||
|
self.calculated_properties,
|
||||||
|
self.modified_attributes,
|
||||||
|
contents=["properties", "validator"],
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -33,14 +33,25 @@ class Tabular(ThreeTabular):
|
||||||
|
|
||||||
def _add(self) -> tuple:
|
def _add(self) -> tuple:
|
||||||
first_column = self.add_first_column()
|
first_column = self.add_first_column()
|
||||||
second_column = self.get_column(self.description, self.help_, self.validators, self.choices, self.examples, self.tags, *self.calculated_properties)
|
second_column = self.get_column(
|
||||||
|
self.description,
|
||||||
|
self.help_,
|
||||||
|
self.validators,
|
||||||
|
self.choices,
|
||||||
|
self.examples,
|
||||||
|
self.tags,
|
||||||
|
*self.calculated_properties,
|
||||||
|
)
|
||||||
if second_column:
|
if second_column:
|
||||||
self.second_column = True
|
self.second_column = True
|
||||||
third_column = self.get_column(self.default)
|
third_column = self.get_column(self.default)
|
||||||
if third_column:
|
if third_column:
|
||||||
self.third_column = True
|
self.third_column = True
|
||||||
types = self.formatter.property_to_string(
|
types = self.formatter.property_to_string(
|
||||||
self.informations, self.calculated_properties, self.modified_attributes, contents="type",
|
self.informations,
|
||||||
|
self.calculated_properties,
|
||||||
|
self.modified_attributes,
|
||||||
|
contents="type",
|
||||||
)
|
)
|
||||||
four_column = self.get_column(types)
|
four_column = self.get_column(types)
|
||||||
if four_column:
|
if four_column:
|
||||||
|
|
@ -66,5 +77,8 @@ class Tabular(ThreeTabular):
|
||||||
|
|
||||||
def set_properties(self):
|
def set_properties(self):
|
||||||
self.properties = self.formatter.property_to_string(
|
self.properties = self.formatter.property_to_string(
|
||||||
self.informations, self.calculated_properties, self.modified_attributes, contents=["properties", "mode", "access_control", "validator"],
|
self.informations,
|
||||||
|
self.calculated_properties,
|
||||||
|
self.modified_attributes,
|
||||||
|
contents=["properties", "mode", "access_control", "validator"],
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -33,31 +33,49 @@ class Tabular(FiveTabular):
|
||||||
|
|
||||||
def _add(self) -> tuple:
|
def _add(self) -> tuple:
|
||||||
first_column = self.add_first_column()
|
first_column = self.add_first_column()
|
||||||
second_column = self.get_column(self.description, self.help_, self.examples, self.tags)
|
second_column = self.get_column(
|
||||||
|
self.description, self.help_, self.examples, self.tags
|
||||||
|
)
|
||||||
if second_column:
|
if second_column:
|
||||||
self.second_column = True
|
self.second_column = True
|
||||||
third_column = self.get_column(self.default)
|
third_column = self.get_column(self.default)
|
||||||
if third_column:
|
if third_column:
|
||||||
self.third_column = True
|
self.third_column = True
|
||||||
types = self.formatter.property_to_string(
|
types = self.formatter.property_to_string(
|
||||||
self.informations, self.calculated_properties, self.modified_attributes, contents=["type"],
|
self.informations,
|
||||||
|
self.calculated_properties,
|
||||||
|
self.modified_attributes,
|
||||||
|
contents=["type"],
|
||||||
)
|
)
|
||||||
four_column = self.get_column(types)
|
four_column = self.get_column(types)
|
||||||
if four_column:
|
if four_column:
|
||||||
self.four_column = True
|
self.four_column = True
|
||||||
mode = self.formatter.property_to_string(
|
mode = self.formatter.property_to_string(
|
||||||
self.informations, self.calculated_properties, self.modified_attributes, contents=["mode", "access_control"],
|
self.informations,
|
||||||
|
self.calculated_properties,
|
||||||
|
self.modified_attributes,
|
||||||
|
contents=["mode", "access_control"],
|
||||||
)
|
)
|
||||||
five_column = self.get_column(mode, *self.calculated_properties)
|
five_column = self.get_column(mode, *self.calculated_properties)
|
||||||
if five_column:
|
if five_column:
|
||||||
self.five_column = True
|
self.five_column = True
|
||||||
validators = self.formatter.property_to_string(
|
validators = self.formatter.property_to_string(
|
||||||
self.informations, self.calculated_properties, self.modified_attributes, contents=["validator"],
|
self.informations,
|
||||||
|
self.calculated_properties,
|
||||||
|
self.modified_attributes,
|
||||||
|
contents=["validator"],
|
||||||
)
|
)
|
||||||
six_column = self.get_column(validators, self.validators, self.choices)
|
six_column = self.get_column(validators, self.validators, self.choices)
|
||||||
if six_column:
|
if six_column:
|
||||||
self.six_column = True
|
self.six_column = True
|
||||||
return first_column, second_column, third_column, four_column, five_column, six_column
|
return (
|
||||||
|
first_column,
|
||||||
|
second_column,
|
||||||
|
third_column,
|
||||||
|
four_column,
|
||||||
|
five_column,
|
||||||
|
six_column,
|
||||||
|
)
|
||||||
|
|
||||||
def headers(self) -> tuple:
|
def headers(self) -> tuple:
|
||||||
header = super().headers()
|
header = super().headers()
|
||||||
|
|
@ -82,10 +100,18 @@ class Tabular(FiveTabular):
|
||||||
|
|
||||||
def set_properties(self):
|
def set_properties(self):
|
||||||
self.properties = self.formatter.property_to_string(
|
self.properties = self.formatter.property_to_string(
|
||||||
self.informations, self.calculated_properties, self.modified_attributes, contents=["properties"],
|
self.informations,
|
||||||
|
self.calculated_properties,
|
||||||
|
self.modified_attributes,
|
||||||
|
contents=["properties"],
|
||||||
)
|
)
|
||||||
|
|
||||||
def set_validators(self):
|
def set_validators(self):
|
||||||
self.validators = self.formatter.convert_section_to_string(
|
self.validators = self.formatter.convert_section_to_string(
|
||||||
"validators", self.informations, self.modified_attributes, multi=True, section_name=False, with_to_phrase=True,
|
"validators",
|
||||||
|
self.informations,
|
||||||
|
self.modified_attributes,
|
||||||
|
multi=True,
|
||||||
|
section_name=False,
|
||||||
|
with_to_phrase=True,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,15 @@ class Tabular(TwoTabular):
|
||||||
|
|
||||||
def _add(self) -> tuple:
|
def _add(self) -> tuple:
|
||||||
first_column = self.add_first_column()
|
first_column = self.add_first_column()
|
||||||
second_column = self.get_column(self.description, self.help_, self.validators, self.choices, self.examples, self.tags, *self.calculated_properties)
|
second_column = self.get_column(
|
||||||
|
self.description,
|
||||||
|
self.help_,
|
||||||
|
self.validators,
|
||||||
|
self.choices,
|
||||||
|
self.examples,
|
||||||
|
self.tags,
|
||||||
|
*self.calculated_properties,
|
||||||
|
)
|
||||||
if second_column:
|
if second_column:
|
||||||
self.second_column = True
|
self.second_column = True
|
||||||
third_column = self.get_column(self.default)
|
third_column = self.get_column(self.default)
|
||||||
|
|
@ -58,12 +66,18 @@ class Tabular(TwoTabular):
|
||||||
def set_default(self):
|
def set_default(self):
|
||||||
if "default" in self.informations:
|
if "default" in self.informations:
|
||||||
self.default = self.formatter.convert_section_to_string(
|
self.default = self.formatter.convert_section_to_string(
|
||||||
"default", self.informations, self.modified_attributes, multi=self.multi, section_name=False
|
"default",
|
||||||
|
self.informations,
|
||||||
|
self.modified_attributes,
|
||||||
|
multi=self.multi,
|
||||||
|
section_name=False,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
self.default = None
|
self.default = None
|
||||||
|
|
||||||
def set_choices(self):
|
def set_choices(self):
|
||||||
self.default_is_already_set, self.choices = self.formatter.convert_choices_to_string(
|
self.default_is_already_set, self.choices = (
|
||||||
|
self.formatter.convert_choices_to_string(
|
||||||
self.informations, self.modified_attributes, with_default=False
|
self.informations, self.modified_attributes, with_default=False
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
|
|
||||||
|
|
@ -33,13 +33,24 @@ class Tabular(CommonTabular):
|
||||||
def _add(self) -> tuple:
|
def _add(self) -> tuple:
|
||||||
first_column = self.add_first_column()
|
first_column = self.add_first_column()
|
||||||
default = self.default if not self.default_is_already_set else None
|
default = self.default if not self.default_is_already_set else None
|
||||||
second_column = self.get_column(self.description, self.help_, self.validators, self.choices, default, self.examples, self.tags, *self.calculated_properties)
|
second_column = self.get_column(
|
||||||
|
self.description,
|
||||||
|
self.help_,
|
||||||
|
self.validators,
|
||||||
|
self.choices,
|
||||||
|
default,
|
||||||
|
self.examples,
|
||||||
|
self.tags,
|
||||||
|
*self.calculated_properties,
|
||||||
|
)
|
||||||
if second_column:
|
if second_column:
|
||||||
self.second_column = True
|
self.second_column = True
|
||||||
return first_column, second_column
|
return first_column, second_column
|
||||||
|
|
||||||
def add_first_column(self) -> str:
|
def add_first_column(self) -> str:
|
||||||
return self.get_column(self.paths, self.properties, self.commandlines, self.environments)
|
return self.get_column(
|
||||||
|
self.paths, self.properties, self.commandlines, self.environments
|
||||||
|
)
|
||||||
|
|
||||||
def headers(self) -> tuple:
|
def headers(self) -> tuple:
|
||||||
headers = [_("Variable")]
|
headers = [_("Variable")]
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ from tabulate import tabulate
|
||||||
from rougail.tiramisu import normalize_family
|
from rougail.tiramisu import normalize_family
|
||||||
from tiramisu import undefined
|
from tiramisu import undefined
|
||||||
from tiramisu.error import PropertiesOptionError, display_list
|
from tiramisu.error import PropertiesOptionError, display_list
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from tiramisu_cmdline_parser.api import gen_argument_name
|
from tiramisu_cmdline_parser.api import gen_argument_name
|
||||||
except:
|
except:
|
||||||
|
|
@ -86,7 +87,12 @@ class CommonTabular:
|
||||||
self.clear()
|
self.clear()
|
||||||
return columns
|
return columns
|
||||||
|
|
||||||
def add(self, informations: dict, modified_attributes: dict, force_identifiers: Optional[str]) -> tuple:
|
def add(
|
||||||
|
self,
|
||||||
|
informations: dict,
|
||||||
|
modified_attributes: dict,
|
||||||
|
force_identifiers: Optional[str],
|
||||||
|
) -> tuple:
|
||||||
self.informations = informations
|
self.informations = informations
|
||||||
self.modified_attributes = modified_attributes
|
self.modified_attributes = modified_attributes
|
||||||
self.force_identifiers = force_identifiers
|
self.force_identifiers = force_identifiers
|
||||||
|
|
@ -107,16 +113,23 @@ class CommonTabular:
|
||||||
def set_description(self):
|
def set_description(self):
|
||||||
if "description" in self.informations:
|
if "description" in self.informations:
|
||||||
self.description = self.formatter.get_description(
|
self.description = self.formatter.get_description(
|
||||||
"variable", self.informations, self.modified_attributes, self.force_identifiers,
|
"variable",
|
||||||
|
self.informations,
|
||||||
|
self.modified_attributes,
|
||||||
|
self.force_identifiers,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
self.description = None
|
self.description = None
|
||||||
self.help_ = self.formatter.convert_list_to_string("help", self.informations, self.modified_attributes)
|
self.help_ = self.formatter.convert_list_to_string(
|
||||||
|
"help", self.informations, self.modified_attributes
|
||||||
|
)
|
||||||
|
|
||||||
def set_choices(self):
|
def set_choices(self):
|
||||||
self.default_is_already_set, self.choices = self.formatter.convert_choices_to_string(
|
self.default_is_already_set, self.choices = (
|
||||||
|
self.formatter.convert_choices_to_string(
|
||||||
self.informations, self.modified_attributes
|
self.informations, self.modified_attributes
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
|
||||||
def set_type(self):
|
def set_type(self):
|
||||||
self.multi = self.informations.get("multiple", True)
|
self.multi = self.informations.get("multiple", True)
|
||||||
|
|
@ -136,33 +149,80 @@ class CommonTabular:
|
||||||
)
|
)
|
||||||
|
|
||||||
def set_paths(self):
|
def set_paths(self):
|
||||||
self.paths = self.formatter.join(self.formatter.display_paths(self.informations, self.modified_attributes, self.force_identifiers, is_variable=True))
|
self.paths = self.formatter.join(
|
||||||
|
self.formatter.display_paths(
|
||||||
|
self.informations,
|
||||||
|
self.modified_attributes,
|
||||||
|
self.force_identifiers,
|
||||||
|
is_variable=True,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
def set_commandline(self):
|
def set_commandline(self):
|
||||||
if self.formatter.with_commandline and not self.informations.get('not_for_commandline', False):
|
if self.formatter.with_commandline and not self.informations.get(
|
||||||
commandlines = self.formatter.display_paths(self.informations, self.modified_attributes, self.force_identifiers, is_variable=True, is_bold=False, variable_prefix="--", with_anchor=False)
|
"not_for_commandline", False
|
||||||
if self.type == 'boolean':
|
):
|
||||||
for path in self.formatter.display_paths(self.informations, self.modified_attributes, self.force_identifiers, is_variable=True, is_bold=False, is_upper=False, with_anchor=False, variable_prefix="--"):
|
commandlines = self.formatter.display_paths(
|
||||||
commandlines.append("--" + gen_argument_name(path[2:], False, True, False))
|
self.informations,
|
||||||
|
self.modified_attributes,
|
||||||
|
self.force_identifiers,
|
||||||
|
is_variable=True,
|
||||||
|
is_bold=False,
|
||||||
|
variable_prefix="--",
|
||||||
|
with_anchor=False,
|
||||||
|
)
|
||||||
|
if self.type == "boolean":
|
||||||
|
for path in self.formatter.display_paths(
|
||||||
|
self.informations,
|
||||||
|
self.modified_attributes,
|
||||||
|
self.force_identifiers,
|
||||||
|
is_variable=True,
|
||||||
|
is_bold=False,
|
||||||
|
is_upper=False,
|
||||||
|
with_anchor=False,
|
||||||
|
variable_prefix="--",
|
||||||
|
):
|
||||||
|
commandlines.append(
|
||||||
|
"--" + gen_argument_name(path[2:], False, True, False)
|
||||||
|
)
|
||||||
if "alternative_name" in self.informations:
|
if "alternative_name" in self.informations:
|
||||||
alternative_name = self.informations["alternative_name"]
|
alternative_name = self.informations["alternative_name"]
|
||||||
commandlines[0] = f"-{alternative_name}, {commandlines[0]}"
|
commandlines[0] = f"-{alternative_name}, {commandlines[0]}"
|
||||||
if self.type == 'boolean':
|
if self.type == "boolean":
|
||||||
commandlines[1] = "-" + gen_argument_name(alternative_name, True, True, False) + f", {commandlines[1]}"
|
commandlines[1] = (
|
||||||
self.commandlines = self.formatter.section(_("Command line"), commandlines, force_enter=True)
|
"-"
|
||||||
|
+ gen_argument_name(alternative_name, True, True, False)
|
||||||
|
+ f", {commandlines[1]}"
|
||||||
|
)
|
||||||
|
self.commandlines = self.formatter.section(
|
||||||
|
_("Command line"), commandlines, force_enter=True
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
self.commandlines = None
|
self.commandlines = None
|
||||||
|
|
||||||
def set_environment(self):
|
def set_environment(self):
|
||||||
if self.formatter.with_environment:
|
if self.formatter.with_environment:
|
||||||
environments = self.formatter.display_paths(self.informations, self.modified_attributes, self.force_identifiers, is_variable=True, is_bold=False, is_upper=True, variable_prefix=self.formatter.prefix, with_anchor=False)
|
environments = self.formatter.display_paths(
|
||||||
self.environments = self.formatter.section(_("Environment variable"), environments)
|
self.informations,
|
||||||
|
self.modified_attributes,
|
||||||
|
self.force_identifiers,
|
||||||
|
is_variable=True,
|
||||||
|
is_bold=False,
|
||||||
|
is_upper=True,
|
||||||
|
variable_prefix=self.formatter.prefix,
|
||||||
|
with_anchor=False,
|
||||||
|
)
|
||||||
|
self.environments = self.formatter.section(
|
||||||
|
_("Environment variable"), environments
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
self.environments = None
|
self.environments = None
|
||||||
|
|
||||||
def set_properties(self):
|
def set_properties(self):
|
||||||
self.properties = self.formatter.property_to_string(
|
self.properties = self.formatter.property_to_string(
|
||||||
self.informations, self.calculated_properties, self.modified_attributes,
|
self.informations,
|
||||||
|
self.calculated_properties,
|
||||||
|
self.modified_attributes,
|
||||||
)
|
)
|
||||||
|
|
||||||
def set_validators(self):
|
def set_validators(self):
|
||||||
|
|
@ -194,9 +254,7 @@ class CommonFormatter:
|
||||||
self.rougailconfig = rougailconfig
|
self.rougailconfig = rougailconfig
|
||||||
self.support_namespace = support_namespace
|
self.support_namespace = support_namespace
|
||||||
|
|
||||||
def run(
|
def run(self, informations: dict, *, dico_is_already_treated=False) -> str:
|
||||||
self, informations: dict, *, dico_is_already_treated=False
|
|
||||||
) -> str:
|
|
||||||
"""Transform to string"""
|
"""Transform to string"""
|
||||||
if informations:
|
if informations:
|
||||||
level = self.rougailconfig["doc.title_level"]
|
level = self.rougailconfig["doc.title_level"]
|
||||||
|
|
@ -208,12 +266,14 @@ class CommonFormatter:
|
||||||
self.with_commandline = self.rougailconfig["doc.tabulars.with_commandline"]
|
self.with_commandline = self.rougailconfig["doc.tabulars.with_commandline"]
|
||||||
self.with_environment = self.rougailconfig["doc.tabulars.with_environment"]
|
self.with_environment = self.rougailconfig["doc.tabulars.with_environment"]
|
||||||
if self.with_environment and not gen_argument_name:
|
if self.with_environment and not gen_argument_name:
|
||||||
raise Exception('please install tiramisu_cmdline_parser')
|
raise Exception("please install tiramisu_cmdline_parser")
|
||||||
if not self.rougailconfig["main_namespace"] and self.with_environment:
|
if not self.rougailconfig["main_namespace"] and self.with_environment:
|
||||||
if self.support_namespace:
|
if self.support_namespace:
|
||||||
self.prefix = ""
|
self.prefix = ""
|
||||||
else:
|
else:
|
||||||
self.prefix = self.rougailconfig["doc.tabulars.environment_prefix"] + "_"
|
self.prefix = (
|
||||||
|
self.rougailconfig["doc.tabulars.environment_prefix"] + "_"
|
||||||
|
)
|
||||||
self.with_family = not self.rougailconfig["doc.tabulars.without_family"]
|
self.with_family = not self.rougailconfig["doc.tabulars.without_family"]
|
||||||
self.other_root_filenames = None
|
self.other_root_filenames = None
|
||||||
tabular_template = self.rougailconfig["doc.tabular_template"]
|
tabular_template = self.rougailconfig["doc.tabular_template"]
|
||||||
|
|
@ -252,14 +312,16 @@ class CommonFormatter:
|
||||||
"""Set a text to underline"""
|
"""Set a text to underline"""
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
def anchor(self,
|
def anchor(
|
||||||
|
self,
|
||||||
path: str,
|
path: str,
|
||||||
true_path: str,
|
true_path: str,
|
||||||
) -> str:
|
) -> str:
|
||||||
"""Set a text to a link anchor"""
|
"""Set a text to a link anchor"""
|
||||||
return path
|
return path
|
||||||
|
|
||||||
def link_variable(self,
|
def link_variable(
|
||||||
|
self,
|
||||||
path: str,
|
path: str,
|
||||||
true_path: str,
|
true_path: str,
|
||||||
description: str,
|
description: str,
|
||||||
|
|
@ -279,8 +341,8 @@ class CommonFormatter:
|
||||||
self,
|
self,
|
||||||
choices: list,
|
choices: list,
|
||||||
*,
|
*,
|
||||||
inside_tabular: bool=True,
|
inside_tabular: bool = True,
|
||||||
type_: str="variable",
|
type_: str = "variable",
|
||||||
with_enter: bool = False,
|
with_enter: bool = False,
|
||||||
) -> str:
|
) -> str:
|
||||||
"""Display a liste of element"""
|
"""Display a liste of element"""
|
||||||
|
|
@ -320,16 +382,18 @@ class CommonFormatter:
|
||||||
force_identifiers: Optional[str],
|
force_identifiers: Optional[str],
|
||||||
*,
|
*,
|
||||||
is_variable=False,
|
is_variable=False,
|
||||||
variable_prefix: str="",
|
variable_prefix: str = "",
|
||||||
is_bold: bool=True,
|
is_bold: bool = True,
|
||||||
is_upper: bool=False,
|
is_upper: bool = False,
|
||||||
with_anchor: bool=True,
|
with_anchor: bool = True,
|
||||||
) -> str:
|
) -> str:
|
||||||
if with_anchor:
|
if with_anchor:
|
||||||
anchor = self.anchor
|
anchor = self.anchor
|
||||||
else:
|
else:
|
||||||
|
|
||||||
def anchor(path, true_path):
|
def anchor(path, true_path):
|
||||||
return path
|
return path
|
||||||
|
|
||||||
ret_paths = []
|
ret_paths = []
|
||||||
path = informations["path"]
|
path = informations["path"]
|
||||||
if not path:
|
if not path:
|
||||||
|
|
@ -337,19 +401,34 @@ class CommonFormatter:
|
||||||
if is_bold:
|
if is_bold:
|
||||||
bold = self.bold
|
bold = self.bold
|
||||||
else:
|
else:
|
||||||
|
|
||||||
def bold(value):
|
def bold(value):
|
||||||
return value
|
return value
|
||||||
|
|
||||||
if is_upper:
|
if is_upper:
|
||||||
|
|
||||||
def upper(value):
|
def upper(value):
|
||||||
return value.upper()
|
return value.upper()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
||||||
def upper(value):
|
def upper(value):
|
||||||
return value
|
return value
|
||||||
|
|
||||||
if "identifiers" in modified_attributes:
|
if "identifiers" in modified_attributes:
|
||||||
name, previous, new = modified_attributes["identifiers"]
|
name, previous, new = modified_attributes["identifiers"]
|
||||||
ret_paths.extend(
|
ret_paths.extend(
|
||||||
[
|
[
|
||||||
bold(self.delete(upper(variable_prefix + calc_path(path, self, identifier))))
|
bold(
|
||||||
|
self.delete(
|
||||||
|
upper(
|
||||||
|
variable_prefix
|
||||||
|
+ calc_path(
|
||||||
|
path, formatter=self, identifiers=identifier
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
for identifier in previous
|
for identifier in previous
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
@ -359,7 +438,7 @@ class CommonFormatter:
|
||||||
for idx, identifier in enumerate(informations["identifiers"]):
|
for idx, identifier in enumerate(informations["identifiers"]):
|
||||||
if force_identifiers and identifier != force_identifiers:
|
if force_identifiers and identifier != force_identifiers:
|
||||||
continue
|
continue
|
||||||
path_ = calc_path(path, self, identifier)
|
path_ = calc_path(path, formatter=self, identifiers=identifier)
|
||||||
if variable_prefix:
|
if variable_prefix:
|
||||||
path_ = variable_prefix + upper(path_)
|
path_ = variable_prefix + upper(path_)
|
||||||
if not idx:
|
if not idx:
|
||||||
|
|
@ -403,12 +482,15 @@ class CommonFormatter:
|
||||||
namespace = False
|
namespace = False
|
||||||
if self.tabular_datas.columns:
|
if self.tabular_datas.columns:
|
||||||
msg.append(self.tabular())
|
msg.append(self.tabular())
|
||||||
msg.extend(self.family_to_string(value["informations"], level, namespace))
|
msg.extend(
|
||||||
|
self.family_to_string(value["informations"], level, namespace)
|
||||||
|
)
|
||||||
msg.extend(self.dict_to_dict(value["children"], level + 1))
|
msg.extend(self.dict_to_dict(value["children"], level + 1))
|
||||||
msg.append(self.end_family(level))
|
msg.append(self.end_family(level))
|
||||||
else:
|
else:
|
||||||
self.dict_to_dict(
|
self.dict_to_dict(
|
||||||
value["children"], level + 1,
|
value["children"],
|
||||||
|
level + 1,
|
||||||
)
|
)
|
||||||
if self.tabular_datas.columns and (init or self.with_family):
|
if self.tabular_datas.columns and (init or self.with_family):
|
||||||
msg.append(self.tabular())
|
msg.append(self.tabular())
|
||||||
|
|
@ -427,13 +509,19 @@ class CommonFormatter:
|
||||||
if namespace:
|
if namespace:
|
||||||
ret = [self.namespace_to_title(informations, level)]
|
ret = [self.namespace_to_title(informations, level)]
|
||||||
else:
|
else:
|
||||||
ret = [self.title(self.get_description("family", informations, {}, None), level)]
|
ret = [
|
||||||
|
self.title(
|
||||||
|
self.get_description("family", informations, {}, None), level
|
||||||
|
)
|
||||||
|
]
|
||||||
msg = []
|
msg = []
|
||||||
helps = informations.get("help")
|
helps = informations.get("help")
|
||||||
if helps:
|
if helps:
|
||||||
for help_ in helps:
|
for help_ in helps:
|
||||||
msg.extend([to_phrase(h) for h in help_.strip().split('\n')])
|
msg.extend([to_phrase(h) for h in help_.strip().split("\n")])
|
||||||
path = self.display_paths(informations, {}, None, with_anchor=False, is_bold=False)
|
path = self.display_paths(
|
||||||
|
informations, {}, None, with_anchor=False, is_bold=False
|
||||||
|
)
|
||||||
if path:
|
if path:
|
||||||
msg.append(self.section(_("Path"), path, type_="family"))
|
msg.append(self.section(_("Path"), path, type_="family"))
|
||||||
calculated_properties = []
|
calculated_properties = []
|
||||||
|
|
@ -441,18 +529,24 @@ class CommonFormatter:
|
||||||
if property_str:
|
if property_str:
|
||||||
msg.append(property_str)
|
msg.append(property_str)
|
||||||
if calculated_properties:
|
if calculated_properties:
|
||||||
msg.append(self.join(calculated_properties)
|
msg.append(self.join(calculated_properties))
|
||||||
)
|
|
||||||
if "identifier" in informations:
|
if "identifier" in informations:
|
||||||
msg.append(
|
msg.append(
|
||||||
self.section(_("Identifiers"), informations["identifier"], type_="family")
|
self.section(
|
||||||
|
_("Identifiers"), informations["identifier"], type_="family"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
starts_line = self.family_informations_starts_line()
|
starts_line = self.family_informations_starts_line()
|
||||||
if msg:
|
if msg:
|
||||||
fam_info = self.family_informations()
|
fam_info = self.family_informations()
|
||||||
if fam_info:
|
if fam_info:
|
||||||
ret.append(fam_info)
|
ret.append(fam_info)
|
||||||
ret.append(self.family_informations_ends_line().join([starts_line + m for m in msg]) + self.end_family_informations())
|
ret.append(
|
||||||
|
self.family_informations_ends_line().join(
|
||||||
|
[starts_line + m for m in msg]
|
||||||
|
)
|
||||||
|
+ self.end_family_informations()
|
||||||
|
)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def family_informations_starts_line(self) -> str:
|
def family_informations_starts_line(self) -> str:
|
||||||
|
|
@ -491,13 +585,22 @@ class CommonFormatter:
|
||||||
return self.stripped(self.join(datas))
|
return self.stripped(self.join(datas))
|
||||||
|
|
||||||
def get_description(
|
def get_description(
|
||||||
self, type_: str, informations: dict, modified_attributes: dict, force_identifiers: Optional[str]
|
self,
|
||||||
|
type_: str,
|
||||||
|
informations: dict,
|
||||||
|
modified_attributes: dict,
|
||||||
|
force_identifiers: Optional[str],
|
||||||
) -> str():
|
) -> str():
|
||||||
def _get_description(description, identifiers, delete=False, new=[]):
|
def _get_description(description, identifiers, delete=False, new=[]):
|
||||||
if identifiers and "{{ identifier }}" in description:
|
if identifiers and "{{ identifier }}" in description:
|
||||||
if type_ == "variable":
|
if type_ == "variable":
|
||||||
identifiers_text = display_list(
|
identifiers_text = display_list(
|
||||||
[self.italic(i[-1]) for i in identifiers if not force_identifiers or i == force_identifiers], separator="or"
|
[
|
||||||
|
self.italic(i[-1])
|
||||||
|
for i in identifiers
|
||||||
|
if not force_identifiers or i == force_identifiers
|
||||||
|
],
|
||||||
|
separator="or",
|
||||||
)
|
)
|
||||||
description = description.replace(
|
description = description.replace(
|
||||||
"{{ identifier }}", identifiers_text
|
"{{ identifier }}", identifiers_text
|
||||||
|
|
@ -546,13 +649,23 @@ class CommonFormatter:
|
||||||
|
|
||||||
# VARIABLE
|
# VARIABLE
|
||||||
def variable_to_string(
|
def variable_to_string(
|
||||||
self, informations: dict, modified_attributes: dict = {}, force_identifiers: Optional[str]=None
|
self,
|
||||||
|
informations: dict,
|
||||||
|
modified_attributes: dict = {},
|
||||||
|
force_identifiers: Optional[str] = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Manage variable"""
|
"""Manage variable"""
|
||||||
self.tabular_datas.add(informations, modified_attributes, force_identifiers)
|
self.tabular_datas.add(informations, modified_attributes, force_identifiers)
|
||||||
|
|
||||||
def convert_section_to_string(
|
def convert_section_to_string(
|
||||||
self, attribute: str, informations: dict, modified_attributes: dict, multi: bool, *, section_name: bool = True, with_to_phrase = False
|
self,
|
||||||
|
attribute: str,
|
||||||
|
informations: dict,
|
||||||
|
modified_attributes: dict,
|
||||||
|
multi: bool,
|
||||||
|
*,
|
||||||
|
section_name: bool = True,
|
||||||
|
with_to_phrase=False,
|
||||||
) -> str():
|
) -> str():
|
||||||
values = []
|
values = []
|
||||||
submessage = ""
|
submessage = ""
|
||||||
|
|
@ -592,10 +705,19 @@ class CommonFormatter:
|
||||||
if old["values"] in new:
|
if old["values"] in new:
|
||||||
values = self.underline(values)
|
values = self.underline(values)
|
||||||
if values != []:
|
if values != []:
|
||||||
return self.section(name, values, submessage=submessage, section_name=section_name, with_to_phrase=with_to_phrase)
|
return self.section(
|
||||||
|
name,
|
||||||
|
values,
|
||||||
|
submessage=submessage,
|
||||||
|
section_name=section_name,
|
||||||
|
with_to_phrase=with_to_phrase,
|
||||||
|
)
|
||||||
|
|
||||||
def convert_choices_to_string(
|
def convert_choices_to_string(
|
||||||
self, informations: dict, modified_attributes: dict, with_default: bool = True,
|
self,
|
||||||
|
informations: dict,
|
||||||
|
modified_attributes: dict,
|
||||||
|
with_default: bool = True,
|
||||||
) -> str():
|
) -> str():
|
||||||
default_is_already_set = False
|
default_is_already_set = False
|
||||||
if "choices" in informations:
|
if "choices" in informations:
|
||||||
|
|
@ -709,23 +831,47 @@ class CommonFormatter:
|
||||||
informations: dict,
|
informations: dict,
|
||||||
calculated_properties: list,
|
calculated_properties: list,
|
||||||
modified_attributes: dict,
|
modified_attributes: dict,
|
||||||
contents: list = ["type", "properties", "mode", "access_control", "validator"]
|
contents: list = ["type", "properties", "mode", "access_control", "validator"],
|
||||||
) -> str:
|
) -> str:
|
||||||
"""Transform properties to string"""
|
"""Transform properties to string"""
|
||||||
properties = []
|
properties = []
|
||||||
modified_properties = []
|
modified_properties = []
|
||||||
if "type" in contents:
|
if "type" in contents:
|
||||||
if "type" in modified_attributes:
|
if "type" in modified_attributes:
|
||||||
properties.append(self.prop(modified_attributes["type"], italic=False, delete=True, underline=False))
|
properties.append(
|
||||||
|
self.prop(
|
||||||
|
modified_attributes["type"],
|
||||||
|
italic=False,
|
||||||
|
delete=True,
|
||||||
|
underline=False,
|
||||||
|
)
|
||||||
|
)
|
||||||
if "multi" in modified_attributes:
|
if "multi" in modified_attributes:
|
||||||
properties.append(self.prop("multiple", italic=False, delete=True, underline=False))
|
properties.append(
|
||||||
|
self.prop("multiple", italic=False, delete=True, underline=False)
|
||||||
|
)
|
||||||
if "properties" not in contents and "properties" in modified_attributes:
|
if "properties" not in contents and "properties" in modified_attributes:
|
||||||
for prop in modified_attributes["properties"]:
|
for prop in modified_attributes["properties"]:
|
||||||
if prop["ori_name"] == "mandatory":
|
if prop["ori_name"] == "mandatory":
|
||||||
properties.append(self.prop(prop["ori_name"], italic=False, delete=True, underline=False))
|
properties.append(
|
||||||
|
self.prop(
|
||||||
|
prop["ori_name"],
|
||||||
|
italic=False,
|
||||||
|
delete=True,
|
||||||
|
underline=False,
|
||||||
|
)
|
||||||
|
)
|
||||||
break
|
break
|
||||||
if "mode" in contents and "mode" in modified_attributes:
|
if "mode" in contents and "mode" in modified_attributes:
|
||||||
properties.append(self.prop(modified_attributes["mode"], italic=False, delete=True, underline=False))
|
name, previous, new = modified_attributes["mode"]
|
||||||
|
if previous:
|
||||||
|
properties.append(
|
||||||
|
self.prop(previous[0], italic=False, delete=True, underline=False)
|
||||||
|
)
|
||||||
|
if new:
|
||||||
|
properties.append(
|
||||||
|
self.prop(new[0], italic=False, delete=False, underline=True)
|
||||||
|
)
|
||||||
if "properties" in modified_attributes:
|
if "properties" in modified_attributes:
|
||||||
if "properties" in contents:
|
if "properties" in contents:
|
||||||
for props in modified_attributes["properties"]:
|
for props in modified_attributes["properties"]:
|
||||||
|
|
@ -756,9 +902,13 @@ class CommonFormatter:
|
||||||
if "validator" not in contents and data[0] == "unique":
|
if "validator" not in contents and data[0] == "unique":
|
||||||
continue
|
continue
|
||||||
if p not in new:
|
if p not in new:
|
||||||
properties.append(self.prop(p, italic=False, delete=True, underline=False))
|
properties.append(
|
||||||
|
self.prop(p, italic=False, delete=True, underline=False)
|
||||||
|
)
|
||||||
if data[1] is not None:
|
if data[1] is not None:
|
||||||
local_calculated_properties[p] = [{"annotation": data[1], "delete": True}]
|
local_calculated_properties[p] = [
|
||||||
|
{"annotation": data[1], "delete": True}
|
||||||
|
]
|
||||||
else:
|
else:
|
||||||
previous = new = []
|
previous = new = []
|
||||||
others = []
|
others = []
|
||||||
|
|
@ -791,14 +941,19 @@ class CommonFormatter:
|
||||||
others.append(prop)
|
others.append(prop)
|
||||||
for prop in others:
|
for prop in others:
|
||||||
prop_name = prop["name"]
|
prop_name = prop["name"]
|
||||||
if "type" not in contents and prop.get("ori_name", prop_name) == "mandatory":
|
if (
|
||||||
|
"type" not in contents
|
||||||
|
and prop.get("ori_name", prop_name) == "mandatory"
|
||||||
|
):
|
||||||
continue
|
continue
|
||||||
if prop_name not in previous and prop_name in new:
|
if prop_name not in previous and prop_name in new:
|
||||||
underline = True
|
underline = True
|
||||||
else:
|
else:
|
||||||
underline = False
|
underline = False
|
||||||
if prop["type"] == "type":
|
if prop["type"] == "type":
|
||||||
properties.append(self.link(prop_name, ROUGAIL_VARIABLE_TYPE, underline=underline))
|
properties.append(
|
||||||
|
self.link(prop_name, ROUGAIL_VARIABLE_TYPE, underline=underline)
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
if "annotation" in prop:
|
if "annotation" in prop:
|
||||||
italic = True
|
italic = True
|
||||||
|
|
@ -815,7 +970,11 @@ class CommonFormatter:
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
italic = False
|
italic = False
|
||||||
properties.append(self.prop(prop_name, italic=italic, delete=False, underline=underline))
|
properties.append(
|
||||||
|
self.prop(
|
||||||
|
prop_name, italic=italic, delete=False, underline=underline
|
||||||
|
)
|
||||||
|
)
|
||||||
if local_calculated_properties:
|
if local_calculated_properties:
|
||||||
for (
|
for (
|
||||||
calculated_property_name,
|
calculated_property_name,
|
||||||
|
|
@ -883,12 +1042,17 @@ class CommonFormatter:
|
||||||
if self.other_root_filenames:
|
if self.other_root_filenames:
|
||||||
path = msg["path"]["path"]
|
path = msg["path"]["path"]
|
||||||
for root in self.other_root_filenames:
|
for root in self.other_root_filenames:
|
||||||
if path == root or path.startswith(f'{root}.'):
|
if path == root or path.startswith(f"{root}."):
|
||||||
filename = self.other_root_filenames[root]
|
filename = self.other_root_filenames[root]
|
||||||
break
|
break
|
||||||
if "identifiers" in msg["path"]:
|
if "identifiers" in msg["path"]:
|
||||||
msg["identifiers"] = [msg["path"]["identifiers"]]
|
msg["identifiers"] = [msg["path"]["identifiers"]]
|
||||||
path = self.link_variable(calc_path(msg["path"], self, identifiers), msg["path"]["path"], self.get_description("variable", msg, {}, None), filename=filename)
|
path = self.link_variable(
|
||||||
|
calc_path(msg["path"], formatter=self, identifiers=identifiers),
|
||||||
|
msg["path"]["path"],
|
||||||
|
self.get_description("variable", msg, {}, None),
|
||||||
|
filename=filename,
|
||||||
|
)
|
||||||
msg = msg["message"].format(path)
|
msg = msg["message"].format(path)
|
||||||
elif "description" in msg:
|
elif "description" in msg:
|
||||||
if "variables" in msg:
|
if "variables" in msg:
|
||||||
|
|
@ -898,12 +1062,26 @@ class CommonFormatter:
|
||||||
if self.other_root_filenames:
|
if self.other_root_filenames:
|
||||||
path = msg["path"]
|
path = msg["path"]
|
||||||
for root in self.other_root_filenames:
|
for root in self.other_root_filenames:
|
||||||
if path == root or path.startswith(f'{root}.'):
|
if path == root or path.startswith(f"{root}."):
|
||||||
filename = self.other_root_filenames[root]
|
filename = self.other_root_filenames[root]
|
||||||
break
|
break
|
||||||
identifiers = variable.get("identifiers")
|
identifiers = variable.get("identifiers")
|
||||||
path = calc_path(variable, self, identifiers)
|
path = calc_path(
|
||||||
paths.append(self.link_variable(path, variable["path"], self.get_description("variable", variable, {}, force_identifiers=identifiers), filename=filename))
|
variable, formatter=self, identifiers=identifiers
|
||||||
|
)
|
||||||
|
paths.append(
|
||||||
|
self.link_variable(
|
||||||
|
path,
|
||||||
|
variable["path"],
|
||||||
|
self.get_description(
|
||||||
|
"variable",
|
||||||
|
variable,
|
||||||
|
{},
|
||||||
|
force_identifiers=identifiers,
|
||||||
|
),
|
||||||
|
filename=filename,
|
||||||
|
)
|
||||||
|
)
|
||||||
msg = msg["description"].format(*paths)
|
msg = msg["description"].format(*paths)
|
||||||
else:
|
else:
|
||||||
msg = msg["description"]
|
msg = msg["description"]
|
||||||
|
|
@ -914,7 +1092,7 @@ class CommonFormatter:
|
||||||
name: str,
|
name: str,
|
||||||
msg: str,
|
msg: str,
|
||||||
submessage: str = "",
|
submessage: str = "",
|
||||||
type_ = "variable",
|
type_="variable",
|
||||||
section_name=True,
|
section_name=True,
|
||||||
with_to_phrase=False,
|
with_to_phrase=False,
|
||||||
force_enter=False,
|
force_enter=False,
|
||||||
|
|
@ -948,8 +1126,11 @@ class CommonFormatter:
|
||||||
return submessage
|
return submessage
|
||||||
|
|
||||||
|
|
||||||
def calc_path(path, formatter=None, identifiers: List[str] = None) -> str:
|
def calc_path(path, *, formatter=None, identifiers: List[str] = None) -> str:
|
||||||
def _path_with_identifier(path, identifier):
|
def _path_with_identifier(path, identifier):
|
||||||
|
if identifier is None:
|
||||||
|
identifier = "{{ __identifier__ }}"
|
||||||
|
else:
|
||||||
identifier = normalize_family(str(identifier))
|
identifier = normalize_family(str(identifier))
|
||||||
if formatter:
|
if formatter:
|
||||||
identifier = formatter.italic(identifier)
|
identifier = formatter.italic(identifier)
|
||||||
|
|
@ -960,10 +1141,12 @@ def calc_path(path, formatter=None, identifiers: List[str] = None) -> str:
|
||||||
if "identifiers" in path:
|
if "identifiers" in path:
|
||||||
for identifier in path["identifiers"]:
|
for identifier in path["identifiers"]:
|
||||||
path_ = _path_with_identifier(path_, identifier)
|
path_ = _path_with_identifier(path_, identifier)
|
||||||
|
path_ = path_.replace("{{ __identifier__ }}", "{{ identifier }}")
|
||||||
elif identifiers:
|
elif identifiers:
|
||||||
path_ = path
|
path_ = path
|
||||||
for identifier in identifiers:
|
for identifier in identifiers:
|
||||||
path_ = _path_with_identifier(path_, identifier)
|
path_ = _path_with_identifier(path_, identifier)
|
||||||
|
path_ = path_.replace("{{ __identifier__ }}", "{{ identifier }}")
|
||||||
else:
|
else:
|
||||||
path_ = path
|
path_ = path
|
||||||
return path_
|
return path_
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
|====
|
|====
|
||||||
| Variable | Description
|
| Variable | Description
|
||||||
| **var1** +
|
| **var1** +
|
||||||
`+++(None, ['basic'], ['standard'])+++` `https://rougail.readthedocs.io/en/latest/variable.html#variables-types[choice]` `standard` `mandatory` | First variable. +
|
`+++basic+++` `#standard#` `https://rougail.readthedocs.io/en/latest/variable.html#variables-types[choice]` `standard` `mandatory` | First variable. +
|
||||||
**Choices**:
|
**Choices**:
|
||||||
|
|
||||||
* val1
|
* val1
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
<details><summary>Modified variable</summary>
|
<details><summary>Modified variable</summary>
|
||||||
|
|
||||||
| Variable | Description |
|
| Variable | Description |
|
||||||
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|
|
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|
|
||||||
| **<a id="var1" name="var1">var1</a>**<br/>~~`(None, ['basic'], ['standard'])`~~ [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` | First variable.<br/>**Choices**: <br/>• val1<br/>• val2 <ins>**← (default)**</ins> |
|
| **<a id="var1" name="var1">var1</a>**<br/>~~`basic`~~ <ins>`standard`</ins> [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` | First variable.<br/>**Choices**: <br/>• val1<br/>• val2 <ins>**← (default)**</ins> |
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<tr><th>Variable </th><th>Description </th></tr>
|
<tr><th>Variable </th><th>Description </th></tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr><td><b>var1</b><br/><mark><del>(None, ['basic'], ['standard'])</del></mark> <mark><a href='https://rougail.readthedocs.io/en/latest/variable.html#variables-types'>choice</a></mark> <mark>standard</mark> <mark>mandatory</mark></td><td>First variable.<br/><b>Choices</b>: <ul><li>val1</li>
|
<tr><td><b>var1</b><br/><mark><del>basic</del></mark> <mark><ins>standard</ins></mark> <mark><a href='https://rougail.readthedocs.io/en/latest/variable.html#variables-types'>choice</a></mark> <mark>standard</mark> <mark>mandatory</mark></td><td>First variable.<br/><b>Choices</b>: <ul><li>val1</li>
|
||||||
<li>val2 <ins><b>← (default)</b></ins></li></ul> </td></tr>
|
<li>val2 <ins><b>← (default)</b></ins></li></ul> </td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# Modified variable
|
# Modified variable
|
||||||
|
|
||||||
| Variable | Description |
|
| Variable | Description |
|
||||||
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|
|
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|
|
||||||
| **<a id="var1" name="var1">var1</a>**<br/>~~`(None, ['basic'], ['standard'])`~~ [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` | First variable.<br/>**Choices**: <br/>• val1<br/>• val2 <ins>**← (default)**</ins> |
|
| **<a id="var1" name="var1">var1</a>**<br/>~~`basic`~~ <ins>`standard`</ins> [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` | First variable.<br/>**Choices**: <br/>• val1<br/>• val2 <ins>**← (default)**</ins> |
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,8 @@
|
||||||
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
│ [1mvar1[0m │ First variable. │
|
│ [1mvar1[0m │ First variable. │
|
||||||
│ [1;7m [0m[1;7;9m(None, ['basic'], ['standard'])[0m[1;7m [0m [1;7m [0m │ [1mChoices[0m: │
|
│ [1;7m [0m[1;7;9mbasic[0m[1;7m [0m [1;7m [0m[1;4;7mstandard[0m[1;7m [0m [1;7m choice [0m [1;7m standard[0m │ [1mChoices[0m: │
|
||||||
│ [1;7mchoice [0m [1;7m standard [0m [1;7m mandatory [0m │ • val1 │
|
│ [1;7mmandatory [0m │ • val1 │
|
||||||
│ │ • val2 [1;4m← (default)[0m │
|
│ │ • val2 [1;4m← (default)[0m │
|
||||||
└───────────────────────────────────────┴──────────────────────────────────────┘
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
|====
|
|====
|
||||||
| Variable | Description
|
| Variable | Description
|
||||||
| **var1** +
|
| **var1** +
|
||||||
`+++(None, ['basic'], ['standard'])+++` `+++mandatory+++` `https://rougail.readthedocs.io/en/latest/variable.html#variables-types[choice]` `standard` | First variable. +
|
`+++basic+++` `#standard#` `+++mandatory+++` `https://rougail.readthedocs.io/en/latest/variable.html#variables-types[choice]` `standard` | First variable. +
|
||||||
**Choices**:
|
**Choices**:
|
||||||
|
|
||||||
* null +++← (default)+++
|
* null +++← (default)+++
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
<details><summary>Modified variable</summary>
|
<details><summary>Modified variable</summary>
|
||||||
|
|
||||||
| Variable | Description |
|
| Variable | Description |
|
||||||
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------|
|
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------|
|
||||||
| **<a id="var1" name="var1">var1</a>**<br/>~~`(None, ['basic'], ['standard'])`~~ ~~`mandatory`~~ [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` | First variable.<br/>**Choices**: <br/>• null ~~← (default)~~<br/>• val1<br/>• val2 <ins>**← (default)**</ins> |
|
| **<a id="var1" name="var1">var1</a>**<br/>~~`basic`~~ <ins>`standard`</ins> ~~`mandatory`~~ [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` | First variable.<br/>**Choices**: <br/>• null ~~← (default)~~<br/>• val1<br/>• val2 <ins>**← (default)**</ins> |
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<tr><th>Variable </th><th>Description </th></tr>
|
<tr><th>Variable </th><th>Description </th></tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr><td><b>var1</b><br/><mark><del>(None, ['basic'], ['standard'])</del></mark> <mark><del>mandatory</del></mark> <mark><a href='https://rougail.readthedocs.io/en/latest/variable.html#variables-types'>choice</a></mark> <mark>standard</mark></td><td>First variable.<br/><b>Choices</b>: <ul><li>null <del>← (default)</del></li>
|
<tr><td><b>var1</b><br/><mark><del>basic</del></mark> <mark><ins>standard</ins></mark> <mark><del>mandatory</del></mark> <mark><a href='https://rougail.readthedocs.io/en/latest/variable.html#variables-types'>choice</a></mark> <mark>standard</mark></td><td>First variable.<br/><b>Choices</b>: <ul><li>null <del>← (default)</del></li>
|
||||||
<li>val1</li>
|
<li>val1</li>
|
||||||
<li>val2 <ins><b>← (default)</b></ins></li></ul> </td></tr>
|
<li>val2 <ins><b>← (default)</b></ins></li></ul> </td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# Modified variable
|
# Modified variable
|
||||||
|
|
||||||
| Variable | Description |
|
| Variable | Description |
|
||||||
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------|
|
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------|
|
||||||
| **<a id="var1" name="var1">var1</a>**<br/>~~`(None, ['basic'], ['standard'])`~~ ~~`mandatory`~~ [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` | First variable.<br/>**Choices**: <br/>• null ~~← (default)~~<br/>• val1<br/>• val2 <ins>**← (default)**</ins> |
|
| **<a id="var1" name="var1">var1</a>**<br/>~~`basic`~~ <ins>`standard`</ins> ~~`mandatory`~~ [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` | First variable.<br/>**Choices**: <br/>• null ~~← (default)~~<br/>• val1<br/>• val2 <ins>**← (default)**</ins> |
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,8 @@
|
||||||
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
│ [1mvar1[0m │ First variable. │
|
│ [1mvar1[0m │ First variable. │
|
||||||
│ [1;7m [0m[1;7;9m(None, ['basic'], ['standard'])[0m[1;7m [0m [1;7m [0m │ [1mChoices[0m: │
|
│ [1;7m [0m[1;7;9mbasic[0m[1;7m [0m [1;7m [0m[1;4;7mstandard[0m[1;7m [0m [1;7m [0m[1;7;9mmandatory[0m[1;7m [0m [1;7m [0m │ [1mChoices[0m: │
|
||||||
│ [1;7;9mmandatory[0m[1;7m [0m [1;7m choice [0m [1;7m standard [0m │ • null [9m← (default)[0m │
|
│ [1;7mchoice [0m [1;7m standard [0m │ • null [9m← (default)[0m │
|
||||||
│ │ • val1 │
|
│ │ • val1 │
|
||||||
│ │ • val2 [1;4m← (default)[0m │
|
│ │ • val2 [1;4m← (default)[0m │
|
||||||
└───────────────────────────────────────┴──────────────────────────────────────┘
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
| Variable | Description
|
| Variable | Description
|
||||||
| **var2** +
|
| **var2** +
|
||||||
`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `standard` `mandatory` | My var2. +
|
`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `standard` `mandatory` | My var2. +
|
||||||
**Default**: depends on an undocumented variable
|
**Default**: the value of an undocumented variable
|
||||||
| **var3** +
|
| **var3** +
|
||||||
`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `advanced` `mandatory` `__hidden__` | My var3. +
|
`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `advanced` `mandatory` `__hidden__` | My var3. +
|
||||||
**Hidden**: var could be hidden
|
**Hidden**: var could be hidden
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,6 @@
|
||||||
| Variable | Description
|
| Variable | Description
|
||||||
| **var2** +
|
| **var2** +
|
||||||
`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `standard` `mandatory` | My var2. +
|
`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `standard` `mandatory` | My var2. +
|
||||||
**Default**: depends on an undocumented variable
|
**Default**: the value of an undocumented variable
|
||||||
|====
|
|====
|
||||||
|
|
||||||
|
|
|
||||||
1
tests/result_tutorial/000/doc.json
Normal file
1
tests/result_tutorial/000/doc.json
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{}
|
||||||
0
tests/result_tutorial/000/doc.sh
Normal file
0
tests/result_tutorial/000/doc.sh
Normal file
17
tests/result_tutorial/001/doc.json
Normal file
17
tests/result_tutorial/001/doc.json
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic",
|
||||||
|
"type": "variable",
|
||||||
|
"variable_type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
6
tests/result_tutorial/001/doc.sh
Normal file
6
tests/result_tutorial/001/doc.sh
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │
|
||||||
|
│ [1;7m string [0m [1;7m basic [0m [1;7m mandatory [0m │
|
||||||
|
└──────────────────────────────────────────────────────────────────────────────┘
|
||||||
9
tests/result_tutorial/001/doc_changelog.sh
Normal file
9
tests/result_tutorial/001/doc_changelog.sh
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
[1;4;96mNew variable[0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │
|
||||||
|
│ [1;7m string [0m [1;7m basic [0m [1;7m mandatory [0m │
|
||||||
|
└──────────────────────────────────────────────────────────────────────────────┘
|
||||||
|
|
||||||
18
tests/result_tutorial/002/doc.json
Normal file
18
tests/result_tutorial/002/doc.json
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic",
|
||||||
|
"type": "variable",
|
||||||
|
"variable_type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
6
tests/result_tutorial/002/doc.sh
Normal file
6
tests/result_tutorial/002/doc.sh
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m string [0m [1;7m basic [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
9
tests/result_tutorial/002/doc_changelog.sh
Normal file
9
tests/result_tutorial/002/doc_changelog.sh
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
[1;4;96mModified variable[0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ [4mConfigure Proxy Access to the [0m │
|
||||||
|
│ [1;7m string [0m [1;7m basic [0m [1;7m mandatory [0m │ [4mInternet.[0m │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
22
tests/result_tutorial/003/doc.json
Normal file
22
tests/result_tutorial/003/doc.json
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "No proxy"
|
||||||
|
},
|
||||||
|
"variable_type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
7
tests/result_tutorial/003/doc.sh
Normal file
7
tests/result_tutorial/003/doc.sh
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m string [0m [1;7m standard [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
│ │ [1mDefault[0m: No proxy │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
10
tests/result_tutorial/003/doc_changelog.sh
Normal file
10
tests/result_tutorial/003/doc_changelog.sh
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
[1;4;96mModified variable[0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m [0m[1;7;9mbasic[0m[1;7m [0m [1;7m [0m[1;4;7mstandard[0m[1;7m [0m [1;7m string [0m [1;7m standard[0m │ Internet. │
|
||||||
|
│ [1;7mmandatory [0m │ [1mDefault[0m: [4mNo proxy[0m │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
32
tests/result_tutorial/010/doc.json
Normal file
32
tests/result_tutorial/010/doc.json
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "No proxy"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"No proxy",
|
||||||
|
"Auto-detect proxy settings for this network",
|
||||||
|
"Use system proxy settings",
|
||||||
|
"Manual proxy configuration",
|
||||||
|
"Automatic proxy configuration URL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
13
tests/result_tutorial/010/doc.sh
Normal file
13
tests/result_tutorial/010/doc.sh
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
│ │ [1mChoices[0m: │
|
||||||
|
│ │ • No proxy [1m← (default)[0m │
|
||||||
|
│ │ • Auto-detect proxy settings for │
|
||||||
|
│ │ this network │
|
||||||
|
│ │ • Use system proxy settings │
|
||||||
|
│ │ • Manual proxy configuration │
|
||||||
|
│ │ • Automatic proxy configuration URL │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
16
tests/result_tutorial/010/doc_changelog.sh
Normal file
16
tests/result_tutorial/010/doc_changelog.sh
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
[1;4;96mModified variable[0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
│ │ [1mChoices[0m: │
|
||||||
|
│ │ • No proxy [1m← (default)[0m │
|
||||||
|
│ │ • [4mAuto-detect proxy settings for [0m │
|
||||||
|
│ │ [4mthis network[0m │
|
||||||
|
│ │ • [4mUse system proxy settings[0m │
|
||||||
|
│ │ • [4mManual proxy configuration[0m │
|
||||||
|
│ │ • [4mAutomatic proxy configuration URL[0m │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
32
tests/result_tutorial/020/doc.json
Normal file
32
tests/result_tutorial/020/doc.json
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "No proxy"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"No proxy",
|
||||||
|
"Auto-detect proxy settings for this network",
|
||||||
|
"Use system proxy settings",
|
||||||
|
"Manual proxy configuration",
|
||||||
|
"Automatic proxy configuration URL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
13
tests/result_tutorial/020/doc.sh
Normal file
13
tests/result_tutorial/020/doc.sh
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
│ │ [1mChoices[0m: │
|
||||||
|
│ │ • No proxy [1m← (default)[0m │
|
||||||
|
│ │ • Auto-detect proxy settings for │
|
||||||
|
│ │ this network │
|
||||||
|
│ │ • Use system proxy settings │
|
||||||
|
│ │ • Manual proxy configuration │
|
||||||
|
│ │ • Automatic proxy configuration URL │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
0
tests/result_tutorial/020/doc_changelog.sh
Normal file
0
tests/result_tutorial/020/doc_changelog.sh
Normal file
32
tests/result_tutorial/021/doc.json
Normal file
32
tests/result_tutorial/021/doc.json
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "No proxy"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"No proxy",
|
||||||
|
"Auto-detect proxy settings for this network",
|
||||||
|
"Use system proxy settings",
|
||||||
|
"Manual proxy configuration",
|
||||||
|
"Automatic proxy configuration URL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
13
tests/result_tutorial/021/doc.sh
Normal file
13
tests/result_tutorial/021/doc.sh
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
│ │ [1mChoices[0m: │
|
||||||
|
│ │ • No proxy [1m← (default)[0m │
|
||||||
|
│ │ • Auto-detect proxy settings for │
|
||||||
|
│ │ this network │
|
||||||
|
│ │ • Use system proxy settings │
|
||||||
|
│ │ • Manual proxy configuration │
|
||||||
|
│ │ • Automatic proxy configuration URL │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
0
tests/result_tutorial/021/doc_changelog.sh
Normal file
0
tests/result_tutorial/021/doc_changelog.sh
Normal file
72
tests/result_tutorial/022/doc.json
Normal file
72
tests/result_tutorial/022/doc.json
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "No proxy"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"No proxy",
|
||||||
|
"Auto-detect proxy settings for this network",
|
||||||
|
"Use system proxy settings",
|
||||||
|
"Manual proxy configuration",
|
||||||
|
"Automatic proxy configuration URL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"manual": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual",
|
||||||
|
"name": "manual",
|
||||||
|
"description": "Manual proxy configuration",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"http_proxy": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.http_proxy",
|
||||||
|
"name": "http_proxy",
|
||||||
|
"description": "HTTP Proxy",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "HTTP address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic",
|
||||||
|
"type": "variable",
|
||||||
|
"variable_type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
35
tests/result_tutorial/022/doc.sh
Normal file
35
tests/result_tutorial/022/doc.sh
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
│ │ [1mChoices[0m: │
|
||||||
|
│ │ • No proxy [1m← (default)[0m │
|
||||||
|
│ │ • Auto-detect proxy settings for │
|
||||||
|
│ │ this network │
|
||||||
|
│ │ • Use system proxy settings │
|
||||||
|
│ │ • Manual proxy configuration │
|
||||||
|
│ │ • Automatic proxy configuration URL │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;4;96mManual proxy configuration[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
[1;4;92mHTTP Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual.http_proxy
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.http_proxy.address[0m │ HTTP address. │
|
||||||
|
│ [1;7m string [0m [1;7m basic [0m [1;7m mandatory [0m │ │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
|
||||||
9
tests/result_tutorial/022/doc_changelog.sh
Normal file
9
tests/result_tutorial/022/doc_changelog.sh
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
[1;4;96mNew variable[0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.http_proxy.address[0m │ HTTP address. │
|
||||||
|
│ [1;7m string [0m [1;7m basic [0m [1;7m mandatory [0m │ │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
76
tests/result_tutorial/030/doc.json
Normal file
76
tests/result_tutorial/030/doc.json
Normal file
|
|
@ -0,0 +1,76 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "No proxy"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"No proxy",
|
||||||
|
"Auto-detect proxy settings for this network",
|
||||||
|
"Use system proxy settings",
|
||||||
|
"Manual proxy configuration",
|
||||||
|
"Automatic proxy configuration URL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"manual": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual",
|
||||||
|
"name": "manual",
|
||||||
|
"description": "Manual proxy configuration",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"http_proxy": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.http_proxy",
|
||||||
|
"name": "http_proxy",
|
||||||
|
"description": "HTTP Proxy",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "HTTP address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic",
|
||||||
|
"type": "variable",
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validator",
|
||||||
|
"values": "type domainname"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
35
tests/result_tutorial/030/doc.sh
Normal file
35
tests/result_tutorial/030/doc.sh
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
│ │ [1mChoices[0m: │
|
||||||
|
│ │ • No proxy [1m← (default)[0m │
|
||||||
|
│ │ • Auto-detect proxy settings for │
|
||||||
|
│ │ this network │
|
||||||
|
│ │ • Use system proxy settings │
|
||||||
|
│ │ • Manual proxy configuration │
|
||||||
|
│ │ • Automatic proxy configuration URL │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;4;96mManual proxy configuration[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
[1;4;92mHTTP Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual.http_proxy
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.http_proxy.address[0m │ HTTP address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m basic [0m [1;7m mandatory [0m │ [1mValidator[0m: type domainname │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
|
||||||
9
tests/result_tutorial/030/doc_changelog.sh
Normal file
9
tests/result_tutorial/030/doc_changelog.sh
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
[1;4;96mModified variable[0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.http_proxy.address[0m │ HTTP address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m basic [0m [1;7m mandatory [0m │ [1mValidator[0m: [4mtype domainname[0m │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
79
tests/result_tutorial/031/doc.json
Normal file
79
tests/result_tutorial/031/doc.json
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "No proxy"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"No proxy",
|
||||||
|
"Auto-detect proxy settings for this network",
|
||||||
|
"Use system proxy settings",
|
||||||
|
"Manual proxy configuration",
|
||||||
|
"Automatic proxy configuration URL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"manual": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual",
|
||||||
|
"name": "manual",
|
||||||
|
"description": "Manual proxy configuration",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"http_proxy": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.http_proxy",
|
||||||
|
"name": "http_proxy",
|
||||||
|
"description": "HTTP Proxy",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "HTTP address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic",
|
||||||
|
"type": "variable",
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
37
tests/result_tutorial/031/doc.sh
Normal file
37
tests/result_tutorial/031/doc.sh
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
│ │ [1mChoices[0m: │
|
||||||
|
│ │ • No proxy [1m← (default)[0m │
|
||||||
|
│ │ • Auto-detect proxy settings for │
|
||||||
|
│ │ this network │
|
||||||
|
│ │ • Use system proxy settings │
|
||||||
|
│ │ • Manual proxy configuration │
|
||||||
|
│ │ • Automatic proxy configuration URL │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;4;96mManual proxy configuration[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
[1;4;92mHTTP Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual.http_proxy
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.http_proxy.address[0m │ HTTP address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m basic [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
|
||||||
11
tests/result_tutorial/031/doc_changelog.sh
Normal file
11
tests/result_tutorial/031/doc_changelog.sh
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
[1;4;96mModified variable[0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.http_proxy.address[0m │ HTTP address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m basic [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • [4mthe domain name can be an IP[0m │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
107
tests/result_tutorial/032/doc.json
Normal file
107
tests/result_tutorial/032/doc.json
Normal file
|
|
@ -0,0 +1,107 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "No proxy"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"No proxy",
|
||||||
|
"Auto-detect proxy settings for this network",
|
||||||
|
"Use system proxy settings",
|
||||||
|
"Manual proxy configuration",
|
||||||
|
"Automatic proxy configuration URL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"manual": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual",
|
||||||
|
"name": "manual",
|
||||||
|
"description": "Manual proxy configuration",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"http_proxy": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.http_proxy",
|
||||||
|
"name": "http_proxy",
|
||||||
|
"description": "HTTP Proxy",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "HTTP address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic",
|
||||||
|
"type": "variable",
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.http_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "HTTP Port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "8080"
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
47
tests/result_tutorial/032/doc.sh
Normal file
47
tests/result_tutorial/032/doc.sh
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
│ │ [1mChoices[0m: │
|
||||||
|
│ │ • No proxy [1m← (default)[0m │
|
||||||
|
│ │ • Auto-detect proxy settings for │
|
||||||
|
│ │ this network │
|
||||||
|
│ │ • Use system proxy settings │
|
||||||
|
│ │ • Manual proxy configuration │
|
||||||
|
│ │ • Automatic proxy configuration URL │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;4;96mManual proxy configuration[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
[1;4;92mHTTP Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual.http_proxy
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.http_proxy.address[0m │ HTTP address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m basic [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.http_proxy.port[0m │ HTTP Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: 8080 │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
|
||||||
16
tests/result_tutorial/032/doc_changelog.sh
Normal file
16
tests/result_tutorial/032/doc_changelog.sh
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
[1;4;96mNew variable[0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.http_proxy.port[0m │ HTTP Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: 8080 │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
127
tests/result_tutorial/033/doc.json
Normal file
127
tests/result_tutorial/033/doc.json
Normal file
|
|
@ -0,0 +1,127 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "No proxy"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"No proxy",
|
||||||
|
"Auto-detect proxy settings for this network",
|
||||||
|
"Use system proxy settings",
|
||||||
|
"Manual proxy configuration",
|
||||||
|
"Automatic proxy configuration URL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"manual": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual",
|
||||||
|
"name": "manual",
|
||||||
|
"description": "Manual proxy configuration",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"http_proxy": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.http_proxy",
|
||||||
|
"name": "http_proxy",
|
||||||
|
"description": "HTTP Proxy",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "HTTP address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic",
|
||||||
|
"type": "variable",
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.http_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "HTTP Port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "8080"
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"use_for_https": {
|
||||||
|
"path": "manual.use_for_https",
|
||||||
|
"name": "use_for_https",
|
||||||
|
"description": "Also use this proxy for HTTPS.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": true
|
||||||
|
},
|
||||||
|
"variable_type": "boolean"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
53
tests/result_tutorial/033/doc.sh
Normal file
53
tests/result_tutorial/033/doc.sh
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
│ │ [1mChoices[0m: │
|
||||||
|
│ │ • No proxy [1m← (default)[0m │
|
||||||
|
│ │ • Auto-detect proxy settings for │
|
||||||
|
│ │ this network │
|
||||||
|
│ │ • Use system proxy settings │
|
||||||
|
│ │ • Manual proxy configuration │
|
||||||
|
│ │ • Automatic proxy configuration URL │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;4;96mManual proxy configuration[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
[1;4;92mHTTP Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual.http_proxy
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.http_proxy.address[0m │ HTTP address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m basic [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.http_proxy.port[0m │ HTTP Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: 8080 │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.use_for_https[0m │ Also use this proxy for HTTPS. │
|
||||||
|
│ [1;7m boolean [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mDefault[0m: true │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
9
tests/result_tutorial/033/doc_changelog.sh
Normal file
9
tests/result_tutorial/033/doc_changelog.sh
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
[1;4;96mNew variable[0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.use_for_https[0m │ Also use this proxy for HTTPS. │
|
||||||
|
│ [1;7m boolean [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mDefault[0m: true │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
190
tests/result_tutorial/040/doc.json
Normal file
190
tests/result_tutorial/040/doc.json
Normal file
|
|
@ -0,0 +1,190 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "No proxy"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"No proxy",
|
||||||
|
"Auto-detect proxy settings for this network",
|
||||||
|
"Use system proxy settings",
|
||||||
|
"Manual proxy configuration",
|
||||||
|
"Automatic proxy configuration URL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"manual": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual",
|
||||||
|
"name": "manual",
|
||||||
|
"description": "Manual proxy configuration",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"http_proxy": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.http_proxy",
|
||||||
|
"name": "http_proxy",
|
||||||
|
"description": "HTTP Proxy",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "HTTP address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic",
|
||||||
|
"type": "variable",
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.http_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "HTTP Port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "8080"
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"use_for_https": {
|
||||||
|
"path": "manual.use_for_https",
|
||||||
|
"name": "use_for_https",
|
||||||
|
"description": "Also use this proxy for HTTPS.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": true
|
||||||
|
},
|
||||||
|
"variable_type": "boolean"
|
||||||
|
},
|
||||||
|
"https_proxy": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.https_proxy",
|
||||||
|
"name": "https_proxy",
|
||||||
|
"description": "HTTPS Proxy",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.https_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "HTTPS address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic",
|
||||||
|
"type": "variable",
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.https_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "HTTPS Port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "8080"
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
79
tests/result_tutorial/040/doc.sh
Normal file
79
tests/result_tutorial/040/doc.sh
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
│ │ [1mChoices[0m: │
|
||||||
|
│ │ • No proxy [1m← (default)[0m │
|
||||||
|
│ │ • Auto-detect proxy settings for │
|
||||||
|
│ │ this network │
|
||||||
|
│ │ • Use system proxy settings │
|
||||||
|
│ │ • Manual proxy configuration │
|
||||||
|
│ │ • Automatic proxy configuration URL │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;4;96mManual proxy configuration[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
[1;4;92mHTTP Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual.http_proxy
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.http_proxy.address[0m │ HTTP address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m basic [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.http_proxy.port[0m │ HTTP Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: 8080 │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.use_for_https[0m │ Also use this proxy for HTTPS. │
|
||||||
|
│ [1;7m boolean [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mDefault[0m: true │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;4;92mHTTPS Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual.https_proxy
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.https_proxy.address[0m │ HTTPS address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m basic [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.https_proxy.port[0m │ HTTPS Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: 8080 │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
|
||||||
21
tests/result_tutorial/040/doc_changelog.sh
Normal file
21
tests/result_tutorial/040/doc_changelog.sh
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
[1;4;96mNew variables[0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.https_proxy.address[0m │ HTTPS address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m basic [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.https_proxy.port[0m │ HTTPS Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: 8080 │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
208
tests/result_tutorial/041/doc.json
Normal file
208
tests/result_tutorial/041/doc.json
Normal file
|
|
@ -0,0 +1,208 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "No proxy"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"No proxy",
|
||||||
|
"Auto-detect proxy settings for this network",
|
||||||
|
"Use system proxy settings",
|
||||||
|
"Manual proxy configuration",
|
||||||
|
"Automatic proxy configuration URL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"manual": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual",
|
||||||
|
"name": "manual",
|
||||||
|
"description": "Manual proxy configuration",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"http_proxy": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.http_proxy",
|
||||||
|
"name": "http_proxy",
|
||||||
|
"description": "HTTP Proxy",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "HTTP address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic",
|
||||||
|
"type": "variable",
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.http_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "HTTP Port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "8080"
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"use_for_https": {
|
||||||
|
"path": "manual.use_for_https",
|
||||||
|
"name": "use_for_https",
|
||||||
|
"description": "Also use this proxy for HTTPS.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": true
|
||||||
|
},
|
||||||
|
"variable_type": "boolean"
|
||||||
|
},
|
||||||
|
"https_proxy": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.https_proxy",
|
||||||
|
"name": "https_proxy",
|
||||||
|
"description": "HTTPS Proxy",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "standard"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.https_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "HTTPS address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": {
|
||||||
|
"message": "the value of the variable \"{0}\"",
|
||||||
|
"path": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"type": "variable"
|
||||||
|
},
|
||||||
|
"description": "HTTP address"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.https_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "HTTPS Port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": {
|
||||||
|
"message": "the value of the variable \"{0}\"",
|
||||||
|
"path": {
|
||||||
|
"path": "manual.http_proxy.port",
|
||||||
|
"type": "variable"
|
||||||
|
},
|
||||||
|
"description": "HTTP Port"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
82
tests/result_tutorial/041/doc.sh
Normal file
82
tests/result_tutorial/041/doc.sh
Normal file
|
|
@ -0,0 +1,82 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
│ │ [1mChoices[0m: │
|
||||||
|
│ │ • No proxy [1m← (default)[0m │
|
||||||
|
│ │ • Auto-detect proxy settings for │
|
||||||
|
│ │ this network │
|
||||||
|
│ │ • Use system proxy settings │
|
||||||
|
│ │ • Manual proxy configuration │
|
||||||
|
│ │ • Automatic proxy configuration URL │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;4;96mManual proxy configuration[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
[1;4;92mHTTP Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual.http_proxy
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.http_proxy.address[0m │ HTTP address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m basic [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.http_proxy.port[0m │ HTTP Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: 8080 │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.use_for_https[0m │ Also use this proxy for HTTPS. │
|
||||||
|
│ [1;7m boolean [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mDefault[0m: true │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;4;92mHTTPS Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual.https_proxy
|
||||||
|
[34m▌ [0m[1;7m standard [0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.https_proxy.address[0m │ HTTPS address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
│ │ [1mDefault[0m: the value of the variable │
|
||||||
|
│ │ "manual.http_proxy.address" │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.https_proxy.port[0m │ HTTPS Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: the value of the variable │
|
||||||
|
│ │ "manual.http_proxy.port" │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
|
||||||
25
tests/result_tutorial/041/doc_changelog.sh
Normal file
25
tests/result_tutorial/041/doc_changelog.sh
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
[1;4;96mModified variables[0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.https_proxy.address[0m │ HTTPS address. │
|
||||||
|
│ [1;7m [0m[1;7;9mbasic[0m[1;7m [0m [1;7m [0m[1;4;7mstandard[0m[1;7m [0m [1;7m domainname [0m [1;7m [0m │ [1mValidators[0m: │
|
||||||
|
│ [1;7mstandard [0m [1;7m mandatory [0m │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
│ │ [1mDefault[0m: [4mthe value of the variable [0m │
|
||||||
|
│ │ [4m"manual.http_proxy.address"[0m │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.https_proxy.port[0m │ HTTPS Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: [9m8080[0m │
|
||||||
|
│ │ [4mthe value of the variable [0m │
|
||||||
|
│ │ [4m"manual.http_proxy.port"[0m │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
32
tests/result_tutorial/050/doc.json
Normal file
32
tests/result_tutorial/050/doc.json
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "No proxy"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"No proxy",
|
||||||
|
"Auto-detect proxy settings for this network",
|
||||||
|
"Use system proxy settings",
|
||||||
|
"Manual proxy configuration",
|
||||||
|
"Automatic proxy configuration URL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
13
tests/result_tutorial/050/doc.sh
Normal file
13
tests/result_tutorial/050/doc.sh
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
│ │ [1mChoices[0m: │
|
||||||
|
│ │ • No proxy [1m← (default)[0m │
|
||||||
|
│ │ • Auto-detect proxy settings for │
|
||||||
|
│ │ this network │
|
||||||
|
│ │ • Use system proxy settings │
|
||||||
|
│ │ • Manual proxy configuration │
|
||||||
|
│ │ • Automatic proxy configuration URL │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
9
tests/result_tutorial/050/doc_changelog.sh
Normal file
9
tests/result_tutorial/050/doc_changelog.sh
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
[1;4;96mDeleted variables[0m
|
||||||
|
|
||||||
|
|
||||||
|
• manual.http_proxy.address
|
||||||
|
• manual.http_proxy.port
|
||||||
|
• manual.use_for_https
|
||||||
|
• manual.https_proxy.address
|
||||||
|
• manual.https_proxy.port
|
||||||
|
|
||||||
222
tests/result_tutorial/051/doc.json
Normal file
222
tests/result_tutorial/051/doc.json
Normal file
|
|
@ -0,0 +1,222 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "No proxy"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"No proxy",
|
||||||
|
"Auto-detect proxy settings for this network",
|
||||||
|
"Use system proxy settings",
|
||||||
|
"Manual proxy configuration",
|
||||||
|
"Automatic proxy configuration URL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"manual": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual",
|
||||||
|
"name": "manual",
|
||||||
|
"description": "Manual proxy configuration",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "disabled",
|
||||||
|
"ori_name": "disabled",
|
||||||
|
"access_control": true,
|
||||||
|
"annotation": {
|
||||||
|
"message": "when the variable \"{0}\" hasn't the value \"Manual proxy configuration\"",
|
||||||
|
"path": {
|
||||||
|
"path": "proxy_mode"
|
||||||
|
},
|
||||||
|
"description": "Configure Proxy Access to the Internet"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"http_proxy": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.http_proxy",
|
||||||
|
"name": "http_proxy",
|
||||||
|
"description": "HTTP Proxy",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "HTTP address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic",
|
||||||
|
"type": "variable",
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.http_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "HTTP Port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "8080"
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"use_for_https": {
|
||||||
|
"path": "manual.use_for_https",
|
||||||
|
"name": "use_for_https",
|
||||||
|
"description": "Also use this proxy for HTTPS.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": true
|
||||||
|
},
|
||||||
|
"variable_type": "boolean"
|
||||||
|
},
|
||||||
|
"https_proxy": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.https_proxy",
|
||||||
|
"name": "https_proxy",
|
||||||
|
"description": "HTTPS Proxy",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "standard"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.https_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "HTTPS address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": {
|
||||||
|
"message": "the value of the variable \"{0}\"",
|
||||||
|
"path": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"type": "variable"
|
||||||
|
},
|
||||||
|
"description": "HTTP address"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.https_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "HTTPS Port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": {
|
||||||
|
"message": "the value of the variable \"{0}\"",
|
||||||
|
"path": {
|
||||||
|
"path": "manual.http_proxy.port",
|
||||||
|
"type": "variable"
|
||||||
|
},
|
||||||
|
"description": "HTTP Port"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
84
tests/result_tutorial/051/doc.sh
Normal file
84
tests/result_tutorial/051/doc.sh
Normal file
|
|
@ -0,0 +1,84 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
│ │ [1mChoices[0m: │
|
||||||
|
│ │ • No proxy [1m← (default)[0m │
|
||||||
|
│ │ • Auto-detect proxy settings for │
|
||||||
|
│ │ this network │
|
||||||
|
│ │ • Use system proxy settings │
|
||||||
|
│ │ • Manual proxy configuration │
|
||||||
|
│ │ • Automatic proxy configuration URL │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;4;96mManual proxy configuration[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual
|
||||||
|
[34m▌ [0m[1;7m basic [0m [1;7m [0m[1;3;7mdisabled[0m[1;7m [0m
|
||||||
|
[34m▌ [0m[1mDisabled[0m: when the variable [32m"proxy_mode"[0m hasn't the value [32m"Manual proxy [0m
|
||||||
|
[32mconfiguration"[0m
|
||||||
|
|
||||||
|
[1;4;92mHTTP Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual.http_proxy
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.http_proxy.address[0m │ HTTP address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m basic [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.http_proxy.port[0m │ HTTP Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: 8080 │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.use_for_https[0m │ Also use this proxy for HTTPS. │
|
||||||
|
│ [1;7m boolean [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mDefault[0m: true │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;4;92mHTTPS Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual.https_proxy
|
||||||
|
[34m▌ [0m[1;7m standard [0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.https_proxy.address[0m │ HTTPS address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
│ │ [1mDefault[0m: the value of the variable │
|
||||||
|
│ │ "manual.http_proxy.address" │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.https_proxy.port[0m │ HTTPS Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: the value of the variable │
|
||||||
|
│ │ "manual.http_proxy.port" │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
|
||||||
42
tests/result_tutorial/051/doc_changelog.sh
Normal file
42
tests/result_tutorial/051/doc_changelog.sh
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
[1;4;96mNew variables[0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.http_proxy.address[0m │ HTTP address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m basic [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.http_proxy.port[0m │ HTTP Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: 8080 │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.use_for_https[0m │ Also use this proxy for HTTPS. │
|
||||||
|
│ [1;7m boolean [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mDefault[0m: true │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.https_proxy.address[0m │ HTTPS address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
│ │ [1mDefault[0m: the value of the variable │
|
||||||
|
│ │ "manual.http_proxy.address" │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.https_proxy.port[0m │ HTTPS Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: the value of the variable │
|
||||||
|
│ │ "manual.http_proxy.port" │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
141
tests/result_tutorial/052/doc.json
Normal file
141
tests/result_tutorial/052/doc.json
Normal file
|
|
@ -0,0 +1,141 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "No proxy"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"No proxy",
|
||||||
|
"Auto-detect proxy settings for this network",
|
||||||
|
"Use system proxy settings",
|
||||||
|
"Manual proxy configuration",
|
||||||
|
"Automatic proxy configuration URL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"manual": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual",
|
||||||
|
"name": "manual",
|
||||||
|
"description": "Manual proxy configuration",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "disabled",
|
||||||
|
"ori_name": "disabled",
|
||||||
|
"access_control": true,
|
||||||
|
"annotation": {
|
||||||
|
"message": "when the variable \"{0}\" hasn't the value \"Manual proxy configuration\"",
|
||||||
|
"path": {
|
||||||
|
"path": "proxy_mode"
|
||||||
|
},
|
||||||
|
"description": "Configure Proxy Access to the Internet"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"http_proxy": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.http_proxy",
|
||||||
|
"name": "http_proxy",
|
||||||
|
"description": "HTTP Proxy",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "HTTP address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic",
|
||||||
|
"type": "variable",
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.http_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "HTTP Port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "8080"
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"use_for_https": {
|
||||||
|
"path": "manual.use_for_https",
|
||||||
|
"name": "use_for_https",
|
||||||
|
"description": "Also use this proxy for HTTPS.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": true
|
||||||
|
},
|
||||||
|
"variable_type": "boolean"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
55
tests/result_tutorial/052/doc.sh
Normal file
55
tests/result_tutorial/052/doc.sh
Normal file
|
|
@ -0,0 +1,55 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
│ │ [1mChoices[0m: │
|
||||||
|
│ │ • No proxy [1m← (default)[0m │
|
||||||
|
│ │ • Auto-detect proxy settings for │
|
||||||
|
│ │ this network │
|
||||||
|
│ │ • Use system proxy settings │
|
||||||
|
│ │ • Manual proxy configuration │
|
||||||
|
│ │ • Automatic proxy configuration URL │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;4;96mManual proxy configuration[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual
|
||||||
|
[34m▌ [0m[1;7m basic [0m [1;7m [0m[1;3;7mdisabled[0m[1;7m [0m
|
||||||
|
[34m▌ [0m[1mDisabled[0m: when the variable [32m"proxy_mode"[0m hasn't the value [32m"Manual proxy [0m
|
||||||
|
[32mconfiguration"[0m
|
||||||
|
|
||||||
|
[1;4;92mHTTP Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual.http_proxy
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.http_proxy.address[0m │ HTTP address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m basic [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.http_proxy.port[0m │ HTTP Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: 8080 │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.use_for_https[0m │ Also use this proxy for HTTPS. │
|
||||||
|
│ [1;7m boolean [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mDefault[0m: true │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
6
tests/result_tutorial/052/doc_changelog.sh
Normal file
6
tests/result_tutorial/052/doc_changelog.sh
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
[1;4;96mDeleted variables[0m
|
||||||
|
|
||||||
|
|
||||||
|
• manual.https_proxy.address
|
||||||
|
• manual.https_proxy.port
|
||||||
|
|
||||||
236
tests/result_tutorial/053/doc.json
Normal file
236
tests/result_tutorial/053/doc.json
Normal file
|
|
@ -0,0 +1,236 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "No proxy"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"No proxy",
|
||||||
|
"Auto-detect proxy settings for this network",
|
||||||
|
"Use system proxy settings",
|
||||||
|
"Manual proxy configuration",
|
||||||
|
"Automatic proxy configuration URL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"manual": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual",
|
||||||
|
"name": "manual",
|
||||||
|
"description": "Manual proxy configuration",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "disabled",
|
||||||
|
"ori_name": "disabled",
|
||||||
|
"access_control": true,
|
||||||
|
"annotation": {
|
||||||
|
"message": "when the variable \"{0}\" hasn't the value \"Manual proxy configuration\"",
|
||||||
|
"path": {
|
||||||
|
"path": "proxy_mode"
|
||||||
|
},
|
||||||
|
"description": "Configure Proxy Access to the Internet"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"http_proxy": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.http_proxy",
|
||||||
|
"name": "http_proxy",
|
||||||
|
"description": "HTTP Proxy",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "HTTP address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic",
|
||||||
|
"type": "variable",
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.http_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "HTTP Port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "8080"
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"use_for_https": {
|
||||||
|
"path": "manual.use_for_https",
|
||||||
|
"name": "use_for_https",
|
||||||
|
"description": "Also use this proxy for HTTPS.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": true
|
||||||
|
},
|
||||||
|
"variable_type": "boolean"
|
||||||
|
},
|
||||||
|
"https_proxy": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.https_proxy",
|
||||||
|
"name": "https_proxy",
|
||||||
|
"description": "HTTPS Proxy",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "hidden",
|
||||||
|
"ori_name": "hidden",
|
||||||
|
"access_control": true,
|
||||||
|
"annotation": {
|
||||||
|
"message": "when the variable \"{0}\" has the value \"true\"",
|
||||||
|
"path": {
|
||||||
|
"path": "manual.use_for_https"
|
||||||
|
},
|
||||||
|
"description": "Also use this proxy for HTTPS"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.https_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "HTTPS address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": {
|
||||||
|
"message": "the value of the variable \"{0}\"",
|
||||||
|
"path": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"type": "variable"
|
||||||
|
},
|
||||||
|
"description": "HTTP address"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.https_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "HTTPS Port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": {
|
||||||
|
"message": "the value of the variable \"{0}\"",
|
||||||
|
"path": {
|
||||||
|
"path": "manual.http_proxy.port",
|
||||||
|
"type": "variable"
|
||||||
|
},
|
||||||
|
"description": "HTTP Port"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
85
tests/result_tutorial/053/doc.sh
Normal file
85
tests/result_tutorial/053/doc.sh
Normal file
|
|
@ -0,0 +1,85 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
│ │ [1mChoices[0m: │
|
||||||
|
│ │ • No proxy [1m← (default)[0m │
|
||||||
|
│ │ • Auto-detect proxy settings for │
|
||||||
|
│ │ this network │
|
||||||
|
│ │ • Use system proxy settings │
|
||||||
|
│ │ • Manual proxy configuration │
|
||||||
|
│ │ • Automatic proxy configuration URL │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;4;96mManual proxy configuration[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual
|
||||||
|
[34m▌ [0m[1;7m basic [0m [1;7m [0m[1;3;7mdisabled[0m[1;7m [0m
|
||||||
|
[34m▌ [0m[1mDisabled[0m: when the variable [32m"proxy_mode"[0m hasn't the value [32m"Manual proxy [0m
|
||||||
|
[32mconfiguration"[0m
|
||||||
|
|
||||||
|
[1;4;92mHTTP Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual.http_proxy
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.http_proxy.address[0m │ HTTP address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m basic [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.http_proxy.port[0m │ HTTP Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: 8080 │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.use_for_https[0m │ Also use this proxy for HTTPS. │
|
||||||
|
│ [1;7m boolean [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mDefault[0m: true │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;4;92mHTTPS Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual.https_proxy
|
||||||
|
[34m▌ [0m[1;7m standard [0m [1;7m [0m[1;3;7mhidden[0m[1;7m [0m
|
||||||
|
[34m▌ [0m[1mHidden[0m: when the variable [32m"manual.use_for_https"[0m has the value [32m"true"[0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.https_proxy.address[0m │ HTTPS address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
│ │ [1mDefault[0m: the value of the variable │
|
||||||
|
│ │ "manual.http_proxy.address" │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.https_proxy.port[0m │ HTTPS Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: the value of the variable │
|
||||||
|
│ │ "manual.http_proxy.port" │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
|
||||||
24
tests/result_tutorial/053/doc_changelog.sh
Normal file
24
tests/result_tutorial/053/doc_changelog.sh
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
[1;4;96mNew variables[0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.https_proxy.address[0m │ HTTPS address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
│ │ [1mDefault[0m: the value of the variable │
|
||||||
|
│ │ "manual.http_proxy.address" │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.https_proxy.port[0m │ HTTPS Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: the value of the variable │
|
||||||
|
│ │ "manual.http_proxy.port" │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
267
tests/result_tutorial/060/doc.json
Normal file
267
tests/result_tutorial/060/doc.json
Normal file
|
|
@ -0,0 +1,267 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "No proxy"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"No proxy",
|
||||||
|
"Auto-detect proxy settings for this network",
|
||||||
|
"Use system proxy settings",
|
||||||
|
"Manual proxy configuration",
|
||||||
|
"Automatic proxy configuration URL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"manual": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual",
|
||||||
|
"name": "manual",
|
||||||
|
"description": "Manual proxy configuration",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "disabled",
|
||||||
|
"ori_name": "disabled",
|
||||||
|
"access_control": true,
|
||||||
|
"annotation": {
|
||||||
|
"message": "when the variable \"{0}\" hasn't the value \"Manual proxy configuration\"",
|
||||||
|
"path": {
|
||||||
|
"path": "proxy_mode"
|
||||||
|
},
|
||||||
|
"description": "Configure Proxy Access to the Internet"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"http_proxy": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.http_proxy",
|
||||||
|
"name": "http_proxy",
|
||||||
|
"description": "HTTP Proxy",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "HTTP address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic",
|
||||||
|
"type": "variable",
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.http_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "HTTP Port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "8080"
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"use_for_https": {
|
||||||
|
"path": "manual.use_for_https",
|
||||||
|
"name": "use_for_https",
|
||||||
|
"description": "Also use this proxy for HTTPS.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": true
|
||||||
|
},
|
||||||
|
"variable_type": "boolean"
|
||||||
|
},
|
||||||
|
"{{ identifier }}_proxy": {
|
||||||
|
"type": "dynamic",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.{{ identifier }}_proxy",
|
||||||
|
"name": "{{ identifier }}_proxy",
|
||||||
|
"description": "{{ identifier }} Proxy",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "hidden",
|
||||||
|
"ori_name": "hidden",
|
||||||
|
"access_control": true,
|
||||||
|
"annotation": {
|
||||||
|
"message": "when the variable \"{0}\" has the value \"true\"",
|
||||||
|
"path": {
|
||||||
|
"path": "manual.use_for_https"
|
||||||
|
},
|
||||||
|
"description": "Also use this proxy for HTTPS"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"HTTPS"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"help": [
|
||||||
|
"This family builds families dynamically"
|
||||||
|
],
|
||||||
|
"identifier": [
|
||||||
|
"HTTPS",
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.{{ identifier }}_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "{{ identifier }} address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"HTTPS"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": {
|
||||||
|
"message": "the value of the variable \"{0}\"",
|
||||||
|
"path": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"type": "variable"
|
||||||
|
},
|
||||||
|
"description": "HTTP address"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.{{ identifier }}_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "{{ identifier }} port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"HTTPS"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": {
|
||||||
|
"message": "the value of the variable \"{0}\"",
|
||||||
|
"path": {
|
||||||
|
"path": "manual.http_proxy.port",
|
||||||
|
"type": "variable"
|
||||||
|
},
|
||||||
|
"description": "HTTP Port"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
91
tests/result_tutorial/060/doc.sh
Normal file
91
tests/result_tutorial/060/doc.sh
Normal file
|
|
@ -0,0 +1,91 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
│ │ [1mChoices[0m: │
|
||||||
|
│ │ • No proxy [1m← (default)[0m │
|
||||||
|
│ │ • Auto-detect proxy settings for │
|
||||||
|
│ │ this network │
|
||||||
|
│ │ • Use system proxy settings │
|
||||||
|
│ │ • Manual proxy configuration │
|
||||||
|
│ │ • Automatic proxy configuration URL │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;4;96mManual proxy configuration[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual
|
||||||
|
[34m▌ [0m[1;7m basic [0m [1;7m [0m[1;3;7mdisabled[0m[1;7m [0m
|
||||||
|
[34m▌ [0m[1mDisabled[0m: when the variable [32m"proxy_mode"[0m hasn't the value [32m"Manual proxy [0m
|
||||||
|
[32mconfiguration"[0m
|
||||||
|
|
||||||
|
[1;4;92mHTTP Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual.http_proxy
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.http_proxy.address[0m │ HTTP address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m basic [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.http_proxy.port[0m │ HTTP Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: 8080 │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.use_for_https[0m │ Also use this proxy for HTTPS. │
|
||||||
|
│ [1;7m boolean [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mDefault[0m: true │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;3;4;92mHTTPS[0m[1;4;92m Proxy or [0m[1;3;4;92mSOCKS[0m[1;4;92m Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0mThis family builds families dynamically.
|
||||||
|
[34m▌ [0m[1mPath[0m:
|
||||||
|
[34m▌ [0m • manual.[3mhttps[0m_proxy
|
||||||
|
[34m▌ [0m • manual.[3msocks[0m_proxy
|
||||||
|
[34m▌ [0m[1;7m standard [0m [1;7m [0m[1;3;7mhidden[0m[1;7m [0m
|
||||||
|
[34m▌ [0m[1mHidden[0m: when the variable [32m"manual.use_for_https"[0m has the value [32m"true"[0m
|
||||||
|
[34m▌ [0m[1mIdentifiers[0m:
|
||||||
|
[34m▌ [0m • HTTPS
|
||||||
|
[34m▌ [0m • SOCKS
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.[0m[1;3mhttps[0m[1m_proxy.address[0m │ [3mHTTPS[0m or [3mSOCKS[0m address. │
|
||||||
|
│ [1mmanual.[0m[1;3msocks[0m[1m_proxy.address[0m │ [1mValidators[0m: │
|
||||||
|
│ [1;7m domainname [0m [1;7m standard [0m [1;7m mandatory [0m │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
│ │ [1mDefault[0m: the value of the variable │
|
||||||
|
│ │ "manual.http_proxy.address" │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.[0m[1;3mhttps[0m[1m_proxy.port[0m │ [3mHTTPS[0m or [3mSOCKS[0m port. │
|
||||||
|
│ [1mmanual.[0m[1;3msocks[0m[1m_proxy.port[0m │ [1mValidators[0m: │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: the value of the variable │
|
||||||
|
│ │ "manual.http_proxy.port" │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
|
||||||
30
tests/result_tutorial/060/doc_changelog.sh
Normal file
30
tests/result_tutorial/060/doc_changelog.sh
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
[1;4;96mNew variables[0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.[0m[1;3mhttps[0m[1m_proxy.address[0m │ [3mHTTPS[0m or [3mSOCKS[0m address. │
|
||||||
|
│ [1mmanual.[0m[1;3msocks[0m[1m_proxy.address[0m │ [1mValidators[0m: │
|
||||||
|
│ [1;7m domainname [0m [1;7m standard [0m [1;7m mandatory [0m │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
│ │ [1mDefault[0m: the value of the variable │
|
||||||
|
│ │ "manual.http_proxy.address" │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.[0m[1;3mhttps[0m[1m_proxy.port[0m │ [3mHTTPS[0m or [3mSOCKS[0m port. │
|
||||||
|
│ [1mmanual.[0m[1;3msocks[0m[1m_proxy.port[0m │ [1mValidators[0m: │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: the value of the variable │
|
||||||
|
│ │ "manual.http_proxy.port" │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
[1;4;96mDeleted variables[0m
|
||||||
|
|
||||||
|
|
||||||
|
• manual.https_proxy.address
|
||||||
|
• manual.https_proxy.port
|
||||||
|
|
||||||
306
tests/result_tutorial/061/doc.json
Normal file
306
tests/result_tutorial/061/doc.json
Normal file
|
|
@ -0,0 +1,306 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "No proxy"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"No proxy",
|
||||||
|
"Auto-detect proxy settings for this network",
|
||||||
|
"Use system proxy settings",
|
||||||
|
"Manual proxy configuration",
|
||||||
|
"Automatic proxy configuration URL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"manual": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual",
|
||||||
|
"name": "manual",
|
||||||
|
"description": "Manual proxy configuration",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "disabled",
|
||||||
|
"ori_name": "disabled",
|
||||||
|
"access_control": true,
|
||||||
|
"annotation": {
|
||||||
|
"message": "when the variable \"{0}\" hasn't the value \"Manual proxy configuration\"",
|
||||||
|
"path": {
|
||||||
|
"path": "proxy_mode"
|
||||||
|
},
|
||||||
|
"description": "Configure Proxy Access to the Internet"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"http_proxy": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.http_proxy",
|
||||||
|
"name": "http_proxy",
|
||||||
|
"description": "HTTP Proxy",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "HTTP address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic",
|
||||||
|
"type": "variable",
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.http_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "HTTP Port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "8080"
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"use_for_https": {
|
||||||
|
"path": "manual.use_for_https",
|
||||||
|
"name": "use_for_https",
|
||||||
|
"description": "Also use this proxy for HTTPS.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": true
|
||||||
|
},
|
||||||
|
"variable_type": "boolean"
|
||||||
|
},
|
||||||
|
"{{ identifier }}_proxy": {
|
||||||
|
"type": "dynamic",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.{{ identifier }}_proxy",
|
||||||
|
"name": "{{ identifier }}_proxy",
|
||||||
|
"description": "{{ identifier }} Proxy",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "hidden",
|
||||||
|
"ori_name": "hidden",
|
||||||
|
"access_control": true,
|
||||||
|
"annotation": {
|
||||||
|
"message": "when the variable \"{0}\" has the value \"true\"",
|
||||||
|
"path": {
|
||||||
|
"path": "manual.use_for_https"
|
||||||
|
},
|
||||||
|
"description": "Also use this proxy for HTTPS"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"HTTPS"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"help": [
|
||||||
|
"This family builds families dynamically"
|
||||||
|
],
|
||||||
|
"identifier": [
|
||||||
|
"HTTPS",
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.{{ identifier }}_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "{{ identifier }} address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"HTTPS"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": {
|
||||||
|
"message": "the value of the variable \"{0}\"",
|
||||||
|
"path": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"type": "variable"
|
||||||
|
},
|
||||||
|
"description": "HTTP address"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.{{ identifier }}_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "{{ identifier }} port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"HTTPS"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": {
|
||||||
|
"message": "the value of the variable \"{0}\"",
|
||||||
|
"path": {
|
||||||
|
"path": "manual.http_proxy.port",
|
||||||
|
"type": "variable"
|
||||||
|
},
|
||||||
|
"description": "HTTP Port"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"path": "manual.{{ identifier }}_proxy.version",
|
||||||
|
"name": "version",
|
||||||
|
"description": "SOCKS host version used by proxy.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "disabled",
|
||||||
|
"ori_name": "disabled",
|
||||||
|
"access_control": true,
|
||||||
|
"annotation": "when the identifier is \"HTTPS\""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "v5"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"v4",
|
||||||
|
"v5"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
98
tests/result_tutorial/061/doc.sh
Normal file
98
tests/result_tutorial/061/doc.sh
Normal file
|
|
@ -0,0 +1,98 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
│ │ [1mChoices[0m: │
|
||||||
|
│ │ • No proxy [1m← (default)[0m │
|
||||||
|
│ │ • Auto-detect proxy settings for │
|
||||||
|
│ │ this network │
|
||||||
|
│ │ • Use system proxy settings │
|
||||||
|
│ │ • Manual proxy configuration │
|
||||||
|
│ │ • Automatic proxy configuration URL │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;4;96mManual proxy configuration[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual
|
||||||
|
[34m▌ [0m[1;7m basic [0m [1;7m [0m[1;3;7mdisabled[0m[1;7m [0m
|
||||||
|
[34m▌ [0m[1mDisabled[0m: when the variable [32m"proxy_mode"[0m hasn't the value [32m"Manual proxy [0m
|
||||||
|
[32mconfiguration"[0m
|
||||||
|
|
||||||
|
[1;4;92mHTTP Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual.http_proxy
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.http_proxy.address[0m │ HTTP address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m basic [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.http_proxy.port[0m │ HTTP Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: 8080 │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.use_for_https[0m │ Also use this proxy for HTTPS. │
|
||||||
|
│ [1;7m boolean [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mDefault[0m: true │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;3;4;92mHTTPS[0m[1;4;92m Proxy or [0m[1;3;4;92mSOCKS[0m[1;4;92m Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0mThis family builds families dynamically.
|
||||||
|
[34m▌ [0m[1mPath[0m:
|
||||||
|
[34m▌ [0m • manual.[3mhttps[0m_proxy
|
||||||
|
[34m▌ [0m • manual.[3msocks[0m_proxy
|
||||||
|
[34m▌ [0m[1;7m standard [0m [1;7m [0m[1;3;7mhidden[0m[1;7m [0m
|
||||||
|
[34m▌ [0m[1mHidden[0m: when the variable [32m"manual.use_for_https"[0m has the value [32m"true"[0m
|
||||||
|
[34m▌ [0m[1mIdentifiers[0m:
|
||||||
|
[34m▌ [0m • HTTPS
|
||||||
|
[34m▌ [0m • SOCKS
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.[0m[1;3mhttps[0m[1m_proxy.address[0m │ [3mHTTPS[0m or [3mSOCKS[0m address. │
|
||||||
|
│ [1mmanual.[0m[1;3msocks[0m[1m_proxy.address[0m │ [1mValidators[0m: │
|
||||||
|
│ [1;7m domainname [0m [1;7m standard [0m [1;7m mandatory [0m │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
│ │ [1mDefault[0m: the value of the variable │
|
||||||
|
│ │ "manual.http_proxy.address" │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.[0m[1;3mhttps[0m[1m_proxy.port[0m │ [3mHTTPS[0m or [3mSOCKS[0m port. │
|
||||||
|
│ [1mmanual.[0m[1;3msocks[0m[1m_proxy.port[0m │ [1mValidators[0m: │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: the value of the variable │
|
||||||
|
│ │ "manual.http_proxy.port" │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.[0m[1;3msocks[0m[1m_proxy.version[0m │ SOCKS host version used by proxy. │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m [1;7m [0m │ [1mChoices[0m: │
|
||||||
|
│ [1;3;7mdisabled[0m[1;7m [0m │ • v4 │
|
||||||
|
│ │ • v5 [1m← (default)[0m │
|
||||||
|
│ │ [1mDisabled[0m: when the identifier is │
|
||||||
|
│ │ "HTTPS" │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
|
||||||
13
tests/result_tutorial/061/doc_changelog.sh
Normal file
13
tests/result_tutorial/061/doc_changelog.sh
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
[1;4;96mNew variable[0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.[0m[1;3msocks[0m[1m_proxy.version[0m │ SOCKS host version used by proxy. │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m [1;7m [0m │ [1mChoices[0m: │
|
||||||
|
│ [1;3;7mdisabled[0m[1;7m [0m │ • v4 │
|
||||||
|
│ │ • v5 [1m← (default)[0m │
|
||||||
|
│ │ [1mDisabled[0m: when the identifier is │
|
||||||
|
│ │ "HTTPS" │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
300
tests/result_tutorial/070/doc.json
Normal file
300
tests/result_tutorial/070/doc.json
Normal file
|
|
@ -0,0 +1,300 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "No proxy"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"No proxy",
|
||||||
|
"Auto-detect proxy settings for this network",
|
||||||
|
"Use system proxy settings",
|
||||||
|
"Manual proxy configuration",
|
||||||
|
"Automatic proxy configuration URL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"manual": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual",
|
||||||
|
"name": "manual",
|
||||||
|
"description": "Manual proxy configuration",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "disabled",
|
||||||
|
"ori_name": "disabled",
|
||||||
|
"access_control": true,
|
||||||
|
"annotation": {
|
||||||
|
"message": "when the variable \"{0}\" hasn't the value \"Manual proxy configuration\"",
|
||||||
|
"path": {
|
||||||
|
"path": "proxy_mode"
|
||||||
|
},
|
||||||
|
"description": "Configure Proxy Access to the Internet"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"http_proxy": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.http_proxy",
|
||||||
|
"name": "http_proxy",
|
||||||
|
"description": "HTTP Proxy",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "HTTP address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic",
|
||||||
|
"type": "variable",
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.http_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "HTTP Port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "8080"
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"use_for_https": {
|
||||||
|
"path": "manual.use_for_https",
|
||||||
|
"name": "use_for_https",
|
||||||
|
"description": "Also use this proxy for HTTPS.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": true
|
||||||
|
},
|
||||||
|
"variable_type": "boolean"
|
||||||
|
},
|
||||||
|
"{{ identifier }}_proxy": {
|
||||||
|
"type": "dynamic",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.{{ identifier }}_proxy",
|
||||||
|
"name": "{{ identifier }}_proxy",
|
||||||
|
"description": "{{ identifier }} Proxy",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "hidden",
|
||||||
|
"ori_name": "hidden",
|
||||||
|
"access_control": true,
|
||||||
|
"annotation": "depends on a calculation"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"HTTPS"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"help": [
|
||||||
|
"This family builds families dynamically"
|
||||||
|
],
|
||||||
|
"identifier": [
|
||||||
|
"HTTPS",
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.{{ identifier }}_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "{{ identifier }} address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"HTTPS"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": {
|
||||||
|
"message": "the value of the variable \"{0}\"",
|
||||||
|
"path": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"type": "variable"
|
||||||
|
},
|
||||||
|
"description": "HTTP address"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.{{ identifier }}_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "{{ identifier }} port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"HTTPS"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": {
|
||||||
|
"message": "the value of the variable \"{0}\"",
|
||||||
|
"path": {
|
||||||
|
"path": "manual.http_proxy.port",
|
||||||
|
"type": "variable"
|
||||||
|
},
|
||||||
|
"description": "HTTP Port"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"path": "manual.{{ identifier }}_proxy.version",
|
||||||
|
"name": "version",
|
||||||
|
"description": "SOCKS host version used by proxy.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "disabled",
|
||||||
|
"ori_name": "disabled",
|
||||||
|
"access_control": true,
|
||||||
|
"annotation": "when the identifier is \"HTTPS\""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "v5"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"v4",
|
||||||
|
"v5"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
98
tests/result_tutorial/070/doc.sh
Normal file
98
tests/result_tutorial/070/doc.sh
Normal file
|
|
@ -0,0 +1,98 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
│ │ [1mChoices[0m: │
|
||||||
|
│ │ • No proxy [1m← (default)[0m │
|
||||||
|
│ │ • Auto-detect proxy settings for │
|
||||||
|
│ │ this network │
|
||||||
|
│ │ • Use system proxy settings │
|
||||||
|
│ │ • Manual proxy configuration │
|
||||||
|
│ │ • Automatic proxy configuration URL │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;4;96mManual proxy configuration[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual
|
||||||
|
[34m▌ [0m[1;7m basic [0m [1;7m [0m[1;3;7mdisabled[0m[1;7m [0m
|
||||||
|
[34m▌ [0m[1mDisabled[0m: when the variable [32m"proxy_mode"[0m hasn't the value [32m"Manual proxy [0m
|
||||||
|
[32mconfiguration"[0m
|
||||||
|
|
||||||
|
[1;4;92mHTTP Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual.http_proxy
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.http_proxy.address[0m │ HTTP address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m basic [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.http_proxy.port[0m │ HTTP Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: 8080 │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.use_for_https[0m │ Also use this proxy for HTTPS. │
|
||||||
|
│ [1;7m boolean [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mDefault[0m: true │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;3;4;92mHTTPS[0m[1;4;92m Proxy or [0m[1;3;4;92mSOCKS[0m[1;4;92m Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0mThis family builds families dynamically.
|
||||||
|
[34m▌ [0m[1mPath[0m:
|
||||||
|
[34m▌ [0m • manual.[3mhttps[0m_proxy
|
||||||
|
[34m▌ [0m • manual.[3msocks[0m_proxy
|
||||||
|
[34m▌ [0m[1;7m standard [0m [1;7m [0m[1;3;7mhidden[0m[1;7m [0m
|
||||||
|
[34m▌ [0m[1mHidden[0m: depends on a calculation
|
||||||
|
[34m▌ [0m[1mIdentifiers[0m:
|
||||||
|
[34m▌ [0m • HTTPS
|
||||||
|
[34m▌ [0m • SOCKS
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.[0m[1;3mhttps[0m[1m_proxy.address[0m │ [3mHTTPS[0m or [3mSOCKS[0m address. │
|
||||||
|
│ [1mmanual.[0m[1;3msocks[0m[1m_proxy.address[0m │ [1mValidators[0m: │
|
||||||
|
│ [1;7m domainname [0m [1;7m standard [0m [1;7m mandatory [0m │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
│ │ [1mDefault[0m: the value of the variable │
|
||||||
|
│ │ "manual.http_proxy.address" │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.[0m[1;3mhttps[0m[1m_proxy.port[0m │ [3mHTTPS[0m or [3mSOCKS[0m port. │
|
||||||
|
│ [1mmanual.[0m[1;3msocks[0m[1m_proxy.port[0m │ [1mValidators[0m: │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: the value of the variable │
|
||||||
|
│ │ "manual.http_proxy.port" │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.[0m[1;3msocks[0m[1m_proxy.version[0m │ SOCKS host version used by proxy. │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m [1;7m [0m │ [1mChoices[0m: │
|
||||||
|
│ [1;3;7mdisabled[0m[1;7m [0m │ • v4 │
|
||||||
|
│ │ • v5 [1m← (default)[0m │
|
||||||
|
│ │ [1mDisabled[0m: when the identifier is │
|
||||||
|
│ │ "HTTPS" │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
|
||||||
0
tests/result_tutorial/070/doc_changelog.sh
Normal file
0
tests/result_tutorial/070/doc_changelog.sh
Normal file
308
tests/result_tutorial/071/doc.json
Normal file
308
tests/result_tutorial/071/doc.json
Normal file
|
|
@ -0,0 +1,308 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "No proxy"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"No proxy",
|
||||||
|
"Auto-detect proxy settings for this network",
|
||||||
|
"Use system proxy settings",
|
||||||
|
"Manual proxy configuration",
|
||||||
|
"Automatic proxy configuration URL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"manual": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual",
|
||||||
|
"name": "manual",
|
||||||
|
"description": "Manual proxy configuration",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "disabled",
|
||||||
|
"ori_name": "disabled",
|
||||||
|
"access_control": true,
|
||||||
|
"annotation": {
|
||||||
|
"message": "when the variable \"{0}\" hasn't the value \"Manual proxy configuration\"",
|
||||||
|
"path": {
|
||||||
|
"path": "proxy_mode"
|
||||||
|
},
|
||||||
|
"description": "Configure Proxy Access to the Internet"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"http_proxy": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.http_proxy",
|
||||||
|
"name": "http_proxy",
|
||||||
|
"description": "HTTP Proxy",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "HTTP address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic",
|
||||||
|
"type": "variable",
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.http_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "HTTP Port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "8080"
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"use_for_https": {
|
||||||
|
"path": "manual.use_for_https",
|
||||||
|
"name": "use_for_https",
|
||||||
|
"description": "Also use this proxy for HTTPS.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": true
|
||||||
|
},
|
||||||
|
"variable_type": "boolean"
|
||||||
|
},
|
||||||
|
"{{ identifier }}_proxy": {
|
||||||
|
"type": "dynamic",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.{{ identifier }}_proxy",
|
||||||
|
"name": "{{ identifier }}_proxy",
|
||||||
|
"description": "{{ identifier }} Proxy",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "hidden",
|
||||||
|
"ori_name": "hidden",
|
||||||
|
"access_control": true,
|
||||||
|
"annotation": {
|
||||||
|
"description": "in HTTPS case if \"{0}\" is set to \"true\"",
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"path": "manual.use_for_https",
|
||||||
|
"description": "Also use this proxy for HTTPS"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"HTTPS"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"help": [
|
||||||
|
"This family builds families dynamically"
|
||||||
|
],
|
||||||
|
"identifier": [
|
||||||
|
"HTTPS",
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.{{ identifier }}_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "{{ identifier }} address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"HTTPS"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": {
|
||||||
|
"message": "the value of the variable \"{0}\"",
|
||||||
|
"path": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"type": "variable"
|
||||||
|
},
|
||||||
|
"description": "HTTP address"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.{{ identifier }}_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "{{ identifier }} port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"HTTPS"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": {
|
||||||
|
"message": "the value of the variable \"{0}\"",
|
||||||
|
"path": {
|
||||||
|
"path": "manual.http_proxy.port",
|
||||||
|
"type": "variable"
|
||||||
|
},
|
||||||
|
"description": "HTTP Port"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"path": "manual.{{ identifier }}_proxy.version",
|
||||||
|
"name": "version",
|
||||||
|
"description": "SOCKS host version used by proxy.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "disabled",
|
||||||
|
"ori_name": "disabled",
|
||||||
|
"access_control": true,
|
||||||
|
"annotation": "when the identifier is \"HTTPS\""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "v5"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"v4",
|
||||||
|
"v5"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
98
tests/result_tutorial/071/doc.sh
Normal file
98
tests/result_tutorial/071/doc.sh
Normal file
|
|
@ -0,0 +1,98 @@
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mproxy_mode[0m │ Configure Proxy Access to the │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m │ Internet. │
|
||||||
|
│ │ [1mChoices[0m: │
|
||||||
|
│ │ • No proxy [1m← (default)[0m │
|
||||||
|
│ │ • Auto-detect proxy settings for │
|
||||||
|
│ │ this network │
|
||||||
|
│ │ • Use system proxy settings │
|
||||||
|
│ │ • Manual proxy configuration │
|
||||||
|
│ │ • Automatic proxy configuration URL │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;4;96mManual proxy configuration[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual
|
||||||
|
[34m▌ [0m[1;7m basic [0m [1;7m [0m[1;3;7mdisabled[0m[1;7m [0m
|
||||||
|
[34m▌ [0m[1mDisabled[0m: when the variable [32m"proxy_mode"[0m hasn't the value [32m"Manual proxy [0m
|
||||||
|
[32mconfiguration"[0m
|
||||||
|
|
||||||
|
[1;4;92mHTTP Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0m[1mPath[0m: manual.http_proxy
|
||||||
|
[34m▌ [0m[1;7m basic [0m
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.http_proxy.address[0m │ HTTP address. │
|
||||||
|
│ [1;7m domainname [0m [1;7m basic [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.http_proxy.port[0m │ HTTP Port. │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mValidators[0m: │
|
||||||
|
│ │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: 8080 │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.use_for_https[0m │ Also use this proxy for HTTPS. │
|
||||||
|
│ [1;7m boolean [0m [1;7m standard [0m [1;7m mandatory [0m │ [1mDefault[0m: true │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
[1;3;4;92mHTTPS[0m[1;4;92m Proxy or [0m[1;3;4;92mSOCKS[0m[1;4;92m Proxy[0m
|
||||||
|
|
||||||
|
[34m▌ [0m[1;34m🛈 Informations[0m
|
||||||
|
[34m▌ [0m
|
||||||
|
[34m▌ [0mThis family builds families dynamically.
|
||||||
|
[34m▌ [0m[1mPath[0m:
|
||||||
|
[34m▌ [0m • manual.[3mhttps[0m_proxy
|
||||||
|
[34m▌ [0m • manual.[3msocks[0m_proxy
|
||||||
|
[34m▌ [0m[1;7m standard [0m [1;7m [0m[1;3;7mhidden[0m[1;7m [0m
|
||||||
|
[34m▌ [0m[1mHidden[0m: in HTTPS case if [32m"manual.use_for_https"[0m is set to [32m"true"[0m
|
||||||
|
[34m▌ [0m[1mIdentifiers[0m:
|
||||||
|
[34m▌ [0m • HTTPS
|
||||||
|
[34m▌ [0m • SOCKS
|
||||||
|
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃[1m [0m[1mVariable [0m[1m [0m┃[1m [0m[1mDescription [0m[1m [0m┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ [1mmanual.[0m[1;3mhttps[0m[1m_proxy.address[0m │ [3mHTTPS[0m or [3mSOCKS[0m address. │
|
||||||
|
│ [1mmanual.[0m[1;3msocks[0m[1m_proxy.address[0m │ [1mValidators[0m: │
|
||||||
|
│ [1;7m domainname [0m [1;7m standard [0m [1;7m mandatory [0m │ • type domainname │
|
||||||
|
│ │ • the domain name can be an IP │
|
||||||
|
│ │ [1mDefault[0m: the value of the variable │
|
||||||
|
│ │ "manual.http_proxy.address" │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.[0m[1;3mhttps[0m[1m_proxy.port[0m │ [3mHTTPS[0m or [3mSOCKS[0m port. │
|
||||||
|
│ [1mmanual.[0m[1;3msocks[0m[1m_proxy.port[0m │ [1mValidators[0m: │
|
||||||
|
│ [1;7m port [0m [1;7m standard [0m [1;7m mandatory [0m │ • well-known ports (1 to 1023) are │
|
||||||
|
│ │ allowed │
|
||||||
|
│ │ • registred ports (1024 to 49151) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ • private ports (greater than 49152) │
|
||||||
|
│ │ are allowed │
|
||||||
|
│ │ [1mDefault[0m: the value of the variable │
|
||||||
|
│ │ "manual.http_proxy.port" │
|
||||||
|
├───────────────────────────────────────┼──────────────────────────────────────┤
|
||||||
|
│ [1mmanual.[0m[1;3msocks[0m[1m_proxy.version[0m │ SOCKS host version used by proxy. │
|
||||||
|
│ [1;7m choice [0m [1;7m standard [0m [1;7m mandatory [0m [1;7m [0m │ [1mChoices[0m: │
|
||||||
|
│ [1;3;7mdisabled[0m[1;7m [0m │ • v4 │
|
||||||
|
│ │ • v5 [1m← (default)[0m │
|
||||||
|
│ │ [1mDisabled[0m: when the identifier is │
|
||||||
|
│ │ "HTTPS" │
|
||||||
|
└───────────────────────────────────────┴──────────────────────────────────────┘
|
||||||
|
|
||||||
|
|
||||||
0
tests/result_tutorial/071/doc_changelog.sh
Normal file
0
tests/result_tutorial/071/doc_changelog.sh
Normal file
308
tests/result_tutorial/072/doc.json
Normal file
308
tests/result_tutorial/072/doc.json
Normal file
|
|
@ -0,0 +1,308 @@
|
||||||
|
{
|
||||||
|
"proxy_mode": {
|
||||||
|
"path": "proxy_mode",
|
||||||
|
"name": "proxy_mode",
|
||||||
|
"description": "Configure Proxy Access to the Internet.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "No proxy"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"No proxy",
|
||||||
|
"Auto-detect proxy settings for this network",
|
||||||
|
"Use system proxy settings",
|
||||||
|
"Manual proxy configuration",
|
||||||
|
"Automatic proxy configuration URL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"manual": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual",
|
||||||
|
"name": "manual",
|
||||||
|
"description": "Manual proxy configuration",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "disabled",
|
||||||
|
"ori_name": "disabled",
|
||||||
|
"access_control": true,
|
||||||
|
"annotation": {
|
||||||
|
"message": "when the variable \"{0}\" hasn't the value \"Manual proxy configuration\"",
|
||||||
|
"path": {
|
||||||
|
"path": "proxy_mode"
|
||||||
|
},
|
||||||
|
"description": "Configure Proxy Access to the Internet"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"http_proxy": {
|
||||||
|
"type": "family",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.http_proxy",
|
||||||
|
"name": "http_proxy",
|
||||||
|
"description": "HTTP Proxy",
|
||||||
|
"properties": [],
|
||||||
|
"mode": "basic"
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "HTTP address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "basic",
|
||||||
|
"type": "variable",
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.http_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "HTTP Port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "8080"
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"use_for_https": {
|
||||||
|
"path": "manual.use_for_https",
|
||||||
|
"name": "use_for_https",
|
||||||
|
"description": "Also use this proxy for HTTPS.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": true
|
||||||
|
},
|
||||||
|
"variable_type": "boolean"
|
||||||
|
},
|
||||||
|
"{{ identifier }}_proxy": {
|
||||||
|
"type": "dynamic",
|
||||||
|
"informations": {
|
||||||
|
"path": "manual.{{ identifier }}_proxy",
|
||||||
|
"name": "{{ identifier }}_proxy",
|
||||||
|
"description": "{{ identifier }} Proxy",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "hidden",
|
||||||
|
"ori_name": "hidden",
|
||||||
|
"access_control": true,
|
||||||
|
"annotation": {
|
||||||
|
"description": "in HTTPS case if \"{0}\" is set to \"true\"",
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"path": "manual.use_for_https",
|
||||||
|
"description": "Also use this proxy for HTTPS"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"HTTPS"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"help": [
|
||||||
|
"This family builds families dynamically"
|
||||||
|
],
|
||||||
|
"identifier": [
|
||||||
|
"HTTPS",
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"address": {
|
||||||
|
"path": "manual.{{ identifier }}_proxy.address",
|
||||||
|
"name": "address",
|
||||||
|
"description": "{{ identifier }} address.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"HTTPS"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": {
|
||||||
|
"message": "the value of the variable \"{0}\"",
|
||||||
|
"path": {
|
||||||
|
"path": "manual.http_proxy.address",
|
||||||
|
"type": "variable"
|
||||||
|
},
|
||||||
|
"description": "HTTP address"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variable_type": "domainname",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"type domainname",
|
||||||
|
"the domain name can be an IP"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"path": "manual.{{ identifier }}_proxy.port",
|
||||||
|
"name": "port",
|
||||||
|
"description": "{{ identifier }} port.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"HTTPS"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": {
|
||||||
|
"message": "the value of the variable \"{0}\"",
|
||||||
|
"path": {
|
||||||
|
"path": "manual.http_proxy.port",
|
||||||
|
"type": "variable"
|
||||||
|
},
|
||||||
|
"description": "HTTP Port"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variable_type": "port",
|
||||||
|
"validators": {
|
||||||
|
"name": "Validators",
|
||||||
|
"values": [
|
||||||
|
"well-known ports (1 to 1023) are allowed",
|
||||||
|
"registred ports (1024 to 49151) are allowed",
|
||||||
|
"private ports (greater than 49152) are allowed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"path": "manual.{{ identifier }}_proxy.version",
|
||||||
|
"name": "version",
|
||||||
|
"description": "SOCKS host version used by proxy.",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "mandatory",
|
||||||
|
"ori_name": "mandatory",
|
||||||
|
"access_control": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "property",
|
||||||
|
"name": "disabled",
|
||||||
|
"ori_name": "disabled",
|
||||||
|
"access_control": true,
|
||||||
|
"annotation": "when the identifier is \"HTTPS\""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mode": "standard",
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"SOCKS"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "variable",
|
||||||
|
"default": {
|
||||||
|
"name": "Default",
|
||||||
|
"values": "v5"
|
||||||
|
},
|
||||||
|
"variable_type": "choice",
|
||||||
|
"choices": {
|
||||||
|
"name": "Choices",
|
||||||
|
"values": [
|
||||||
|
"v4",
|
||||||
|
"v5"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue