# Markdown — Syntaxe Étendue

> Sources : [Markdown Guide — Extended Syntax](https://www.markdownguide.org/extended-syntax/), [GFM Spec](https://github.github.com/gfm/), [CommonMark Spec](https://spec.commonmark.org/)

La syntaxe étendue n'est **pas universellement supportée**. Elle dépend du dialecte (GFM, CommonMark + extensions, Markdown Extra, etc.). Le support est indiqué pour chaque élément.

---

## 1. Blocs de code clôturés (Fenced Code Blocks)

**Support : GFM, CommonMark, Markdown Extra, Pandoc**

```markdown
```javascript
const greeting = "Hello, World!";
console.log(greeting);
```
```

Ou avec des tildes :

```markdown
~~~python
def hello():
    print("Hello, World!")
~~~
```

**Règles :**
- Minimum **3** backticks ou tildes pour ouvrir
- La clôture doit utiliser le **même caractère** que l'ouverture
- La clôture doit être **au moins aussi longue** que l'ouverture
- Le mot après les backticks = **info string** (ex. nom du langage → classe CSS `language-javascript`)
- Indentation 0–3 espaces autorisée ; les 4 espaces créent un bloc indenté à la place

---

## 2. Tableaux (Tables)

**Support : GFM, Markdown Extra, MultiMarkdown, Pandoc**

```markdown
| Colonne 1     | Colonne 2    | Colonne 3     |
| ------------- | :----------: | ------------: |
| Aligné gauche | Centré       | Aligné droite |
| Texte         | Texte        | Texte         |
```

**Syntaxe d'alignement dans la rangée délimitatrice :**

| Syntaxe | Alignement |
|---------|-----------|
| `---` | Défaut (gauche) |
| `:---` | Gauche |
| `:---:` | Centre |
| `---:` | Droite |

**Règles :**
- La rangée d'en-tête et la rangée délimitatrice doivent avoir le **même nombre de cellules**
- Le tableau s'arrête à la première ligne vide ou au prochain bloc
- Le `|` en début/fin de ligne est recommandé mais optionnel
- Pour inclure `|` dans une cellule : `\|`
- Le contenu inline est interprété (gras, italique, liens, code…)
- **Pas de blocs imbriqués** dans les cellules

---

## 3. Texte barré (Strikethrough)

**Support : GFM, Pandoc**

```markdown
~~Ce texte est barré~~
~Ce texte aussi~ (GFM seulement, avec tilde simple)
```

- Un ou deux tildes de chaque côté (selon le dialecte)
- GFM accepte `~texte~` et `~~texte~~`
- Rendu HTML : `<del>texte</del>`

---

## 4. Listes de tâches (Task Lists)

**Support : GFM**

```markdown
- [x] Tâche accomplie
- [ ] Tâche à faire
- [X] Tâche accomplie (majuscule aussi)
```

- Case cochée : `[x]` ou `[X]`
- Case non cochée : `[ ]` (espace obligatoire)
- Rendu HTML : `<input type="checkbox" disabled>`
- La spécification ne définit pas l'interactivité (cochable ou non selon l'implémentation)

---

## 5. Liens automatiques étendus (Extended Autolinks)

**Support : GFM**

```markdown
Visitez www.exemple.com pour plus d'infos.
Envoyez un mail à utilisateur@exemple.com
```

- Les URL commençant par `www.` sont automatiquement liées (sans `<>`)
- Les adresses e-mail sont automatiquement liées
- Les ponctuation de fin (`.`, `,`, `:`, `?`, `!`) ne font **pas** partie du lien
- Les parenthèses sont équilibrées intelligemment

---

## 6. HTML brut désactivé (Disallowed Raw HTML)

**Support : GFM uniquement**

GFM filtre certaines balises HTML considérées dangereuses :
`<title>`, `<textarea>`, `<style>`, `<xmp>`, `<iframe>`, `<noembed>`, `<noframes>`, `<script>`, `<plaintext>`

