Compare commits

..

No commits in common. "main" and "1.0.0rc1" have entirely different histories.

5161 changed files with 5730 additions and 6275 deletions

View file

@ -1,78 +1,46 @@
## 1.0.3 (2026-06-28) ## 1.0.0rc1 (2026-06-21)
### Fix
- help line with only a space in family description
## 1.0.2 (2026-06-27)
### Fix
- hidden family in dynamic family with a sub root
## 1.0.1 (2026-06-21)
### Fix
- dependencies
## 1.0.0 (2026-06-21)
### Feat ### Feat
- better ansible documentation - better ansible documentation
- leadership => sequence
- add dot if needed ## 0.2.0a51 (2026-06-15)
- better documentation generation
- support transitive
- doc transitive properties
- add 'document_a_type' option
- remove doc.root, pass directly the family to doc output (be careful, add true_config parameter too)
- personalise column number
- document commandline and environment variable
- change path in description
- add anchor to markdown format and remove unsupported character in anchor id
- use blockquote for family description
- better enter support
- delete/underline is inside tag for some format
- can reload formatter
- can document part by part with reloading structure
- anchor in gitlab output_format
- can had comments with family/variable description in examples doc
- comment variables from a family
- tags documentation
- ca force true_color terminal when export to console
- can document a variable for a specified identifier
- can remove header when generate a table
- add html output
- changelog for variables
- limit warning when asked
- better support variable calculation for property
- add gitlab plugin
- default value for a calculated variable with an unknown optional variable
- add integer type which will replace number type
- adapt to tiramisu-web-ui
- could not change default value during annotator
- document unix file name parameters
- better console output
- do not document reference to undocumented variable
- add with_family parameter
- output return status too
- create tests
- personalize mode that we want disable documentation
- add console output
- better dynamique family support
- add json output
### Fix ### Fix
- rougail dependencies
- black
- tests
- update tests - update tests
## 0.2.0a50 (2026-06-11)
### Feat
- leadership => sequence
### Fix
- test example with mode - test example with mode
## 0.2.0a49 (2026-05-06)
### Fix
- example for partial documentation - example for partial documentation
## 0.2.0a48 (2026-05-04)
### Fix
- get unrestraint default value - get unrestraint default value
## 0.2.0a47 (2026-04-30)
### Feat
- add dot if needed
- better documentation generation
### Fix
- better identifier documentation - better identifier documentation
- better display of path - better display of path
- better description informations - better description informations
@ -80,76 +48,383 @@
- better identifier support - better identifier support
- support mode - support mode
- root config with identifier - root config with identifier
## 0.2.0a46 (2026-01-29)
### Feat
- support transitive
### Fix
- better transitive documentation - better transitive documentation
- update translation - update translation
## 0.2.0a45 (2026-01-21)
### Feat
- doc transitive properties
### Fix
- root could be a variable - root could be a variable
- path - path
## 0.2.0a44 (2026-01-14)
### Fix
- yaml in output format do not convert object to str - yaml in output format do not convert object to str
## 0.2.0a43 (2026-01-14)
### Feat
- add 'document_a_type' option
## 0.2.0a42 (2026-01-04)
### Feat
- remove doc.root, pass directly the family to doc output (be careful, add true_config parameter too)
## 0.2.0a41 (2025-12-30)
### Fix
- update tests - update tests
- read_write is a boolean - read_write is a boolean
## 0.2.0a40 (2025-12-22)
### Feat
- personalise column number
- document commandline and environment variable
### Fix
- better documentation - better documentation
- better commandline doc + params description is now in rougail - better commandline doc + params description is now in rougail
## 0.2.0a39 (2025-11-21)
### Feat
- change path in description
- add anchor to markdown format and remove unsupported character in anchor id
- use blockquote for family description
### Fix
- dynamic variables with identifier in description - dynamic variables with identifier in description
- gitlab id in anchor with dynamic variables - gitlab id in anchor with dynamic variables
## 0.2.0a38 (2025-11-10)
### Feat
- better enter support
## 0.2.0a37 (2025-11-06)
### Feat
- delete/underline is inside tag for some format
- can reload formatter
- can document part by part with reloading structure
## 0.2.0a36 (2025-10-29)
### Feat
- anchor in gitlab output_format
- can had comments with family/variable description in examples doc
- comment variables from a family
## 0.2.0a35 (2025-10-27)
### Feat
- tags documentation
### Fix
- add changelog support for github/gitlab format - add changelog support for github/gitlab format
- tests - tests
## 0.2.0a34 (2025-10-22)
### Feat
- ca force true_color terminal when export to console
### Fix
- parse subtree for a dynamic - parse subtree for a dynamic
- adapt api for rougail-web-ui - adapt api for rougail-web-ui
- undocumented variable in dynamic - undocumented variable in dynamic
## 0.2.0a33 (2025-10-16)
### Feat
- can document a variable for a specified identifier
- can remove header when generate a table
- add html output
- changelog for variables
### Fix
- support rougail-web-ui - support rougail-web-ui
- black - black
- remove extra '*' - remove extra '*'
- always use name for informations key (sometime path was used) - always use name for informations key (sometime path was used)
- update tests - update tests
- translation for property is now in rougail - translation for property is now in rougail
## 0.2.0a32 (2025-10-03)
### Fix
- property calculated with disabled variable - property calculated with disabled variable
- better disabled support - better disabled support
## 0.2.0a31 (2025-10-02)
### Feat
- limit warning when asked
## 0.2.0a30 (2025-10-02)
### Feat
- better support variable calculation for property
## 0.2.0a29 (2025-10-02)
### Fix
- property for namespace - property for namespace
## 0.2.0a28 (2025-10-02)
### Feat
- add gitlab plugin
### Fix
- tests for formatter - tests for formatter
- update translation - update translation
## 0.2.0a27 (2025-09-29)
### Fix
- doc network with CIDR format - doc network with CIDR format
- better doc for calculation with unknown variable - better doc for calculation with unknown variable
## 0.2.0a26 (2025-09-29)
### Feat
- default value for a calculated variable with an unknown optional variable
- add integer type which will replace number type
## 0.2.0a25 (2025-09-22)
### Feat
- adapt to tiramisu-web-ui
## 0.2.0a24 (2025-06-19)
### Feat
- could not change default value during annotator
## 0.2.0a23 (2025-06-18)
### Fix
- separation - separation
## 0.2.0a22 (2025-06-18)
### Fix
- rougail separation - rougail separation
## 0.2.0a21 (2025-05-12)
### Fix
- update translation - update translation
- black - black
- doc example with leader example lower than leader default value - doc example with leader example lower than leader default value
## 0.2.0a20 (2025-05-09)
### Fix
- undefined is a rougail object - undefined is a rougail object
## 0.2.0a19 (2025-05-05)
### Fix
- update translation - update translation
## 0.2.0a18 (2025-05-05)
### Fix
- doc default value with undocumented variable - doc default value with undocumented variable
## 0.2.0a17 (2025-05-05)
### Fix
- description for all calculations - description for all calculations
- better documentation variable with variable in default attribut - better documentation variable with variable in default attribut
## 0.2.0a16 (2025-04-30)
### Fix
- update translation - update translation
- remove negative_description support - remove negative_description support
- better documentation with hidden variable in property calculation - better documentation with hidden variable in property calculation
- use new information ymlfiles - use new information ymlfiles
- update tests - update tests
- better dynamic support - better dynamic support
## 0.2.0a15 (2025-04-09)
### Fix
- version - version
## 0.2.0a14 (2025-04-07)
### Fix
- calculation for dynamic ans leadership variables - calculation for dynamic ans leadership variables
## 0.2.0a13 (2025-04-02)
### Fix
- error in disabled dynamic variable - error in disabled dynamic variable
## 0.2.0a12 (2025-04-01)
### Fix
- update tests - update tests
- groups.namespace could be unexistant - groups.namespace could be unexistant
## 0.2.0a11 (2025-03-31)
### Fix
- doc a param with a set but with only one item - doc a param with a set but with only one item
## 0.2.0a10 (2025-03-30)
### Feat
- document unix file name parameters
- better console output
- do not document reference to undocumented variable
### Fix
- doc for param - doc for param
- support NamespaceCalculation - support NamespaceCalculation
- convert <ENV> to &lt;ENV&gt; for github plugin - convert <ENV> to &lt;ENV&gt; for github plugin
## 0.2.0a9 (2025-02-19)
### Fix
- support suffix (in version 1.0 format) in calculation - support suffix (in version 1.0 format) in calculation
## 0.2.0a8 (2025-02-19)
### Fix
- key is the path - key is the path
## 0.2.0a7 (2025-02-19)
### Fix
- with_family => without_family and with_example => example - with_family => without_family and with_example => example
## 0.2.0a6 (2025-02-17)
### Feat
- add with_family parameter
## 0.2.0a5 (2025-02-17)
### Fix
- do not add multiple attribute several time in json export - do not add multiple attribute several time in json export
## 0.2.0a4 (2025-02-10)
### Feat
- output return status too
## 0.2.0a3 (2025-01-04)
### Fix
- detect_symlink => only_self - detect_symlink => only_self
## 0.2.0a2 (2025-01-04)
### Feat
- create tests
### Fix
- do not document symlink - do not document symlink
- remove prefix_path - remove prefix_path
## 0.2.0a1 (2024-11-28)
### Fix
- separation between run and print function - separation between run and print function
## 0.2.0a0 (2024-11-20)
### Feat
- personalize mode that we want disable documentation
- add console output
- better dynamique family support
- add json output
### Fix
- correction for properties in italic - correction for properties in italic
## 0.1.1a0 (2024-11-08)
### Fix
- generate documentation with force_optional configuration - generate documentation with force_optional configuration
### Refactor
- **locale-po**: locale translation
- **typo**: french translation type
## 0.1.0 (2024-11-06) ## 0.1.0 (2024-11-06)
## 0.1.0rc1 (2024-11-06) ## 0.1.0rc1 (2024-11-06)

