From dfabb02c205c4297c8d461adf90f87f2267d8c6f Mon Sep 17 00:00:00 2001 From: Robert Date: Wed, 10 Sep 2025 01:54:30 +0400 Subject: [PATCH 1/2] Create tags.md --- efx/docs/fr/tags.md | 290 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 290 insertions(+) create mode 100644 efx/docs/fr/tags.md diff --git a/efx/docs/fr/tags.md b/efx/docs/fr/tags.md new file mode 100644 index 0000000..0c747aa --- /dev/null +++ b/efx/docs/fr/tags.md @@ -0,0 +1,290 @@ +## Tags supportés (v0.4+) + +> À partir de la version 0.5 certains tags supportent des attributs. +> Les attributs inconnus produisent un `compile_error!`. + +### `Column` + +Conteneur vertical. Génère `ui.vertical(|ui| { ... })`. + +**Attributs** + +* `align="left|center|right"` — alignement horizontal des enfants. +* `gap="N"` — espacement vertical entre enfants (f32). +* `padding="N"` — marge supplémentaire haut/bas (f32). + +```rust +use efx_core::doc_prelude::*; +use efx::*; + +efx!(Ui::default(), r#" + + +"#); +``` + +### `Row` + +Conteneur horizontal. Génère `ui.horizontal(|ui| { ... })`. + +**Attributs** + +* `align="top|center|bottom"` — alignement vertical des enfants. +* `gap="N"` — espacement horizontal entre enfants (f32). +* `wrap="true|false"` — retour automatique à la ligne si dépassement. +* `padding="N"` — marge supplémentaire gauche/droite (f32). + +```rust +use efx_core::doc_prelude::*; +use efx::*; + +efx!(Ui::default(), r#""#); + +efx!(Ui::default(), r#""#); +``` + +### `Label` + +Widget texte. Seuls du texte et des interpolations (`{expr}`) sont autorisés comme enfants. + +**Attributs** + +* `color="name|#RRGGBB[AA]"` — couleur du texte. +* `size="N"` — taille de police (f32). +* `bold="true|false"`. +* `italic="true|false"`. +* `underline="true|false"`. +* `strike="true|false"`. +* `monospace="true|false"`. +* `wrap="true|false"` — activer le retour à la ligne. + +```rust +use efx_core::doc_prelude::*; +use efx::*; + +efx!(Ui::default(), r##""##); +``` + +### `Separator` + +Séparateur auto-fermable. Aucun enfant autorisé (sinon `compile_error!`). + +**Attributs** + +* `space="N"` — espacement uniforme avant et après (f32). +* `space_before="N"` — espacement au-dessus. +* `space_after="N"` — espacement en dessous. + +```rust +use efx_core::doc_prelude::*; +use efx::*; + +efx!(Ui::default(), r#""#); +efx!(Ui::default(), r#""#); +``` + +```rust,compile_fail +use efx_core::doc_prelude::*; +use efx::*; + +/// compile_fail +efx!(Ui::default(), "enfant"); +``` + +### `Button` + +Bouton — c’est le seul tag qui retourne une valeur de type `Resp` à la racine d’une expression. + +**Attributs** + +* `fill="color"` — couleur de fond. +* `rounding="N"` — rayon d’arrondi (f32). +* `min_width="N", min_height="N"` — taille minimale. +* `frame="true|false"` — dessiner fond/bordure. +* `enabled="true|false"` — activer/désactiver le bouton. +* `tooltip="text"` — info-bulle au survol. + +```rust +use efx_core::doc_prelude::*; +use efx::*; + +let resp: Resp = efx!(Ui::default(), r#""#); +assert!(!resp.clicked()); +``` + +### `Hyperlink` + +Lien cliquable. Génère `ui.hyperlink(url)` ou `ui.hyperlink_to(label, url)`. + +**Attributs** + +* `url="..."` — adresse de destination (obligatoire). +* `open_external="true|false"` — ouvrir dans le navigateur système (par défaut true). +* `color="name|#RRGGBB[AA]"` — couleur du texte du lien. +* `underline="true|false"` — souligner le texte du lien (par défaut true). +* `tooltip="text"` — info-bulle au survol. + +Utilisation multiplateforme : + +* **Web :** rendu comme un lien `` standard. +* **Desktop (eframe, bevy\_egui) :** ouvre le navigateur système via `ui.hyperlink(...)`. +* **Overlays jeu/outils :** pratique pour relier docs, dépôts, aide. +* **Apps hors-ligne :** avec schémas d’URL personnalisés (ex. `help://topic`). + +```rust +use efx_core::doc_prelude::*; +use efx::*; + +efx!(Ui::default(), r##" + + + À propos + +"##); +``` + +### `TextField` + +Champ de saisie (une ou plusieurs lignes). Génère `egui::TextEdit` et l’insère via `ui.add(...)`. Doit être auto-fermable (pas d’enfants). + +**Attributs** + +* `value=""` — **obligatoire**. Expression Rust de type `String`, ex. `state.name`. Le générateur prend automatiquement `&mut ()`. +* `hint="text"` — texte indicatif affiché quand vide. +* `password="true|false"` — masquer les caractères (uniquement en mode ligne simple). +* `width="N"` — largeur souhaitée (f32). +* `multiline="true|false"` — éditeur multi-lignes (`TextEdit::multiline`). + +```rust +use efx_core::doc_prelude::*; +use efx::*; + +#[derive(Default)] +struct State { name: String } + +let mut state = State::default(); + +// Ligne simple avec placeholder et largeur +efx!(Ui::default(), r#""#); + +// Champ mot de passe +efx!(Ui::default(), r#""#); + +// Éditeur multi-lignes +efx!(Ui::default(), r#""#); +``` + +### `CentralPanel` + +Zone principale remplissant tout l’espace disponible. Enveloppe ses enfants dans `egui::CentralPanel` et applique éventuellement un `Frame`. + +**Attributs** + +* `frame="true|false"` — utiliser un frame par défaut (`true`, par défaut) ou aucun (`false`). +* `fill="name|#RRGGBB[AA]"` — couleur de fond. +* `stroke-width="N"` — épaisseur du trait (f32). +* `stroke-color="name|#RRGGBB[AA]"` — couleur du trait. +* `padding="N"` — marge intérieure (f32). +* `padding-left|padding-right|padding-top|padding-bottom="N"`. +* `margin="N"` — marge extérieure (f32). +* `margin-left|margin-right|margin-top|margin-bottom="N"`. + +```rust,no_run +use efx_core::doc_prelude::*; +use efx::*; + +efx!(Ui::default(), r##" + + + + + + + Docs + + + +"##); +``` + +### `ScrollArea` + +Conteneur défilant basé sur `egui::ScrollArea`. Enveloppe ses enfants et fournit un défilement vertical/horizontal/les deux. + +**Attributs** + +* `axis="vertical|horizontal|both"` — axe de défilement (par défaut: vertical). +* `always-show="true|false"` — toujours afficher la barre de défilement. +* `max-height="N"` — hauteur maximale (f32). +* `max-width="N"` — largeur maximale (f32). +* `id="text"` — identifiant pour persister l’état. +* `bottom="true|false"` — rester collé en bas (logs/chats). +* `right="true|false"` — rester collé à droite. + +```rust,ignore +use efx_core::doc_prelude::*; +use efx::*; + +// Panneau log vertical collé en bas +efx!(Ui::default(), r#" + + + + + + + + +"#); + +// Scroll horizontal +efx!(Ui::default(), r#" + + + + + + + + +"#); + +// Les deux directions (ex. grosse grille) +efx!(Ui::default(), r#" + + + + + + + + +"#); +``` + +### `Heading` + +Titre de section. Génère `ui.heading(text)` avec des styles optionnels. + +**Attributs** + +* `level="1..6"` — niveau de titre (entier). + *Défaut :* `1`. Correspond aux styles prédéfinis d’`egui`. +* `size="N"` — taille de police personnalisée (f32). +* `color="name|#RRGGBB[AA]"` — couleur du texte. +* `tooltip="text"` — info-bulle au survol. + +```rust +use efx_core::doc_prelude::*; +use efx::*; + +efx!(Ui::default(), r##" + + Titre principal + Section + Note + +"##); +``` + +L’attribut `level` contrôle le style de base (h1–h6), tandis que `size` et `color` permettent d’affiner l’apparence. From 7f37387e3cd423ebae44110786b7fe5b2d170371 Mon Sep 17 00:00:00 2001 From: Robert Date: Wed, 10 Sep 2025 01:55:28 +0400 Subject: [PATCH 2/2] Create guide.md --- efx/docs/fr/guide.md | 85 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 efx/docs/fr/guide.md diff --git a/efx/docs/fr/guide.md b/efx/docs/fr/guide.md new file mode 100644 index 0000000..73dd0b5 --- /dev/null +++ b/efx/docs/fr/guide.md @@ -0,0 +1,85 @@ +## Guide de syntaxe + +### Structure + +* Éléments : `enfants` et auto-fermants ``. +* Les nœuds de texte et les interpolations `{expr}` sont autorisés à l’intérieur de `Label`/`Button`. +* Plusieurs éléments sont autorisés à la racine — un bloc avec une liste d’expressions sera généré. + +### Interpolations + +Vous pouvez insérer des expressions Rust arbitraires dans le texte : + +```rust +use efx_core::doc_prelude::*; +use efx::*; + +efx!(Ui::default(), r#""#); +``` + +--- + +### Sécurité des interpolations `{expr}` + +Certains développeurs, habitués aux moteurs de templates PHP ou JavaScript, peuvent craindre que les expressions dans les templates soient dangereuses ou mélangent logique et balisage. + +EFx fonctionne différemment : + +* **Uniquement à la compilation** : `{expr}` est développé par le compilateur Rust. Il n’y a pas de `eval`, pas d’exécution de chaîne dynamique au runtime. +* **Typé et sûr** : le code inséré est du Rust normal, entièrement vérifié par le compilateur. + Si l’expression ne compile pas, le template échoue à la compilation. +* **Portée limitée** : les interpolations ne sont autorisées que dans des tags textuels comme `