Commit Graph

252 Commits

Author SHA1 Message Date
info 87b2d9273f Refactor: Worker-Pool-Zugriff über öffentliche Getter statt private Modul-Globals
get_saxon_worker_pool() und get_fop_worker_pool() in transform.py hinzugefügt.
worker_pool.py greift nicht mehr direkt auf transform._saxon_worker_pool /
transform._fop_worker_pool zu, sondern verwendet die Getter/Setter konsistent.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 20:18:01 +01:00
info cfbdb8b7fa Perf: Tool-Konfigurationsauflösung in _create_transformation_job gecacht
Die 5 linearen Lookups (java_vm, saxon_jar, apache_fop, diff_pdf, xsl_dir)
werden jetzt nur einmalig pro Projekt aufgelöst (_get_cached_project_tools).
Bei Batch-Transformationen entfällt das wiederholte Durchsuchen der Listen.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 20:11:58 +01:00
info edfe424a6a Perf: O(n²) Baumtraversierung bei Dateinamen-Konfliktprüfung behoben
_is_filename_used_in_project wurde bei jedem while-Schleifen-Durchlauf
aufgerufen und traversierte den kompletten Baum neu. Ersetzt durch
_collect_project_filenames(), die einmalig ein Set aufbaut → O(1) Lookups.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 20:09:10 +01:00
info b954106a0d Refactor: Stringly-typed Knotentypen durch ItemType-Enum ersetzt
ItemType(Enum) mit TREE_NODE, XSL_FILE, XML_FILE, UNKNOWN statt
String-Konstanten in tree_manager.py. Verbessert Typsicherheit und IDE-Support.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 20:08:23 +01:00
info 22bc693d4d Perf: Polars-Import lazy gemacht (nur bei DB-Nutzung laden)
Polars wird nicht mehr beim App-Start importiert, sondern erst wenn
eine Datenbankabfrage tatsächlich ausgeführt wird. Beschleunigt den
Kaltstart der Anwendung.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 20:05:48 +01:00
info 9be6ac24e9 Refactor: AppSettings CRUD-Methoden durch generische Helfer vereinfacht
4 generische Helfer (_add_item, _remove_item, _edit_item, _update_remove_button)
ersetzen 26 nahezu identische CRUD-Methoden für 7 Tool-Typen.
_make_centered_item eliminiert QTableWidgetItem-Duplikation in populate-Methoden.
Ergebnis: 805 → 508 Zeilen (-37%).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 19:53:34 +01:00
info 37ebdff349 Refactor: Gemeinsame Basisklassen für Worker-Pools und Parameter-Dialoge
- BaseWorkerPool (worker_pool_base.py): Eliminiert ~450 Zeilen Duplikation
  aus saxon_pool.py, saxon_pool_s9api.py und fop_pool.py; behebt stderr-Handle-Leak
