Couper le role BnF meme quand le prenom finit par une initiale

NettoyageIsbd.Auteur("Cormen, Thomas H. Auteur du texte") renvoyait
« Thomas H. Auteur du texte Cormen » : le point de l initiale etait
protege, donc plus aucun point ne servait de separateur de role.

Ce qui tranche : dans « Nom, Prenom », la seule chose qui puisse suivre
une initiale et faire encore partie du nom est une autre initiale
(« Tolkien, J. R. R. »). Tout le reste est le role. Le point est conserve
quand il clot une initiale, pour ne pas amputer le prenom.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mathieu
2026-08-18 02:43:07 +02:00
co-authored by Claude Opus 5
parent 9cb3ca535d
commit 0fde244d0b
2 changed files with 45 additions and 22 deletions
+11 -6
View File
@@ -85,12 +85,17 @@ public class NettoyageIsbdTests
public void Auteur_laisse_passer_ce_qui_est_deja_propre(string brut, string attendu)
=> Assert.Equal(attendu, NettoyageIsbd.Auteur(brut));
[Fact]
public void Auteur_ne_coupe_pas_sur_une_initiale()
{
// « H. » est une initiale, pas un séparateur de rôle : la couper amputerait le prénom.
Assert.Equal("Thomas H. Cormen", NettoyageIsbd.Auteur("Cormen, Thomas H."));
}
[Theory]
// Contre-exemples : le nom se termine légitimement par une initiale, il n'y a pas de rôle
// à retirer — couper au point amputerait le prénom.
[InlineData("Cormen, Thomas H.", "Thomas H. Cormen")]
[InlineData("Tolkien, J. R. R.", "J. R. R. Tolkien")]
// Cas réel : le rôle suit une initiale. Protéger le point de l'initiale ne doit pas
// protéger le rôle — sinon on obtient « Thomas H. Auteur du texte Cormen ».
[InlineData("Cormen, Thomas H. Auteur du texte", "Thomas H. Cormen")]
[InlineData("Tolkien, J. R. R. (1892-1973). Auteur du texte", "J. R. R. Tolkien")]
public void Auteur_distingue_une_initiale_d_un_role(string brut, string attendu)
=> Assert.Equal(attendu, NettoyageIsbd.Auteur(brut));
[Theory]
[InlineData("le Livre de poche (Paris)", "le Livre de poche")]