html5-parser 0.2.0

A pure-Rust WHATWG HTML5 tokenizer and tree-construction implementation
Documentation
# html5-parser

Rust-Crate: eigenständiger WHATWG-HTML5-Tokenizer und Tree-Construction.
Konzept & Herkunft: `README.md`. Umsetzungsplan: `plan/`.

`plan/` ist bewusst per `.gitignore` von diesem Repo ausgeschlossen —
lokale Arbeitsnotizen für die Entwicklung (Phasenpläne, Status,
Entscheidungs-Log), kein Teil des veröffentlichten Codes. Nach einem
frischen Clone existiert `plan/` deshalb nicht automatisch. Die für das
Verständnis des Crates wesentlichen Scope- und Architektur-Punkte stehen
deshalb redundant auch hier in `CLAUDE.md` und in `README.md`, nicht nur
in `plan/`; Detail-Rationale und der laufende Phasen-Status sind es
nicht und gehen bei fehlendem `plan/` verloren — das ist hingenommen,
kein Versehen.

Schwesterprojekt von [`html-conform`](../html-conform) (künftiger Ersatz für
dessen aktuelle externe HTML5-Parsing-Abhängigkeit, Schicht 1). Siehe
dessen `plan/DECISIONS.md` für Herkunft und die zweistufige
Scope-Entscheidung.

## Scope — zweistufig, nicht spekulativ generisch von Anfang an

1. **Schritt 1:** Nur das bauen, was `html-conform` für den Ersatz von
   Schicht 1 tatsächlich braucht — Tokenizer + Tree-Construction, deren
   Ausgabe `html-conform`s `src/infoset.rs::normalize()` direkt bedienen
   kann, inklusive Source-Positionen pro Knoten. Keine generische
   öffentliche API, kein Anspruch auf Wiederverwendbarkeit außerhalb dieses
   Zwecks in dieser Stufe.
2. **Schritt 2:** Erst nachdem Schritt 1 an `html-conform`s echtem Bedarf
   steht, den darin als eigenständig wiederverwendbar erkannten Teil
   (generischer WHATWG-HTML5-Tokenizer/Tree-Builder ohne
   `html-conform`-spezifisches Wissen) zur öffentlichen API dieses Crates
   machen.

## Architektur (Arbeitstitel)

```
HTML-Input (String) → tokenizer (WHATWG-Tokenizer-Zustandsautomat)
                     → tree_builder (WHATWG-Tree-Construction-Algorithmus,
                       inkl. Foreign Content / SVG / MathML)
                     → document (Element-/Text-/Kommentar-Baum mit Positionen)
```

## Arbeitsweise

Falls `plan/` lokal vorhanden ist (siehe Hinweis oben — nach einem
frischen Clone erst nicht):

- Aktueller Stand & nächster Schritt: `plan/00-STATUS.md`.
- Phasenpläne mit Schritten/Exit-Kriterien: `plan/0N-*.md`. Vor größeren
  Änderungen die passende Phase lesen, nicht am Plan vorbei arbeiten.
- Getroffene Entscheidungen: `plan/DECISIONS.md` — dort nachschlagen, bevor
  offene Fragen neu aufgerollt werden.

Fehlt `plan/`, bei Bedarf neu anlegen (Konventionen siehe bestehende
Commits/Kommentare im Code) statt zu warten, bis es wieder auftaucht.

## Feste Regeln

- Lizenz: **MIT**, von Anfang an (`Cargo.toml`: `license = "MIT"`).
- Normative Grundlage ist die
  [WHATWG-HTML5-Parsing-Spezifikation]https://html.spec.whatwg.org/multipage/parsing.html.
  Bei Unklarheiten dort nachschlagen, nicht aus anderen Implementierungen
  (z. B. `html5ever`) raten oder Code übernehmen.
- Scope bleibt in Schritt 1 an `html-conform`s tatsächlichem Bedarf
  ausgerichtet — keine verfrühte Generalisierung, siehe "Scope" oben.
- Kein `unsafe` ohne expliziten Grund und Kommentar.

## Definition of Done

Siehe "Exit-Kriterien" in der jeweiligen `plan/0N-*.md`-Datei, falls
vorhanden (siehe "Arbeitsweise" oben) — nicht global definiert, sondern
pro Phase.