# 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-chrome` - `wkhtmltopdf` - `weasyprint` (Python module) If none are installed, the command exits with a clear message but still leaves HTML artifacts for QA.