From 3065243f73fb2c25df5202fc9e6c91b85178c65e Mon Sep 17 00:00:00 2001 From: Coornhert Date: Mon, 30 Mar 2026 12:11:55 +0200 Subject: [PATCH] fix: parser en CSS voor additionele artikelen Grondwet - Artikel nr zoekt nu alleen in of direct child (niet recursief) - Voorkomt "Artikel Artikel" bij items met =Artikel - Lijst-parser verzamelt content correct (geen leading whitespace) - CSS: overflow-wrap en pre overflow voor lange regels --- src/wetgit/pipeline/bwb_parser.py | 38 +++++++++++++++++++++++-------- src/wetgit/web/static/style.css | 2 ++ 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/wetgit/pipeline/bwb_parser.py b/src/wetgit/pipeline/bwb_parser.py index 7ee9376..ee56a25 100644 --- a/src/wetgit/pipeline/bwb_parser.py +++ b/src/wetgit/pipeline/bwb_parser.py @@ -250,14 +250,23 @@ def _parse_structuur(elem: etree._Element, level: int, label: str) -> str: def _parse_artikel(artikel: etree._Element) -> str: """Parse een element naar Markdown.""" - nr = artikel.findtext(".//nr", default="").strip() + # Zoek nr in 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" parts = [heading] for child in artikel: tag = child.tag - if tag == "nr": + if tag in ("nr", "kop"): continue elif tag == "titel": titel_text = _get_text(child).strip() @@ -320,13 +329,24 @@ def _parse_lid(lid: etree._Element) -> str: def _parse_lijst(lijst: etree._Element) -> str: """Parse een element naar Markdown-lijst.""" items: list[str] = [] - for li in lijst.findall(".//li"): - nr = li.findtext(".//li.nr", default="").strip() - body = li.find(".//li.body") - if body is not None: - text = _parse_tekst_content(body) - else: - text = _get_text(li) + for li in lijst.findall("./li"): + nr_elem = li.find("./li.nr") + nr = _get_text(nr_elem) if nr_elem is not None else "" + body = li.find("./li.body") + + # Verzamel alle content (al, lijst, etc.) exclusief li.nr en meta-data + 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 "- " items.append(f"{prefix}{text}") return "\n".join(items) diff --git a/src/wetgit/web/static/style.css b/src/wetgit/web/static/style.css index 92dbb52..8eeeea3 100644 --- a/src/wetgit/web/static/style.css +++ b/src/wetgit/web/static/style.css @@ -29,6 +29,8 @@ body { a { color: var(--color-accent); text-decoration: none; } a:hover { text-decoration: underline; } +pre, code { overflow-x: auto; max-width: 100%; } +main { overflow-wrap: break-word; word-wrap: break-word; } /* Layout */ .container { max-width: var(--max-width); margin: 0 auto; padding: 0 1.5rem; }