fix(ai): accents dans les chemins et resolution des chemins prefixes par le vault (BUG-042)
- accents : classes de caracteres Unicode (\p{L}\p{N}\p{M}) pour les motifs
de liens et _looksLikePath (PATH_NAME_RE) -> les chemins/fichiers accentues
produisent enfin un lien cliquable ; comparaison de chemins normalisee NFC
(_normKey), donc une mention decomposee (e + accent combinant, style macOS)
correspond a une entree d'index precomposee, et inversement.
- prefixe de vault : _splitVaultPrefix() retire un premier segment egal au nom
d'un vault connu (TestVault/Recettes/Pizza Maison.md) ; _fetchPathsForVault()
interroge l'index de CE vault sans ecraser le cache du vault actif ;
_openFileLink/_revealPath recoivent le vault cible ; repli 'retirer le
premier segment' si le prefixe ne correspond a aucun vault connu.
Tests : frontend IA 62/62 (+5), 9 suites JSDOM, validate-imports 36 modules,
pytest 963 passed / 6 skipped. Verifie aussi contre l'instance live sur donnees
reelles accentuees/espaces (Recettes/Preparation.md, Recettes/Pat... ) : 8/8.
This commit is contained in:
@@ -64,21 +64,34 @@ Avant d'agir, `_activatePath()` **résout** le chemin contre l'index du vault
|
||||
(segment de tête omis par le modèle), puis basename unique. Les chemins non
|
||||
résolus copient le nom au lieu d'ouvrir un lien mort — plus de `File not found`.
|
||||
|
||||
### 4. Espaces dans les noms de fichiers et les chemins (BUG-042)
|
||||
### 4. Espaces, accents et préfixe de vault dans les chemins (BUG-042)
|
||||
|
||||
Les noms de fichiers/dossiers pouvant contenir des espaces, la détection est
|
||||
adaptée :
|
||||
Les noms de fichiers/dossiers pouvant contenir des espaces et des accents, la
|
||||
détection et la résolution sont adaptées :
|
||||
|
||||
- **Liens markdown** : la cible peut contenir des espaces, être encadrée par
|
||||
`<…>` ou porter un `"titre"` ; les URL percent-encodées (`%20`) sont décodées.
|
||||
- **Code inline** : `` `Ma note.md` `` / `` `Mon dossier/Ma note.md` `` sont
|
||||
reconnus (`_looksLikePath` accepte les espaces en gardant un jeu de caractères
|
||||
strict, ce qui rejette les extraits de code et commandes shell).
|
||||
- **Code inline** : `` `Ma note.md` `` / `` `Recettes/Préparation.md` `` sont
|
||||
reconnus (`_looksLikePath` utilise `PATH_NAME_RE`, une classe Unicode
|
||||
`\p{L}\p{N}\p{M}` — les accents sont acceptés, le jeu de caractères reste
|
||||
strict pour rejeter extraits de code et commandes shell).
|
||||
- **Mentions brutes** : une mention avec espaces n'est liée **que si elle existe
|
||||
réellement dans l'index du vault** (`_linkifySpacePaths` +
|
||||
`_confirmPathInCache`), et l'acceptation se fait sur le **plus long suffixe
|
||||
aligné sur un mot** — ainsi « Ouvre Mon dossier/Ma note.md » ne crée pas de
|
||||
lien englobant « Ouvre » et la prose ordinaire n'est jamais liée à tort.
|
||||
lien englobant « Ouvre » et la prose ordinaire n'est jamais liée à tort. Les
|
||||
chemins sans espace mais accentués sont liés par le motif `PATH_WITH_DIR_RE`,
|
||||
lui aussi Unicode-aware.
|
||||
- **Normalisation Unicode** : `_normKey()` compare en NFC + minuscules, donc une
|
||||
mention décomposée (`e` + accent combinant, comme sur macOS) correspond à une
|
||||
entrée d'index précomposée, et inversement.
|
||||
- **Préfixe de vault** : `_splitVaultPrefix()` retire un premier segment égal au
|
||||
nom d'un vault connu (`TestVault/Recettes/Pizza Maison.md` →
|
||||
`Recettes/Pizza Maison.md`). La résolution interroge l'index **de ce vault**
|
||||
(`_fetchPathsForVault`, fetch ponctuel sans écraser le cache du vault actif),
|
||||
puis `_openFileLink`/`_revealPath` reçoivent le vault cible. Si le préfixe ne
|
||||
correspond à aucun vault connu, `_resolveExistingPath` retente en retirant le
|
||||
premier segment.
|
||||
|
||||
## Tests
|
||||
|
||||
|
||||
Reference in New Issue
Block a user