# Référence rapide TOML

*Tables, chaînes, nombres, dates, tableaux*

> Source: TOML Specification (toml.io) · MIT

## Syntaxe

### Règles de base

| Command | Description |
|---------|-------------|
| `key = value` | Paire clé-valeur (une par ligne) |
| `#` | Commentaire (jusqu'à la fin de la ligne) |
| `Case sensitive` | Les clés et valeurs sont sensibles à la casse |
| `UTF-8` | Les fichiers doivent être en UTF-8 valide |
| `No null` | TOML n'a pas de type null |

### Exemple minimal

```
title = "My App"
debug = true
port = 8080
```

## Chaînes

### Types de chaînes

| Command | Description |
|---------|-------------|
| `"basic"` | Chaîne de base (supporte les séquences d'échappement) |
| `'literal'` | Chaîne littérale (sans échappement) |
| `"""multi"""` | Chaîne de base multi-ligne |
| `'''multi'''` | Chaîne littérale multi-ligne |

### Exemples

```
basic = "Hello\nWorld"
literal = 'C:\Users\path'
multi = """
Line one
Line two"""
```

### Séquences d'échappement

| Command | Description |
|---------|-------------|
| `\n  \t  \r` | Saut de ligne, tabulation, retour chariot |
| `\\` | Barre oblique inverse |
| `\uXXXX` | Unicode (hexadécimal 4 chiffres) |
| `\UXXXXXXXX` | Unicode (hexadécimal 8 chiffres) |

## Nombres et booléens

### Types numériques

| Command | Description |
|---------|-------------|
| `42` | Entier |
| `1_000_000` | Entier avec séparateurs de milliers |
| `0xff / 0o77 / 0b11` | Hexadécimal, octal, binaire |
| `3.14` | Flottant |
| `5e+22 / 1e-2` | Notation scientifique |
| `inf / nan` | Valeurs flottantes spéciales |
| `true / false` | Booléen (minuscules uniquement) |

### Exemples

```
count = 42
price = 19.99
hex_color = 0xFF5733
enabled = true
```

## Dates

### Types date et heure

| Command | Description |
|---------|-------------|
| `2026-03-26T10:30:00Z` | Date-heure avec décalage (UTC) |
| `2026-03-26T10:30:00-05:00` | Date-heure avec décalage (EST) |
| `2026-03-26T10:30:00` | Date-heure locale (sans fuseau horaire) |
| `2026-03-26` | Date locale |
| `10:30:00` | Heure locale |

### Exemples

```
created = 2026-03-26T10:30:00Z
birthday = 1990-05-15
alarm = 07:00:00
```

## Tables

### Syntaxe des tables

```
[server]
host = "localhost"
port = 8080

[server.ssl]
enabled = true
cert = "/path/to/cert.pem"
```

### Tableau de tables

```
[[users]]
name = "Alice"
role = "admin"

[[users]]
name = "Bob"
role = "user"
```

### Règles

| Command | Description |
|---------|-------------|
| `[name]` | En-tête de table standard |
| `[a.b.c]` | Clé pointée — table imbriquée |
| `[[name]]` | Tableau de tables |
| `No redefine` | Impossible de définir la même table deux fois |

## Tableaux

### Syntaxe des tableaux

```
colors = ["red", "green", "blue"]
numbers = [1, 2, 3]
```

### Tableau multi-ligne

```
hosts = [
  "alpha.example.com",
  "beta.example.com",
]
```

*La virgule finale est autorisée dans les tableaux TOML*

### Règles

| Command | Description |
|---------|-------------|
| `Same type` | Tous les éléments doivent être du même type |
| `Trailing comma` | Autorisée après le dernier élément |
| `Newlines` | Les tableaux peuvent s'étendre sur plusieurs lignes |

## Tables en ligne

### Syntaxe des tables en ligne

```
point = { x = 1, y = 2 }
user = { name = "Alice", admin = true }
```

### Règles

| Command | Description |
|---------|-------------|
| `Single line` | Doit tenir sur une seule ligne |
| `No trailing comma` | Virgule finale non autorisée |
| `No newlines` | Ne peut pas s'étendre sur plusieurs lignes |
| `No adding keys` | Impossible d'ajouter des clés à une table en ligne ultérieurement |

### En ligne vs standard

```
# Inline — compact, one-liners
db = { host = "localhost", port = 5432 }
# Standard — readable, extendable
[db]
host = "localhost"
port = 5432
```

## Modèles courants

### pyproject.toml

```
[project]
name = "myapp"
version = "1.0.0"
dependencies = ["flask>=3.0"]
```

### Cargo.toml

```
[package]
name = "myapp"
version = "0.1.0"
edition = "2021"
```

### Conseils

| Command | Description |
|---------|-------------|
| `taplo` | Boîte à outils TOML — formateur et linter |
| `No null` | Omettre la clé plutôt que de la mettre à null |
| `No anchors` | Contrairement à YAML, pas de système de références/alias |
| `Strict` | Pas de clés dupliquées, pas de tableaux à types mixtes |
