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:
parent
8ee8522bdc
commit
3065243f73
2 changed files with 31 additions and 9 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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; }
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue