fix: parser en CSS voor additionele artikelen Grondwet

- Artikel nr zoekt nu alleen in <kop> of direct child (niet recursief)
- Voorkomt "Artikel Artikel" bij items met <li.nr>=Artikel
- Lijst-parser verzamelt content correct (geen leading whitespace)
- CSS: overflow-wrap en pre overflow voor lange regels
This commit is contained in:
Coornhert 2026-03-30 12:11:55 +02:00
parent 8ee8522bdc
commit 3065243f73
2 changed files with 31 additions and 9 deletions

View file

@ -250,14 +250,23 @@ def _parse_structuur(elem: etree._Element, level: int, label: str) -> str:
def _parse_artikel(artikel: etree._Element) -> str: def _parse_artikel(artikel: etree._Element) -> str:
"""Parse een <artikel> element naar Markdown.""" """Parse een <artikel> element naar Markdown."""
nr = artikel.findtext(".//nr", default="").strip() # Zoek nr in <kop> of als direct child — NIET recursief
nr = ""
kop = artikel.find("./kop")
if kop is not None:
nr = kop.findtext("./nr", default="").strip()
if not nr:
nr_elem = artikel.find("./nr")
if nr_elem is not None:
nr = (nr_elem.text or "").strip()
heading = f"### Artikel {nr}" if nr else "### Artikel" heading = f"### Artikel {nr}" if nr else "### Artikel"
parts = [heading] parts = [heading]
for child in artikel: for child in artikel:
tag = child.tag tag = child.tag
if tag == "nr": if tag in ("nr", "kop"):
continue continue
elif tag == "titel": elif tag == "titel":
titel_text = _get_text(child).strip() titel_text = _get_text(child).strip()
@ -320,13 +329,24 @@ def _parse_lid(lid: etree._Element) -> str:
def _parse_lijst(lijst: etree._Element) -> str: def _parse_lijst(lijst: etree._Element) -> str:
"""Parse een <lijst> element naar Markdown-lijst.""" """Parse een <lijst> element naar Markdown-lijst."""
items: list[str] = [] items: list[str] = []
for li in lijst.findall(".//li"): for li in lijst.findall("./li"):
nr = li.findtext(".//li.nr", default="").strip() nr_elem = li.find("./li.nr")
body = li.find(".//li.body") nr = _get_text(nr_elem) if nr_elem is not None else ""
if body is not None: body = li.find("./li.body")
text = _parse_tekst_content(body)
else: # Verzamel alle content (al, lijst, etc.) exclusief li.nr en meta-data
text = _get_text(li) parts: list[str] = []
for child in li:
if child.tag in ("li.nr", "meta-data"):
continue
elif child.tag == "li.body":
parts.append(_parse_tekst_content(child))
elif child.tag == "al":
parts.append(_get_text(child))
elif child.tag == "lijst":
parts.append(_parse_lijst(child))
text = "\n\n".join(p for p in parts if p.strip())
prefix = f"{nr} " if nr else "- " prefix = f"{nr} " if nr else "- "
items.append(f"{prefix}{text}") items.append(f"{prefix}{text}")
return "\n".join(items) return "\n".join(items)

View file

@ -29,6 +29,8 @@ body {
a { color: var(--color-accent); text-decoration: none; } a { color: var(--color-accent); text-decoration: none; }
a:hover { text-decoration: underline; } a:hover { text-decoration: underline; }
pre, code { overflow-x: auto; max-width: 100%; }
main { overflow-wrap: break-word; word-wrap: break-word; }
/* Layout */ /* Layout */
.container { max-width: var(--max-width); margin: 0 auto; padding: 0 1.5rem; } .container { max-width: var(--max-width); margin: 0 auto; padding: 0 1.5rem; }