- XsltParamsEditDialog (XsltParamsEditDialog.py): Gemeinsame Basisklasse für
  TreeNodeEditDialog und XslFileEditDialog; reduziert je 162 auf 8 Zeilen

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 19:49:57 +01:00
info cb90f9e483 Refactor: Code-Duplikation reduziert und Dead Code entfernt
- blake2b-Hash-Berechnung in zentrale Utility-Funktion extrahiert (src/utils.py) mit chunk-basiertem Hashing für bessere RAM-Effizienz
- _transform_all_xml_files und _transform_all_xml_files_force zu einer Methode mit force-Parameter zusammengeführt
- Project-Lookup-Methoden (getXsl, getJavaVm, etc.) über gemeinsame _lookup()-Hilfsmethode konsolidiert
- Duplizierte XML-Sammel-Methoden entfernt, Set-basierte Duplikatsprüfung eingeführt
- Ungenutzte Imports, Dead Code und wirkungslose Ausdrücke entfernt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 20:21:02 +01:00
info 6fe61b9a42 Kleine fix für die Webseite 2026-03-07 20:10:59 +01:00
info ec9ac22296 Fonts werden lokal gespeichert. 2026-03-03 21:20:02 +01:00
info d5c035a316 Neue Seiten für den Projekt 2026-03-03 20:47:56 +01:00
info affba2a9ca Fix: PyInstaller-Bundle für installierte Version repariert (connectorx, SQL-Ressourcen)
- connectorx via collect_all() eingebunden statt hiddenimports (Rust-PYD + __init__.py + Metadaten als Einheit)
- SQL/CSV-Ressourcen (src/res/) ins PyInstaller-Bundle aufgenommen
- Pfadauflösung in database.py auf sys._MEIPASS umgestellt für installierten Modus
- connectorx als explizite Abhängigkeit in pyproject.toml ergänzt
- Dokumentation (windows_distribution.md) um collect_all-Pattern und _MEIPASS-Hinweise erweitert
- Version auf 1.0.0 aktualisiert, Hersteller-Informationen ergänzt
2026-02-15 19:51:58 +01:00
info ec33a5b586 Feature: Timeout-Einstellung und asynchrone DB-Abfrage mit Abbrechen-Dialog
DB-Abfragen laufen nun in einem Hintergrund-Thread mit QProgressDialog,
sodass die UI nicht mehr einfriert. connect_timeout wird als konfigurierbarer
Parameter (1-300s, Standard: 10) im Connection-String übergeben.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 21:31:40 +01:00
info 66496c26d8 Fix: Projektname wird beim Bearbeiten im PdfProject-Dialog gespeichert
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 20:53:00 +01:00
info a0bc55fa7b Refactor: TreeWidget-Styling in Qt Designer UI-Dateien verlagert
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 21:17:21 +01:00
info b985e1eeee Feature: Löschen-Funktion für TreeNode-Knoten im Baum implementiert
Rekursive Löschung von TreeNodes mit PDF-Bereinigung, automatischer
physischer Löschung nicht mehr verwendeter XML-Dateien und korrekter
"anderswo verwendet"-Prüfung durch vorheriges Entfernen aus dem
Datenmodell.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 21:08:23 +01:00
info 52180e38ce Feature: Löschen-Funktion für XSL-Knoten im Baum implementiert
Ersetzt den bisherigen Stub durch eine vollständige Implementierung mit
Bestätigungsdialog, automatischer PDF-Bereinigung, optionaler physischer
XML-Löschung und Datenmodell-Aktualisierung.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 20:12:24 +01:00
info 29f34c4d85 Refactor: projectPath-Widget in Qt Designer verlagert
- projectPath-Label jetzt vollständig in MainWinddow.ui definiert
- StyleSheet (padding, font-weight) in UI-Datei integriert
- Dynamische Widget-Erstellung aus MainWindow.py entfernt (9 Zeilen Code)
- MainWinddow_ui.py automatisch neu generiert mit Styling
2026-02-07 20:35:17 +01:00
info 747c6dbfec Feature: Projektpfad-Anzeige über TreeWidget hinzugefügt 2026-02-07 20:25:21 +01:00
info 9180fc342e Feature: Häkchen im Menü 'Vorhandene Projekte' für geladenes Projekt 2026-02-07 20:00:50 +01:00
info 9e58b3a9a1 Feature: Automatische PDF-Bereinigung beim Entfernen von XML-Dateien
Implementiert intelligente Löschlogik die zugehörige PDF-Dateien (new/ref/diff) automatisch entfernt wenn eine XML-Datei aus einem XSL-Knoten gelöscht wird. PDFs werden nur gelöscht wenn die XML+XSL-Kombination nicht mehr anderswo im Projektbaum verwendet wird.
2026-02-07 19:47:02 +01:00
info 0fd0703dbb Feature: Expand-Status beim Projektwechsel automatisch speichern
- open_existing_project() speichert nun das vorherige Projekt vor dem Wechsel
- Expand-Status der aufgeklappten Tree-Knoten bleibt beim Projektwechsel erhalten
- Umfassendes Logging für Debugging
- Fehlerbehandlung für robuste Ausführung
2026-02-01 15:51:50 +01:00
info e6b2743677 Feature: Expand-Status von Tree-Knoten bei jedem Speichern persistent sichern
- ProjectData um optionales Feld 'expanded_nodes' erweitert (abwärtskompatibel)
- _save_project_settings() speichert nun automatisch den Expand-Status
- Expand-Status wird bei allen Speicheroperationen gesichert:
  * Beim Bearbeiten von TreeNodes und XslFiles
  * Bei Drag&Drop-Operationen im Tree
  * Bei Hash-Berechnungen für XML-Dateien
  * Beim Laden von Daten aus der Datenbank
  * Beim Beenden der Anwendung