View file

@ -391,8 +391,8 @@ 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:63 #: src/rougail/output_doc/example.py:63
msgid "Example with all modifiable variables" msgid "Example with all variables modifiable"
msgstr "Exemple avec toutes les variables modifiables" 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:234 #: src/rougail/output_doc/output/console.py:234

View file

@ -341,7 +341,7 @@ msgid "Example with mandatory variables not filled in"
msgstr "" msgstr ""
#: src/rougail/output_doc/example.py:63 #: src/rougail/output_doc/example.py:63
msgid "Example with all modifiable variables" msgid "Example with all variables modifiable"
msgstr "" msgstr ""
#: src/rougail/output_doc/output/asciidoc.py:156 #: src/rougail/output_doc/output/asciidoc.py:156

View file

@ -4,7 +4,7 @@ requires = ["flit_core >=3.8.0,<4"]
[project] [project]
name = "rougail.output_doc" name = "rougail.output_doc"
version = "1.0.3" version = "1.0.0rc1"
authors = [{name = "Emmanuel Garette", email = "gnunux@gnunux.info"}] authors = [{name = "Emmanuel Garette", email = "gnunux@gnunux.info"}]
readme = "README.md" readme = "README.md"
description = "Rougail output doc" description = "Rougail output doc"
@ -24,8 +24,8 @@ classifiers = [
] ]
dependencies = [ dependencies = [
"rougail-base >= 1.2.0,<2", "rougail-base > 1.1,<2",
"tabulate ~= 0.10.0", # same as rougail-output-table "tabulate ~= 0.9.0",
"rich ~= 13.9.3", "rich ~= 13.9.3",
] ]

View file

@ -1,7 +1,7 @@
""" """
Silique (https://www.silique.fr) Silique (https://www.silique.fr)
Copyright (C) 2024-2026 Copyright (C) 2024-2026
This program is free software: you can redistribute it and/or modify it 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 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 Free Software Foundation, either version 3 of the License, or (at your

View file

@ -1 +1 @@
__version__ = "1.0.3" __version__ = "1.0.0rc1"

View file

@ -64,9 +64,7 @@ class Annotator(Walk):
else: else:
self.default_values = self.objectspace.rougailconfig["doc.default_values"] self.default_values = self.objectspace.rougailconfig["doc.default_values"]
if "force_display_unknown_optional_variable" in kwargs: if "force_display_unknown_optional_variable" in kwargs:
self.display_unknown_optional_variable = kwargs[ self.display_unknown_optional_variable = kwargs["force_display_unknown_optional_variable"]
"force_display_unknown_optional_variable"
]
else: else:
self.display_unknown_optional_variable = False self.display_unknown_optional_variable = False
self.regexp_description_get_paths = None self.regexp_description_get_paths = None
@ -266,19 +264,16 @@ class Annotator(Walk):
values.xmlfiles, values.xmlfiles,
) )
if variable: if variable:
val_description = val_description.replace( val_description = val_description.replace(f'"{r_path}"', f'{{{index}}}')
f'"{r_path}"', f"{{{index}}}"
)
v = {"path": variable.path, "description": variable.description} v = {"path": variable.path, "description": variable.description}
if identifiers: if identifiers:
v["identifiers"] = [identifiers] v["identifiers"] = [identifiers]
v["identifier_type"] = "many" v["identifier_type"] = "many"
variables.append(v) variables.append(v)
index += 1 index += 1
description = { description = {"description": True,
"description": True, "value": val_description,
"value": val_description, }
}
if variables: if variables:
description["variables"] = variables description["variables"] = variables
else: else:

View file

