From 2f7cc79af73e98d896e3a114ee9da23fb6f1fd4e Mon Sep 17 00:00:00 2001 From: Robert Date: Tue, 9 Sep 2025 13:44:21 +0400 Subject: [PATCH 1/3] Create intro.md --- efx/docs/fr/intro.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 efx/docs/fr/intro.md diff --git a/efx/docs/fr/intro.md b/efx/docs/fr/intro.md new file mode 100644 index 0000000..dc12f63 --- /dev/null +++ b/efx/docs/fr/intro.md @@ -0,0 +1 @@ +## Intro From f5089091531787f5d683b7b6d4d318990f6729ce Mon Sep 17 00:00:00 2001 From: Robert Date: Tue, 9 Sep 2025 23:31:48 +0400 Subject: [PATCH 2/3] Update intro.md --- efx/docs/fr/intro.md | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/efx/docs/fr/intro.md b/efx/docs/fr/intro.md index dc12f63..98b7bb9 100644 --- a/efx/docs/fr/intro.md +++ b/efx/docs/fr/intro.md @@ -1 +1,30 @@ -## Intro +# EFx + +efx — moteur de modèles d'interface utilisateur déclaratif en Rust +`efx!` est une macro procédurale qui transforme le balisage compact de type XML en appels de méthode vers votre interface utilisateur (par exemple, des wrappers sur `egui/eframe`). + +## Exemple minimal + +```rust +use efx_core::doc_prelude::*; +use efx::*; + +efx!(Ui::default(), r#" + + + + + +"#); +``` +**Caractéristiques principales 0.5** +- Mots clés: `Column`, `Row`, `Label`, `Separator`, `Button`. +- Insérer des expressions : `{expr}` dans le texte. +- S'échapper: `{{` → `{`, `}}` → `}`. +- Les attributs de balise sont **analysés**. + +--- + +### EFx Sandbox (aire de jeux locale) + +`efx-sandbox` est un crate binaire d'aide conservé dans ce dépôt. Il est utilisé pour les tests manuels des balises et comme exemple concret d'utilisation de la macro de création de modèles dans une application `egui` réelle. From 920ad38ff241cfb659712b665da31f54aef1557b Mon Sep 17 00:00:00 2001 From: Robert Date: Tue, 9 Sep 2025 23:36:46 +0400 Subject: [PATCH 3/3] Update intro.md --- efx/docs/fr/intro.md | 126 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 116 insertions(+), 10 deletions(-) diff --git a/efx/docs/fr/intro.md b/efx/docs/fr/intro.md index 98b7bb9..3b35e13 100644 --- a/efx/docs/fr/intro.md +++ b/efx/docs/fr/intro.md @@ -1,7 +1,7 @@ # EFx -efx — moteur de modèles d'interface utilisateur déclaratif en Rust -`efx!` est une macro procédurale qui transforme le balisage compact de type XML en appels de méthode vers votre interface utilisateur (par exemple, des wrappers sur `egui/eframe`). +efx — moteur de templates UI déclaratif en Rust +`efx!` est une macro procédurale qui transforme un balisage compact de type XML en appels de méthodes vers votre UI (par ex. des wrappers autour de `egui/eframe`). ## Exemple minimal @@ -13,18 +13,124 @@ efx!(Ui::default(), r#" - + "#); ``` -**Caractéristiques principales 0.5** -- Mots clés: `Column`, `Row`, `Label`, `Separator`, `Button`. -- Insérer des expressions : `{expr}` dans le texte. -- S'échapper: `{{` → `{`, `}}` → `}`. -- Les attributs de balise sont **analysés**. + +**Fonctionnalités principales 0.5** + +* Tags : `Column`, `Row`, `Label`, `Separator`, `Button`. +* Insertion d’expressions : `{expr}` dans le texte. +* Échappement : `{{` → `{`, `}}` → `}`. +* Les attributs de tags sont **analysés**. --- -### EFx Sandbox (aire de jeux locale) +### EFx Sandbox (aire de jeu locale) + +`efx-sandbox` est un crate binaire utilitaire inclus dans ce dépôt. Il est utilisé pour tester manuellement les tags et comme exemple “vivant” de l’utilisation de la macro de templating dans une application `egui` réelle. + +**Pourquoi l’utiliser** + +* Vérifier rapidement le comportement des tags dans une fenêtre native (`eframe/egui`). +* Conserver des exemples riches et des “scènes” en dehors des doctests (pas de limitations de test harness). +* Démontrer comment `efx!` s’intègre avec l’état de l’application. + +**Où il se trouve** + +`/efx-sandbox` + +Ce crate fait partie du workspace et n’est **pas publié**. + +**Comment l’exécuter** + +```bash +cargo run -p efx-sandbox +``` + +> Assurez-vous que les versions de `eframe/egui` correspondent à celles utilisées par EFx (nous fixons `eframe = "0.32"` pour `egui 0.32.x`). + +**Exemple minimal de `main.rs`** + +```rust,ignore +use eframe::{egui, NativeOptions}; +use efx::*; // la macro efx! +use efx_core::doc_prelude::*; // prélude pratique pour egui + +fn main() -> eframe::Result<()> { + eframe::run_native( + "EFx Sandbox", + NativeOptions::default(), + Box::new(|_cc| Box::new(App::default())), + ) +} + +#[derive(Default)] +struct App { + counter: i32, + input: String, +} + +impl eframe::App for App { + fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { + egui::CentralPanel::default().show(ctx, |ui| { + // En-tête + let _ = efx!(ui, r#" + + + + + "#); + + // Boutons renvoyant Response + ui.horizontal(|ui| { + let inc = efx!(ui, r#""#); + if inc.clicked() { self.counter += 1; } + + let dec = efx!(ui, r#""#); + if dec.clicked() { self.counter -= 1; } + }); + + // Texte dynamique + let _ = efx!(ui, r#""#); + + // Champ de texte + let _ = efx!(ui, r#""#); + + // Scroll + liens + boutons stylés + let _ = efx!(ui, r#" + + + + + + À propos + + + + + + + + + + "#); + }); + } +} +``` + +**Conseils** + +* Gardez plusieurs “scènes” d’exemple comme `&'static str` et changez-les via un `ComboBox` pour tester différents ensembles de tags. +* Préférez les attributs en **snake\_case** (`max_height`, `always_show`, `stroke_width`, …). Si un tag supporte aussi les alias en kebab-case, sa section le mentionnera. +* Les couleurs sont au format `#RRGGBB` ou `#RRGGBBAA` (les formats courts `#RGB/#RGBA` ne sont pas encore supportés). + +**Pourquoi un sandbox au lieu des doctests** + +Les doctests sont excellents pour la syntaxe et les messages d’erreur, mais `egui` nécessite une vraie boucle de rendu (`Context::run()`), que les doctests ne fournissent pas. Le sandbox exécute une vraie application, tandis que les exemples de cette documentation sont marqués `rust,ignore` pour éviter leur exécution. + +--- -`efx-sandbox` est un crate binaire d'aide conservé dans ce dépôt. Il est utilisé pour les tests manuels des balises et comme exemple concret d'utilisation de la macro de création de modèles dans une application `egui` réelle. +Pour plus d’informations, voir les sections suivantes : **Supported Tags** et **Syntax Guide**.