fix(36): format 1.0: suffix attribut must works #37

Merged
gnunux merged 1 commit from 36_format_1.0 into develop 2024-11-05 08:29:42 +01:00
3 changed files with 65 additions and 43 deletions

View file

@ -5,7 +5,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2024-11-01 11:05+0100\n" "POT-Creation-Date: 2024-11-04 12:04+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -67,19 +67,19 @@ msgstr ""
msgid "the variable \"{0}\" has an unvalid default value \"{1}\" should be in {2}" msgid "the variable \"{0}\" has an unvalid default value \"{1}\" should be in {2}"
msgstr "" msgstr ""
#: src/rougail/convert.py:265 #: src/rougail/convert.py:281
msgid "A variable or a family located in the \"{0}\" namespace shall not be used in the \"{1}\" namespace" msgid "A variable or a family located in the \"{0}\" namespace shall not be used in the \"{1}\" namespace"
msgstr "" msgstr ""
#: src/rougail/convert.py:459 #: src/rougail/convert.py:475
msgid "unknown type {0} for {1}" msgid "unknown type {0} for {1}"
msgstr "" msgstr ""
#: src/rougail/convert.py:1324 #: src/rougail/convert.py:1345
msgid "duplicate dictionary file name {0}" msgid "duplicate dictionary file name {0}"
msgstr "" msgstr ""
#: src/rougail/convert.py:1371 #: src/rougail/convert.py:1392
msgid "Cannot execute annotate multiple time" msgid "Cannot execute annotate multiple time"
msgstr "" msgstr ""

View file

@ -162,45 +162,61 @@ class Paths:
path = get_realpath(path, identifier_path) path = get_realpath(path, identifier_path)
dynamic = None dynamic = None
# version 1.0 # version 1.0
if ( if version == "1.0":
version == "1.0" if not path in self._data and "{{ suffix }}" not in path:
and not path in self._data new_path = None
and "{{ identifier }}" not in path current_path = None
): identifiers = []
new_path = None for name in path.split("."):
current_path = None parent_path = current_path
for name in path.split("."): if current_path:
parent_path = current_path current_path += "." + name
if current_path:
current_path += "." + name
else:
current_path = name
if current_path in self._data:
if new_path:
new_path += "." + name
else: else:
new_path = name current_path = name
continue if current_path in self._data:
for dynamic_path in self._dynamics: if new_path:
if "." in dynamic_path: new_path += "." + name
parent_dynamic, name_dynamic = dynamic_path.rsplit(".", 1) else:
else: new_path = name
parent_dynamic = None continue
name_dynamic = dynamic_path for dynamic_path in self._dynamics:
if ( if "." in dynamic_path:
parent_dynamic == parent_path parent_dynamic, name_dynamic = dynamic_path.rsplit(".", 1)
and name_dynamic.endswith("{{ identifier }}") else:
and name == name_dynamic.replace("{{ identifier }}", "") parent_dynamic = None
): name_dynamic = dynamic_path
new_path += "." + name_dynamic if (
parent_dynamic == parent_path
and name_dynamic.endswith("{{ identifier }}")
and name == name_dynamic.replace("{{ identifier }}", "")
):
new_path += "." + name_dynamic
break
regexp = "^" + name_dynamic.replace("{{ identifier }}", "(.*)")
finded = findall(regexp, name)
if len(finded) != 1 or not finded[0]:
continue
if finded[0] == "{{ identifier }}":
identifiers.append(None)
else:
identifiers.append(finded[0])
if new_path is None:
new_path = name_dynamic
else:
new_path += "." + name_dynamic
parent_path = dynamic_path
break break
else:
if new_path:
new_path += "." + name
else: else:
new_path = name if new_path:
path = new_path new_path += "." + name
if version != "1.0" and not path in self._data: else:
new_path = name
path = new_path
else:
identifiers = None
if "{{ suffix }}" in path:
path = path.replace("{{ suffix }}", "{{ identifier }}")
elif not path in self._data:
current_path = None current_path = None
parent_path = None parent_path = None
new_path = current_path new_path = current_path
@ -632,14 +648,17 @@ class ParserVariable:
family_obj["type"] = obj_type = "dynamic" family_obj["type"] = obj_type = "dynamic"
if obj_type == "dynamic": if obj_type == "dynamic":
family_is_dynamic = True family_is_dynamic = True
parent_dynamic = path
if "{{ identifier }}" not in name: if "{{ identifier }}" not in name:
if "variable" in family_obj: if version == "1.0" and "{{ suffix }}" in name:
name = name.replace("{{ suffix }}", "{{ identifier }}")
path = path.replace("{{ suffix }}", "{{ identifier }}")
elif "variable" in family_obj:
name += "{{ identifier }}" name += "{{ identifier }}"
path += "{{ identifier }}" path += "{{ identifier }}"
else: else:
msg = f'dynamic family name must have "{{{{ identifier }}}}" in his name for "{path}"' msg = f'dynamic family name must have "{{{{ identifier }}}}" in his name for "{path}"'
raise DictConsistencyError(msg, 13, [filename]) raise DictConsistencyError(msg, 13, [filename])
parent_dynamic = path
if version != "1.0" and not family_obj and comment: if version != "1.0" and not family_obj and comment:
family_obj["description"] = comment family_obj["description"] = comment
self.add_family( self.add_family(
@ -1099,6 +1118,8 @@ class ParserVariable:
"type": "any", "type": "any",
} }
else: else:
if version == "1.0" and val["type"] == "suffix":
val["type"] = "identifier"
param_typ = val["type"] param_typ = val["type"]
val["key"] = key val["key"] = key
val["path"] = path val["path"] = path

View file

@ -687,6 +687,7 @@ CALCULATION_TYPES = {
"variable": VariableCalculation, "variable": VariableCalculation,
"information": InformationCalculation, "information": InformationCalculation,
"identifier": IdentifierCalculation, "identifier": IdentifierCalculation,
"suffix": IdentifierCalculation,
"index": IndexCalculation, "index": IndexCalculation,
} }
CALCULATION_PROPERTY_TYPES = { CALCULATION_PROPERTY_TYPES = {