"""Découpage des tableaux, nettoyage et marqueurs de citation.""" from __future__ import annotations from pipeline.parseurs.markdown import ( decouper_sections, extraire_marqueurs, extraire_tableaux, nettoyer, ) TABLEAU = """\ ## Tableau d'essai | Col A | Col B | |---|---| | a1 | b1 | | a2 | b2 | Texte après le tableau. """ def test_extraire_tableaux_simple() -> None: (tableau,) = extraire_tableaux(TABLEAU) assert tableau.entetes == ["Col A", "Col B"] assert tableau.lignes == [{"Col A": "a1", "Col B": "b1"}, {"Col A": "a2", "Col B": "b2"}] assert tableau.section == "Tableau d'essai" assert len(tableau) == 2 def test_extraire_tableaux_tolere_une_ligne_courte() -> None: source = "| A | B | C |\n|---|---|---|\n| 1 | 2 |\n" (tableau,) = extraire_tableaux(source) assert tableau.lignes == [{"A": "1", "B": "2", "C": ""}] def test_extraire_tableaux_respecte_les_barres_echappees() -> None: source = "| A | B |\n|---|---|\n| x \\| y | z |\n" (tableau,) = extraire_tableaux(source) assert tableau.lignes[0]["A"] == "x | y" def test_extraire_tableaux_sur_le_corpus_reel(annexe: str) -> None: tableaux = extraire_tableaux(annexe) assert len(tableaux) == 2 tableau_a, tableau_b = tableaux assert tableau_a.entetes[0] == "N° de loi" assert len(tableau_a) == 27, "27 lois promulguées attendues au tableau A" assert tableau_b.entetes[0] == "Texte" assert len(tableau_b) == 23 def test_nettoyer_retire_emphase_et_marqueurs() -> None: brut = "**Adoptée, non promulguée** (21 juill.) ; saisine [^dim04-487^][^phase5-3.1^]" assert nettoyer(brut) == "Adoptée, non promulguée (21 juill.) ; saisine" def test_nettoyer_peut_garder_les_marqueurs() -> None: brut = "Chlordécone [^dim07-24^]" assert nettoyer(brut, garder_marqueurs=True) == "Chlordécone [^dim07-24^]" def test_extraire_marqueurs_distingue_les_dimensions() -> None: marqueurs = extraire_marqueurs("[^dim07-24^] et [^phase5-3.1^] et [^insight-5^] et [^42^]") assert [(m.dimension, m.numero) for m in marqueurs] == [ ("dim07", "24"), ("phase5", "3.1"), ("insight", "5"), ("", "42"), ] def test_extraire_marqueurs_dedoublonne() -> None: assert len(extraire_marqueurs("[^dim01-3^] [^dim01-3^] [^dim01-4^]")) == 2 def test_decouper_sections() -> None: source = "# Titre\ncorps un\n\n## Sous\ncorps deux\n" sections = decouper_sections(source) assert [s.titre for s in sections] == ["Titre", "Sous"] assert sections[0].corps == "corps un" assert sections[1].niveau == 2