"""Module de post-traitement par expressions régulières (Regex).
Contient les utilitaires de nettoyage pour corriger les déformations d'espaces
introduites par l'IA sur les variables d'interpolation i18n ({user}, {{count}}, ).
"""
import re
def post_process_variables(text: str) -> str:
"""Nettoie et resserre les espaces parasites introduits par l'IA autour des variables i18n et balises HTML.
Transformations effectuées :
- Accolades simples : { username } -> {username}
- Accolades doubles : {{ count }} -> {{count}}
- Balises HTML ouvrantes/fermantes : < a href='...' > -> , a > ->
Args:
text (str): La chaîne de texte traduite brute.
Returns:
str: La chaîne de texte nettoyée et conforme.
"""
if not text:
return text
# 1. Resserrer les accolades doubles : {{ var }} -> {{var}}
text = re.sub(r'\{\{\s+([^{}\s]+)\s+\}\}', r'{{\1}}', text)
text = re.sub(r'\{\{\s+([^{}\s]+)\}\}', r'{{\1}}', text)
text = re.sub(r'\{\{([^{}\s]+)\s+\}\}', r'{{\1}}', text)
# 2. Resserrer les accolades simples : { var } -> {var}
text = re.sub(r'\{\s+([^{}\s]+)\s+\}', r'{\1}', text)
text = re.sub(r'\{\s+([^{}\s]+)\}', r'{\1}', text)
text = re.sub(r'\{([^{}\s]+)\s+\}', r'{\1}', text)
# 3. Resserrer les balises HTML : < a > -> et a > ->
text = re.sub(r'<\s+([a-zA-Z0-9]+)', r'<\1', text)
text = re.sub(r'<\s*/\s*([a-zA-Z0-9]+)\s*>', r'\1>', text)
text = re.sub(r'<\s*([a-zA-Z0-9]+[^<>]*?)\s*>', r'<\1>', text)
return text