- Beim Laden eines Projekts werden aufgeklappte Knoten wiederhergestellt
- Rekursive Speicherung und Wiederherstellung für TreeNode und XslFile
- Umfassendes Logging für Debugging und Fehlerbehandlung
2026-02-01 15:44:55 +01:00
info 0f14418749 UI: PDF-Thumbnails kompakt und zentriert anzeigen
- Thumbnails horizontal zentriert im ScrollArea-Layout
- Layout-Spacing auf 5px reduziert für kompakte Darstellung
- Seitennummer-Labels auf 18px Höhe begrenzt
- Ränder um Layout und Labels entfernt
- Expandierenden Spacer am Ende hinzugefügt, damit Thumbnails oben bleiben
- Verbesserte Übersichtlichkeit der Thumbnail-Navigation
2026-02-01 15:06:22 +01:00
info 3bdc0a0daa Feature: Aktions-Menü mit Batch-Transformationen und UI-Bereinigung
- Neues Aktions-Menü mit Transformations- und Datenbankfunktionen
- Menü wird beim Projekt-Laden automatisch aktiviert
- Neue Aktion: Alle XML-Dateien transformieren (inkrementell)
- Neue Aktion: Alle XML-Dateien neu transformieren (force)
- Neue Aktion: Aus Datenbank laden (ersetzt Button)
- Entfernte obsolete Buttons (pushButton, pushButton_2, pB_lade_aus_fn2)
- UI-Bereinigung: Button-Frame unterhalb TreeWidget entfernt
- Batch-Transformationen sammeln rekursiv alle XML/XSL-Paare
- Bestätigungsdialoge mit Job-Anzahl und Warnungen
- Deutsche Log-Meldungen und Fehlertexte
2026-01-25 15:23:32 +01:00
info 2858d46ef1 Refactor: Worker-Log-Verzeichnis von 'temp' zu 'tmp' umbenennen 2026-01-23 19:38:57 +01:00
info afff427f67 Feature: Prüfung auf Existenz von XML- und XSL-Dateien vor Transformation
- Prüfe ob XML- und XSL-Dateien existieren bevor TransformationJobs erstellt werden
- Zeige detaillierte Fehlermeldungen wenn Dateien fehlen
- Zähle und melde übersprungene Jobs bei Batch-Verarbeitung
- Verhindere mehrfache Fehlerdialoge durch zentrale Fehlerbehandlung
- Logge fehlende Dateien mit vollständigen Pfaden für einfaches Debugging
2026-01-22 19:37:53 +01:00
info d74dfd20e5 Fix: QIcon.ThemeIcon.TextXGeneric durch korrekten String-Namen ersetzen 2026-01-22 19:33:15 +01:00
info bad4d55ebd Feature: Automatische Aktualisierung des Projekte-Menüs und Validierung der Projekt-Verzeichnisse
- AppSettings: Menü-Update nach jedem app_settings.save() Aufruf
- MainWindow: Prüfung der Projekt-Verzeichnis-Existenz beim Start
- Nur gültige Projekte werden im Menü angezeigt
- Ungültige Projekte werden ausgeblendet mit Logging-Warnung
- Memory-Leak-Prävention durch korrektes Aufräumen alter Menüs
2026-01-20 20:29:34 +01:00
info c8e1a541cd Fix: Log-Verzeichnis mit parents=True erstellen, um FileNotFoundError zu vermeiden 2026-01-20 19:50:42 +01:00
info df1bb65136 Refactor: Entferne ungenutzten datetime-Import in cleanup_old_logs 2026-01-18 19:08:12 +01:00
info 43bd0ec8e6 Füge WiX v6-kompatiblen MSI-Installer hinzu
- Erstelle generate_wix_files.py zum Ersetzen von 'wix heat'
- Migriere DocuMentor.wxs auf WiX v4/v6-Syntax
- Füge build_msi.py für automatisierten Build hinzu
- Aktualisiere Dokumentation für WiX v6
- Erweitere .gitignore für WiX-Artefakte

WiX v6 hat das 'heat' Tool entfernt, daher wurde ein Python-Skript
erstellt, das automatisch alle Dateien aus dist/DocuMentor harvested
und eine WiX-konforme ProductFiles.wxs generiert.

Der neue Build-Prozess:
1. uv run python build_windows.py
2. uv run python generate_wix_files.py
3. wix build DocuMentor.wxs ProductFiles.wxs -o DocuMentor.msi

