#!/usr/bin/env python3 """Zeigt eine BPMN-Datei oder eine Arbeitsschritt-.md als Diagramm im Browser – offline, ohne PICTURE. Grundlage ist werkzeuge/vorschau/vorschau.html mit der lokal eingebetteten Bibliothek bpmn-js (bpmn.io). Das Skript erzeugt daraus eine einzelne, in sich geschlossene HTML-Datei (Bibliothek, Stile und Diagramm eingebettet) und öffnet sie im Standardbrowser. Es wird nichts übertragen; die Seite lädt nichts aus dem Netz. Aufrufe (aus dem Workspace-Root): python scripts/vorschau.py Prozessbibliothek/antrag-pruefen/antrag-pruefen.bpmn python scripts/vorschau.py entwuerfe/antrag-pruefen.md # .md wird vorher umgewandelt python scripts/vorschau.py --ausgabe vorschau.html --nicht-oeffnen python scripts/vorschau.py --stdin < datei.bpmn > vorschau.html # Filter, z. B. als Gitea-Renderer Ohne Python: werkzeuge/vorschau/vorschau.html direkt im Browser öffnen und eine .bpmn hineinziehen. Exit-Code: 0 = in Ordnung, 1 = Datei fehlt oder lässt sich nicht umwandeln. """ from __future__ import annotations import argparse import json import sys import tempfile import webbrowser from pathlib import Path ROOT = Path(__file__).resolve().parents[1] VORSCHAU = ROOT / "werkzeuge" / "vorschau" VORLAGE = VORSCHAU / "vorschau.html" SKILL = ROOT / ".agents" / "skills" / "sn-bpmn" # Stellen in vorschau.html, die beim Einbetten ersetzt werden. Ein Test prüft, dass es sie gibt. EINBETTUNGEN = { '': ("style", "bpmn-js/diagram-js.css"), '': ("style", "bpmn-js/bpmn-js.css"), '': ("script", "bpmn-js/bpmn-navigated-viewer.production.min.js"), } PLATZHALTER_DIAGRAMM = "const EINGEBETTET = null;" PLATZHALTER_NAME = "const DATEINAME = null;" # Sequenzen, die einen eingebetteten