# DOM-Prozessoren Dokumentation

## Überblick

Die DOM-Prozessoren in `src/Framework/View/Processors` sind modulare Komponenten zur Verarbeitung und Manipulation von HTML-Dokumenten. Sie implementieren das `DomProcessor`-Interface und werden vom Template-System verwendet, um dynamische Inhalte, Layouts und Komponenten in Templates einzufügen.

## Das DomProcessor Interface

```php
interface DomProcessor
{
    public function process(HTMLDocument $dom, RenderContext $context): void;
}
```

Jeder Prozessor erhält:
- Ein `HTMLDocument`-Objekt (PHP 8.4's HTML5 Parser)
- Einen `RenderContext` mit Daten und Slots

## Verfügbare Prozessoren

| Prozessor | Beschreibung | Dokumentation |
|-----------|-------------|---------------|
| PlaceholderReplacer | Ersetzt Platzhalter in Text und Attributen | [Dokumentation](PlaceholderReplacer.md) |
| IncludeProcessor | Bindet externe HTML-Dateien ein | [Dokumentation](IncludeProcessor.md) |
| LayoutTagProcessor | Implementiert ein Layout-System | [Dokumentation](LayoutTagProcessor.md) |
| ComponentProcessor | Ermöglicht wiederverwendbare UI-Komponenten | [Dokumentation](ComponentProcessor.md) |
| SlotProcessor | Implementiert ein Slot-System für Komponenten | [Dokumentation](SlotProcessor.md) |
| IfProcessor | Bedingte Darstellung von Elementen | [Dokumentation](IfProcessor.md) |
| ForProcessor | Iteration über Arrays/Sammlungen | [Dokumentation](ForProcessor.md) |
| AssetInjector | Fügt JS/CSS-Assets aus dem Vite-Manifest ein | [Dokumentation](AssetInjector.md) |
| MetaManipulator | Extrahiert Metadaten aus Meta-Tags | [Dokumentation](MetaManipulator.md) |
| EscapeProcessor | Escaping von Variablen (String-Prozessor) | [Dokumentation](EscapeProcessor.md) |
| DateFormatProcessor | Formatiert Datums- und Zeitwerte | [Dokumentation](DateFormatProcessor.md) |
| SwitchCaseProcessor | Ermöglicht switch/case-Logik in Templates | [Dokumentation](SwitchCaseProcessor.md) |
| CommentStripProcessor | Entfernt HTML-Kommentare | [Dokumentation](CommentStripProcessor.md) |
| SingleLineHtmlProcessor | Konvertiert mehrzeilige HTML-Elemente in einzeilige | [Dokumentation](SingleLineHtmlProcessor.md) |
| RemoveEmptyLinesProcessor | Entfernt leere Zeilen aus dem HTML | [Dokumentation](RemoveEmptyLinesProcessor.md) |
| VoidElementsSelfClosingProcessor | Korrigiert selbstschließende Tags | [Dokumentation](VoidElementsSelfClosingProcessor.md) |

## Anwendungsreihenfolge

Prozessoren werden typischerweise in der folgenden Reihenfolge angewendet:

1. **Strukturprozessoren**
   - LayoutTagProcessor
   - IncludeProcessor

2. **Komponentenprozessoren**
   - ComponentProcessor
   - SlotProcessor

3. **Logikprozessoren**
   - IfProcessor
   - ForProcessor
   - SwitchCaseProcessor

4. **Inhaltsprozessoren**
   - PlaceholderReplacer
   - DateFormatProcessor
   - MetaManipulator

5. **Asset-Prozessoren**
   - AssetInjector

6. **Optimierungsprozessoren**
   - CommentStripProcessor
   - RemoveEmptyLinesProcessor
   - SingleLineHtmlProcessor
   - VoidElementsSelfClosingProcessor

## Anwendungsbeispiel

```php
// Template-Engine mit Prozessoren konfigurieren
$templateEngine = new TemplateEngine();

// Strukturprozessoren
$templateEngine->addProcessor(new LayoutTagProcessor());
$templateEngine->addProcessor(new IncludeProcessor());

// Komponentenprozessoren
$templateEngine->addProcessor(new ComponentProcessor());
$templateEngine->addProcessor(new SlotProcessor());

// Logikprozessoren
$templateEngine->addProcessor(new IfProcessor());
$templateEngine->addProcessor(new ForProcessor());

// Inhaltsprozessoren
$templateEngine->addProcessor(new PlaceholderReplacer());
$templateEngine->addProcessor(new MetaManipulator());

// Template rendern
$html = $templateEngine->render('template.html', ['key' => 'value']);
```

## Eigene Prozessoren erstellen

Um einen eigenen Prozessor zu erstellen, implementieren Sie das `DomProcessor`-Interface:

```php
class MyCustomProcessor implements DomProcessor
{
    public function process(HTMLDocument $dom, RenderContext $context): void
    {
        // DOM-Manipulation hier
    }
}
```
