# -*- coding: utf-8 -*-
"""Erzeugt einen HTML-Prüfbericht für die manuelle Sichtprüfung des Katalogs.
Stellt alle 575 Fragen mit Lösungen, Musterantworten, hervorgehobenen
Kernelementen und Abbildungen dar, damit sie gegen das Original-PDF geprüft
werden können. Der Bericht ist selbst tastaturbedienbar und kontraststark.
"""
from __future__ import annotations
import base64
import html
import io
import json
import sys
from pathlib import Path
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
BASE = Path(__file__).resolve().parent.parent
KATALOG = BASE / "content" / "katalog"
ZIEL = BASE / "docs" / "katalog-pruefbericht.html"
def bild_tag(bid: str, bilder: dict) -> str:
meta = bilder.get(bid)
if not meta:
return f'Bild {html.escape(bid)} fehlt'
daten = base64.b64encode((KATALOG / "assets" / meta["datei"]).read_bytes()).decode()
alt = meta.get("alt") or ""
return (f'')
def segmente_html(feld: dict) -> str:
teile = []
for s in feld["segmente"]:
text = html.escape(s["t"]).replace("\n", "
")
teile.append(f"{text}" if s.get("h") else text)
return "".join(teile) or '(kein Text)'
def main() -> int:
data = json.loads((KATALOG / "katalog.json").read_text(encoding="utf-8"))
bilder = {b["id"]: b for b in data["bilder"]}
meta = data["meta"]
abschnitt_titel = {}
for kap in data["kapitel"]:
for a in kap["abschnitte"]:
abschnitt_titel[a["id"]] = a["titel"]
abschnitt_titel[kap["id"]] = kap["titel"]
zeilen: list[str] = []
aktuelle_gruppe = None
for f in data["fragen"]:
gruppe = f["abschnitt"] or f["kapitel"]
if gruppe != aktuelle_gruppe:
aktuelle_gruppe = gruppe
titel = abschnitt_titel.get(gruppe, gruppe)
zeilen.append(f'
{segmente_html(f["frage"])}
'] for bid in f["bilder"]: koerper.append(f'{bild_tag(bid, bilder)}
') if f["typ"] == "mc": richtige = sum(1 for o in f["optionen"] if o["korrekt"]) if richtige > 1: koerper.append(f'{richtige} richtige Antworten
') koerper.append("Hinweis aus der Extraktion: {hinweise}
') zeilen.append(f'{quelle} — Katalogstand {stand}. Grün markierte Antworten sind im Original angekreuzt; hervorgehobene Stellen sind die Kernelemente der Musterantworten.