diff --git a/src/rougail/output_doc/doc.py b/src/rougail/output_doc/doc.py
index dde71bc41..f153f58ef 100644
--- a/src/rougail/output_doc/doc.py
+++ b/src/rougail/output_doc/doc.py
@@ -119,13 +119,23 @@ class RougailOutputDoc(Examples, Changelog):
self.property_to_string = get_properties_to_string()
self.outputs = OutPuts().get()
self.dynamic_paths = {}
+ if self.config.type() in ['config', 'metaconfig', 'groupconfig', 'mixconfig']:
+ self.populate_dynamics(config=self.true_config.unrestraint)
+ else:
+ family = self.true_config
+ one_is_dynamic = False
+ for path in self.config.path().split('.'):
+ family = family.option(path)
+ if family.isdynamic():
+ self.populate_dynamic(family, False, False)
+ one_is_dynamic = True
+ if family.isoptiondescription() and one_is_dynamic:
+ self.populate_dynamics(config=family)
if not self.config.isoptiondescription():
informations = {}
- self.parse_variable(self.config, None, informations)
+ self.parse_variable(self.config.unrestraint, None, informations)
else:
- config = self.config.unrestraint
- self.populate_dynamics(config=config)
- informations = self.parse_families(config)
+ informations = self.parse_families(self.config.unrestraint)
if informations is None:
informations = {}
elif self.config.type() not in ['config', 'metaconfig', 'groupconfig', 'mixconfig']:
@@ -136,15 +146,15 @@ class RougailOutputDoc(Examples, Changelog):
family = family.option(path)
name = family.name(uncalculated=True)
if family.isoptiondescription():
- infos[name] = self.get_root_family(family)
+ infos[name] = self.get_root_family(family, with_identifier=False)
infos = infos[name]["children"]
infos.update(informations)
informations = root_informations
self.informations = informations
- def get_root_family(self, family):
+ def get_root_family(self, family, with_identifier=True):
family_informations = self._populate_family(
- family,
+ family, with_identifier=with_identifier
)
if family_informations is not False:
return {
@@ -154,18 +164,15 @@ class RougailOutputDoc(Examples, Changelog):
}
def populate_dynamics(self, *, config=None, reload=False):
+ # "reload" is used in rougail-user-data-html
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)
+ self.populate_dynamic(child, reload, uncalculated)
if child.isoptiondescription():
self._populate_dynamics(child, reload, uncalculated)
for child in family.list(uncalculated=uncalculated):
@@ -175,7 +182,7 @@ class RougailOutputDoc(Examples, Changelog):
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:
+ def populate_dynamic(self, obj, reload, uncalculated) -> None:
path = obj.path(uncalculated=True)
if path not in self.dynamic_paths:
new_name = True
@@ -186,6 +193,10 @@ class RougailOutputDoc(Examples, Changelog):
"identifiers": [],
"path": self.doc_path(path),
}
+ if obj.isoptiondescription():
+ type_ = "family"
+ else:
+ type_ = "variable"
if not obj.information.get("forced_description", False):
self.dynamic_paths[path]["description"] = self._convert_description(
description, type_, its_a_path=False
@@ -325,8 +336,6 @@ class RougailOutputDoc(Examples, Changelog):
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(
@@ -350,6 +359,8 @@ class RougailOutputDoc(Examples, Changelog):
def _populate_family(
self,
family,
+ *,
+ with_identifier: bool=True,
) -> dict:
path = family.path(uncalculated=True)
if family.isdynamic():
@@ -363,12 +374,13 @@ class RougailOutputDoc(Examples, Changelog):
_("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
+ if with_identifier:
+ 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")
)
diff --git a/tests/root/00_file.yml b/tests/root/00_file.yml
index 584c94e28..d8ab8d66e 100644
--- a/tests/root/00_file.yml
+++ b/tests/root/00_file.yml
@@ -17,5 +17,26 @@ a_family: # first family
description: a new variable
default:
variable: ___.a_variable
+
a_variable: 2 # a root variable
+
+a_dynamic_{{ identifier }}:
+ description: A dynamic {{ identifier }}
+ dynamic:
+ - family1
+ - family2
+
+ a_variable: a_value # A variable
+
+ a_subfamily: # A sub family
+
+ a_variable: a_value # A variable
+
+ a_subdyn_{{ identifier }}:
+ description: A dynamic {{ identifier }}
+ dynamic:
+ - family3
+ - family4
+
+ a_variable: a_value # A variable
...
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable.adoc b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable.adoc
new file mode 100644
index 000000000..6b185b599
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable.adoc
@@ -0,0 +1,24 @@
+== A dynamic __family1__
+
+====
+**π Informations**
+
+This family builds families dynamically. +
+**Path**: a_dynamic___family1__
+====
+=== A dynamic __family4__
+
+====
+**π Informations**
+
+This family builds families dynamically. +
+**Path**: a_dynamic___family1__.a_subdyn___family4__
+====
+[cols="1a,1a"]
+|====
+| Variable | Description
+| **a_dynamic___family1__.a_subdyn___family4__.a_variable** +
+`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `mandatory` | A variable. +
+**Default**: a_value
+|====
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable.gitlab.md b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable.gitlab.md
new file mode 100644
index 000000000..ac156a568
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable.gitlab.md
@@ -0,0 +1,20 @@
+A dynamic *family1*
+
+> [!note] π Informations
+> This family builds families dynamically.\
+> **Path**: a_dynamic_*family1*
+
+A dynamic *family4*
+
+> [!note] π Informations
+> This family builds families dynamically.\
+> **Path**: a_dynamic_*family1*.a_subdyn_*family4*
+
+| Variable | Description |
+|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_subdyn_*family4*.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
+
+
+
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable.html b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable.html
new file mode 100644
index 000000000..210cc34d0
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable.html
@@ -0,0 +1,21 @@
+
A dynamic <i>family1</i>
+
+This family builds families dynamically.
+
+Path: a_dynamic_family1
+
+A dynamic <i>family4</i>
+
+This family builds families dynamically.
+
+Path: a_dynamic_family1.a_subdyn_family4
+
+
+
+| Variable | Description |
+
+
+a_dynamic_family1.a_subdyn_family4.a_variable string mandatory | A variable. Default: a_value |
+
+
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable.json b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable.json
new file mode 100644
index 000000000..3b963f596
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable.json
@@ -0,0 +1,76 @@
+{
+ "a_dynamic_{{ identifier }}": {
+ "type": "dynamic",
+ "informations": {
+ "names": [
+ "a_dynamic_family1"
+ ],
+ "identifiers": [
+ [
+ "family1"
+ ]
+ ],
+ "path": "a_dynamic_{{ identifier }}",
+ "description": "A dynamic {{ identifier }}",
+ "properties": [],
+ "help": [
+ "This family builds families dynamically"
+ ]
+ },
+ "children": {
+ "a_subdyn_{{ identifier }}": {
+ "type": "dynamic",
+ "informations": {
+ "names": [
+ "a_subdyn_family4"
+ ],
+ "identifiers": [
+ [
+ "family1",
+ "family4"
+ ]
+ ],
+ "path": "a_dynamic_{{ identifier }}.a_subdyn_{{ identifier }}",
+ "description": "A dynamic {{ identifier }}",
+ "properties": [],
+ "help": [
+ "This family builds families dynamically"
+ ]
+ },
+ "children": {
+ "a_variable": {
+ "names": [
+ "a_variable"
+ ],
+ "identifiers": [
+ [
+ "family1",
+ "family4"
+ ]
+ ],
+ "path": "a_dynamic_{{ identifier }}.a_subdyn_{{ identifier }}.a_variable",
+ "description": "A variable.",
+ "type": "variable",
+ "default": {
+ "name": "Default",
+ "values": "a_value"
+ },
+ "variable_type": "string",
+ "properties": [
+ {
+ "type": "property",
+ "name": "mandatory",
+ "ori_name": "mandatory",
+ "access_control": false
+ }
+ ],
+ "gen_examples": [
+ "a_value"
+ ],
+ "mandatory_without_value": false
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable.md b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable.md
new file mode 100644
index 000000000..05149b9c5
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable.md
@@ -0,0 +1,18 @@
+# A dynamic *family1*
+
+> [!NOTE]
+>
+> This family builds families dynamically.\
+> **Path**: a_dynamic_*family1*
+
+## A dynamic *family4*
+
+> [!NOTE]
+>
+> This family builds families dynamically.\
+> **Path**: a_dynamic_*family1*.a_subdyn_*family4*
+
+| Variable | Description |
+|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_subdyn_*family4*.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable.sh b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable.sh
new file mode 100644
index 000000000..172db49cb
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable.sh
@@ -0,0 +1,22 @@
+[1;4;96mA dynamic [0m[1;3;4;96mfamily1[0m
+
+[34mβ [0m[1;34mπ Informations[0m
+[34mβ [0m
+[34mβ [0mThis family builds families dynamically.
+[34mβ [0m[1mPath[0m: a_dynamic_[3mfamily1[0m
+
+ [1;4;92mA dynamic [0m[1;3;4;92mfamily4[0m
+
+[34mβ [0m[1;34mπ Informations[0m
+[34mβ [0m
+[34mβ [0mThis family builds families dynamically.
+[34mβ [0m[1mPath[0m: a_dynamic_[3mfamily1[0m.a_subdyn_[3mfamily4[0m
+
+βββββββββββββββββββββββββββββββββββββββββ³βββββββββββββββββββββββββββββββββββββββ
+β[1m [0m[1mVariable [0m[1m [0mβ[1m [0m[1mDescription [0m[1m [0mβ
+β‘βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
+β [1ma_dynamic_[0m[1;3mfamily1[0m[1m.a_subdyn_[0m[1;3mfamily4[0m[1m.aβ¦[0m β A variable. β
+β [1;7m string [0m [1;7m mandatory [0m β [1mDefault[0m: a_value β
+βββββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ
+
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_changelog.adoc b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_changelog.adoc
new file mode 100644
index 000000000..8bb54bb47
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_changelog.adoc
@@ -0,0 +1,10 @@
+== New variable
+
+[cols="1a,1a"]
+|====
+| Variable | Description
+| **a_dynamic___family1__.a_subdyn___family4__.a_variable** +
+`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `mandatory` | A variable. +
+**Default**: a_value
+|====
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_changelog.gitlab.md b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_changelog.gitlab.md
new file mode 100644
index 000000000..ba063b63e
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_changelog.gitlab.md
@@ -0,0 +1,8 @@
+New variable
+
+| Variable | Description |
+|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_subdyn_*family4*.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
+
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_changelog.html b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_changelog.html
new file mode 100644
index 000000000..cfc4b9730
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_changelog.html
@@ -0,0 +1,11 @@
+New variable
+
+
+
+| Variable | Description |
+
+
+a_dynamic_family1.a_subdyn_family4.a_variable string mandatory | A variable. Default: a_value |
+
+
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_changelog.md b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_changelog.md
new file mode 100644
index 000000000..376513be5
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_changelog.md
@@ -0,0 +1,6 @@
+# New variable
+
+| Variable | Description |
+|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_subdyn_*family4*.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_changelog.sh b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_changelog.sh
new file mode 100644
index 000000000..f10aa3a25
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_changelog.sh
@@ -0,0 +1,9 @@
+[1;4;96mNew variable[0m
+
+βββββββββββββββββββββββββββββββββββββββββ³βββββββββββββββββββββββββββββββββββββββ
+β[1m [0m[1mVariable [0m[1m [0mβ[1m [0m[1mDescription [0m[1m [0mβ
+β‘βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
+β [1ma_dynamic_[0m[1;3mfamily1[0m[1m.a_subdyn_[0m[1;3mfamily4[0m[1m.aβ¦[0m β A variable. β
+β [1;7m string [0m [1;7m mandatory [0m β [1mDefault[0m: a_value β
+βββββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_example.adoc b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_example.adoc
new file mode 100644
index 000000000..1bd5356e3
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_example.adoc
@@ -0,0 +1,9 @@
+== Example with all variables modifiable
+
+[,yaml]
+----
+---
+a_dynamic_family1:
+ a_subdyn_family4:
+ a_variable: a_value
+----
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_example.gitlab.md b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_example.gitlab.md
new file mode 100644
index 000000000..497dd026a
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_example.gitlab.md
@@ -0,0 +1,10 @@
+Example with all variables modifiable
+
+```yaml
+---
+a_dynamic_family1:
+ a_subdyn_family4:
+ a_variable: a_value
+```
+
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_example.html b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_example.html
new file mode 100644
index 000000000..1329ec518
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_example.html
@@ -0,0 +1,5 @@
+Example with all variables modifiable
+
+a_dynamic_family1:
+ a_subdyn_family4:
+ a_variable: a_value
\ No newline at end of file
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_example.md b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_example.md
new file mode 100644
index 000000000..9c79b53e1
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_example.md
@@ -0,0 +1,8 @@
+# Example with all variables modifiable
+
+```yaml
+---
+a_dynamic_family1:
+ a_subdyn_family4:
+ a_variable: a_value
+```
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_example.sh b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_example.sh
new file mode 100644
index 000000000..399d59452
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.a_variable_example.sh
@@ -0,0 +1,7 @@
+[1;4;96mExample with all variables modifiable[0m
+
+[38;2;248;248;242;48;2;39;40;34m---[0m[48;2;39;40;34m [0m
+[38;2;255;70;137;48;2;39;40;34ma_dynamic_family1[0m[38;2;248;248;242;48;2;39;40;34m:[0m[48;2;39;40;34m [0m
+[38;2;248;248;242;48;2;39;40;34m [0m[38;2;255;70;137;48;2;39;40;34ma_subdyn_family4[0m[38;2;248;248;242;48;2;39;40;34m:[0m[48;2;39;40;34m [0m
+[38;2;248;248;242;48;2;39;40;34m [0m[38;2;255;70;137;48;2;39;40;34ma_variable[0m[38;2;248;248;242;48;2;39;40;34m:[0m[38;2;248;248;242;48;2;39;40;34m [0m[48;2;39;40;34ma_value [0m
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.adoc b/tests/root_a_dynamic_family1.a_subdyn_family4.adoc
new file mode 100644
index 000000000..6b185b599
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.adoc
@@ -0,0 +1,24 @@
+== A dynamic __family1__
+
+====
+**π Informations**
+
+This family builds families dynamically. +
+**Path**: a_dynamic___family1__
+====
+=== A dynamic __family4__
+
+====
+**π Informations**
+
+This family builds families dynamically. +
+**Path**: a_dynamic___family1__.a_subdyn___family4__
+====
+[cols="1a,1a"]
+|====
+| Variable | Description
+| **a_dynamic___family1__.a_subdyn___family4__.a_variable** +
+`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `mandatory` | A variable. +
+**Default**: a_value
+|====
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.gitlab.md b/tests/root_a_dynamic_family1.a_subdyn_family4.gitlab.md
new file mode 100644
index 000000000..ac156a568
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.gitlab.md
@@ -0,0 +1,20 @@
+A dynamic *family1*
+
+> [!note] π Informations
+> This family builds families dynamically.\
+> **Path**: a_dynamic_*family1*
+
+A dynamic *family4*
+
+> [!note] π Informations
+> This family builds families dynamically.\
+> **Path**: a_dynamic_*family1*.a_subdyn_*family4*
+
+| Variable | Description |
+|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_subdyn_*family4*.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
+
+
+
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.html b/tests/root_a_dynamic_family1.a_subdyn_family4.html
new file mode 100644
index 000000000..210cc34d0
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.html
@@ -0,0 +1,21 @@
+A dynamic <i>family1</i>
+
+This family builds families dynamically.
+
+Path: a_dynamic_family1
+
+A dynamic <i>family4</i>
+
+This family builds families dynamically.
+
+Path: a_dynamic_family1.a_subdyn_family4
+
+
+
+| Variable | Description |
+
+
+a_dynamic_family1.a_subdyn_family4.a_variable string mandatory | A variable. Default: a_value |
+
+
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.json b/tests/root_a_dynamic_family1.a_subdyn_family4.json
new file mode 100644
index 000000000..3b963f596
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.json
@@ -0,0 +1,76 @@
+{
+ "a_dynamic_{{ identifier }}": {
+ "type": "dynamic",
+ "informations": {
+ "names": [
+ "a_dynamic_family1"
+ ],
+ "identifiers": [
+ [
+ "family1"
+ ]
+ ],
+ "path": "a_dynamic_{{ identifier }}",
+ "description": "A dynamic {{ identifier }}",
+ "properties": [],
+ "help": [
+ "This family builds families dynamically"
+ ]
+ },
+ "children": {
+ "a_subdyn_{{ identifier }}": {
+ "type": "dynamic",
+ "informations": {
+ "names": [
+ "a_subdyn_family4"
+ ],
+ "identifiers": [
+ [
+ "family1",
+ "family4"
+ ]
+ ],
+ "path": "a_dynamic_{{ identifier }}.a_subdyn_{{ identifier }}",
+ "description": "A dynamic {{ identifier }}",
+ "properties": [],
+ "help": [
+ "This family builds families dynamically"
+ ]
+ },
+ "children": {
+ "a_variable": {
+ "names": [
+ "a_variable"
+ ],
+ "identifiers": [
+ [
+ "family1",
+ "family4"
+ ]
+ ],
+ "path": "a_dynamic_{{ identifier }}.a_subdyn_{{ identifier }}.a_variable",
+ "description": "A variable.",
+ "type": "variable",
+ "default": {
+ "name": "Default",
+ "values": "a_value"
+ },
+ "variable_type": "string",
+ "properties": [
+ {
+ "type": "property",
+ "name": "mandatory",
+ "ori_name": "mandatory",
+ "access_control": false
+ }
+ ],
+ "gen_examples": [
+ "a_value"
+ ],
+ "mandatory_without_value": false
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.md b/tests/root_a_dynamic_family1.a_subdyn_family4.md
new file mode 100644
index 000000000..05149b9c5
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.md
@@ -0,0 +1,18 @@
+# A dynamic *family1*
+
+> [!NOTE]
+>
+> This family builds families dynamically.\
+> **Path**: a_dynamic_*family1*
+
+## A dynamic *family4*
+
+> [!NOTE]
+>
+> This family builds families dynamically.\
+> **Path**: a_dynamic_*family1*.a_subdyn_*family4*
+
+| Variable | Description |
+|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_subdyn_*family4*.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4.sh b/tests/root_a_dynamic_family1.a_subdyn_family4.sh
new file mode 100644
index 000000000..172db49cb
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4.sh
@@ -0,0 +1,22 @@
+[1;4;96mA dynamic [0m[1;3;4;96mfamily1[0m
+
+[34mβ [0m[1;34mπ Informations[0m
+[34mβ [0m
+[34mβ [0mThis family builds families dynamically.
+[34mβ [0m[1mPath[0m: a_dynamic_[3mfamily1[0m
+
+ [1;4;92mA dynamic [0m[1;3;4;92mfamily4[0m
+
+[34mβ [0m[1;34mπ Informations[0m
+[34mβ [0m
+[34mβ [0mThis family builds families dynamically.
+[34mβ [0m[1mPath[0m: a_dynamic_[3mfamily1[0m.a_subdyn_[3mfamily4[0m
+
+βββββββββββββββββββββββββββββββββββββββββ³βββββββββββββββββββββββββββββββββββββββ
+β[1m [0m[1mVariable [0m[1m [0mβ[1m [0m[1mDescription [0m[1m [0mβ
+β‘βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
+β [1ma_dynamic_[0m[1;3mfamily1[0m[1m.a_subdyn_[0m[1;3mfamily4[0m[1m.aβ¦[0m β A variable. β
+β [1;7m string [0m [1;7m mandatory [0m β [1mDefault[0m: a_value β
+βββββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ
+
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4_changelog.adoc b/tests/root_a_dynamic_family1.a_subdyn_family4_changelog.adoc
new file mode 100644
index 000000000..8bb54bb47
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4_changelog.adoc
@@ -0,0 +1,10 @@
+== New variable
+
+[cols="1a,1a"]
+|====
+| Variable | Description
+| **a_dynamic___family1__.a_subdyn___family4__.a_variable** +
+`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `mandatory` | A variable. +
+**Default**: a_value
+|====
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4_changelog.gitlab.md b/tests/root_a_dynamic_family1.a_subdyn_family4_changelog.gitlab.md
new file mode 100644
index 000000000..ba063b63e
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4_changelog.gitlab.md
@@ -0,0 +1,8 @@
+New variable
+
+| Variable | Description |
+|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_subdyn_*family4*.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
+
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4_changelog.html b/tests/root_a_dynamic_family1.a_subdyn_family4_changelog.html
new file mode 100644
index 000000000..cfc4b9730
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4_changelog.html
@@ -0,0 +1,11 @@
+New variable
+
+
+
+| Variable | Description |
+
+
+a_dynamic_family1.a_subdyn_family4.a_variable string mandatory | A variable. Default: a_value |
+
+
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4_changelog.md b/tests/root_a_dynamic_family1.a_subdyn_family4_changelog.md
new file mode 100644
index 000000000..376513be5
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4_changelog.md
@@ -0,0 +1,6 @@
+# New variable
+
+| Variable | Description |
+|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_subdyn_*family4*.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4_changelog.sh b/tests/root_a_dynamic_family1.a_subdyn_family4_changelog.sh
new file mode 100644
index 000000000..f10aa3a25
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4_changelog.sh
@@ -0,0 +1,9 @@
+[1;4;96mNew variable[0m
+
+βββββββββββββββββββββββββββββββββββββββββ³βββββββββββββββββββββββββββββββββββββββ
+β[1m [0m[1mVariable [0m[1m [0mβ[1m [0m[1mDescription [0m[1m [0mβ
+β‘βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
+β [1ma_dynamic_[0m[1;3mfamily1[0m[1m.a_subdyn_[0m[1;3mfamily4[0m[1m.aβ¦[0m β A variable. β
+β [1;7m string [0m [1;7m mandatory [0m β [1mDefault[0m: a_value β
+βββββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4_example.adoc b/tests/root_a_dynamic_family1.a_subdyn_family4_example.adoc
new file mode 100644
index 000000000..1bd5356e3
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4_example.adoc
@@ -0,0 +1,9 @@
+== Example with all variables modifiable
+
+[,yaml]
+----
+---
+a_dynamic_family1:
+ a_subdyn_family4:
+ a_variable: a_value
+----
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4_example.gitlab.md b/tests/root_a_dynamic_family1.a_subdyn_family4_example.gitlab.md
new file mode 100644
index 000000000..497dd026a
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4_example.gitlab.md
@@ -0,0 +1,10 @@
+Example with all variables modifiable
+
+```yaml
+---
+a_dynamic_family1:
+ a_subdyn_family4:
+ a_variable: a_value
+```
+
+
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4_example.html b/tests/root_a_dynamic_family1.a_subdyn_family4_example.html
new file mode 100644
index 000000000..1329ec518
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4_example.html
@@ -0,0 +1,5 @@
+Example with all variables modifiable
+
+a_dynamic_family1:
+ a_subdyn_family4:
+ a_variable: a_value
\ No newline at end of file
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4_example.md b/tests/root_a_dynamic_family1.a_subdyn_family4_example.md
new file mode 100644
index 000000000..9c79b53e1
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4_example.md
@@ -0,0 +1,8 @@
+# Example with all variables modifiable
+
+```yaml
+---
+a_dynamic_family1:
+ a_subdyn_family4:
+ a_variable: a_value
+```
diff --git a/tests/root_a_dynamic_family1.a_subdyn_family4_example.sh b/tests/root_a_dynamic_family1.a_subdyn_family4_example.sh
new file mode 100644
index 000000000..399d59452
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subdyn_family4_example.sh
@@ -0,0 +1,7 @@
+[1;4;96mExample with all variables modifiable[0m
+
+[38;2;248;248;242;48;2;39;40;34m---[0m[48;2;39;40;34m [0m
+[38;2;255;70;137;48;2;39;40;34ma_dynamic_family1[0m[38;2;248;248;242;48;2;39;40;34m:[0m[48;2;39;40;34m [0m
+[38;2;248;248;242;48;2;39;40;34m [0m[38;2;255;70;137;48;2;39;40;34ma_subdyn_family4[0m[38;2;248;248;242;48;2;39;40;34m:[0m[48;2;39;40;34m [0m
+[38;2;248;248;242;48;2;39;40;34m [0m[38;2;255;70;137;48;2;39;40;34ma_variable[0m[38;2;248;248;242;48;2;39;40;34m:[0m[38;2;248;248;242;48;2;39;40;34m [0m[48;2;39;40;34ma_value [0m
+
diff --git a/tests/root_a_dynamic_family1.a_subfamily.adoc b/tests/root_a_dynamic_family1.a_subfamily.adoc
new file mode 100644
index 000000000..78dbb30db
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subfamily.adoc
@@ -0,0 +1,23 @@
+== A dynamic __family1__
+
+====
+**π Informations**
+
+This family builds families dynamically. +
+**Path**: a_dynamic___family1__
+====
+=== A sub family
+
+====
+**π Informations**
+
+**Path**: a_dynamic___family1__.a_subfamily
+====
+[cols="1a,1a"]
+|====
+| Variable | Description
+| **a_dynamic___family1__.a_subfamily.a_variable** +
+`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `mandatory` | A variable. +
+**Default**: a_value
+|====
+
diff --git a/tests/root_a_dynamic_family1.a_subfamily.gitlab.md b/tests/root_a_dynamic_family1.a_subfamily.gitlab.md
new file mode 100644
index 000000000..bf3df89b3
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subfamily.gitlab.md
@@ -0,0 +1,19 @@
+A dynamic *family1*
+
+> [!note] π Informations
+> This family builds families dynamically.\
+> **Path**: a_dynamic_*family1*
+
+A sub family
+
+> [!note] π Informations
+> **Path**: a_dynamic_*family1*.a_subfamily
+
+| Variable | Description |
+|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_subfamily.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
+
+
+
+
diff --git a/tests/root_a_dynamic_family1.a_subfamily.html b/tests/root_a_dynamic_family1.a_subfamily.html
new file mode 100644
index 000000000..4858fd32c
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subfamily.html
@@ -0,0 +1,19 @@
+A dynamic <i>family1</i>
+
+This family builds families dynamically.
+
+Path: a_dynamic_family1
+
+A sub family
+
+Path: a_dynamic_family1.a_subfamily
+
+
+
+| Variable | Description |
+
+
+a_dynamic_family1.a_subfamily.a_variable string mandatory | A variable. Default: a_value |
+
+
+
diff --git a/tests/root_a_dynamic_family1.a_subfamily.json b/tests/root_a_dynamic_family1.a_subfamily.json
new file mode 100644
index 000000000..10b19a159
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subfamily.json
@@ -0,0 +1,71 @@
+{
+ "a_dynamic_{{ identifier }}": {
+ "type": "dynamic",
+ "informations": {
+ "names": [
+ "a_dynamic_family1"
+ ],
+ "identifiers": [
+ [
+ "family1"
+ ]
+ ],
+ "path": "a_dynamic_{{ identifier }}",
+ "description": "A dynamic {{ identifier }}",
+ "properties": [],
+ "help": [
+ "This family builds families dynamically"
+ ]
+ },
+ "children": {
+ "a_subfamily": {
+ "type": "family",
+ "informations": {
+ "names": [
+ "a_subfamily"
+ ],
+ "identifiers": [
+ [
+ "family1"
+ ]
+ ],
+ "path": "a_dynamic_{{ identifier }}.a_subfamily",
+ "description": "A sub family",
+ "properties": []
+ },
+ "children": {
+ "a_variable": {
+ "names": [
+ "a_variable"
+ ],
+ "identifiers": [
+ [
+ "family1"
+ ]
+ ],
+ "path": "a_dynamic_{{ identifier }}.a_subfamily.a_variable",
+ "description": "A variable.",
+ "type": "variable",
+ "default": {
+ "name": "Default",
+ "values": "a_value"
+ },
+ "variable_type": "string",
+ "properties": [
+ {
+ "type": "property",
+ "name": "mandatory",
+ "ori_name": "mandatory",
+ "access_control": false
+ }
+ ],
+ "gen_examples": [
+ "a_value"
+ ],
+ "mandatory_without_value": false
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/root_a_dynamic_family1.a_subfamily.md b/tests/root_a_dynamic_family1.a_subfamily.md
new file mode 100644
index 000000000..2e3f2f1c1
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subfamily.md
@@ -0,0 +1,17 @@
+# A dynamic *family1*
+
+> [!NOTE]
+>
+> This family builds families dynamically.\
+> **Path**: a_dynamic_*family1*
+
+## A sub family
+
+> [!NOTE]
+>
+> **Path**: a_dynamic_*family1*.a_subfamily
+
+| Variable | Description |
+|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_subfamily.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
diff --git a/tests/root_a_dynamic_family1.a_subfamily.sh b/tests/root_a_dynamic_family1.a_subfamily.sh
new file mode 100644
index 000000000..7825d46cd
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subfamily.sh
@@ -0,0 +1,21 @@
+[1;4;96mA dynamic [0m[1;3;4;96mfamily1[0m
+
+[34mβ [0m[1;34mπ Informations[0m
+[34mβ [0m
+[34mβ [0mThis family builds families dynamically.
+[34mβ [0m[1mPath[0m: a_dynamic_[3mfamily1[0m
+
+ [1;4;92mA sub family[0m
+
+[34mβ [0m[1;34mπ Informations[0m
+[34mβ [0m
+[34mβ [0m[1mPath[0m: a_dynamic_[3mfamily1[0m.a_subfamily
+
+βββββββββββββββββββββββββββββββββββββββββ³βββββββββββββββββββββββββββββββββββββββ
+β[1m [0m[1mVariable [0m[1m [0mβ[1m [0m[1mDescription [0m[1m [0mβ
+β‘βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
+β [1ma_dynamic_[0m[1;3mfamily1[0m[1m.a_subfamily.a_variβ¦[0m β A variable. β
+β [1;7m string [0m [1;7m mandatory [0m β [1mDefault[0m: a_value β
+βββββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ
+
+
diff --git a/tests/root_a_dynamic_family1.a_subfamily_changelog.adoc b/tests/root_a_dynamic_family1.a_subfamily_changelog.adoc
new file mode 100644
index 000000000..7e352745f
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subfamily_changelog.adoc
@@ -0,0 +1,10 @@
+== New variable
+
+[cols="1a,1a"]
+|====
+| Variable | Description
+| **a_dynamic___family1__.a_subfamily.a_variable** +
+`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `mandatory` | A variable. +
+**Default**: a_value
+|====
+
diff --git a/tests/root_a_dynamic_family1.a_subfamily_changelog.gitlab.md b/tests/root_a_dynamic_family1.a_subfamily_changelog.gitlab.md
new file mode 100644
index 000000000..17d018bcc
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subfamily_changelog.gitlab.md
@@ -0,0 +1,8 @@
+New variable
+
+| Variable | Description |
+|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_subfamily.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
+
+
diff --git a/tests/root_a_dynamic_family1.a_subfamily_changelog.html b/tests/root_a_dynamic_family1.a_subfamily_changelog.html
new file mode 100644
index 000000000..48b3ad5cb
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subfamily_changelog.html
@@ -0,0 +1,11 @@
+New variable
+
+
+
+| Variable | Description |
+
+
+a_dynamic_family1.a_subfamily.a_variable string mandatory | A variable. Default: a_value |
+
+
+
diff --git a/tests/root_a_dynamic_family1.a_subfamily_changelog.md b/tests/root_a_dynamic_family1.a_subfamily_changelog.md
new file mode 100644
index 000000000..4634f4568
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subfamily_changelog.md
@@ -0,0 +1,6 @@
+# New variable
+
+| Variable | Description |
+|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_subfamily.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
diff --git a/tests/root_a_dynamic_family1.a_subfamily_changelog.sh b/tests/root_a_dynamic_family1.a_subfamily_changelog.sh
new file mode 100644
index 000000000..5cb64158e
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subfamily_changelog.sh
@@ -0,0 +1,9 @@
+[1;4;96mNew variable[0m
+
+βββββββββββββββββββββββββββββββββββββββββ³βββββββββββββββββββββββββββββββββββββββ
+β[1m [0m[1mVariable [0m[1m [0mβ[1m [0m[1mDescription [0m[1m [0mβ
+β‘βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
+β [1ma_dynamic_[0m[1;3mfamily1[0m[1m.a_subfamily.a_variβ¦[0m β A variable. β
+β [1;7m string [0m [1;7m mandatory [0m β [1mDefault[0m: a_value β
+βββββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ
+
diff --git a/tests/root_a_dynamic_family1.a_subfamily_example.adoc b/tests/root_a_dynamic_family1.a_subfamily_example.adoc
new file mode 100644
index 000000000..2adaab61f
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subfamily_example.adoc
@@ -0,0 +1,9 @@
+== Example with all variables modifiable
+
+[,yaml]
+----
+---
+a_dynamic_family1:
+ a_subfamily:
+ a_variable: a_value
+----
diff --git a/tests/root_a_dynamic_family1.a_subfamily_example.gitlab.md b/tests/root_a_dynamic_family1.a_subfamily_example.gitlab.md
new file mode 100644
index 000000000..ad033a952
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subfamily_example.gitlab.md
@@ -0,0 +1,10 @@
+Example with all variables modifiable
+
+```yaml
+---
+a_dynamic_family1:
+ a_subfamily:
+ a_variable: a_value
+```
+
+
diff --git a/tests/root_a_dynamic_family1.a_subfamily_example.html b/tests/root_a_dynamic_family1.a_subfamily_example.html
new file mode 100644
index 000000000..29e3cc2cf
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subfamily_example.html
@@ -0,0 +1,5 @@
+Example with all variables modifiable
+
+a_dynamic_family1:
+ a_subfamily:
+ a_variable: a_value
\ No newline at end of file
diff --git a/tests/root_a_dynamic_family1.a_subfamily_example.md b/tests/root_a_dynamic_family1.a_subfamily_example.md
new file mode 100644
index 000000000..d9a0859d4
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subfamily_example.md
@@ -0,0 +1,8 @@
+# Example with all variables modifiable
+
+```yaml
+---
+a_dynamic_family1:
+ a_subfamily:
+ a_variable: a_value
+```
diff --git a/tests/root_a_dynamic_family1.a_subfamily_example.sh b/tests/root_a_dynamic_family1.a_subfamily_example.sh
new file mode 100644
index 000000000..d01ddbf8f
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_subfamily_example.sh
@@ -0,0 +1,7 @@
+[1;4;96mExample with all variables modifiable[0m
+
+[38;2;248;248;242;48;2;39;40;34m---[0m[48;2;39;40;34m [0m
+[38;2;255;70;137;48;2;39;40;34ma_dynamic_family1[0m[38;2;248;248;242;48;2;39;40;34m:[0m[48;2;39;40;34m [0m
+[38;2;248;248;242;48;2;39;40;34m [0m[38;2;255;70;137;48;2;39;40;34ma_subfamily[0m[38;2;248;248;242;48;2;39;40;34m:[0m[48;2;39;40;34m [0m
+[38;2;248;248;242;48;2;39;40;34m [0m[38;2;255;70;137;48;2;39;40;34ma_variable[0m[38;2;248;248;242;48;2;39;40;34m:[0m[38;2;248;248;242;48;2;39;40;34m [0m[48;2;39;40;34ma_value [0m
+
diff --git a/tests/root_a_dynamic_family1.a_variable.adoc b/tests/root_a_dynamic_family1.a_variable.adoc
new file mode 100644
index 000000000..a9f8c7ad2
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_variable.adoc
@@ -0,0 +1,16 @@
+== A dynamic __family1__
+
+====
+**π Informations**
+
+This family builds families dynamically. +
+**Path**: a_dynamic___family1__
+====
+[cols="1a,1a"]
+|====
+| Variable | Description
+| **a_dynamic___family1__.a_variable** +
+`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `mandatory` | A variable. +
+**Default**: a_value
+|====
+
diff --git a/tests/root_a_dynamic_family1.a_variable.gitlab.md b/tests/root_a_dynamic_family1.a_variable.gitlab.md
new file mode 100644
index 000000000..1c9787586
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_variable.gitlab.md
@@ -0,0 +1,12 @@
+A dynamic *family1*
+
+> [!note] π Informations
+> This family builds families dynamically.\
+> **Path**: a_dynamic_*family1*
+
+| Variable | Description |
+|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
+
+
diff --git a/tests/root_a_dynamic_family1.a_variable.html b/tests/root_a_dynamic_family1.a_variable.html
new file mode 100644
index 000000000..5579f8131
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_variable.html
@@ -0,0 +1,15 @@
+A dynamic <i>family1</i>
+
+This family builds families dynamically.
+
+Path: a_dynamic_family1
+
+
+
+| Variable | Description |
+
+
+a_dynamic_family1.a_variable string mandatory | A variable. Default: a_value |
+
+
+
diff --git a/tests/root_a_dynamic_family1.a_variable.json b/tests/root_a_dynamic_family1.a_variable.json
new file mode 100644
index 000000000..cfab92718
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_variable.json
@@ -0,0 +1,53 @@
+{
+ "a_dynamic_{{ identifier }}": {
+ "type": "dynamic",
+ "informations": {
+ "names": [
+ "a_dynamic_family1"
+ ],
+ "identifiers": [
+ [
+ "family1"
+ ]
+ ],
+ "path": "a_dynamic_{{ identifier }}",
+ "description": "A dynamic {{ identifier }}",
+ "properties": [],
+ "help": [
+ "This family builds families dynamically"
+ ]
+ },
+ "children": {
+ "a_variable": {
+ "names": [
+ "a_variable"
+ ],
+ "identifiers": [
+ [
+ "family1"
+ ]
+ ],
+ "path": "a_dynamic_{{ identifier }}.a_variable",
+ "description": "A variable.",
+ "type": "variable",
+ "default": {
+ "name": "Default",
+ "values": "a_value"
+ },
+ "variable_type": "string",
+ "properties": [
+ {
+ "type": "property",
+ "name": "mandatory",
+ "ori_name": "mandatory",
+ "access_control": false
+ }
+ ],
+ "gen_examples": [
+ "a_value"
+ ],
+ "mandatory_without_value": false
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/root_a_dynamic_family1.a_variable.md b/tests/root_a_dynamic_family1.a_variable.md
new file mode 100644
index 000000000..becba3ae0
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_variable.md
@@ -0,0 +1,11 @@
+# A dynamic *family1*
+
+> [!NOTE]
+>
+> This family builds families dynamically.\
+> **Path**: a_dynamic_*family1*
+
+| Variable | Description |
+|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
diff --git a/tests/root_a_dynamic_family1.a_variable.sh b/tests/root_a_dynamic_family1.a_variable.sh
new file mode 100644
index 000000000..0cbab0460
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_variable.sh
@@ -0,0 +1,14 @@
+[1;4;96mA dynamic [0m[1;3;4;96mfamily1[0m
+
+[34mβ [0m[1;34mπ Informations[0m
+[34mβ [0m
+[34mβ [0mThis family builds families dynamically.
+[34mβ [0m[1mPath[0m: a_dynamic_[3mfamily1[0m
+
+βββββββββββββββββββββββββββββββββββββββββ³βββββββββββββββββββββββββββββββββββββββ
+β[1m [0m[1mVariable [0m[1m [0mβ[1m [0m[1mDescription [0m[1m [0mβ
+β‘βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
+β [1ma_dynamic_[0m[1;3mfamily1[0m[1m.a_variable[0m β A variable. β
+β [1;7m string [0m [1;7m mandatory [0m β [1mDefault[0m: a_value β
+βββββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ
+
diff --git a/tests/root_a_dynamic_family1.a_variable_changelog.adoc b/tests/root_a_dynamic_family1.a_variable_changelog.adoc
new file mode 100644
index 000000000..dabc49fa0
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_variable_changelog.adoc
@@ -0,0 +1,10 @@
+== New variable
+
+[cols="1a,1a"]
+|====
+| Variable | Description
+| **a_dynamic___family1__.a_variable** +
+`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `mandatory` | A variable. +
+**Default**: a_value
+|====
+
diff --git a/tests/root_a_dynamic_family1.a_variable_changelog.gitlab.md b/tests/root_a_dynamic_family1.a_variable_changelog.gitlab.md
new file mode 100644
index 000000000..ee02a23a5
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_variable_changelog.gitlab.md
@@ -0,0 +1,8 @@
+New variable
+
+| Variable | Description |
+|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
+
+
diff --git a/tests/root_a_dynamic_family1.a_variable_changelog.html b/tests/root_a_dynamic_family1.a_variable_changelog.html
new file mode 100644
index 000000000..63cd4287a
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_variable_changelog.html
@@ -0,0 +1,11 @@
+New variable
+
+
+
+| Variable | Description |
+
+
+a_dynamic_family1.a_variable string mandatory | A variable. Default: a_value |
+
+
+
diff --git a/tests/root_a_dynamic_family1.a_variable_changelog.md b/tests/root_a_dynamic_family1.a_variable_changelog.md
new file mode 100644
index 000000000..8a51940d2
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_variable_changelog.md
@@ -0,0 +1,6 @@
+# New variable
+
+| Variable | Description |
+|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
diff --git a/tests/root_a_dynamic_family1.a_variable_changelog.sh b/tests/root_a_dynamic_family1.a_variable_changelog.sh
new file mode 100644
index 000000000..56af3a62c
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_variable_changelog.sh
@@ -0,0 +1,9 @@
+[1;4;96mNew variable[0m
+
+βββββββββββββββββββββββββββββββββββββββββ³βββββββββββββββββββββββββββββββββββββββ
+β[1m [0m[1mVariable [0m[1m [0mβ[1m [0m[1mDescription [0m[1m [0mβ
+β‘βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
+β [1ma_dynamic_[0m[1;3mfamily1[0m[1m.a_variable[0m β A variable. β
+β [1;7m string [0m [1;7m mandatory [0m β [1mDefault[0m: a_value β
+βββββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ
+
diff --git a/tests/root_a_dynamic_family1.a_variable_example.adoc b/tests/root_a_dynamic_family1.a_variable_example.adoc
new file mode 100644
index 000000000..04c71d4ac
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_variable_example.adoc
@@ -0,0 +1,8 @@
+== Example with all variables modifiable
+
+[,yaml]
+----
+---
+a_dynamic_family1:
+ a_variable: a_value
+----
diff --git a/tests/root_a_dynamic_family1.a_variable_example.gitlab.md b/tests/root_a_dynamic_family1.a_variable_example.gitlab.md
new file mode 100644
index 000000000..d5c452185
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_variable_example.gitlab.md
@@ -0,0 +1,9 @@
+Example with all variables modifiable
+
+```yaml
+---
+a_dynamic_family1:
+ a_variable: a_value
+```
+
+
diff --git a/tests/root_a_dynamic_family1.a_variable_example.html b/tests/root_a_dynamic_family1.a_variable_example.html
new file mode 100644
index 000000000..06fdc3707
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_variable_example.html
@@ -0,0 +1,4 @@
+Example with all variables modifiable
+
+a_dynamic_family1:
+ a_variable: a_value
\ No newline at end of file
diff --git a/tests/root_a_dynamic_family1.a_variable_example.md b/tests/root_a_dynamic_family1.a_variable_example.md
new file mode 100644
index 000000000..355259c5d
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_variable_example.md
@@ -0,0 +1,7 @@
+# Example with all variables modifiable
+
+```yaml
+---
+a_dynamic_family1:
+ a_variable: a_value
+```
diff --git a/tests/root_a_dynamic_family1.a_variable_example.sh b/tests/root_a_dynamic_family1.a_variable_example.sh
new file mode 100644
index 000000000..48558b867
--- /dev/null
+++ b/tests/root_a_dynamic_family1.a_variable_example.sh
@@ -0,0 +1,6 @@
+[1;4;96mExample with all variables modifiable[0m
+
+[38;2;248;248;242;48;2;39;40;34m---[0m[48;2;39;40;34m [0m
+[38;2;255;70;137;48;2;39;40;34ma_dynamic_family1[0m[38;2;248;248;242;48;2;39;40;34m:[0m[48;2;39;40;34m [0m
+[38;2;248;248;242;48;2;39;40;34m [0m[38;2;255;70;137;48;2;39;40;34ma_variable[0m[38;2;248;248;242;48;2;39;40;34m:[0m[38;2;248;248;242;48;2;39;40;34m [0m[48;2;39;40;34ma_value [0m
+
diff --git a/tests/root_a_dynamic_family1.adoc b/tests/root_a_dynamic_family1.adoc
new file mode 100644
index 000000000..fb501907d
--- /dev/null
+++ b/tests/root_a_dynamic_family1.adoc
@@ -0,0 +1,55 @@
+== A dynamic __family1__
+
+====
+**π Informations**
+
+This family builds families dynamically. +
+**Path**: a_dynamic___family1__
+====
+[cols="1a,1a"]
+|====
+| Variable | Description
+| **a_dynamic___family1__.a_variable** +
+`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `mandatory` | A variable. +
+**Default**: a_value
+|====
+
+=== A sub family
+
+====
+**π Informations**
+
+**Path**: a_dynamic___family1__.a_subfamily
+====
+[cols="1a,1a"]
+|====
+| Variable | Description
+| **a_dynamic___family1__.a_subfamily.a_variable** +
+`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `mandatory` | A variable. +
+**Default**: a_value
+|====
+
+=== A dynamic __family3__ or A dynamic __family4__
+
+====
+**π Informations**
+
+This family builds families dynamically. +
+**Path**:
+
+* a_dynamic___family1__.a_subdyn___family3__
+* a_dynamic___family1__.a_subdyn___family4__ +
+**Identifiers**:
+
+* family3
+* family4
+====
+[cols="1a,1a"]
+|====
+| Variable | Description
+| **a_dynamic___family1__.a_subdyn___family3__.a_variable** +
+**a_dynamic___family1__.a_subdyn___family4__.a_variable** +
+`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `mandatory` | A variable. +
+**Default**: a_value
+|====
+
diff --git a/tests/root_a_dynamic_family1.gitlab.md b/tests/root_a_dynamic_family1.gitlab.md
new file mode 100644
index 000000000..7d1aa233e
--- /dev/null
+++ b/tests/root_a_dynamic_family1.gitlab.md
@@ -0,0 +1,40 @@
+A dynamic *family1*
+
+> [!note] π Informations
+> This family builds families dynamically.\
+> **Path**: a_dynamic_*family1*
+
+| Variable | Description |
+|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
+A sub family
+
+> [!note] π Informations
+> **Path**: a_dynamic_*family1*.a_subfamily
+
+| Variable | Description |
+|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_subfamily.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
+
+
+A dynamic *family3* or A dynamic *family4*
+
+> [!note] π Informations
+> This family builds families dynamically.\
+> **Path**:
+> - a_dynamic_*family1*.a_subdyn_*family3*
+> - a_dynamic_*family1*.a_subdyn_*family4*\
+> **Identifiers**:
+> - family3
+> - family4
+
+| Variable | Description |
+|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_subdyn_*family3*.a_variable**
**a_dynamic_*family1*.a_subdyn_*family4*.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
+
+
+
+
diff --git a/tests/root_a_dynamic_family1.html b/tests/root_a_dynamic_family1.html
new file mode 100644
index 000000000..395ccbf01
--- /dev/null
+++ b/tests/root_a_dynamic_family1.html
@@ -0,0 +1,47 @@
+A dynamic <i>family1</i>
+
+This family builds families dynamically.
+
+Path: a_dynamic_family1
+
+
+
+| Variable | Description |
+
+
+a_dynamic_family1.a_variable string mandatory | A variable. Default: a_value |
+
+
+
+A sub family
+
+Path: a_dynamic_family1.a_subfamily
+
+
+
+| Variable | Description |
+
+
+a_dynamic_family1.a_subfamily.a_variable string mandatory | A variable. Default: a_value |
+
+
+
+A dynamic <i>family3</i> or A dynamic <i>family4</i>
+
+This family builds families dynamically.
+
+Path: - a_dynamic_family1.a_subdyn_family3
+- a_dynamic_family1.a_subdyn_family4
+
+Identifiers:
+
+
+
+| Variable | Description |
+
+
+a_dynamic_family1.a_subdyn_family3.a_variable a_dynamic_family1.a_subdyn_family4.a_variable string mandatory | A variable. Default: a_value |
+
+
+
diff --git a/tests/root_a_dynamic_family1.json b/tests/root_a_dynamic_family1.json
new file mode 100644
index 000000000..8420b1432
--- /dev/null
+++ b/tests/root_a_dynamic_family1.json
@@ -0,0 +1,169 @@
+{
+ "a_dynamic_{{ identifier }}": {
+ "type": "dynamic",
+ "informations": {
+ "names": [
+ "a_dynamic_family1"
+ ],
+ "identifiers": [
+ [
+ "family1"
+ ]
+ ],
+ "path": "a_dynamic_{{ identifier }}",
+ "description": "A dynamic {{ identifier }}",
+ "properties": [],
+ "help": [
+ "This family builds families dynamically"
+ ]
+ },
+ "children": {
+ "a_variable": {
+ "names": [
+ "a_variable"
+ ],
+ "identifiers": [
+ [
+ "family1"
+ ]
+ ],
+ "path": "a_dynamic_{{ identifier }}.a_variable",
+ "description": "A variable.",
+ "type": "variable",
+ "default": {
+ "name": "Default",
+ "values": "a_value"
+ },
+ "variable_type": "string",
+ "properties": [
+ {
+ "type": "property",
+ "name": "mandatory",
+ "ori_name": "mandatory",
+ "access_control": false
+ }
+ ],
+ "gen_examples": [
+ "a_value"
+ ],
+ "mandatory_without_value": false
+ },
+ "a_subfamily": {
+ "type": "family",
+ "informations": {
+ "names": [
+ "a_subfamily"
+ ],
+ "identifiers": [
+ [
+ "family1"
+ ]
+ ],
+ "path": "a_dynamic_{{ identifier }}.a_subfamily",
+ "description": "A sub family",
+ "properties": []
+ },
+ "children": {
+ "a_variable": {
+ "names": [
+ "a_variable"
+ ],
+ "identifiers": [
+ [
+ "family1"
+ ]
+ ],
+ "path": "a_dynamic_{{ identifier }}.a_subfamily.a_variable",
+ "description": "A variable.",
+ "type": "variable",
+ "default": {
+ "name": "Default",
+ "values": "a_value"
+ },
+ "variable_type": "string",
+ "properties": [
+ {
+ "type": "property",
+ "name": "mandatory",
+ "ori_name": "mandatory",
+ "access_control": false
+ }
+ ],
+ "gen_examples": [
+ "a_value"
+ ],
+ "mandatory_without_value": false
+ }
+ }
+ },
+ "a_subdyn_{{ identifier }}": {
+ "type": "dynamic",
+ "informations": {
+ "names": [
+ "a_subdyn_family3",
+ "a_subdyn_family4"
+ ],
+ "identifiers": [
+ [
+ "family1",
+ "family3"
+ ],
+ [
+ "family1",
+ "family4"
+ ]
+ ],
+ "path": "a_dynamic_{{ identifier }}.a_subdyn_{{ identifier }}",
+ "description": "A dynamic {{ identifier }}",
+ "properties": [],
+ "identifier": [
+ "family3",
+ "family4"
+ ],
+ "help": [
+ "This family builds families dynamically"
+ ]
+ },
+ "children": {
+ "a_variable": {
+ "names": [
+ "a_variable",
+ "a_variable"
+ ],
+ "identifiers": [
+ [
+ "family1",
+ "family3"
+ ],
+ [
+ "family1",
+ "family4"
+ ]
+ ],
+ "path": "a_dynamic_{{ identifier }}.a_subdyn_{{ identifier }}.a_variable",
+ "description": "A variable.",
+ "type": "variable",
+ "default": {
+ "name": "Default",
+ "values": "a_value"
+ },
+ "variable_type": "string",
+ "properties": [
+ {
+ "type": "property",
+ "name": "mandatory",
+ "ori_name": "mandatory",
+ "access_control": false
+ }
+ ],
+ "gen_examples": [
+ "a_value",
+ "a_value"
+ ],
+ "mandatory_without_value": false
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/root_a_dynamic_family1.md b/tests/root_a_dynamic_family1.md
new file mode 100644
index 000000000..f6a2229cb
--- /dev/null
+++ b/tests/root_a_dynamic_family1.md
@@ -0,0 +1,37 @@
+# A dynamic *family1*
+
+> [!NOTE]
+>
+> This family builds families dynamically.\
+> **Path**: a_dynamic_*family1*
+
+| Variable | Description |
+|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
+## A sub family
+
+> [!NOTE]
+>
+> **Path**: a_dynamic_*family1*.a_subfamily
+
+| Variable | Description |
+|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_subfamily.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
+## A dynamic *family3* or A dynamic *family4*
+
+> [!NOTE]
+>
+> This family builds families dynamically.\
+> **Path**:
+> - a_dynamic_*family1*.a_subdyn_*family3*
+> - a_dynamic_*family1*.a_subdyn_*family4*\
+> **Identifiers**:
+> - family3
+> - family4
+
+| Variable | Description |
+|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_subdyn_*family3*.a_variable**
**a_dynamic_*family1*.a_subdyn_*family4*.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
diff --git a/tests/root_a_dynamic_family1.sh b/tests/root_a_dynamic_family1.sh
new file mode 100644
index 000000000..84e3971a5
--- /dev/null
+++ b/tests/root_a_dynamic_family1.sh
@@ -0,0 +1,47 @@
+[1;4;96mA dynamic [0m[1;3;4;96mfamily1[0m
+
+[34mβ [0m[1;34mπ Informations[0m
+[34mβ [0m
+[34mβ [0mThis family builds families dynamically.
+[34mβ [0m[1mPath[0m: a_dynamic_[3mfamily1[0m
+
+βββββββββββββββββββββββββββββββββββββββββ³βββββββββββββββββββββββββββββββββββββββ
+β[1m [0m[1mVariable [0m[1m [0mβ[1m [0m[1mDescription [0m[1m [0mβ
+β‘βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
+β [1ma_dynamic_[0m[1;3mfamily1[0m[1m.a_variable[0m β A variable. β
+β [1;7m string [0m [1;7m mandatory [0m β [1mDefault[0m: a_value β
+βββββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ
+ [1;4;92mA sub family[0m
+
+[34mβ [0m[1;34mπ Informations[0m
+[34mβ [0m
+[34mβ [0m[1mPath[0m: a_dynamic_[3mfamily1[0m.a_subfamily
+
+βββββββββββββββββββββββββββββββββββββββββ³βββββββββββββββββββββββββββββββββββββββ
+β[1m [0m[1mVariable [0m[1m [0mβ[1m [0m[1mDescription [0m[1m [0mβ
+β‘βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
+β [1ma_dynamic_[0m[1;3mfamily1[0m[1m.a_subfamily.a_variβ¦[0m β A variable. β
+β [1;7m string [0m [1;7m mandatory [0m β [1mDefault[0m: a_value β
+βββββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ
+
+ [1;4;92mA dynamic [0m[1;3;4;92mfamily3[0m[1;4;92m or A dynamic [0m[1;3;4;92mfamily4[0m
+
+[34mβ [0m[1;34mπ Informations[0m
+[34mβ [0m
+[34mβ [0mThis family builds families dynamically.
+[34mβ [0m[1mPath[0m:
+[34mβ [0m β’ a_dynamic_[3mfamily1[0m.a_subdyn_[3mfamily3[0m
+[34mβ [0m β’ a_dynamic_[3mfamily1[0m.a_subdyn_[3mfamily4[0m
+[34mβ [0m[1mIdentifiers[0m:
+[34mβ [0m β’ family3
+[34mβ [0m β’ family4
+
+βββββββββββββββββββββββββββββββββββββββββ³βββββββββββββββββββββββββββββββββββββββ
+β[1m [0m[1mVariable [0m[1m [0mβ[1m [0m[1mDescription [0m[1m [0mβ
+β‘βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
+β [1ma_dynamic_[0m[1;3mfamily1[0m[1m.a_subdyn_[0m[1;3mfamily3[0m[1m.aβ¦[0m β A variable. β
+β [1ma_dynamic_[0m[1;3mfamily1[0m[1m.a_subdyn_[0m[1;3mfamily4[0m[1m.aβ¦[0m β [1mDefault[0m: a_value β
+β [1;7m string [0m [1;7m mandatory [0m β β
+βββββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ
+
+
diff --git a/tests/root_a_dynamic_family1_changelog.adoc b/tests/root_a_dynamic_family1_changelog.adoc
new file mode 100644
index 000000000..1184fe6e2
--- /dev/null
+++ b/tests/root_a_dynamic_family1_changelog.adoc
@@ -0,0 +1,17 @@
+== New variables
+
+[cols="1a,1a"]
+|====
+| Variable | Description
+| **a_dynamic___family1__.a_variable** +
+`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `mandatory` | A variable. +
+**Default**: a_value
+| **a_dynamic___family1__.a_subfamily.a_variable** +
+`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `mandatory` | A variable. +
+**Default**: a_value
+| **a_dynamic___family1__.a_subdyn___family3__.a_variable** +
+**a_dynamic___family1__.a_subdyn___family4__.a_variable** +
+`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `mandatory` | A variable. +
+**Default**: a_value
+|====
+
diff --git a/tests/root_a_dynamic_family1_changelog.gitlab.md b/tests/root_a_dynamic_family1_changelog.gitlab.md
new file mode 100644
index 000000000..8d4f4842c
--- /dev/null
+++ b/tests/root_a_dynamic_family1_changelog.gitlab.md
@@ -0,0 +1,10 @@
+New variables
+
+| Variable | Description |
+|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+| **a_dynamic_*family1*.a_subfamily.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+| **a_dynamic_*family1*.a_subdyn_*family3*.a_variable**
**a_dynamic_*family1*.a_subdyn_*family4*.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
+
+
diff --git a/tests/root_a_dynamic_family1_changelog.html b/tests/root_a_dynamic_family1_changelog.html
new file mode 100644
index 000000000..a3022a861
--- /dev/null
+++ b/tests/root_a_dynamic_family1_changelog.html
@@ -0,0 +1,13 @@
+New variables
+
+
+
+| Variable | Description |
+
+
+a_dynamic_family1.a_variable string mandatory | A variable. Default: a_value |
+a_dynamic_family1.a_subfamily.a_variable string mandatory | A variable. Default: a_value |
+a_dynamic_family1.a_subdyn_family3.a_variable a_dynamic_family1.a_subdyn_family4.a_variable string mandatory | A variable. Default: a_value |
+
+
+
diff --git a/tests/root_a_dynamic_family1_changelog.md b/tests/root_a_dynamic_family1_changelog.md
new file mode 100644
index 000000000..bc90ae385
--- /dev/null
+++ b/tests/root_a_dynamic_family1_changelog.md
@@ -0,0 +1,8 @@
+# New variables
+
+| Variable | Description |
+|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|
+| **a_dynamic_*family1*.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+| **a_dynamic_*family1*.a_subfamily.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+| **a_dynamic_*family1*.a_subdyn_*family3*.a_variable**
**a_dynamic_*family1*.a_subdyn_*family4*.a_variable**
[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | A variable.
**Default**: a_value |
+
diff --git a/tests/root_a_dynamic_family1_changelog.sh b/tests/root_a_dynamic_family1_changelog.sh
new file mode 100644
index 000000000..52cea0276
--- /dev/null
+++ b/tests/root_a_dynamic_family1_changelog.sh
@@ -0,0 +1,16 @@
+[1;4;96mNew variables[0m
+
+βββββββββββββββββββββββββββββββββββββββββ³βββββββββββββββββββββββββββββββββββββββ
+β[1m [0m[1mVariable [0m[1m [0mβ[1m [0m[1mDescription [0m[1m [0mβ
+β‘βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
+β [1ma_dynamic_[0m[1;3mfamily1[0m[1m.a_variable[0m β A variable. β
+β [1;7m string [0m [1;7m mandatory [0m β [1mDefault[0m: a_value β
+βββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββ€
+β [1ma_dynamic_[0m[1;3mfamily1[0m[1m.a_subfamily.a_variβ¦[0m β A variable. β
+β [1;7m string [0m [1;7m mandatory [0m β [1mDefault[0m: a_value β
+βββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββ€
+β [1ma_dynamic_[0m[1;3mfamily1[0m[1m.a_subdyn_[0m[1;3mfamily3[0m[1m.aβ¦[0m β A variable. β
+β [1ma_dynamic_[0m[1;3mfamily1[0m[1m.a_subdyn_[0m[1;3mfamily4[0m[1m.aβ¦[0m β [1mDefault[0m: a_value β
+β [1;7m string [0m [1;7m mandatory [0m β β
+βββββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ
+
diff --git a/tests/root_a_dynamic_family1_example.adoc b/tests/root_a_dynamic_family1_example.adoc
new file mode 100644
index 000000000..2cdf1f4e7
--- /dev/null
+++ b/tests/root_a_dynamic_family1_example.adoc
@@ -0,0 +1,14 @@
+== Example with all variables modifiable
+
+[,yaml]
+----
+---
+a_dynamic_family1:
+ a_variable: a_value
+ a_subfamily:
+ a_variable: a_value
+ a_subdyn_family3:
+ a_variable: a_value
+ a_subdyn_family4:
+ a_variable: a_value
+----
diff --git a/tests/root_a_dynamic_family1_example.gitlab.md b/tests/root_a_dynamic_family1_example.gitlab.md
new file mode 100644
index 000000000..13be182d8
--- /dev/null
+++ b/tests/root_a_dynamic_family1_example.gitlab.md
@@ -0,0 +1,15 @@
+Example with all variables modifiable
+
+```yaml
+---
+a_dynamic_family1:
+ a_variable: a_value
+ a_subfamily:
+ a_variable: a_value
+ a_subdyn_family3:
+ a_variable: a_value
+ a_subdyn_family4:
+ a_variable: a_value
+```
+
+
diff --git a/tests/root_a_dynamic_family1_example.html b/tests/root_a_dynamic_family1_example.html
new file mode 100644
index 000000000..3b2d6429a
--- /dev/null
+++ b/tests/root_a_dynamic_family1_example.html
@@ -0,0 +1,10 @@
+Example with all variables modifiable
+
+a_dynamic_family1:
+ a_variable: a_value
+ a_subfamily:
+ a_variable: a_value
+ a_subdyn_family3:
+ a_variable: a_value
+ a_subdyn_family4:
+ a_variable: a_value
\ No newline at end of file
diff --git a/tests/root_a_dynamic_family1_example.md b/tests/root_a_dynamic_family1_example.md
new file mode 100644
index 000000000..94ed49b4a
--- /dev/null
+++ b/tests/root_a_dynamic_family1_example.md
@@ -0,0 +1,13 @@
+# Example with all variables modifiable
+
+```yaml
+---
+a_dynamic_family1:
+ a_variable: a_value
+ a_subfamily:
+ a_variable: a_value
+ a_subdyn_family3:
+ a_variable: a_value
+ a_subdyn_family4:
+ a_variable: a_value
+```
diff --git a/tests/root_a_dynamic_family1_example.sh b/tests/root_a_dynamic_family1_example.sh
new file mode 100644
index 000000000..78953fee5
--- /dev/null
+++ b/tests/root_a_dynamic_family1_example.sh
@@ -0,0 +1,12 @@
+[1;4;96mExample with all variables modifiable[0m
+
+[38;2;248;248;242;48;2;39;40;34m---[0m[48;2;39;40;34m [0m
+[38;2;255;70;137;48;2;39;40;34ma_dynamic_family1[0m[38;2;248;248;242;48;2;39;40;34m:[0m[48;2;39;40;34m [0m
+[38;2;248;248;242;48;2;39;40;34m [0m[38;2;255;70;137;48;2;39;40;34ma_variable[0m[38;2;248;248;242;48;2;39;40;34m:[0m[38;2;248;248;242;48;2;39;40;34m [0m[48;2;39;40;34ma_value [0m
+[38;2;248;248;242;48;2;39;40;34m [0m[38;2;255;70;137;48;2;39;40;34ma_subfamily[0m[38;2;248;248;242;48;2;39;40;34m:[0m[48;2;39;40;34m [0m
+[38;2;248;248;242;48;2;39;40;34m [0m[38;2;255;70;137;48;2;39;40;34ma_variable[0m[38;2;248;248;242;48;2;39;40;34m:[0m[38;2;248;248;242;48;2;39;40;34m [0m[48;2;39;40;34ma_value [0m
+[38;2;248;248;242;48;2;39;40;34m [0m[38;2;255;70;137;48;2;39;40;34ma_subdyn_family3[0m[38;2;248;248;242;48;2;39;40;34m:[0m[48;2;39;40;34m [0m
+[38;2;248;248;242;48;2;39;40;34m [0m[38;2;255;70;137;48;2;39;40;34ma_variable[0m[38;2;248;248;242;48;2;39;40;34m:[0m[38;2;248;248;242;48;2;39;40;34m [0m[48;2;39;40;34ma_value [0m
+[38;2;248;248;242;48;2;39;40;34m [0m[38;2;255;70;137;48;2;39;40;34ma_subdyn_family4[0m[38;2;248;248;242;48;2;39;40;34m:[0m[48;2;39;40;34m [0m
+[38;2;248;248;242;48;2;39;40;34m [0m[38;2;255;70;137;48;2;39;40;34ma_variable[0m[38;2;248;248;242;48;2;39;40;34m:[0m[38;2;248;248;242;48;2;39;40;34m [0m[48;2;39;40;34ma_value [0m
+
diff --git a/tests/test_root.py b/tests/test_root.py
index 5eb57239f..b70f5b47a 100644
--- a/tests/test_root.py
+++ b/tests/test_root.py
@@ -68,3 +68,64 @@ def test_root_example():
def test_root_sub_example():
_test_root('a_family.an_other_family', "example")
+
+
+#
+def test_root_dynamic_family():
+ _test_root('a_dynamic_family1')
+
+
+def test_root_dynamic_variable():
+ _test_root('a_dynamic_family1.a_variable')
+
+
+def test_root_dynamic_sub_family():
+ _test_root('a_dynamic_family1.a_subfamily')
+
+
+def test_root_dynamic_sub_dyn_family():
+ _test_root('a_dynamic_family1.a_subdyn_family4')
+
+
+def test_root_dynamic_sub_dyn_family_variable():
+ _test_root('a_dynamic_family1.a_subdyn_family4.a_variable')
+
+
+def test_root_dynamic_family_example():
+ _test_root('a_dynamic_family1', "example")
+
+
+def test_root_dynamic_variable_example():
+ _test_root('a_dynamic_family1.a_variable', "example")
+
+
+def test_root_dynamic_sub_family_example():
+ _test_root('a_dynamic_family1.a_subfamily', "example")
+
+
+def test_root_dynamic_sub_dyn_example():
+ _test_root('a_dynamic_family1.a_subdyn_family4', "example")
+
+
+def test_root_dynamic_sub_dyn_family_variable_example():
+ _test_root('a_dynamic_family1.a_subdyn_family4.a_variable', "example")
+
+
+def test_root_dynamic_family_changelog():
+ _test_root('a_dynamic_family1', "changelog")
+
+
+def test_root_dynamic_variable_changelog():
+ _test_root('a_dynamic_family1.a_variable', "changelog")
+
+
+def test_root_dynamic_sub_family_changelog():
+ _test_root('a_dynamic_family1.a_subfamily', "changelog")
+
+
+def test_root_dynamic_sub_dyn_changelog():
+ _test_root('a_dynamic_family1.a_subdyn_family4', "changelog")
+
+
+def test_root_dynamic_sub_dyn_family_variable_changelog():
+ _test_root('a_dynamic_family1.a_subdyn_family4.a_variable', "changelog")