Skripte zum Befuellen der Kapitelstruktur aus dem Fortna-Rohmaterial und Aufbau eines vollstaendigen Sphinx/LaTeX-Builds (nur Code/Config/Doku, generierte RST/Bilder/PDFs und Rohmaterial via .gitignore ausgeschlossen). - lib/fortna_inventory.py: Rohmaterial scannen, Sprache+Zielkapitel+Aktion zuordnen, results/fortna_inventory.json schreiben - lib/fortna_convert_chapters.py: 5 Hauptanleitungen volltextig (Text+Bilder) konvertieren, Verzeichnislisten (index.de.rst) fuer uebrige Kapitel - lib/fortna_init_project.py: projekte/fortna/ (anlage.json, overrides, images) - lib/build_index.py: index.rst mit toctrees aus chapters/**/*.de.rst generieren - lib/extract_products.py: Symbolfont-Zeichen (PUA) auf Unicode mappen (clean_pua) - conf.py: Sphinx-Build (lualatex, babel statt polyglossia, iconpackage=none) - bin/: .bat/.sh-Wrapper fuer alle Skripte + build_pdf - doc/: Konzept-Plan (plan_fortna_extraktion.md) und lib-Skript-Uebersicht - requirements.txt: Sphinx + myst-parser ergaenzt Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
118 lines
4.3 KiB
Python
118 lines
4.3 KiB
Python
"""Legt den projektspezifischen Ordner projekte/fortna/ an.
|
|
|
|
Erzeugt das Projekt-Repo-Geruest gemaess doc/Kernkonzepte.md:
|
|
projekte/fortna/
|
|
anlage.json # Projektmetadaten (Platzhalter, manuell zu schaerfen)
|
|
overrides/.gitkeep # projektspezifische Ueberschreibungen (leer)
|
|
images/.gitkeep # projektspezifische Bilder (leer)
|
|
README.md # kurze Erlaeuterung
|
|
|
|
Einmaliger Generator, kein Datei-Scan. Bestehende Dateien werden per Default NICHT
|
|
ueberschrieben (--force zum Erzwingen).
|
|
|
|
Verwendung:
|
|
python fortna_init_project.py
|
|
python fortna_init_project.py --force
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import json
|
|
import logging
|
|
import os
|
|
from pathlib import Path
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
ANLAGE_JSON = {
|
|
"projekt": {
|
|
"nummer": "500592",
|
|
"ka_nummer": "KA 135776",
|
|
"kunde": "Fortna / H&M",
|
|
"standort": "Cheb (Eger), CZ",
|
|
"sprachen": ["de"],
|
|
"_kommentar_sprachen": "EN/CZ vorhanden im Rohmaterial, aktuell nur DE gebaut",
|
|
"normen_region": "EU",
|
|
"_todo_rechtsgrundlage": "MRL 2006/42/EG (Altprojekt) vs. VO (EU) 2023/1230 - klaeren",
|
|
"base_version": ">=0.1.0",
|
|
},
|
|
"quelle": {
|
|
"_kommentar": "Rohmaterial-Verzeichnis (ausserhalb des Repos), Basis der Verzeichnislisten",
|
|
"rohmaterial": "c:/10-Develop/projekte/Fortna",
|
|
},
|
|
"maschinen": [
|
|
{"_kommentar": "Modul-Liste noch zu befuellen (03_anlagenbeschreibung via meta.yaml)"},
|
|
],
|
|
"zusatz_kapitel": [],
|
|
}
|
|
|
|
README = """\
|
|
# Projekt Fortna (500592 / KA 135776)
|
|
|
|
Projektspezifischer Ordner fuer die Fortna/H&M-Anlage in Cheb (CZ).
|
|
|
|
Struktur gemaess `doc/Kernkonzepte.md` (Zwei-Repo-Architektur):
|
|
|
|
- `anlage.json` - Projektmetadaten, Sprachen, Normenregion, Maschinenliste (ERP-Export-Platzhalter).
|
|
- `overrides/` - projektspezifische Ueberschreibungen von Base-Modulen/Kapiteln.
|
|
- `images/` - projektspezifische Bilder (Aufstellplan, Abnahmefotos, Kundenlogo).
|
|
|
|
## Herkunft der Inhalte
|
|
|
|
Die eigentliche Dokumentation wird aus dem Fortna-Rohmaterial
|
|
(`c:/10-Develop/projekte/Fortna`) erzeugt:
|
|
|
|
1. `lib/fortna_inventory.py` - inventarisiert das Rohmaterial (`results/fortna_inventory.json`).
|
|
2. `lib/fortna_convert_chapters.py --apply` - befuellt `chapters/`:
|
|
- Volltext + Bilder fuer die 5 Hauptanleitungen (Betriebs-/Wartungsanleitung, Funktionsbeschreibung ILS/OMNIFLO/LoadingLoop).
|
|
- Verzeichnislisten (`index.de.rst`) fuer alle uebrigen Kapitel (Zertifikate, Layouts, Schaltplaene, Lieferantendoku, Ersatzteile, Pruefberichte).
|
|
|
|
Hinweis: Die Verzeichnislisten referenzieren Pfade im Rohmaterial und kopieren keine PDFs.
|
|
Fuer einen produktiven PDF-Build mit eingebundenen Downloads muss das Rohmaterial zugaenglich
|
|
gemacht bzw. die referenzierten Dokumente ins Projekt uebernommen werden.
|
|
"""
|
|
|
|
|
|
def write_if_absent(path: Path, content: str, force: bool) -> None:
|
|
if path.exists() and not force:
|
|
log.info(" vorhanden (uebersprungen): %s", path.name)
|
|
return
|
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
path.write_text(content, encoding="utf-8")
|
|
log.info(" geschrieben: %s", path.name)
|
|
|
|
|
|
def main() -> None:
|
|
parser = argparse.ArgumentParser(description="Legt projekte/fortna/ an.")
|
|
parser.add_argument("--project-dir", default=None,
|
|
help="Zielordner (default: PROJECT/projekte/fortna)")
|
|
parser.add_argument("--force", action="store_true",
|
|
help="Bestehende Dateien ueberschreiben")
|
|
parser.add_argument("--verbose", "-v", action="store_true")
|
|
args = parser.parse_args()
|
|
|
|
logging.basicConfig(
|
|
level=logging.DEBUG if args.verbose else logging.INFO,
|
|
format="%(levelname)-7s %(message)s",
|
|
)
|
|
|
|
project_root = Path(os.environ.get("PROJECT", Path(__file__).resolve().parent.parent))
|
|
target = Path(args.project_dir) if args.project_dir else project_root / "projekte" / "fortna"
|
|
|
|
log.info("Projektordner: %s", target)
|
|
target.mkdir(parents=True, exist_ok=True)
|
|
|
|
write_if_absent(target / "anlage.json",
|
|
json.dumps(ANLAGE_JSON, ensure_ascii=False, indent=2) + "\n", args.force)
|
|
write_if_absent(target / "README.md", README, args.force)
|
|
write_if_absent(target / "overrides" / ".gitkeep", "", args.force)
|
|
write_if_absent(target / "images" / ".gitkeep", "", args.force)
|
|
|
|
log.info("Fertig.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|