45 lines
1.1 KiB
Python
45 lines
1.1 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
import re
|
||
|
|
import sys
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
if len(sys.argv) != 3:
|
||
|
|
raise SystemExit(f"Aufruf: {sys.argv[0]} EINGABE.md AUSGABE_ORDNER")
|
||
|
|
|
||
|
|
src = Path(sys.argv[1])
|
||
|
|
outdir = Path(sys.argv[2])
|
||
|
|
outdir.mkdir(parents=True, exist_ok=True)
|
||
|
|
|
||
|
|
text = src.read_text(encoding="utf-8")
|
||
|
|
parts = re.split(r"(?m)^(?=#\s+)", text)
|
||
|
|
|
||
|
|
def slugify(title: str) -> str:
|
||
|
|
title = title.lower()
|
||
|
|
title = re.sub(r"[^\w\s-]", "", title, flags=re.UNICODE)
|
||
|
|
title = re.sub(r"[\s_-]+", "-", title).strip("-")
|
||
|
|
return title[:80] or "kapitel"
|
||
|
|
|
||
|
|
index = []
|
||
|
|
chapter_no = 0
|
||
|
|
|
||
|
|
for part in parts:
|
||
|
|
if not part.strip():
|
||
|
|
continue
|
||
|
|
|
||
|
|
m = re.match(r"^#\s+(.+?)\s*$", part, re.M)
|
||
|
|
if m:
|
||
|
|
chapter_no += 1
|
||
|
|
title = m.group(1).strip()
|
||
|
|
filename = f"{chapter_no:03d}-{slugify(title)}.md"
|
||
|
|
else:
|
||
|
|
filename = "000-vorspann.md"
|
||
|
|
title = "Vorspann"
|
||
|
|
|
||
|
|
(outdir / filename).write_text(part.rstrip() + "\n", encoding="utf-8")
|
||
|
|
index.append(f"- [{title}]({filename})")
|
||
|
|
|
||
|
|
(outdir / "README.md").write_text(
|
||
|
|
"# Inhaltsverzeichnis\n\n" + "\n".join(index) + "\n",
|
||
|
|
encoding="utf-8",
|
||
|
|
)
|
||
|
|
|