Oder vereinfacht: uv run python build_msi.py
2026-01-18 19:01:05 +01:00
info c3d1bbc74c Docs: WiX MSI-Installer Anleitung zu Windows Distribution hinzugefügt
- Vollständige WiX-Konfiguration (DocuMentor.wxs)
- Heat-Tool für automatisches File Harvesting
- Build-Automatisierung mit build_msi.py
- Silent Installation und GPO-Deployment
- MSI-Vorteile vs. Inno Setup detailliert erklärt
2026-01-18 17:58:37 +01:00
info b1f259e443 Build: Ungenutzte pyqtdarktheme-Dependency aus PyInstaller-Config entfernt 2026-01-18 17:55:17 +01:00
info 70c12a91dc Merge: Branch 'dist' in 'master' integriert
- Windows-Distribution-Infrastruktur (PyInstaller, Inno Setup)
- FOP Worker Pool für Performance-Steigerung
- PDF-Viewer Zoom-Feature
- Performance-Einstellungen in UI
- Build-Dokumentation und Icon-Ressourcen

Konflikte gelöst:
- pyproject.toml: Neueste ruff-Version beibehalten, Build-Dependencies hinzugefügt
- uv.lock: Automatisch neu generiert
2026-01-18 16:59:48 +01:00
info 5ab8674833 Feature: Icons für TreeNodes, XSL-Nodes und XML-Nodes hinzufügen
Fügt visuelle Icons für bessere Übersichtlichkeit im TreeWidget hinzu:
- TreeNode: Ordner-Icon (folder-open mit Fallback)
- XslFile: Script/Code-Icon (text-x-script)
- XmlFile: XML-Dokument-Icon (text-xml)

Icons verwenden QIcon.ThemeIcon für bessere Kompatibilität und
System-Theme-Integration mit automatischen Fallbacks.
2026-01-18 13:48:20 +01:00
info f4d2d4b944 Docs: Entwicklerrichtlinien für KI-Coding-Agenten hinzufügen
Fügt AGENTS.md mit umfassenden Richtlinien für Coding-Agenten hinzu:
- Sprachkonventionen (Deutsch)
- Code-Style & Type Annotations
- Build-/Test-Kommandos mit uv
- PySide6 UI-Integration
- Pydantic Models & Settings
- Import-Organisation & Error Handling
2026-01-18 13:40:15 +01:00
info 8a37992bea Feature: XSL-Knoten bei fehlenden Dateien deaktivieren
Beim Laden des Projekts werden nun auch XSL-Knoten automatisch deaktiviert (ausgegraut), wenn die entsprechende XSL-Datei nicht im XSL-Verzeichnis vorhanden ist.

Zusätzlich werden alle untergeordneten XML-Knoten ebenfalls deaktiviert, wenn die übergeordnete XSL-Datei fehlt. Dies verhindert, dass Transformationen mit fehlenden XSL-Dateien gestartet werden und gibt sofortige visuelle Rückmeldung.

- XSL-Knoten werden mit setDisabled(True) deaktiviert
- Tooltip zeigt den vollständigen Pfad der fehlenden XSL-Datei
- Alle untergeordneten XML-Knoten werden ebenfalls deaktiviert
- Warnung wird ins Log geschrieben

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 20:29:29 +01:00
info 91fe597301 Feature: XML-Knoten bei fehlenden Dateien deaktivieren
Beim Laden des Projekts in den TreeWidget werden nun XML-Knoten automatisch deaktiviert (ausgegraut), wenn die entsprechende XML-Datei nicht im Projekt vorhanden ist. Dies verbessert die Benutzerfreundlichkeit durch sofortige visuelle Rückmeldung über fehlende Dateien.