Ces balises sont échappées et affichées en texte brut plutôt qu'interprétées.

---

## 7. Notes de bas de page (Footnotes)

**Support : Markdown Extra, MultiMarkdown, Pandoc (NOT CommonMark de base, NOT GFM standard)**

```markdown
Voici un texte avec une note[^1] et une autre[^note].

[^1]: Contenu de la première note.
[^note]: Contenu de la deuxième note,
    qui peut s'étendre sur plusieurs lignes.
```

- Les identifiants de notes peuvent être numériques ou textuels
- La numérotation finale est toujours séquentielle (1, 2, 3…)
- Les définitions peuvent être n'importe où dans le document

---

## 8. IDs de titres personnalisés (Heading IDs)

**Support : Markdown Extra, MultiMarkdown, Pandoc (NOT GFM standard)**

```markdown
## Mon Titre {#mon-id-personnalisé}
```

- Génère `<h2 id="mon-id-personnalisé">Mon Titre</h2>`
- Permet des liens internes précis : `[Voir titre](#mon-id-personnalisé)`

---

## 9. Listes de définitions (Definition Lists)

**Support : Markdown Extra, Pandoc (NOT GFM, NOT CommonMark de base)**

```markdown
Premier terme
: Définition du premier terme
: Deuxième définition du premier terme

Deuxième terme
: Définition du deuxième terme
```

- Rendu HTML : `<dl>`, `<dt>`, `<dd>`
- `:` suivi d'un espace en début de ligne

---

## 10. Texte surligné (Highlight)

**Support : Très limité (certains moteurs comme Obsidian, Markdown Extra)**

```markdown
==texte surligné==
```

- Rendu HTML : `<mark>texte surligné</mark>`
- **Non supporté** par GFM ou CommonMark standard

---

## 11. Exposant et indice (Superscript & Subscript)

**Support : Très limité (MultiMarkdown, Pandoc, certains éditeurs)**

```markdown
X^2^        → exposant (superscript) → X<sup>2</sup>
H~2~O       → indice (subscript)    → H<sub>2</sub>O
```

- **Non supporté** par GFM ou CommonMark standard
- Pandoc supporte `^exposant^` et `~indice~`

---

## 12. Emoji

**Support : GitHub, GitLab, Slack, Discord, certains éditeurs**

```markdown
:smile: :rocket: :warning: :white_check_mark:
```

- Basé sur la liste des noms d'emoji de GitHub/Gemoji
- Rendu : soit en caractère Unicode `😄`, soit en image
- Certains dialectes acceptent aussi les emoji Unicode directement

Ressource : [Emoji Cheat Sheet](https://www.webfx.com/tools/emoji-cheat-sheet/)

---

## 13. Tableaux comparatifs de support

| Fonctionnalité | CommonMark | GFM | Markdown Extra | Pandoc | MultiMarkdown |
|----------------|:----------:|:---:|:--------------:|:------:|:-------------:|
| Blocs de code clôturés | ✅ | ✅ | ✅ | ✅ | ✅ |
| Tableaux | ❌ | ✅ | ✅ | ✅ | ✅ |
| Texte barré | ❌ | ✅ | ❌ | ✅ | ✅ |
| Listes de tâches | ❌ | ✅ | ❌ | ❌ | ❌ |
| Autolinks étendus | ❌ | ✅ | ❌ | ❌ | ❌ |
| Notes de bas de page | ❌ | ❌ | ✅ | ✅ | ✅ |
| IDs de titres | ❌ | ❌ | ✅ | ✅ | ✅ |
| Listes de définitions | ❌ | ❌ | ✅ | ✅ | ✅ |
| Texte surligné | ❌ | ❌ | ❌ | ❌ | ❌ |
| Exposant/Indice | ❌ | ❌ | ❌ | ✅ | ✅ |
| Emoji shortcodes | ❌ | ✅ | ❌ | ❌ | ❌ |