@ -1,7 +1,7 @@
""" """
Silique (https://www.silique.fr) Silique (https://www.silique.fr)
Copyright (C) 2025-2026 Copyright (C) 2025-2026
This program is free software: you can redistribute it and/or modify it 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 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 Free Software Foundation, either version 3 of the License, or (at your
@ -178,9 +178,7 @@ class Changelog: # pylint: disable=no-member,too-few-public-methods
else: else:
title = _("Deleted variables") title = _("Deleted variables")
lst.append(self.formatter.title(title, self.level)) lst.append(self.formatter.title(title, self.level))
lst.append( lst.append(self.formatter.list(self._removed_variables, inside_tabular=False))
self.formatter.list(self._removed_variables, inside_tabular=False)
)
end = self.formatter.end_family(self.level) end = self.formatter.end_family(self.level)
if end: if end:
lst.append(end) lst.append(end)

View file

@ -24,11 +24,7 @@ from tiramisu.error import display_list, PropertiesOptionError
from tiramisu.config import get_common_path from tiramisu.config import get_common_path
from rougail.tiramisu import display_xmlfiles from rougail.tiramisu import display_xmlfiles
from rougail.utils import PROPERTY_ATTRIBUTE from rougail.utils import PROPERTY_ATTRIBUTE
from rougail.error import ( from rougail.error import VariableCalculationDependencyError, RougailWarning, ExtensionError
VariableCalculationDependencyError,
RougailWarning,
ExtensionError,
)
from .utils import dump, to_phrase, calc_path, add_dot, doc_path from .utils import dump, to_phrase, calc_path, add_dot, doc_path
from .i18n import _ from .i18n import _
@ -71,9 +67,7 @@ class _ToString:
return ret[0] return ret[0]
return ret return ret
def _calculation_to_string( def _calculation_to_string(self, child, calculation, attribute_type, inside_list=True):
self, child, calculation, attribute_type, inside_list=True
):
if calculation.get("description", False): if calculation.get("description", False):
values = calculation.copy() values = calculation.copy()
if self.document_a_type and "variables" in values: if self.document_a_type and "variables" in values:
@ -116,9 +110,7 @@ class _ToString:
if not inside_list: if not inside_list:
msg = add_dot(msg) msg = add_dot(msg)
variable = self.true_config.unrestraint.option(calculation["path"]) variable = self.true_config.unrestraint.option(calculation["path"])
values = self._calculation_with_variable( values = self._calculation_with_variable(child, variable, calculation, msg)
child, variable, calculation, msg
)
else: else:
values = _('the value of the global information "{0}"').format( values = _('the value of the global information "{0}"').format(
calculation["information"] calculation["information"]
@ -172,7 +164,7 @@ class _ToString:
child, option, condition.get("identifiers") child, option, condition.get("identifiers")
) )
else: else:
# option = self.true_config.option(variable_path) # option = self.true_config.option(variable_path)
try: try:
is_inaccessible = self.is_inaccessible_user_data(option) is_inaccessible = self.is_inaccessible_user_data(option)
except AttributeError as err: except AttributeError as err:
@ -239,7 +231,7 @@ class _ToString:
submsg = display_list( submsg = display_list(
[_("is {0}").format(prop), submsg], separator="or", sort=False [_("is {0}").format(prop), submsg], separator="or", sort=False
) )
msg = _("when the variable {{0}} {0}.").format(submsg) msg = _('when the variable {{0}} {0}.').format(submsg)
path_obj = { path_obj = {
"path": doc_path(variable_path, self.document_a_type), "path": doc_path(variable_path, self.document_a_type),
} }
@ -270,13 +262,11 @@ class _ToString:
variable.get() variable.get()
except AttributeError: except AttributeError:
defined = False defined = False
true_msg = _("the value of the variable {0} if it is defined") true_msg = _('the value of the variable {0} if it is defined')
else: else:
true_msg = _("the value of the variable {0}") true_msg = _('the value of the variable {0}')
if defined: if defined:
return self._calculation_with_variable( return self._calculation_with_variable(child, variable, calculation["value"], true_msg)
child, variable, calculation["value"], true_msg
)
return { return {
"message": true_msg, "message": true_msg,
"path": calculation["value"], "path": calculation["value"],
@ -290,7 +280,9 @@ class _ToString:
func = self._calculation_dynamic_variable_with_variable func = self._calculation_dynamic_variable_with_variable
return func(child, variable, calculation, msg) return func(child, variable, calculation, msg)
def _calculation_normal_with_variable(self, child, variable, obj, msg): def _calculation_normal_with_variable(
self, child, variable, obj, msg
):
isfollower = not variable.isoptiondescription() and variable.isfollower() isfollower = not variable.isoptiondescription() and variable.isfollower()
if not isfollower and self.is_inaccessible_user_data(variable): if not isfollower and self.is_inaccessible_user_data(variable):
uncalculated = variable.unrestraint.value.default(uncalculated=True) uncalculated = variable.unrestraint.value.default(uncalculated=True)
@ -303,7 +295,9 @@ class _ToString:
else: else:
if not isinstance(uncalculated, str): if not isinstance(uncalculated, str):
uncalculated = dump(uncalculated) uncalculated = dump(uncalculated)
msg = _("{0} (from an undocumented variable)").format(uncalculated) msg = _("{0} (from an undocumented variable)").format(
uncalculated
)
else: else:
msg = _("the value of an undocumented variable") msg = _("the value of an undocumented variable")
try: try:
@ -316,14 +310,13 @@ class _ToString:
"description": description, "description": description,
} }
def _calculation_dynamic_variable_with_variable(self, child, variable, obj, msg): def _calculation_dynamic_variable_with_variable(
self, child, variable, obj, msg
):
values = [] values = []
for ( for path, description, identifiers, identifier_type in self._get_annotation_variable(
path, child, variable, obj.get("identifiers")
description, ):
identifiers,
identifier_type,
) in self._get_annotation_variable(child, variable, obj.get("identifiers")):
variable = self.true_config.option(path) variable = self.true_config.option(path)
path_obj = { path_obj = {
"path": doc_path(path, self.document_a_type), "path": doc_path(path, self.document_a_type),
@ -332,7 +325,9 @@ class _ToString:
path_obj["identifiers"] = identifiers path_obj["identifiers"] = identifiers
path_obj["identifier_type"] = identifier_type path_obj["identifier_type"] = identifier_type
values.append( values.append(
self._calculation_normal_with_variable(child, variable, path_obj, msg) self._calculation_normal_with_variable(
child, variable, path_obj, msg
)
) )
return values return values
@ -355,13 +350,13 @@ class _ToString:
if ori_identifiers: if ori_identifiers:
if path.count("{{ identifier }}") == len(ori_identifiers): if path.count("{{ identifier }}") == len(ori_identifiers):
identifier_type = "one" identifier_type = "one"
elif "{{ identifier }}" in path[len(get_common_path(child_path, path)) :]: elif "{{ identifier }}" in path[len(get_common_path(child_path, path)):]:
identifier_type = "outside" identifier_type = "outside"
else: else:
identifier_type = "inside" identifier_type = "inside"
else: else:
common_path = get_common_path(child_path, path) common_path = get_common_path(child_path, path)
if common_path and "{{ identifier }}" in path[len(common_path) :]: if common_path and "{{ identifier }}" in path[len(common_path):]:
identifier_type = "outside" identifier_type = "outside"
else: else:
identifier_type = "inside" identifier_type = "inside"
@ -440,7 +435,7 @@ class Collect(_ToString):
path = family.path(uncalculated=True) path = family.path(uncalculated=True)
informations = {} informations = {}
if not self._collect(family, informations, family_type=family_type): if not self._collect(family, informations, family_type=family_type):
return False return False, []
if family_type == "sequence": if family_type == "sequence":
informations.setdefault("help", []).append( informations.setdefault("help", []).append(
_("This family contains lists of variable blocks") _("This family contains lists of variable blocks")
@ -645,11 +640,7 @@ class Collect(_ToString):
annotation = False annotation = False
if child.information.get(f"{prop}_calculation", False): if child.information.get(f"{prop}_calculation", False):
annotation = self._to_string(child, prop) annotation = self._to_string(child, prop)
if ( if not self.only_disabled and annotation is None and prop in HIDDEN_PROPERTIES:
not self.only_disabled
and annotation is None
and prop in HIDDEN_PROPERTIES
):
return False, [] return False, []
if annotation is True and prop in DISABLED_PROPERTIES: if annotation is True and prop in DISABLED_PROPERTIES:
return False, [] return False, []
@ -706,7 +697,9 @@ class Collect(_ToString):
) )
return None return None
var_type = "variable" if family_type is None else "family" var_type = "variable" if family_type is None else "family"
return self._convert_description(child.description(uncalculated=True), var_type) return self._convert_description(
child.description(uncalculated=True), var_type
)
def _convert_description(self, description, type_): def _convert_description(self, description, type_):
return to_phrase(description, type_) return to_phrase(description, type_)
@ -740,7 +733,9 @@ class Collect(_ToString):
variable.value.get() variable.value.get()
except AttributeError: except AttributeError:
variable = None variable = None
if variable and self.is_inaccessible_user_data(variable): if variable and self.is_inaccessible_user_data(
variable
):
try: try:
variable_value = self._get_unmodified_default_value( variable_value = self._get_unmodified_default_value(
variable variable

View file

@ -87,9 +87,7 @@ class RougailOutputDoc(Collect, 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.formatter = self.outputs[output_format](
self.rougailconfig, self.rougailconfig, support_namespace=self.support_namespace, document_a_type=self.document_a_type
support_namespace=self.support_namespace,
document_a_type=self.document_a_type,
) )
def print(self) -> None: def print(self) -> None:
@ -117,8 +115,8 @@ class RougailOutputDoc(Collect, Examples, Changelog):
self.dynamic_paths = {} self.dynamic_paths = {}
if self.config.isoptiondescription(): if self.config.isoptiondescription():
informations = self.collect_families(self.config.unrestraint) informations = self.collect_families(self.config.unrestraint)
# from pprint import pprint # from pprint import pprint
# pprint(informations) # pprint(informations)
else: else:
informations = {} informations = {}
self.collect_variable(self.config, informations) self.collect_variable(self.config, informations)

View file

@ -61,7 +61,7 @@ class Examples: # pylint: disable=no-member,too-few-public-methods
if only_modified: if only_modified:
title = _("Example with mandatory variables not filled in") title = _("Example with mandatory variables not filled in")
else: else:
title = _("Example with all modifiable variables") title = _("Example with all variables modifiable")
datas.append(self.formatter.title(title, self.level)) datas.append(self.formatter.title(title, self.level))
datas.append(self.formatter.yaml(dump(results))) datas.append(self.formatter.yaml(dump(results)))
end = self.formatter.end_family(self.level) end = self.formatter.end_family(self.level)
@ -82,13 +82,7 @@ class Examples: # pylint: disable=no-member,too-few-public-methods
self._set_mandatories(config) self._set_mandatories(config)
return config return config
def _gen_doc_examples( def _gen_doc_examples(self, config, only_modified: bool, with_secret_manager: bool=True, with_calculated_value: bool=True) -> dict:
self,
config,
only_modified: bool,
with_secret_manager: bool = True,
with_calculated_value: bool = True,
) -> dict:
if not only_modified: if not only_modified:
self._set_examples(config) self._set_examples(config)
results = CommentedMap() results = CommentedMap()
@ -113,26 +107,18 @@ class Examples: # pylint: disable=no-member,too-few-public-methods
n_results = n_results[name] n_results = n_results[name]
if only_modified: if only_modified:
if with_calculated_value: if with_calculated_value:
dump_type = "modified" dump_type = 'modified'
else: else:
dump_type = "empty" dump_type = "empty"
else: else:
dump_type = "all" dump_type = 'all'
if root_config.isoptiondescription(): if root_config.isoptiondescription():
self._example_parse_family( self._example_parse_family(
root_config.value.get(), root_config.value.get(), results, dump_type, with_secret_manager=with_secret_manager
results,
dump_type,
with_secret_manager=with_secret_manager,
) )
else: else:
self._set_example_value( self._set_example_value(
results, results, root_config, root_config.value.get(), dump_type, with_secret_manager, False
root_config,
root_config.value.get(),
dump_type,
with_secret_manager,
False,
) )
if true_results and results: if true_results and results:
n_results.update(results) n_results.update(results)
@ -217,51 +203,26 @@ class Examples: # pylint: disable=no-member,too-few-public-methods
return option.issubmulti() return option.issubmulti()
return option.ismulti() return option.ismulti()
def _example_parse_family( def _example_parse_family(self, config, results, dump_type, *, with_secret_manager: bool=True, with_true_path: bool=False) -> None:
self,
config,
results,
dump_type,
*,
with_secret_manager: bool = True,
with_true_path: bool = False,
) -> None:
for option, values in config.items(): for option, values in config.items():
if option.isoptiondescription(): if option.isoptiondescription():
if option.isleadership(): if option.isleadership():
subresults = self._example_parse_sequence( subresults = self._example_parse_sequence(values, dump_type, with_secret_manager, with_true_path)
values, dump_type, with_secret_manager, with_true_path
)
if subresults: if subresults:
name = option.name(uncalculated=with_true_path) name = option.name(uncalculated=with_true_path)
results[name] = subresults results[name] = subresults
self._set_description(results, name, option) self._set_description(results, name, option)
else: else:
subresults = CommentedMap() subresults = CommentedMap()
self._example_parse_family( self._example_parse_family(values, subresults, dump_type, with_secret_manager=with_secret_manager, with_true_path=with_true_path)
values,
subresults,
dump_type,
with_secret_manager=with_secret_manager,
with_true_path=with_true_path,
)
if subresults: if subresults:
name = option.name(uncalculated=with_true_path) name = option.name(uncalculated=with_true_path)
results[name] = subresults results[name] = subresults
self._set_description(results, name, option) self._set_description(results, name, option)
else: else:
self._set_example_value( self._set_example_value(results, option, values, dump_type, with_secret_manager, with_true_path)
results,
option,
values,
dump_type,
with_secret_manager,
with_true_path,
)
def _set_example_value( def _set_example_value(self, results, option, values, dump_type, with_secret_manager, with_true_path):
self, results, option, values, dump_type, with_secret_manager, with_true_path
):
if not self._is_valid_owner(option, dump_type): if not self._is_valid_owner(option, dump_type):
return return
if not with_secret_manager and option.information.get("secret_manager", False): if not with_secret_manager and option.information.get("secret_manager", False):
@ -281,50 +242,22 @@ class Examples: # pylint: disable=no-member,too-few-public-methods
return "hidden" in option.property.get() return "hidden" in option.property.get()
is_default = option.owner.isdefault() is_default = option.owner.isdefault()
return ( return (
( (dump_type == 'modified' and not is_default and option.owner.get() != owners.forced)
dump_type == "modified" or (dump_type == "empty" and "hidden" in option.property.get() and not option.information.get("default_calculation", None) and (option.value.default(uncalculated=True) in [None, []] or not option.information.get("default_value_makes_sense", True)))
and not is_default or (dump_type == 'default' and is_default)
and option.owner.get() != owners.forced
)
or (
dump_type == "empty"
and "hidden" in option.property.get()
and not option.information.get("default_calculation", None)
and (
option.value.default(uncalculated=True) in [None, []]
or not option.information.get("default_value_makes_sense", True)
)
)
or (dump_type == "default" and is_default)
) )
def _example_parse_sequence( def _example_parse_sequence(self, values, dump_type, with_secret_manager, with_true_path):
self, values, dump_type, with_secret_manager, with_true_path
):
sequence_iter = iter(values.items()) sequence_iter = iter(values.items())
leader, leader_values = next(sequence_iter) leader, leader_values = next(sequence_iter)
if not self._is_valid_owner(leader, dump_type): if not self._is_valid_owner(leader, dump_type):
return None return None
sequence = [CommentedMap() for idx in range(len(leader_values))] sequence = [CommentedMap() for idx in range(len(leader_values))]
for idx, value in enumerate(leader_values): for idx, value in enumerate(leader_values):
self._set_example_value( self._set_example_value(sequence[idx], leader, value, dump_type, with_secret_manager, with_true_path)
sequence[idx],
leader,
value,
dump_type,
with_secret_manager,
with_true_path,
)
for option, value in sequence_iter: for option, value in sequence_iter:
idx = option.index() idx = option.index()
self._set_example_value( self._set_example_value(sequence[idx], option, value, dump_type, with_secret_manager, with_true_path)
sequence[idx],
option,
value,
dump_type,
with_secret_manager,
with_true_path,
)
return sequence return sequence
def _set_description(self, results, name, option): def _set_description(self, results, name, option):

View file

@ -21,7 +21,6 @@ from typing import List
from ..i18n import _ from ..i18n import _
from rougail.error import ExtensionError from rougail.error import ExtensionError
from ..utils import dump, CommonFormatter from ..utils import dump, CommonFormatter
try: try:
from rich.jupyter import JupyterMixin from rich.jupyter import JupyterMixin
from rich.segment import Segment from rich.segment import Segment
@ -35,7 +34,6 @@ except ModuleNotFoundError:
if Console: if Console:
class BlockQuote(JupyterMixin): class BlockQuote(JupyterMixin):
def __init__( def __init__(
self, self,
@ -74,9 +72,7 @@ class Formatter(CommonFormatter):
def __init__(self, rougailconfig, **kwargs) -> None: def __init__(self, rougailconfig, **kwargs) -> None:
if not Console: if not Console:
raise ExtensionError( raise ExtensionError(_("cannot find Python module Rich, please install it!"))
_("cannot find Python module Rich, please install it!")
)
self.custom_theme = Theme(self.titles_color) self.custom_theme = Theme(self.titles_color)
self.max_line = 0 self.max_line = 0
super().__init__(rougailconfig, **kwargs) super().__init__(rougailconfig, **kwargs)
@ -91,7 +87,9 @@ class Formatter(CommonFormatter):
force_terminal = "xterm-256color" force_terminal = "xterm-256color"
else: else:
force_terminal = None force_terminal = None
console = Console(theme=self.custom_theme, force_terminal=force_terminal) console = 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)
@ -102,7 +100,7 @@ class Formatter(CommonFormatter):
self, self,
title: str, title: str,
level: int, level: int,
collapse: bool = True, collapse: bool=True,
) -> str: ) -> str:
"""Display family name as a title""" """Display family name as a title"""
space = " " * (2 * (level - 1)) space = " " * (2 * (level - 1))

View file

@ -1,7 +1,7 @@
""" """
Silique (https://www.silique.fr) Silique (https://www.silique.fr)
Copyright (C) 2024-2026 Copyright (C) 2024-2026
This program is free software: you can redistribute it and/or modify it 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 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 Free Software Foundation, either version 3 of the License, or (at your
@ -45,7 +45,7 @@ class Formatter(CommonFormatter):
self, self,
title: str, title: str,
level: int, level: int,
collapse: bool = True, collapse: bool=True,
) -> str: ) -> str:
"""Display family name as a title""" """Display family name as a title"""
char = "#" char = "#"

View file

@ -1,7 +1,7 @@
""" """
Silique (https://www.silique.fr) Silique (https://www.silique.fr)
Copyright (C) 2025-2026 Copyright (C) 2025-2026
This program is free software: you can redistribute it and/or modify it 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 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 Free Software Foundation, either version 3 of the License, or (at your
@ -29,17 +29,16 @@ class Formatter(GithubFormatter):
level = 51 level = 51
format_in_title = False format_in_title = False
def title( def title(self,
self, title: str,
title: str, level: int,
level: int, collapse: bool=True,
collapse: bool = True, ) -> str:
) -> str:
if collapse: if collapse:
return "<details><summary>" + title + "</summary>" return "<details><summary>" + title + "</summary>"
return super().title(title, level, collapse) return super().title(title, level, collapse)
def end_family(self, level, collapse: bool = True): def end_family(self, level, collapse: bool=True):
if collapse: if collapse:
return "</details>" return "</details>"
return None return None
@ -62,9 +61,8 @@ class Formatter(GithubFormatter):
def family_informations_starts_line(self) -> str: def family_informations_starts_line(self) -> str:
return "\n> " return "\n> "
# def list(self, *args, **kwargs):
# def list(self, *args, **kwargs): # return super().list(*args, **kwargs) + "\n"
# return super().list(*args, **kwargs) + "\n"
def family_informations_starts_list_first(self): def family_informations_starts_list_first(self):
return "" return ""

View file

@ -55,10 +55,10 @@ def dump(informations):
def to_phrase(msg, type_="variable"): def to_phrase(msg, type_="variable"):
"""Add maj for the first character and ends with dot""" """Add maj for the first character and ends with dot"""
msg = str(msg).strip()
if not msg: if not msg:
# replace None to empty string # replace None to empty string
return "" return ""
msg = str(msg).strip()
# a phrase must ends with a dot # a phrase must ends with a dot
if type_ == "variable": if type_ == "variable":
msg = add_dot(msg) msg = add_dot(msg)
@ -286,11 +286,11 @@ class CommonFormatter:
if not self.rougailconfig["main_namespace"] and self.with_environment: if not self.rougailconfig["main_namespace"] and self.with_environment:
environment_prefix = self.rougailconfig["doc.tabulars.environment_prefix"] environment_prefix = self.rougailconfig["doc.tabulars.environment_prefix"]
if environment_prefix: if environment_prefix:
self.prefix = environment_prefix + "_" self.prefix = (
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 = dict( self.other_root_filenames = dict(self.rougailconfig["doc.other_root_filenames"].items())
self.rougailconfig["doc.other_root_filenames"].items()
)
tabular_template = self.rougailconfig["doc.tabular_template"] tabular_template = self.rougailconfig["doc.tabular_template"]
self.tabular_datas = Tabulars().get()[tabular_template](self) self.tabular_datas = Tabulars().get()[tabular_template](self)
@ -302,7 +302,7 @@ class CommonFormatter:
self, self,
title: str, title: str,
level: int, level: int,
collapse: bool = True, collapse: bool=True,
) -> str: ) -> str:
"""Display family name as a title""" """Display family name as a title"""
raise NotImplementedError() raise NotImplementedError()
@ -385,10 +385,10 @@ class CommonFormatter:
"""Add a link""" """Add a link"""
raise NotImplementedError() raise NotImplementedError()
def yaml(self, _dump: str, yaml_version: str = "1.1"): def yaml(self, _dump: str, yaml_version: str="1.1"):
output = f"---\n{_dump}" output = f"---\n{_dump}"
if yaml_version == "1.2": if yaml_version == "1.2":
output = f"%YAML 1.2\n{output}\n..." output = f'%YAML 1.2\n{output}\n...'
return self._yaml(output) return self._yaml(output)
################## ##################
@ -414,7 +414,6 @@ class CommonFormatter:
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:
@ -538,8 +537,7 @@ class CommonFormatter:
else: else:
ret = [ ret = [
self.title( self.title(
self.get_description(informations, {}, title=True), self.get_description(informations, {}, title=True), level,
level,
) )
] ]
msg = [] msg = []
@ -569,10 +567,7 @@ class CommonFormatter:
full_path = informations["path"] full_path = informations["path"]
msg.append( msg.append(
self.section( self.section(
full_path, full_path, _("Identifiers"), informations["identifier"], type_="family"
_("Identifiers"),
informations["identifier"],
type_="family",
) )
) )
if msg: if msg:
@ -598,7 +593,7 @@ class CommonFormatter:
def family_informations_ends_line(self) -> str: def family_informations_ends_line(self) -> str:
return "" return ""
def end_family(self, level: int, collapse: bool = True) -> str: def end_family(self, level: int, collapse: bool=True) -> str:
return None return None
def convert_list_to_string( def convert_list_to_string(
@ -632,21 +627,12 @@ class CommonFormatter:
informations: dict, informations: dict,
modified_attributes: dict, modified_attributes: dict,
*, *,
force_identifiers: Optional[list] = None, force_identifiers: Optional[list]=None,
with_to_phrase: bool = True, with_to_phrase: bool=True,
title: bool = False, title: bool=False,
) -> str: ) -> str:
add_new_description = True add_new_description = True
def _get_description(description, identifiers, delete=False, new=[], previous_identifiers=[], new_identifiers=[], its_a_name=False):
def _get_description(
description,
identifiers,
delete=False,
new=[],
previous_identifiers=[],
new_identifiers=[],
its_a_name=False,
):
if identifiers and "{{ identifier }}" in description: if identifiers and "{{ identifier }}" in description:
if its_a_name: if its_a_name:
information_type = "name" information_type = "name"
@ -667,15 +653,14 @@ class CommonFormatter:
formatter = self formatter = self
else: else:
formatter = None formatter = None
description = get_path_from_identifiers( description = get_path_from_identifiers(description,
description, identifiers,
identifiers, previous_identifiers,
previous_identifiers, new_identifiers,
new_identifiers, identifier_type,
identifier_type, formatter=formatter,
formatter=formatter, information_type=information_type,
information_type=information_type, )
)
elif with_to_phrase: elif with_to_phrase:
description = self.to_phrase(description) description = self.to_phrase(description)
if description in new: if description in new:
@ -700,25 +685,15 @@ class CommonFormatter:
) )
else: else:
modified_description = None modified_description = None
elif ( elif "identifiers" in modified_attributes and "{{ identifier }}" in informations["description"]:
"identifiers" in modified_attributes
and "{{ identifier }}" in informations["description"]
):
# FIXME aussi au dessus ! # FIXME aussi au dessus !
name, previous, new = modified_attributes["identifiers"] name, previous, new = modified_attributes["identifiers"]
previous_identifiers = previous[-1] if previous else [] previous_identifiers = previous[-1] if previous else []
new_identifiers = new[-1] if new else [] new_identifiers = new[-1] if new else []
if new_identifiers: if new_identifiers:
all_identifiers = [ all_identifiers = [identifier for identifier in all_identifiers if identifier != new_identifiers]
identifier
for identifier in all_identifiers
if identifier != new_identifiers
]
modified_description = _get_description( modified_description = _get_description(
informations["description"], informations["description"], all_identifiers, previous_identifiers=previous_identifiers, new_identifiers=new_identifiers
all_identifiers,
previous_identifiers=previous_identifiers,
new_identifiers=new_identifiers,
) )
add_new_description = False add_new_description = False
else: else:
@ -731,10 +706,7 @@ class CommonFormatter:
) )
else: else:
description = _get_description( description = _get_description(
informations["name"], informations["name"], all_identifiers, new=new, its_a_name=True,
all_identifiers,
new=new,
its_a_name=True,
) )
else: else:
description = None description = None
@ -780,9 +752,7 @@ class CommonFormatter:
submessage, m = self.message_to_string(full_path, p, submessage) submessage, m = self.message_to_string(full_path, p, submessage)
values.append(self.delete(m)) values.append(self.delete(m))
else: else:
submessage, old_values = self.message_to_string( submessage, old_values = self.message_to_string(full_path, previous, submessage)
full_path, previous, submessage
)
values.append(self.delete(old_values)) values.append(self.delete(old_values))
else: else:
new = [] new = []
@ -791,15 +761,11 @@ class CommonFormatter:
name = old["name"] name = old["name"]
if isinstance(old["values"], list): if isinstance(old["values"], list):
for value in old["values"]: for value in old["values"]:
if "identifiers" in informations and ( if "identifiers" in informations and (not isinstance(value, dict) or "identifiers" not in value):
not isinstance(value, dict) or "identifiers" not in value
):
identifiers = informations["identifiers"] identifiers = informations["identifiers"]
else: else:
identifiers = [] identifiers = []
submessage, old_value = self.message_to_string( submessage, old_value = self.message_to_string(full_path, value, submessage, force_identifiers=identifiers)
full_path, value, submessage, force_identifiers=identifiers
)
if value in new: if value in new:
old_value = self.underline(old_value) old_value = self.underline(old_value)
values.append(old_value) values.append(old_value)
@ -809,24 +775,18 @@ class CommonFormatter:
values = self.join(values) values = self.join(values)
elif values: elif values:
old_values = old["values"] old_values = old["values"]
submessage, old_values = self.message_to_string( submessage, old_values = self.message_to_string(full_path, old_values, submessage)
full_path, old_values, submessage
)
if old["values"] in new: if old["values"] in new:
old_values = self.underline(old_values) old_values = self.underline(old_values)
values.append(old_values) values.append(old_values)
values = self.join(values) values = self.join(values)
else: else:
old_values = old["values"] old_values = old["values"]
if "identifiers" in informations and ( if "identifiers" in informations and (not isinstance(old_values, dict) or "identifiers" not in old_values):
not isinstance(old_values, dict) or "identifiers" not in old_values
):
identifiers = informations["identifiers"] identifiers = informations["identifiers"]
else: else:
identifiers = [] identifiers = []
submessage, values = self.message_to_string( submessage, values = self.message_to_string(full_path, old_values, submessage, force_identifiers=identifiers)
full_path, old_values, submessage, force_identifiers=identifiers
)
if old["values"] in new: if old["values"] in new:
values = self.underline(values) values = self.underline(values)
if values != []: if values != []:
@ -860,9 +820,7 @@ class CommonFormatter:
full_path = informations["path"] full_path = informations["path"]
for idx, choice in enumerate(choices_values.copy()): for idx, choice in enumerate(choices_values.copy()):
if isinstance(choice, dict): if isinstance(choice, dict):
choices_values[idx] = self.message_to_string( choices_values[idx] = self.message_to_string(full_path, choice, None)[1]
full_path, choice, None
)[1]
if "default" in modified_attributes: if "default" in modified_attributes:
name, old_default, new_default = modified_attributes["default"] name, old_default, new_default = modified_attributes["default"]
if not old_default: if not old_default:
@ -951,9 +909,7 @@ class CommonFormatter:
# if old value and new value is a list, display a list # if old value and new value is a list, display a list
if not default_is_a_list and len(choices_values) == 1: if not default_is_a_list and len(choices_values) == 1:
choices_values = choices_values[0] choices_values = choices_values[0]
return default_is_already_set, self.section( return default_is_already_set, self.section(full_path, choices["name"], choices_values)
full_path, choices["name"], choices_values
)
return default_is_already_set, None return default_is_already_set, None
# OTHERs # OTHERs
@ -981,20 +937,13 @@ class CommonFormatter:
) )
) )
if "multiple" in modified_attributes: if "multiple" in modified_attributes:
if ( if modified_attributes["multiple"][1] and modified_attributes["multiple"][1][0]:
modified_attributes["multiple"][1]
and modified_attributes["multiple"][1][0]
):
properties.append( properties.append(
self.prop( self.prop("multiple", italic=False, delete=True, underline=False)
"multiple", italic=False, delete=True, underline=False
)
) )
else: else:
properties.append( properties.append(
self.prop( self.prop("multiple", italic=False, delete=False, underline=True)
"multiple", italic=False, delete=False, underline=True
)
) )
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"]:
@ -1137,9 +1086,7 @@ class CommonFormatter:
) in local_calculated_properties.items(): ) in local_calculated_properties.items():
data = [] data = []
for calc in calculated_property: for calc in calculated_property:
annotation = self.message_to_string( annotation = self.message_to_string(full_path, calc["annotation"], None)[1]
full_path, calc["annotation"], None
)[1]
if calc.get("underline", False): if calc.get("underline", False):
annotation = self.underline(annotation) annotation = self.underline(annotation)
if calc.get("delete", False): if calc.get("delete", False):
@ -1151,9 +1098,7 @@ class CommonFormatter:
calculated_property = data[0] calculated_property = data[0]
calculated_properties.append( calculated_properties.append(
self.section( self.section(
full_path, full_path, calculated_property_name.capitalize(), calculated_property
calculated_property_name.capitalize(),
calculated_property,
) )
) )
if not properties: if not properties:
@ -1181,10 +1126,12 @@ class CommonFormatter:
headers = self.tabular_header(self.tabular_datas.headers()) headers = self.tabular_header(self.tabular_datas.headers())
else: else:
headers = () headers = ()
msg = tabulate( msg = (
self.tabular_datas.get(), tabulate(
headers=headers, self.tabular_datas.get(),
tablefmt=self._tabular_name, headers=headers,
tablefmt=self._tabular_name,
)
) )
return msg return msg
@ -1206,32 +1153,18 @@ class CommonFormatter:
filename = self.other_root_filenames["."] filename = self.other_root_filenames["."]
if "identifiers" in msg["path"]: if "identifiers" in msg["path"]:
msg["identifiers"] = msg["path"]["identifiers"] msg["identifiers"] = msg["path"]["identifiers"]
calculated_paths = calc_path( calculated_paths = calc_path(msg["path"], formatter=self, identifiers=force_identifiers)
msg["path"], formatter=self, identifiers=force_identifiers
)
if self.support_namespace and self.document_a_type: if self.support_namespace and self.document_a_type:
namespace = full_path.split(".", 1)[0] namespace = full_path.split(".", 1)[0]
else: else:
namespace = None namespace = None
if isinstance(calculated_paths, list): if isinstance(calculated_paths, list):
msgs = [ msgs = [msg["message"].format(self.link_variable(
msg["message"].format( doc_path(calculated_path, self.document_a_type, namespace),
self.link_variable( msg["path"]["path"],
doc_path( self.get_description(msg, {}, force_identifiers=[msg["path"]["identifiers"][idx]], with_to_phrase=False),
calculated_path, self.document_a_type, namespace filename=filename,
), )) for idx, calculated_path in enumerate(calculated_paths)]
msg["path"]["path"],
self.get_description(
msg,
{},
force_identifiers=[msg["path"]["identifiers"][idx]],
with_to_phrase=False,
),
filename=filename,
)
)
for idx, calculated_path in enumerate(calculated_paths)
]
msg = self.list(msgs) msg = self.list(msgs)
else: else:
path = self.link_variable( path = self.link_variable(
@ -1332,18 +1265,10 @@ def calc_path(path, *, formatter=None, identifiers: List[str] = None) -> str:
if formatter: if formatter:
identifier = formatter.italic(identifier) identifier = formatter.italic(identifier)
return path.replace("{{ identifier }}", identifier, 1) return path.replace("{{ identifier }}", identifier, 1)
if isinstance(path, dict): if isinstance(path, dict):
path_ = path["path"] path_ = path["path"]
if "identifiers" in path: if "identifiers" in path:
path_ = get_path_from_identifiers( path_ = get_path_from_identifiers(path["path"], path["identifiers"], [], [], path["identifier_type"], formatter)
path["path"],
path["identifiers"],
[],
[],
path["identifier_type"],
formatter,
)
elif identifiers: elif identifiers:
for identifier in identifiers[0]: for identifier in identifiers[0]:
path_ = _path_with_identifier(path_, identifier) path_ = _path_with_identifier(path_, identifier)
@ -1357,36 +1282,34 @@ def calc_path(path, *, formatter=None, identifiers: List[str] = None) -> str:
return path_ return path_
def doc_path(path, document_a_type, namespace: Optional[str] = None) -> str: def doc_path(path, document_a_type, namespace: Optional[str]=None) -> str:
if document_a_type: if document_a_type:
if "." not in path: if "." not in path:
return None return None
if not namespace or path.startswith(namespace + "."): if not namespace or path.startswith(namespace + '.'):
return path.split(".", 1)[-1] return path.split(".", 1)[-1]
return path return path
def get_path_from_identifiers( def get_path_from_identifiers(text: str,
text: str, all_identifiers: list,
all_identifiers: list, previous_identifiers: list,
previous_identifiers: list, new_identifiers: list,
new_identifiers: list, identifier_type: str,
identifier_type: str, formatter: Optional[object]=None,
formatter: Optional[object] = None, information_type="path",
information_type="path", ) -> str:
) -> str:
if not isinstance(all_identifiers, list): if not isinstance(all_identifiers, list):
raise Exception("hu1?") raise Exception('hu1?')
if all_identifiers: if all_identifiers:
for i in all_identifiers: for i in all_identifiers:
if not isinstance(i, list): if not isinstance(i, list):
raise Exception("hu2?") raise Exception('hu2?')
for j in i: for j in i:
if isinstance(j, list): if isinstance(j, list):
raise Exception("hu3?") raise Exception('hu3?')
if not isinstance(new_identifiers, list): if not isinstance(new_identifiers, list):
raise Exception("hu?") raise Exception('hu?')
def _text_with_identifier(information, identifier, delete=False, underline=False): def _text_with_identifier(information, identifier, delete=False, underline=False):
if identifier is None: if identifier is None:
identifier = "{{ __identifier__ }}" identifier = "{{ __identifier__ }}"
@ -1401,7 +1324,6 @@ def get_path_from_identifiers(
identifier = formatter.underline(identifier) identifier = formatter.underline(identifier)
identifier = formatter.italic(identifier) identifier = formatter.italic(identifier)
return information.replace("{{ identifier }}", identifier, 1) return information.replace("{{ identifier }}", identifier, 1)
if identifier_type == "outside": if identifier_type == "outside":
separator = "and" separator = "and"
else: else:
@ -1442,7 +1364,9 @@ def get_path_from_identifiers(
separator=separator, separator=separator,
sort=False, sort=False,
) )
return text.replace("{{ identifier }}", identifiers_text) return text.replace(
if identifier_type == "outside": "{{ identifier }}", identifiers_text
)
if identifier_type == 'outside':
return paths return paths
return display_list(paths, separator=separator, sort=False) return display_list(paths, separator=separator, sort=False)

View file

@ -12,12 +12,5 @@ With useful information.
`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `basic` `mandatory` | The second variable. + `https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `basic` `mandatory` | The second variable. +
Multi line Multi line
Help Help
With useful information.
| **var3** +
`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `basic` `mandatory` | The third variable with spaces. +
Multi line with space.
Help.
With useful information. With useful information.
|==== |====

View file

@ -1,5 +1,4 @@
| Variable | Description | | Variable | Description |
|--------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------| |--------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|
| **<a id="var1" name="var1">var1</a>**<br/>[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` | The first variable.<br/>Multi line<br/><br/>Help<br/><br/>With useful information. | | **<a id="var1" name="var1">var1</a>**<br/>[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` | The first variable.<br/>Multi line<br/><br/>Help<br/><br/>With useful information. |
| **<a id="var2" name="var2">var2</a>**<br/>[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` | The second variable.<br/>Multi line<br/>Help<br/>With useful information. | | **<a id="var2" name="var2">var2</a>**<br/>[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` | The second variable.<br/>Multi line<br/>Help<br/>With useful information. |
| **<a id="var3" name="var3">var3</a>**<br/>[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` | The third variable with spaces.<br/>Multi line with space.<br/> <br/>Help.<br/><br/>With useful information. |

View file

@ -10,11 +10,6 @@ Help
With useful information. </td></tr> With useful information. </td></tr>
<tr><td><b>var2</b><br/><mark><a href='https://rougail.readthedocs.io/en/latest/variable.html#variables-types'>string</a></mark> <mark>basic</mark> <mark>mandatory</mark></td><td>The second variable.<br/>Multi line <tr><td><b>var2</b><br/><mark><a href='https://rougail.readthedocs.io/en/latest/variable.html#variables-types'>string</a></mark> <mark>basic</mark> <mark>mandatory</mark></td><td>The second variable.<br/>Multi line
Help Help
With useful information. </td></tr>
<tr><td><b>var3</b><br/><mark><a href='https://rougail.readthedocs.io/en/latest/variable.html#variables-types'>string</a></mark> <mark>basic</mark> <mark>mandatory</mark></td><td>The third variable with spaces.<br/>Multi line with space.
Help.
With useful information. </td></tr> With useful information. </td></tr>
</tbody> </tbody>
</table> </table>

View file

@ -36,24 +36,5 @@
"mode": "basic", "mode": "basic",
"type": "variable", "type": "variable",
"variable_type": "string" "variable_type": "string"
},
"var3": {
"path": "var3",
"name": "var3",
"description": "The third variable with spaces.",
"help": [
"Multi line with space.\n \nHelp.\n\nWith useful information."
],
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "string"
} }
} }

