diff --git a/spip2md/spipobjects.py b/spip2md/spipobjects.py
index 3586036..cf6d4a5 100644
--- a/spip2md/spipobjects.py
+++ b/spip2md/spipobjects.py
@@ -37,7 +37,6 @@ from spip2md.style import BLUE, BOLD, GREEN, WARNING_STYLE, YELLOW, esc
class SpipWritable:
- term_color: int
texte: str
lang: str
titre: str
@@ -45,27 +44,41 @@ class SpipWritable:
profondeur: int
style: tuple[int, ...]
- # Returns the first detected language (& instantiate a new object for the second)
- # (currently don’t instantiate, just warns)
- def translate(self, text: str) -> str:
- def replace_lang(match: Match[str]) -> str:
- first_lang: str = match.group(1)
- # The first group is the inside of blocks
- for i, lang in enumerate(MULTILANGS.finditer(match.group(1))):
+ # Returns the first detected language & instantiate a new object for the nexts
+ def translate_multi(self, text: str) -> str:
+ # Create a lang: text dict
+ translations: dict[str, str] = {"default": text}
+ # Keep the first lang in default translation, then
+ # for each langs of blocks, add its text to the corresponding dict key
+ for block in MULTILANG_BLOCK.finditer(translations["default"]):
+ for i, lang in enumerate(MULTILANGS.finditer(block.group(1))):
if i == 0:
- # Redefine this lang to the first one WARNING
- self.lang = lang.group(1)
- # Outputs the first lang associated text
- first_lang = lang.group(2)
- else:
- title: str = first_lang[:40].strip(" \n")
- translate: str = lang.group(2)[:40].strip(" \n")
- logging.warning(
- f"Ignored {lang.group(1)} translation of {title}: {translate}",
+ translations["default"] = translations["default"].replace(
+ block.group(), lang.group(2)
)
- return first_lang
-
- return MULTILANG_BLOCK.sub(replace_lang, text)
+ if lang.group(1) in translations:
+ translations[lang.group(1)] += lang.group(2)
+ else:
+ translations[lang.group(1)] = lang.group(2)
+ # Logs the translation
+ title: str = self.titre.strip()
+ translated: str = lang.group(2)[:50].strip()
+ logging.info(f"{lang.group(1)} translation of {title}: {translated}")
+ # Instantiate & write translated
+ for lang, translation in translations.items():
+ if lang == "non existant lang":
+ new_lang = self.__init__(
+ texte=translation,
+ lang=lang,
+ titre=self.titre,
+ descriptif=self.descriptif,
+ profondeur=self.profondeur,
+ style=self.style,
+ )
+ # Return the translations dict
+ # return translations
+ # Return the first detected language
+ return translations["default"]
# Apply different mappings to a text field, like SPIP to Markdown or encoding
def convert(self, text: str, clean_html: bool = True) -> str:
@@ -95,7 +108,7 @@ class SpipWritable:
for iso, utf in ISO_UTF:
text = text.replace(iso, utf)
# Handle multi language blocks
- text = self.translate(text)
+ text = self.translate_multi(text)
# Delete remaining HTML tags in body WARNING
if clean_html:
text = HTMLTAG.sub("", text)