- XML-Knoten werden mit setDisabled(True) deaktiviert
- Tooltip zeigt den vollständigen Pfad der fehlenden Datei
- Warnung wird ins Log geschrieben

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 20:22:42 +01:00
info f91ffd83a2 Fix: Accept-Changes-Button beim PDF-Reset deaktivieren
Beim Zurücksetzen der PDF-Ansicht wird nun auch der "Änderungen akzeptieren" Button deaktiviert, um einen konsistenten UI-Zustand zu gewährleisten.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 20:08:54 +01:00
info ee9c40610a Feature: Automatische Bereinigung alter Log-Dateien beim Start
Beim Anwendungsstart werden nun automatisch Log-Dateien gelöscht, die älter als 24 Stunden sind. Dies hilft, Speicherplatz zu sparen und das Log-Verzeichnis übersichtlich zu halten.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 19:52:41 +01:00
info 3acdfbb5c8 Refactor: MainWindow in 7 Mixins aufgeteilt (80% Code-Reduktion)
MainWindow.py von 5025 auf 983 Zeilen reduziert durch Extraktion in:
- TreeManagerMixin: Baumstruktur-Verwaltung (~1136 Zeilen)
- PdfViewerMixin: PDF-Anzeige und Rendering
- WorkerPoolMixin: Saxon/FOP Worker-Pool-Verwaltung
- DatabaseMixin: PostgreSQL-Operationen
- DragDropMixin: Drag-and-Drop für XML-Dateien
- HashCalculationMixin: blake2b Hash-Berechnung
- TransformationMixin: XSL-Transformationen

Zusätzlich Thread-Klassen in threads.py ausgelagert.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 18:23:55 +01:00
info 5a2da7f264 Feature: Ref-PDF direkt aus Kontextmenü öffnen
- Neue Kontextmenü-Aktion "Ref-PDF öffnen" für XML-Dateien
- Aktion nur aktiv wenn Ref-PDF existiert und keine Diff-PDF vorhanden
- Öffnet Ref-PDF im System-PDF-Viewer via QDesktopServices
- Handler-Methode _open_ref_pdf_for_xml_file() mit Fehlerbehandlung

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-11 16:30:09 +01:00
info 4eb80c92b2 Update: Abhängigkeiten aktualisiert und pyqtdarktheme entfernt
- Python-Version auf >=3.13,<3.15 eingeschränkt
- pydantic-settings 2.9.1 → 2.12.0
- pyside6 6.9.1 → 6.10.1
- polars 1.31.0 → 1.37.0
- pydantic-yaml 1.5.1 → 1.6.0
- ruff 0.14.8 → 0.14.11
- pyqtdarktheme entfernt

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-11 16:14:58 +01:00
info 1558c376d1 Fix: Worker-Pool-Metriken cachen für Anzeige nach Shutdown
Problem:
- Worker-Pools werden nach Transformation beendet (Lazy Loading)
- Metriken waren danach nicht mehr verfügbar
- Metriken-Dialog zeigte "Nicht aktiviert"

Lösung:
- Metriken werden vor Pool-Shutdown mit deepcopy() gespeichert
- MainWindow speichert last_saxon_metrics und last_fop_metrics
- WorkerPoolMetricsDialog zeigt gecachte Metriken an
- Neue Methode: _update_metrics_tab_from_metrics()

Verhalten:
- Metriken bleiben bis zur nächsten Transformation verfügbar
- Dialog zeigt "Letzte Transformation" statt "Aktiviert"
- Ohne Metriken: Hinweis "bitte erst eine Transformation durchführen"

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 19:00:35 +01:00
info f59e51c081 Performance: Lazy Worker-Pool Init + XSL-Stylesheet-Caching
RAM-Optimierung (Lazy Loading):
- Worker-Pools werden erst bei Transformation gestartet (nicht beim Projekt-Öffnen)
- Worker-Pools werden nach Transformation automatisch beendet
- RAM im Ruhezustand: 0 MB (vorher: ~1.2 GB)
- Temporäre Verzeichnisse werden sauber aufgeräumt

XSL-Stylesheet-Caching (Massive Performance-Steigerung):
- Saxon s9api: HashMap<String, XsltExecutable> Cache
- Saxon JAXP: HashMap<String, Templates> Cache
- Kompilierte Stylesheets werden pro Worker wiederverwendet
- Bei 82 Transformationen mit 8 XSL-Dateien:
  * 1. Durchlauf: 8× Kompilierung
  * Weitere 74×: Cache-Treffer (sehr schnell!)

Technische Details:
- Worker-Pool-Init verschoben von _on_project_opened zu _start_transformation
- Worker-Pool-Shutdown in _on_all_transformations_finished
- Java-seitiger HashMap-Cache für beide Saxon-Varianten
- Cache-Logging für Debugging

Perfekt für Dauerbetrieb im Hintergrund!

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 18:44:32 +01:00
info d3dc07cbf3 Feature: Detaillierte Worker-Pool Performance-Metriken mit psutil
Neue Metrik-Erfassung für Saxon- und FOP-Worker-Pools:
- Kompilierungszeit der Java-Worker-Klassen
- Worker-Startzeiten (Summe + Durchschnitt pro Worker)
- RAM-Verbrauch vor/nach Transformation (Summe + Durchschnitt)
- Automatische Berechnung der RAM-Zunahme in MB und Prozent