View file

@ -1,5 +1,4 @@
| Variable | Description | | Variable | Description |
|--------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------| |--------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|
| **<a id="var1" name="var1">var1</a>**<br/>[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` | The first variable.<br/>Multi line<br/><br/>Help<br/><br/>With useful information. | | **<a id="var1" name="var1">var1</a>**<br/>[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` | The first variable.<br/>Multi line<br/><br/>Help<br/><br/>With useful information. |
| **<a id="var2" name="var2">var2</a>**<br/>[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` | The second variable.<br/>Multi line<br/>Help<br/>With useful information. | | **<a id="var2" name="var2">var2</a>**<br/>[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` | The second variable.<br/>Multi line<br/>Help<br/>With useful information. |
| **<a id="var3" name="var3">var3</a>**<br/>[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` | The third variable with spaces.<br/>Multi line with space.<br/> <br/>Help.<br/><br/>With useful information. |

View file

@ -12,12 +12,5 @@
 string   basic   mandatory  │ Multi line │  string   basic   mandatory  │ Multi line │
│ │ Help │ │ │ Help │
│ │ With useful information. │ │ │ With useful information. │
├───────────────────────────────────────┼──────────────────────────────────────┤
var3 │ The third variable with spaces. │
 string   basic   mandatory  │ Multi line with space. │
│ │ │
│ │ Help. │
│ │ │
│ │ With useful information. │
└───────────────────────────────────────┴──────────────────────────────────────┘ └───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -38,25 +38,4 @@ With useful information. +
| Variable | Variable
| **family2.var** + | **family2.var** +
`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `basic` `mandatory` `https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `basic` `mandatory`
|====
== The third family with space
====
**🛈 Informations**
Multi line. +
+
Help. +
With useful information. +
**Path**: family3 +
`basic`
====
[cols="1a,1a"]
|====
| Variable | Description
| **family3.var** +
`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `basic` `mandatory` | A variable.
|==== |====

View file

@ -38,25 +38,4 @@
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------| |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **<a id="family2.var" name="family2.var">family2.var</a>**<br/>[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` | | **<a id="family2.var" name="family2.var">family2.var</a>**<br/>[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` |
</details>
<details><summary>The third family with space</summary>
> [!note] 🛈 Informations
> Multi line.
>
>
>
> Help.
>
> With useful information.
>
> **Path**: family3
>
> `basic`
| Variable | Description |
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|
| **<a id="family3.var" name="family3.var">family3.var</a>**<br/>[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` | A variable. |
</details> </details>

View file

@ -22,17 +22,4 @@ Multi line.<br/>Help.<br/>With useful information.<br/><b>Path</b>: family2<br/>
<tbody> <tbody>
<tr><td><b>family2.var</b><br/><mark><a href='https://rougail.readthedocs.io/en/latest/variable.html#variables-types'>string</a></mark> <mark>basic</mark> <mark>mandatory</mark></td></tr> <tr><td><b>family2.var</b><br/><mark><a href='https://rougail.readthedocs.io/en/latest/variable.html#variables-types'>string</a></mark> <mark>basic</mark> <mark>mandatory</mark></td></tr>
</tbody> </tbody>
</table>
<h1>The third family with space</h1>
Multi line.<br/><br/>Help.<br/>With useful information.<br/><b>Path</b>: family3<br/><mark>basic</mark>
<table>
<thead>
<tr><th>Variable </th><th>Description </th></tr>
</thead>
<tbody>
<tr><td><b>family3.var</b><br/><mark><a href='https://rougail.readthedocs.io/en/latest/variable.html#variables-types'>string</a></mark> <mark>basic</mark> <mark>mandatory</mark></td><td>A variable. </td></tr>
</tbody>
</table> </table>

View file

@ -58,36 +58,5 @@
"variable_type": "string" "variable_type": "string"
} }
} }
},
"family3": {
"type": "family",
"informations": {
"path": "family3",
"name": "family3",
"description": "The third family with space",
"help": [
"Multi line\n \nHelp\nWith useful information."
],
"properties": [],
"mode": "basic"
},
"children": {
"var": {
"path": "family3.var",
"name": "var",
"description": "A variable.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "string"
}
}
} }
} }

View file

@ -26,19 +26,4 @@
| Variable | | Variable |
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------| |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **<a id="family2.var" name="family2.var">family2.var</a>**<br/>[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` | | **<a id="family2.var" name="family2.var">family2.var</a>**<br/>[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` |
# The third family with space
> [!NOTE]
>
> Multi line.\
> \
> Help.\
> With useful information.\
> **Path**: family3\
> `basic`
| Variable | Description |
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|
| **<a id="family3.var" name="family3.var">family3.var</a>**<br/>[`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` | A variable. |

View file

@ -34,21 +34,3 @@
 string   basic   mandatory  │  string   basic   mandatory  │
└──────────────────────────────────────────────────────────────────────────────┘ └──────────────────────────────────────────────────────────────────────────────┘
The third family with space
▌ 🛈 Informations
▌ 
▌ Multi line.
▌ 
▌ Help.
▌ With useful information.
▌ Path: family3
▌  basic 
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
family3.var │ A variable. │
 string   basic   mandatory  │ │
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -7,7 +7,7 @@ version: example
---- ----
== Example with all modifiable variables == Example with all variables modifiable
[,yaml] [,yaml]
---- ----

View file

@ -7,7 +7,7 @@ version: example
</details> </details>
<details><summary>Example with all modifiable variables</summary> <details><summary>Example with all variables modifiable</summary>
```yaml ```yaml
--- ---

View file

@ -3,7 +3,7 @@
<pre>--- <pre>---
version: example</pre> version: example</pre>
<h1>Example with all modifiable variables</h1> <h1>Example with all variables modifiable</h1>
<pre>--- <pre>---
version: example</pre> version: example</pre>

View file

@ -5,7 +5,7 @@
version: example version: example
``` ```
# Example with all modifiable variables # Example with all variables modifiable
```yaml ```yaml
--- ---

View file

@ -3,7 +3,7 @@
---  --- 
version: example  version: example 
Example with all modifiable variables Example with all variables modifiable
---  --- 
version: example  version: example 

View file

@ -7,7 +7,7 @@ empty: example
---- ----
== Example with all modifiable variables == Example with all variables modifiable
[,yaml] [,yaml]
---- ----

View file

@ -7,7 +7,7 @@ empty: example
</details> </details>
<details><summary>Example with all modifiable variables</summary> <details><summary>Example with all variables modifiable</summary>
```yaml ```yaml
--- ---

View file

@ -3,7 +3,7 @@
<pre>--- <pre>---
empty: example</pre> empty: example</pre>
<h1>Example with all modifiable variables</h1> <h1>Example with all variables modifiable</h1>
<pre>--- <pre>---
empty: example</pre> empty: example</pre>

View file

@ -5,7 +5,7 @@
empty: example empty: example
``` ```
# Example with all modifiable variables # Example with all variables modifiable
```yaml ```yaml
--- ---

View file

@ -3,7 +3,7 @@
---  --- 
empty: example  empty: example 
Example with all modifiable variables Example with all variables modifiable
---  --- 
empty: example  empty: example 

View file

@ -1,4 +1,4 @@
== Example with all modifiable variables == Example with all variables modifiable
[,yaml] [,yaml]
---- ----

View file

@ -1,4 +1,4 @@
<details><summary>Example with all modifiable variables</summary> <details><summary>Example with all variables modifiable</summary>
```yaml ```yaml
--- ---

View file

@ -1,4 +1,4 @@
<h1>Example with all modifiable variables</h1> <h1>Example with all variables modifiable</h1>
<pre>--- <pre>---
var1: no var1: no

View file

@ -1,4 +1,4 @@
# Example with all modifiable variables # Example with all variables modifiable
```yaml ```yaml
--- ---

View file

@ -1,4 +1,4 @@
Example with all modifiable variables Example with all variables modifiable
---  --- 
var1: no  var1: no 

View file

@ -1,4 +1,4 @@
== Example with all modifiable variables == Example with all variables modifiable
[,yaml] [,yaml]
---- ----

View file

@ -1,4 +1,4 @@
<details><summary>Example with all modifiable variables</summary> <details><summary>Example with all variables modifiable</summary>
```yaml ```yaml
--- ---

View file

@ -1,4 +1,4 @@
<h1>Example with all modifiable variables</h1> <h1>Example with all variables modifiable</h1>
<pre>--- <pre>---
var1: var1:

View file

@ -1,4 +1,4 @@
# Example with all modifiable variables # Example with all variables modifiable
```yaml ```yaml
--- ---

View file

@ -1,4 +1,4 @@
Example with all modifiable variables Example with all variables modifiable
---  --- 
var1:  var1: 

View file

@ -1,4 +1,4 @@
== Example with all modifiable variables == Example with all variables modifiable
[,yaml] [,yaml]
---- ----

View file

@ -1,4 +1,4 @@
<details><summary>Example with all modifiable variables</summary> <details><summary>Example with all variables modifiable</summary>
```yaml ```yaml
--- ---

View file

@ -1,4 +1,4 @@
<h1>Example with all modifiable variables</h1> <h1>Example with all variables modifiable</h1>
<pre>--- <pre>---
var2: a_value</pre> var2: a_value</pre>

View file

@ -1,4 +1,4 @@
# Example with all modifiable variables # Example with all variables modifiable
```yaml ```yaml
--- ---

View file

@ -1,4 +1,4 @@
Example with all modifiable variables Example with all variables modifiable
---  --- 
var2: a_value  var2: a_value 

View file

@ -8,7 +8,7 @@ var1:
---- ----
== Example with all modifiable variables == Example with all variables modifiable
[,yaml] [,yaml]
---- ----

View file

@ -8,7 +8,7 @@ var1:
</details> </details>
<details><summary>Example with all modifiable variables</summary> <details><summary>Example with all variables modifiable</summary>
```yaml ```yaml
--- ---

View file

@ -4,7 +4,7 @@
var1: var1:
- example.net</pre> - example.net</pre>
<h1>Example with all modifiable variables</h1> <h1>Example with all variables modifiable</h1>
<pre>--- <pre>---
var1: var1:

View file

@ -6,7 +6,7 @@ var1:
- example.net - example.net
``` ```
# Example with all modifiable variables # Example with all variables modifiable
```yaml ```yaml
--- ---

View file

@ -4,7 +4,7 @@
var1:  var1: 
 - example.net   - example.net 
Example with all modifiable variables Example with all variables modifiable
---  --- 
var1:  var1: 

View file

@ -7,7 +7,7 @@ var1: example
---- ----
== Example with all modifiable variables == Example with all variables modifiable
[,yaml] [,yaml]
---- ----

View file

@ -7,7 +7,7 @@ var1: example
</details> </details>
<details><summary>Example with all modifiable variables</summary> <details><summary>Example with all variables modifiable</summary>
```yaml ```yaml
--- ---

View file

@ -3,7 +3,7 @@
<pre>--- <pre>---
var1: example</pre> var1: example</pre>
<h1>Example with all modifiable variables</h1> <h1>Example with all variables modifiable</h1>
<pre>--- <pre>---
var1: example var1: example

View file

@ -5,7 +5,7 @@
var1: example var1: example
``` ```
# Example with all modifiable variables # Example with all variables modifiable
```yaml ```yaml
--- ---

View file

@ -3,7 +3,7 @@
---  --- 
var1: example  var1: example 
Example with all modifiable variables Example with all variables modifiable
---  --- 
var1: example  var1: example 

View file

@ -8,7 +8,7 @@ var3: example
---- ----
== Example with all modifiable variables == Example with all variables modifiable
[,yaml] [,yaml]
---- ----

View file

@ -8,7 +8,7 @@ var3: example
</details> </details>
<details><summary>Example with all modifiable variables</summary> <details><summary>Example with all variables modifiable</summary>
```yaml ```yaml
--- ---

View file

@ -4,7 +4,7 @@
var1: example var1: example
var3: example</pre> var3: example</pre>
<h1>Example with all modifiable variables</h1> <h1>Example with all variables modifiable</h1>
<pre>--- <pre>---
var1: example var1: example

View file

@ -6,7 +6,7 @@ var1: example
var3: example var3: example
``` ```
# Example with all modifiable variables # Example with all variables modifiable
```yaml ```yaml
--- ---

View file

@ -4,7 +4,7 @@
var1: example  var1: example 
var3: example  var3: example 
Example with all modifiable variables Example with all variables modifiable
---  --- 
var1: example  var1: example 

View file

@ -8,7 +8,7 @@ var1:
---- ----
== Example with all modifiable variables == Example with all variables modifiable
[,yaml] [,yaml]
---- ----

View file

@ -8,7 +8,7 @@ var1:
</details> </details>
<details><summary>Example with all modifiable variables</summary> <details><summary>Example with all variables modifiable</summary>
```yaml ```yaml
--- ---

View file

@ -4,7 +4,7 @@
var1: var1:
- example.net</pre> - example.net</pre>
<h1>Example with all modifiable variables</h1> <h1>Example with all variables modifiable</h1>
<pre>--- <pre>---
var1: var1:

View file

@ -6,7 +6,7 @@ var1:
- example.net - example.net
``` ```
# Example with all modifiable variables # Example with all variables modifiable
```yaml ```yaml
--- ---

View file

@ -4,7 +4,7 @@
var1:  var1: 
 - example.net   - example.net 
Example with all modifiable variables Example with all variables modifiable
---  --- 
var1:  var1: 

View file

@ -8,7 +8,7 @@ var2: example
---- ----
== Example with all modifiable variables == Example with all variables modifiable
[,yaml] [,yaml]
---- ----

View file

@ -8,7 +8,7 @@ var2: example
</details> </details>
<details><summary>Example with all modifiable variables</summary> <details><summary>Example with all variables modifiable</summary>
```yaml ```yaml
--- ---

View file

@ -4,7 +4,7 @@
var1: example var1: example
var2: example</pre> var2: example</pre>
<h1>Example with all modifiable variables</h1> <h1>Example with all variables modifiable</h1>
<pre>--- <pre>---
var1: example var1: example

View file

@ -6,7 +6,7 @@ var1: example
var2: example var2: example
``` ```
# Example with all modifiable variables # Example with all variables modifiable
```yaml ```yaml
--- ---

View file

@ -4,7 +4,7 @@
var1: example  var1: example 
var2: example  var2: example 
Example with all modifiable variables Example with all variables modifiable
---  --- 
var1: example  var1: example 

View file

@ -1,4 +1,4 @@
== Example with all modifiable variables == Example with all variables modifiable
[,yaml] [,yaml]
---- ----

View file

@ -1,4 +1,4 @@
<details><summary>Example with all modifiable variables</summary> <details><summary>Example with all variables modifiable</summary>
```yaml ```yaml
--- ---

View file

@ -1,4 +1,4 @@
<h1>Example with all modifiable variables</h1> <h1>Example with all variables modifiable</h1>
<pre>--- <pre>---
without_type: non</pre> without_type: non</pre>

View file

@ -1,4 +1,4 @@
# Example with all modifiable variables # Example with all variables modifiable
```yaml ```yaml
--- ---

View file

@ -1,4 +1,4 @@
Example with all modifiable variables Example with all variables modifiable
---  --- 
without_type: non  without_type: non 

View file

@ -1,4 +1,4 @@
== Example with all modifiable variables == Example with all variables modifiable
[,yaml] [,yaml]
---- ----

View file

@ -1,4 +1,4 @@
<details><summary>Example with all modifiable variables</summary> <details><summary>Example with all variables modifiable</summary>
```yaml ```yaml
--- ---

View file

@ -1,4 +1,4 @@
<h1>Example with all modifiable variables</h1> <h1>Example with all variables modifiable</h1>
<pre>--- <pre>---
var1: true var1: true

View file

@ -1,4 +1,4 @@
# Example with all modifiable variables # Example with all variables modifiable
```yaml ```yaml
--- ---

View file

@ -1,4 +1,4 @@
Example with all modifiable variables Example with all variables modifiable
---  --- 
var1: true  var1: true 

View file

@ -1,4 +1,4 @@
== Example with all modifiable variables == Example with all variables modifiable
[,yaml] [,yaml]
---- ----

View file

@ -1,4 +1,4 @@
<details><summary>Example with all modifiable variables</summary> <details><summary>Example with all variables modifiable</summary>
```yaml ```yaml
--- ---

View file

@ -1,4 +1,4 @@
<h1>Example with all modifiable variables</h1> <h1>Example with all variables modifiable</h1>
<pre>--- <pre>---
variable: true</pre> variable: true</pre>

View file

@ -1,4 +1,4 @@
# Example with all modifiable variables # Example with all variables modifiable
```yaml ```yaml
--- ---

View file

@ -1,4 +1,4 @@
Example with all modifiable variables Example with all variables modifiable
---  --- 
variable: true  variable: true 

View file

@ -8,7 +8,7 @@ var2: a
---- ----
== Example with all modifiable variables == Example with all variables modifiable
[,yaml] [,yaml]
---- ----

View file

@ -8,7 +8,7 @@ var2: a
</details> </details>
<details><summary>Example with all modifiable variables</summary> <details><summary>Example with all variables modifiable</summary>
```yaml ```yaml
--- ---

View file

@ -4,7 +4,7 @@
var1: a var1: a
var2: a</pre> var2: a</pre>
<h1>Example with all modifiable variables</h1> <h1>Example with all variables modifiable</h1>
<pre>--- <pre>---
var1: a var1: a

View file

@ -6,7 +6,7 @@ var1: a
var2: a var2: a
``` ```
# Example with all modifiable variables # Example with all variables modifiable
```yaml ```yaml
--- ---

View file

@ -4,7 +4,7 @@
var1: a  var1: a 
var2: a  var2: a 
Example with all modifiable variables Example with all variables modifiable
---  --- 
var1: a  var1: a 

View file

@ -1,4 +1,4 @@
== Example with all modifiable variables == Example with all variables modifiable
[,yaml] [,yaml]
---- ----

View file

@ -1,4 +1,4 @@
<details><summary>Example with all modifiable variables</summary> <details><summary>Example with all variables modifiable</summary>
```yaml ```yaml
--- ---

Some files were not shown because too many files have changed in this diff Show more