Kernblock je Kapitel: Frage-Antwort-Paare zum Auffrischen, KERN.md in der Montage
Jedes Kapitel endet mit „## Kern“. Die Montage sammelt alle Blöcke in buch/KERN.md, die API liefert sie unter kern.md. Stilregel, Kapitel- und Prüfprompt angepasst. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -168,6 +168,11 @@ async def buch_md(slug: str, n: int):
|
||||
return montage.markdown(_key(slug, n))
|
||||
|
||||
|
||||
@app.get("/api/themen/{slug}/v{n}/kern.md", response_class=PlainTextResponse)
|
||||
async def kern_md(slug: str, n: int):
|
||||
return montage.kern(_key(slug, n))
|
||||
|
||||
|
||||
@app.get("/api/themen/{slug}/v{n}/buch.pdf")
|
||||
async def buch_pdf(slug: str, n: int):
|
||||
key = _key(slug, n)
|
||||
|
||||
@@ -9,6 +9,7 @@ from . import config, gliederung, state
|
||||
|
||||
log = logging.getLogger("buchwerk")
|
||||
ABSCHNITT_RE = re.compile(r"^## (\d+\.\d+) (.+?)\s*$", re.M)
|
||||
KERN_RE = re.compile(r"^## Kern[ \t]*\n(.*?)(?=^## |\Z)", re.S | re.M)
|
||||
|
||||
|
||||
def _woerter(text: str) -> int:
|
||||
@@ -88,12 +89,24 @@ def markdown(name: str) -> str:
|
||||
return "\n".join(zeilen)
|
||||
|
||||
|
||||
def kern(name: str) -> str:
|
||||
"""Alle `## Kern`-Blöcke der Kapitel in einer Datei – zum Auffrischen eines gelesenen Buchs."""
|
||||
g = guide(name); v = state.verzeichnis(name)
|
||||
out = [f"# Kernerkenntnisse – {g['titel']}", ""]
|
||||
for k in g["kapitel"]:
|
||||
p = v / "buch" / k["datei"].split("/", 1)[1]
|
||||
m = KERN_RE.search(p.read_text()) if p.exists() else None
|
||||
if m:
|
||||
out += [f"## Kapitel {k['ord']} – {k['titel']}", "", m.group(1).strip(), ""]
|
||||
return "\n".join(out)
|
||||
|
||||
|
||||
def readme(name: str) -> str:
|
||||
g = guide(name)
|
||||
out = [f"# {g['titel']}", ""]
|
||||
if g["untertitel"]:
|
||||
out += [f"*{g['untertitel']}*", ""]
|
||||
out += ["PDF: [buch.pdf](buch.pdf) · Gesamttext: [buch.md](buch.md)", "", "## Inhalt", "", "[Vorwort](00-vorwort.md)", ""]
|
||||
out += ["PDF: [buch.pdf](buch.pdf) · Gesamttext: [buch.md](buch.md) · Kernerkenntnisse: [KERN.md](KERN.md)", "", "## Inhalt", "", "[Vorwort](00-vorwort.md)", ""]
|
||||
teil = None
|
||||
for k in g["kapitel"]:
|
||||
if k["teil"] and k["teil"] != teil:
|
||||
@@ -194,4 +207,5 @@ def bauen(name: str) -> bool:
|
||||
v = state.verzeichnis(name)
|
||||
(v / "buch" / "README.md").write_text(readme(name))
|
||||
(v / "buch" / "buch.md").write_text(markdown(name))
|
||||
(v / "buch" / "KERN.md").write_text(kern(name))
|
||||
return pdf(name)
|
||||
|
||||
Reference in New Issue
Block a user