[M3] Parser HTML → RichBlock + structure du crate fractal-rich #201

Closed
opened 2026-04-06 08:53:53 +00:00 by charles · 0 comments
Owner

Contexte

M3 — Rendu enrichi. Brique fondatrice : parser le HTML d'un message Matrix, détecter les blocs data-fx-* et les convertir en enum RichBlock pour le rendu GTK natif.

Critères d'acceptation

  • Crate fractal-rich créé avec le trait Extension implémenté
  • Enum RichBlock couvrant tous les types : Chart, Quiz, CodeRun, Card, Canvas, Mermaid, Math, Table, Accordion, Progress, Carousel, Timeline
  • Enum MessageFragment : Html(String) et Rich(RichBlock)
  • Struct RichMessageParser avec méthode parse(html: &str) -> Vec<MessageFragment> basée sur html5ever
  • Les blocs non reconnus ou invalides sont rendus comme Html (fallback gracieux)
  • Chaque RichBlock a son schéma JSON validé via serde_json
  • Tests : parsing d'un message mixte (HTML standard + blocs fx-*)

Notes techniques

  • Crate : crates/fractal-rich/
  • Parser HTML : crate html5ever ou scraper
  • Le namespace data-fx-* dans les <div> du formatted_body Matrix
  • Format message : format: "org.matrix.custom.html" avec data-fx-type et data-fx-config (JSON encodé)
  • Voir specs §5.2 et §5.4 (ST-M3-01 à ST-M3-04)
## Contexte M3 — Rendu enrichi. Brique fondatrice : parser le HTML d'un message Matrix, détecter les blocs `data-fx-*` et les convertir en enum `RichBlock` pour le rendu GTK natif. ## Critères d'acceptation - [ ] Crate `fractal-rich` créé avec le trait `Extension` implémenté - [ ] Enum `RichBlock` couvrant tous les types : `Chart`, `Quiz`, `CodeRun`, `Card`, `Canvas`, `Mermaid`, `Math`, `Table`, `Accordion`, `Progress`, `Carousel`, `Timeline` - [ ] Enum `MessageFragment` : `Html(String)` et `Rich(RichBlock)` - [ ] Struct `RichMessageParser` avec méthode `parse(html: &str) -> Vec<MessageFragment>` basée sur `html5ever` - [ ] Les blocs non reconnus ou invalides sont rendus comme `Html` (fallback gracieux) - [ ] Chaque `RichBlock` a son schéma JSON validé via `serde_json` - [ ] Tests : parsing d'un message mixte (HTML standard + blocs fx-*) ## Notes techniques - Crate : `crates/fractal-rich/` - Parser HTML : crate `html5ever` ou `scraper` - Le namespace `data-fx-*` dans les `<div>` du `formatted_body` Matrix - Format message : `format: "org.matrix.custom.html"` avec `data-fx-type` et `data-fx-config` (JSON encodé) - Voir specs §5.2 et §5.4 (ST-M3-01 à ST-M3-04)
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
charles/my-fractal#201
No description provided.