# -*- coding: utf-8 -*- # Gramps - a GTK+/GNOME based genealogy program # Copyright (C) 2016 Paul Culley (some code by Nick Hall) import csv import re import argparse import html from xml.etree import ElementTree as ET from datetime import datetime import os import mimetypes import sys from xml.dom import minidom def nettoyer_texte(texte): """Nettoie le texte en supprimant les ; == et == autour des titres.""" texte = re.sub(r';\s*==\s*', '', texte) texte = re.sub(r'\s*==\s*;?', '', texte) return texte def nettoyer_html(texte): """ Nettoie le texte HTML pour le convertir en texte compatible avec Gramps. Préserve les balises spécifiques à Gramps et les références aux médias. """ # Protège les balises spécifiques à Gramps protected_tags = [ ('.*?', 'REF_TAG'), (']*?>', 'NOTEREF_TAG'), (']*?>', 'SOURCEREF_TAG'), (']*?>', 'OBJREF_TAG') ] # Remplace les balises spécifiques par des marqueurs temporaires protected = {} for pattern, marker in protected_tags: for i, match in enumerate(re.finditer(pattern, texte, re.DOTALL)): protected[f"{marker}_{i}"] = match.group(0) texte = texte.replace(match.group(0), f"{{{marker}_{i}}}") # Nettoyage du HTML texte = re.sub(r'(.*?)', r'/\1/', texte) # Italique texte = re.sub(r'(.*?)', r'*\1*', texte) # Gras texte = re.sub(r'(.*?)', r'_\1_', texte) # Souligné texte = re.sub(r']*href=["\']([^"\']*)["\'][^>]*>(.*?)', r'\2 (\1)', texte) # Liens texte = re.sub(r'', '\n', texte) # Sauts de ligne texte = re.sub(r'<[^>]+>', '', texte) # Supprime les autres balises HTML texte = html.unescape(texte) # Convertit les entités HTML en caractères normaux # Restaure les balises spécifiques à Gramps for marker, tag in protected.items(): texte = texte.replace(f"{{{marker}}}", tag) return texte def ajouter_styles_texte(note_elem, note_text): """Ajoute les balises