Vorwort: Navigationszeile einzeilig, Linktexte statt Dateinamen; --check bewacht einzeilige Weiter-mit-Zeilen

This commit is contained in:
dschlueter 2026-09-09 20:42:39 +02:00
commit 0d76c1a89d
8 changed files with 50 additions and 16 deletions

View file

@ -318,7 +318,7 @@ können Sie gezielt springen.
> ⭐ Verständnis (im Kopf oder in zwei Sätzen) ·
> ⭐⭐ Handrechnung oder kleine Modelländerung ·
> ⭐⭐⭐ Eigenständige Programmieraufgabe.
> **Alle Lösungen** stehen in [`90_Anhang_Loesungen.md`](90_Anhang_Loesungen.md).
> **Alle Lösungen** stehen in {ref:anhang:loesungen}.
> **✅ Selbsttest**
> Fünf Fragen mit Kurzantworten zur schnellen Selbstkontrolle.
@ -644,6 +644,4 @@ dem aus Kenntnis Können wird.
---
*Weiter mit:* [`01_Notation_und_Abkuerzungen.md`](01_Notation_und_Abkuerzungen.md) —
oder direkt zu [{ref:kap:einfuehrung}](10_Einfuehrung_OR.md), wenn Sie die Notation
lieber nachschlagen, sobald sie auftaucht.
*Weiter mit:* [dem Verzeichnis Notation und Abkürzungen](01_Notation_und_Abkuerzungen.md) — oder direkt zu [{ref:kap:einfuehrung}](10_Einfuehrung_OR.md), wenn Sie die Notation lieber nachschlagen, sobald sie auftaucht.

View file

@ -395,6 +395,19 @@ def pruefe_dateien() -> list[str]:
f"folgt aber '{soll}' - die Lesekette ueberspringt eine Datei.")
fehlend.append(name)
# Die Navigationszeile muss in EINER Zeile bleiben: weiter_re und
# entferne_navigation() lesen nur bis zum Zeilenende. Ein umgebrochener
# Verweis bleibt sonst als Absatz in PDF und Website stehen - so geschah
# es im Vorwort (drei Zeilen, die Zeile leckte ins gedruckte Buch).
for name in DATEIEN:
with open(os.path.join(HIER, name), encoding="utf-8") as f:
for nr, zeile in enumerate(f, 1):
if zeile.startswith("*Weiter mit:") and \
not re.search(r"\]\(\S+?\.md\)", zeile):
print(f"FEHLER: {name}:{nr} - '*Weiter mit:' ist umgebrochen; "
f"das Linkziel (.md) muss in derselben Zeile stehen.")
fehlend.append(name)
# Marken fuer interaktive Figuren: Zeigt eine ins Leere, verschwindet sie
# auf der Website stillschweigend - im PDF steht dann ein Verweis auf eine
# Figur, die es nicht gibt.
@ -548,8 +561,15 @@ def entferne_navigation(text: str) -> str:
"""
Entfernt die 'Weiter mit:'-Navigationszeilen am Dateiende - im
Gesamtdokument sind sie ueberfluessig und die Links zeigen ins Leere.
Ein umgebrochener Navigationsabsatz (Fortsetzungszeilen bis zur naechsten
Leerzeile) wird mitgenommen. Ohne diese Toleranz blieb eine dreizeilige
"Weiter mit"-Zeile im PDF stehen und renderte auf der Website den
geschachtelten {ref:}-Link als Rohtext - passiert im Vorwort.
"""
text = re.sub(r"\n---\n+\*(Weiter mit|Zurueck zum|Zurück zum)[^\n]*\n*$", "\n", text)
text = re.sub(
r"\n---\n+\*(Weiter mit|Zurueck zum|Zurück zum)[^\n]*"
r"(?:\n(?!\n)[^\n]*)*\n*$", "\n", text)
return text.rstrip() + "\n"