#!/usr/bin/env python3 """Normalise les entrées d'index (.idx) avant makeindex : ajoute une clé de tri sans accent aux entrées dont l'initiale est accentuée (É, À, Î, …) pour que makeindex (octets) produise des en-têtes de lettre valides en UTF-8.""" import sys, re, unicodedata, pathlib p = pathlib.Path(sys.argv[1]); txt = p.read_text(encoding="utf-8", errors="ignore") def strip(s): return "".join(c for c in unicodedata.normalize("NFD", s) if unicodedata.category(c) != "Mn") def fix(m): body = m.group(1) parts = body.split("!") out = [] for part in parts: if "@" in part or not part: out.append(part); continue plain = strip(part) key = re.sub(r"\\[a-zA-Z]+\s*", "", plain) # retire les commandes pour la clé out.append(f"{key}@{part}" if (plain != part or key != part) else part) return "\\indexentry{" + "!".join(out) + "|" new = re.sub(r"\\indexentry\{(.*?)\|", fix, txt) p.write_text(new, encoding="utf-8")