Technische Details:
- Neue WorkerPoolMetrics-Datenklasse in worker_metrics.py
- RAM-Messung via psutil (v7.2.1, neu hinzugefügt)
- Metriken für beide Saxon-Varianten (JAXP + s9api)
- WorkerPoolMetricsDialog mit Tab-basierter UI
- Menüeintrag "Projekt → Worker-Pool-Metriken"

Metriken werden automatisch erfasst:
- Bei Worker-Pool-Initialisierung (Kompilierung + Start)
- Vor erster Transformation (RAM-Baseline)
- Nach allen Transformationen (RAM-Endwert)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-06 20:58:37 +01:00
info cfbdc476fa Docs: Nutzungsszenario und Workflow in CLAUDE.md dokumentiert
Neuer Abschnitt "Anvisiertes Nutzungsszenario" erklärt:
- Einsatz in Flexnow für PDF-Dokumente (Urkunden, Zeugnisse, Bescheide)
- Struktur der ~100 verknüpften XSL-Dateien
- Typischer Entwicklungs-Workflow mit PDF-Diff-Prüfung
- Wichtigkeit von RAM-sparsamem Design

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-06 20:12:07 +01:00
info cbcae3222f Feature: s9api-basierte SaxonWorkerPool-Variante für XSLT 2.0/3.0
Die JAXP-basierte SaxonWorkerPool-Implementierung ist nur für XSLT 1.0
vollständig spezifiziert und kann bei XSLT 2.0/3.0 zu fehlerhaften
Ausgaben führen.

Änderungen:
- Neue SaxonWorkerPoolS9Api-Klasse mit Saxon s9api für XSLT 2.0/3.0
- XsltVersion-Enum in conf.py (XSLT_1_0, XSLT_2_0_3_0)
- ComboBox in Performance-Einstellungen zur XSLT-Version-Auswahl
- MainWindow wählt automatisch richtige Worker-Pool-Variante
- Verbesserte Classpath-Behandlung und Fehlerbehandlung

Standard-Einstellung: XSLT 2.0/3.0 (s9api) - empfohlen für moderne Stylesheets
Fallback: XSLT 1.0 (JAXP) - verfügbar für Legacy-Stylesheets

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-05 20:20:00 +01:00
info bb7cad9204 Build: Vollständige Windows-Distribution-Infrastruktur
Implementiert ein professionelles Build-System für Windows-Benutzer ohne Python-Installation:

PyInstaller-Integration:
- DocuMentor.spec mit automatischer Icon/Version-Einbindung
- Unterstützung für alle PySide6-UI-Dateien und Dependencies
- UPX-Kompression für kleinere Executable-Größe

Icon-System:
- create_icon.py generiert Standard-Icon oder konvertiert PNG zu ICO
- Multi-Size ICO (16x16 bis 256x256) für alle Windows-Kontexte
- Automatische Integration in Build-Prozess
- Prompts für Bild-KIs (Gemini, DALL-E, etc.)

Versionsinformationen:
- create_version_info.py liest Version aus pyproject.toml
- Windows-Datei-Eigenschaften (Rechtsklick → Details)
- Automatische Generierung bei jedem Build

Build-Automatisierung:
- build_windows.py orchestriert gesamten Build-Prozess
- Erstellt Icon und Versionsinformationen automatisch
- Generiert ZIP-Archiv für Distribution
- Cleanup alter Builds

Inno Setup-Integration:
- installer.iss für professionelle Setup.exe
- GUID-Generator (generate_guid.py)
- Desktop-Verknüpfungen und Start-Menü-Integration

Dokumentation:
- BUILD.md - Schnellstart-Anleitung
- docs/windows_distribution.md - Detaillierte Distribution-Dokumentation
- docs/icon_and_version_info.md - Icon- und Versions-System
- resources/icon_prompt.md - KI-Prompts für Icon-Generierung

Dependencies:
- pyinstaller>=6.0.0 für Executable-Erstellung
- pillow>=10.0.0 für Icon-Generierung

Externe Abhängigkeiten (Java, FOP, Saxon, diff-pdf) bleiben separat installierbar.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-04 20:37:30 +01:00