iftypeset (pubstyle) — deterministic Markdown→HTML→PDF, rule registry, QA gates
| .forgejo/workflows | ||
| app | ||
| docs | ||
| fixtures | ||
| forgejo | ||
| scripts | ||
| spec | ||
| src/iftypeset | ||
| tests | ||
| tools | ||
| .gitignore | ||
| pyproject.toml | ||
| README.md | ||
| requirements.txt | ||
| STATUS.md | ||
iftypeset (pubstyle) — publication-quality typesetting pipeline
This project is a thin, deterministic runtime for turning Markdown into high‑quality HTML/PDF using:
- A machine‑readable rule registry (Chicago / Bringhurst pointers; paraphrased rules only)
- Typeset profiles (
spec/profiles/*.yaml) that map typographic intent → render tokens - Post‑render QA gates (
spec/quality_gates.yaml) that fail builds when layout degrades
It is designed to be embedded into constrained workers (e.g. Forgejo PDF export with --network=none) and also run as a standalone CLI.
Status: working spec + seeded rule registry. See STATUS.md.
Constraints (non-negotiable)
- No bulk OCR/transcription of Chicago/Bringhurst into this repo (copyright).
- Rule records are paraphrases only, backed by pointers (e.g.
CMOS18 §X.Y pNNN (scan pMMM)). - Chicago OCR (when needed) must be ephemeral (extract just enough to locate pointers; do not store page text).
Quickstart (current)
From ai-workspace/iftypeset/:
- (Optional) Install deps into a venv:
python3 -m venv .venv && . .venv/bin/activate && python -m pip install -r requirements.txt - Validate spec + rebuild indexes:
PYTHONPATH=src python3 -m iftypeset.cli validate-spec --spec spec --build-indexes - Lint Markdown:
PYTHONPATH=src python3 -m iftypeset.cli lint --input fixtures/sample.md --out out --profile web_pdf - Render HTML + CSS:
PYTHONPATH=src python3 -m iftypeset.cli render-html --input fixtures/sample.md --out out --profile web_pdf - Render PDF (if an engine is installed):
PYTHONPATH=src python3 -m iftypeset.cli render-pdf --input fixtures/sample.md --out out --profile web_pdf - Run QA gates (HTML fallback if no PDF):
PYTHONPATH=src python3 -m iftypeset.cli qa --out out --profile web_pdf - Coverage report:
PYTHONPATH=src python3 -m iftypeset.cli report --spec spec --out out - Run self-check tests:
python3 -m unittest discover -s tests -p 'test_*.py'
PDF renderers
render-pdf will use the first available engine in this order:
playwright(Python module)chromium/chromium-browser/google-chromewkhtmltopdfweasyprint(Python module)
If none are installed, the command exits with a clear message but still leaves HTML artifacts for QA.