Files
ohmj2/NAMING.md
T

126 lines
4.7 KiB
Markdown

# NAMING.md - Convention des noms de partitions
Référence du format de fichiers/répertoires des partitions (`legacy/Scores/`).
Cette convention a été normalisée une fois par `scripts/convert_final_v2.js`
(6388 fichiers convertis). **Ne pas renommer à la main** : le backend
(`api/lib/ScoreScanner.php`) et le frontend en dépendent.
## Arborescence
```
legacy/Scores/<NUM>/<PIECE>/<INSTRUMENT>/<VERSION>/<FICHIER>
legacy/Scores/<NUM>/score.ini
```
| Segment | Rôle | Exemples |
|---|---|---|
| `NUM` | identifiant du morceau, **zéro-paddé sur 3 chiffres** | `102`, `390`, `072`, `098` |
| `PIECE` | numéro de pièce (mouvement) | `1` (morceau simple), `1`..`5` (medley type `390`) |
| `INSTRUMENT` | trigramme de l'instrument | `cla`, `sax`, `sup`… (voir table) |
| `VERSION` | répertoire de version | `1` = version principale, `2`, `3`… = alternatives |
| `FICHIER` | nom du PDF (grammaire ci-dessous) | `clarinette-sib-1.pdf` |
> `VERSION` est un **répertoire**, pas un token du nom de fichier. Le dossier `1/`
> est la version principale ; `2/`+ sont des versions alternatives du même morceau
> (ex. score `210` : `cla/1/` et `cla/2/`).
## Grammaire du nom de fichier
```
{instrument}[-{tonalité}][-{variante}]-{partie}[_{partie_combinée}][_{clef}][_alt{N}].pdf
```
- Séparateur de champs : **`-`**
- Séparateur interne aux noms composés et aux suffixes : **`_`**
- Multi-instrument (deux instruments sur la même partition) : **`+`**
### Exemples réels
| Fichier | Sens |
|---|---|
| `clarinette-sib-1.pdf` | clarinette en Si♭, partie 1 |
| `clarinette_alto-mib-1.pdf` | clarinette alto en Mi♭, partie 1 (`_` = nom composé) |
| `sax_alto-mib-2.pdf` | sax alto en Mi♭, partie 2 |
| `cor-fa-1_2.pdf` | cor en Fa, parties **1 et 2 combinées** |
| `baryton-clefa-1.pdf` | baryton, clé de fa, partie 1 (pas de tonalité) |
| `euphonium-sib-clesol-1.pdf` | euphonium Si♭, clé de sol, partie 1 |
| `cornet-sib-solo-1.pdf` | variante `solo` |
| `baryton-sib-default_cor-2.pdf` | substitution `default_cor` |
| `conducteur-1_alt1.pdf` | version alternative `alt1` |
| `basse-sib-1+contrebasse-sib-1.pdf` | **deux instruments** sur la même partition |
| `saxophone-mib-1+baryton-mib-1.pdf` | idem (sax + baryton) |
| `glockenspiel-1+xylophone-1.pdf` | percussion multiple |
| `percussion-1+gong-1+cymbale-1+triangle-1.pdf` | 3 `+` possibles |
### Tonalités
`sib` (Si♭), `mib` (Mi♭), `fa` (Fa), `ut` (Do — **`do` s'écrit `ut` dans les
fichiers**), `sol`, `re`, `mi`, `si`, `reb`, `dob`, `solb`, `lab`.
### Clefs
`clesol` (clé de sol), `clefa` (clé de fa).
### Variantes / suffixes
- `solo` : partie solo.
- `default_<instr>` : instrument de substitution (ex. `default_cor`).
- `_altN` : version alternative dans un même dossier (ex. `_alt1`, `_alt2`).
## Codes instruments
| Code | Instrument | Code | Instrument |
|---|---|---|---|
| `dir` | Direction | `trp` | Trompette |
| `pic` | Piccolo | `trb` | Trombone |
| `flu` | Flûte | `tub` | Tuba |
| `cla` | Clarinette | `htb` | Hautbois |
| `clb` | Clarinette basse | `bas` | Basson |
| `sax` | Saxophone alto | `per` | Percussions |
| `sat` | Saxophone ténor | `crn` | Cornet |
| `sab` | Saxophone baryton | `eup` | Euphonium |
| `coa` | Cor anglais | `har` | Harpe |
| `cba` | Contrebasse | `pia` | Piano |
| `cor` | Cor | `sup` / `par` | Parties combinées |
## `score.ini`
```ini
[info]
name = La part d'Euterpe
compositor = Michaël CUVILLON
ressource = https://... ; optionnel (lien externe)
[pieces]
count = 1
; pour un medley (count = N) :
; 1 = La Part d Euterpe
; 2 = Calliope s Songs
```
- `[pieces] count` = nombre de pièces. Les clés `1`..`N` donnent leur nom.
- `ressource` : lien externe optionnel (YouTube, éditeur…).
## Points d'attention (code)
- **`+` dans les chemins** : un `+` littéral dans une URL est valide en *path*,
mais PHP `urldecode()` le transforme en espace. Le download doit donc :
- encoder chaque segment côté frontend (`encodePath` dans `partitions/src/lib/api.ts`) ;
- utiliser `rawurldecode()` (jamais `urldecode()`) côté `api/index.php`.
Sinon les 167 fichiers multi-instruments (`a+b.pdf`) renvoient 403.
- **Parsing** : `ScoreScanner::parseFilename()` détecte tonalité, clef, variante
et partie. Les motifs doivent être ancrés (`_sib(?:_|$)`) et du plus long au plus
court (`sibemol` avant `sib`) pour ne pas mal découper les noms.
- Le matcher multi-instruments utilise `+` (et non `_et_`, supprimé par la
conversion).
## Conversion (one-off)
`scripts/convert_final_v2.js` est le convertisseur historique utilisé pour
normaliser l'ensemble du catalogue. Il ne doit plus être nécessaire pour de
nouveaux fichiers (uploader via l'admin respecte la convention).
```bash
node scripts/convert_final_v2.js /chemin/vers/Scores confirm
```