grillades/cahier des charges.md
2026-01-02 04:30:03 +01:00

168 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Objectif
Développer une **application web daide à la création de mots fléchés** (et non de mots croisés). Le présent document décrit de manière **non ambiguë** le comportement attendu afin de permettre à un LLM (ex. ChatGPT) de **coder lapplication fidèlement**.
---
## 1. Démarrage et création de grille
- Lapplication propose un écran initial où lutilisateur choisit :
- la **largeur** (nombre de colonnes)
- la **hauteur** (nombre de lignes)
- Un bouton **« Commencer »** crée une **nouvelle page / vue** contenant une grille vide conforme aux dimensions choisies.
---
## 2. Grille : règles générales
- La grille est constituée de **cases parfaitement carrées**, jointives (sans espace).
- Chaque case est de lun des deux types suivants :
- **Case lettre**
- **Case définition**
- Les **cases définition** ont un **fond légèrement plus foncé** que les cases lettre.
---
## 3. Règles initiales des cases définition
À la création de la grille :
- Toutes les cases situées :
- sur la **première ligne**,
- ou sur la **première colonne**,
- **et dont lindice (ligne ou colonne) est impair**
sont automatiquement des **cases définition**.
- Les indices commencent à **1** (et non 0).
---
## 4. Saisie et édition des mots
### 4.1 Sélection et orientation
- Lutilisateur clique sur une **case lettre** pour commencer la saisie.
- Une **orientation active** est toujours définie :
- **horizontale** ou **verticale**.
- Lorientation active est visuellement indiquée par la **mise en surbrillance** de la ligne ou colonne concernée.
### 4.2 Changement dorientation
- Lorientation bascule (horizontal ⇄ vertical) si :
- lutilisateur **clique à nouveau sur la case active**, ou
- lutilisateur appuie sur la touche **TAB**.
### 4.3 Saisie du texte
- Chaque lettre tapée :
- est placée dans la case courante,
- puis le curseur avance dune case selon lorientation active.
- Touche **Backspace** :
- supprime la lettre courante,
- puis recule le curseur dune case.
### 4.4 Déplacements clavier
- Les **flèches directionnelles** permettent de déplacer le curseur librement dans la grille sans modifier le contenu.
---
## 5. Création automatique de cases définition
- Lorsquun utilisateur commence à saisir un mot :
- si la **case immédiatement précédente** (selon lorientation) est vide,
- alors cette case devient automatiquement une **case définition**.
---
## 6. Gestion des cases définition
### 6.1 Contenu
- Une case définition peut contenir :
- **une définition horizontale**,
- **une définition verticale**,
- ou les deux simultanément.
### 6.2 Découpage visuel
- Si une case définition est associée à **deux mots** (horizontal + vertical) :
- elle est **visuellement divisée en deux moitiés**.
- les interactions (clic, sélection de définition) sappliquent uniquement à la moitié cliquée.
### 6.3 Flèches directionnelles
- Chaque définition affichée doit être accompagnée dune **petite flèche noire** :
- pointant vers la **première lettre du mot correspondant**,
- pouvant être **droite ou courbée** selon la direction du mot.
---
## 7. Ajout et suppression de lignes / colonnes
### 7.1 Ajout
- Des icônes **« + »** permettent :
- dajouter une **colonne** (icônes à droite de la grille),
- dajouter une **ligne** (icônes en bas de la grille).
- Lors de lajout, les **règles des cases définition impaires** (voir section 3) doivent être **strictement respectées**.
### 7.2 Suppression
- Des icônes **« »** permettent :
- de supprimer une colonne,
- de supprimer une ligne.
- La suppression entraîne la mise à jour correcte des indices et des types de cases.
---
## 8. Dictionnaires de définitions
### 8.1 Format
- Les dictionnaires sont des fichiers texte contenant des lignes au format :
```
mot: définition
```
- Un même mot peut apparaître plusieurs fois avec des définitions différentes.
### 8.2 Chargement
- Lutilisateur fournit une **URL** pointant vers un fichier texte valide (ex. Pastebin raw).
- Le fichier peut être **très volumineux (jusquà plusieurs gigaoctets)** :
- limplémentation doit donc être **économe en mémoire** et adaptée au streaming ou au traitement progressif.
### 8.3 Règles lexicales
- Les **mots sont comparés sans accents**.
- Les mots sont traités en **MAJUSCULES**.
- Les **définitions conservent leurs accents et leur casse dorigine**.
- Les mots contenant des **tirets** :
- sont affichés avec des **bordures en pointillés** entre les cases correspondant aux tirets.
---
## 9. Sélection des définitions
- Lorsquun utilisateur clique sur une **case définition** (ou une moitié de case) :
- lapplication affiche la **liste des définitions compatibles** avec le mot associé.
- Lutilisateur peut sélectionner une définition :
- celle-ci est alors affichée dans la case définition correspondante.
---
## 10. Changement manuel du type de case
- Un **double-clic** sur une case bascule son type :
- **case lettre ⇄ case définition**.
- Ce changement met à jour le comportement et laffichage de la case immédiatement.
---
## 11. Contraintes générales
- Lapplication est **entièrement web** (HTML/CSS/JS ou équivalent).
- Le comportement doit être **déterministe**, reproductible et sans ambiguïté.
- Toute interaction décrite ci-dessus doit être implémentée exactement telle que spécifiée.