Ramener les ligatures « œ » et « æ » à « oe » et « ae »

L'Œuvre de Zola, que la BnF écrit avec la ligature, était introuvable à
qui tape « oeuvre » : NFD sépare les accents mais laisse les ligatures.

Table explicite plutôt que NFKD, qui aurait aussi transformé les exposants,
les chiffres romains et les espaces insécables. Une normalisation de
recherche doit rester prévisible.

Sept colonnes normalisées en dépendent, dont cinq portent une unicité. Le
rattrapage au démarrage est donc étendu aux envies, séries, revues et
numéros — qui ne calculaient leurs formes qu'à l'écriture — et refuse toute
collision AVANT d'écrire : sinon l'exception tomberait au démarrage et le
serveur ne se lancerait plus.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mathieu
2026-08-19 22:25:59 +02:00
co-authored by Claude Opus 5
parent ca0a9dc18c
commit b97cf33494
7 changed files with 293 additions and 36 deletions
+7 -13
View File
@@ -40,23 +40,17 @@ public class CleOeuvreTests
CleOeuvre.Cle("Nouvelles : second recueil"));
/// <summary>
/// Limite <b>héritée</b> de <see cref="NormalisationTexte"/>, pas propre à la clé d'œuvre :
/// la ligature « œ » n'est pas ramenée à « oe ».
/// La ligature « œ » est ramenée à « oe » — corrigé le 2026-08-19.
/// </summary>
/// <remarks>
/// <c>NormalisationTexte</c> décompose en NFD, qui sépare les accents mais laisse les
/// ligatures intactes — seul NFKD les défait. Conséquence concrète : <i>L'Œuvre</i> de Zola,
/// que la BnF écrit avec la ligature, n'est pas rapproché d'un « L'oeuvre » saisi au clavier.
/// <para>
/// Le défaut ne vient pas d'ici et ne se corrige pas ici : la même fonction alimente la
/// recherche du catalogue et la clé unique des auteurs, et en changer déplacerait ces deux
/// invariants. Consigné dans IDEES.md ; ce test existe pour que la limite soit visible plutôt
/// que découverte en usage.
/// </para>
/// Le comportement vient de <see cref="NormalisationTexte"/> et non d'ici : la décomposition
/// NFD sépare les accents mais laisse les ligatures intactes, d'où une table explicite.
/// Sans elle, <i>L'Œuvre</i> de Zola — que la BnF écrit avec la ligature — restait
/// introuvable à qui tape « oeuvre » au clavier, et n'était pas grisé dans sa bibliographie.
/// </remarks>
[Fact]
public void Ne_reduit_pas_la_ligature_oe() =>
Assert.NotEqual(CleOeuvre.Cle("L'Œuvre"), CleOeuvre.Cle("L'oeuvre"));
public void Reduit_la_ligature_oe() =>
Assert.Equal(CleOeuvre.Cle("L'Œuvre"), CleOeuvre.Cle("L'oeuvre"));
/// <summary>
/// Limite assumée : un titre retraduit n'est pas rapproché du tout.