# Markdown — Vue d'ensemble et Histoire

> Source principale : [Wikipedia — Markdown](https://en.wikipedia.org/wiki/Markdown), [Daring Fireball](https://daringfireball.net/projects/markdown/), [GFM Spec §1.2](https://github.github.com/gfm/#what-is-markdown-)

---

## Qu'est-ce que Markdown ?

Markdown est un **langage de balisage léger** (lightweight markup language) conçu pour être lisible en tant que texte brut, tout en pouvant être converti en HTML ou d'autres formats. Son principe fondamental est exprimé par John Gruber lui-même :

> *"The overriding design goal for Markdown's formatting syntax is to make it as readable as possible. The idea is that a Markdown-formatted document should be publishable as-is, as plain text, without looking like it's been marked up with tags or formatting instructions."*
>
> — John Gruber, [daringfireball.net](https://daringfireball.net/projects/markdown/)

---

## Histoire et Origines

| Date | Événement |
|------|-----------|
| **2002** | Aaron Swartz publie `atx` — un format de balisage léger dont Markdown s'inspire directement |
| **2004** | **John Gruber** publie Markdown v1.0 sur Daring Fireball (avec l'aide d'Aaron Swartz) ; le script original `Markdown.pl` est écrit en Perl |
| **2004–2012** | Dizaines d'implémentations apparaissent dans de nombreux langages (Python, Ruby, PHP, JavaScript…) ; divergences importantes entre elles |
| **2012** | Jeff Atwood (Stack Overflow) et John MacFarlane (pandoc) réunissent des développeurs pour créer une spécification commune |
| **2014** | Le projet est renommé **CommonMark** après que Gruber s'est opposé à l'usage du nom « Standard Markdown » |
| **2017** | GitHub publie la spécification formelle de **GitHub Flavored Markdown (GFM)**, basée sur CommonMark 0.27 |
| **2019** | GFM spec mise à jour vers la version 0.29-gfm |
| **2024** | CommonMark spec 0.31.2 (janvier 2024) — version de référence actuelle |

### Inspirations de Markdown

Markdown s'inspire de plusieurs conventions préexistantes :
- Les **e-mails en texte brut** et les messages Usenet (convention `*gras*`, `_italique_`)
- **setext** (Structure Enhanced Text) — titres soulignés par `====` ou `----`
- **atx** (Aaron Swartz, 2002) — titres avec `#`
- **Textile** et **reStructuredText** — autres langages de balisage léger
- **HTML** — Markdown accepte du HTML inline directement

---

## Objectif de conception

Contrairement à AsciiDoc (plus puissant mais plus verbeux), Markdown privilégie la **lisibilité** du source. Exemple comparatif tiré de la spec GFM :

**AsciiDoc :**
```
1. List item one.
+
Continuation paragraph
+
.................
$ ls *.sh
.................
```

**Markdown équivalent :**
```markdown
1. List item one.

   Continuation paragraph

       $ ls *.sh
```

Le source Markdown est immédiatement compréhensible sans rendu ; l'AsciiDoc moins.

---

## Fichiers et Types MIME

| Élément | Valeur |
|---------|--------|
| Extensions de fichier | `.md`, `.markdown` |
| Type MIME officiel | `text/markdown` |
| RFC correspondantes | RFC 7763 (type MIME), RFC 7764 (variantes et enregistrements) |

---

## Adoption

Markdown est aujourd'hui utilisé sur des millions de plateformes :

- **Plateformes de développement** : GitHub, GitLab, Bitbucket, Gitea
- **Forums & communautés** : Reddit, Stack Overflow, Stack Exchange, Discourse
- **Messagerie** : Slack, Discord, Mattermost, Microsoft Teams (partiel)
- **Documentation** : Read the Docs, GitBook, MkDocs, Docusaurus, Jekyll, Hugo
- **Éditeurs de code** : VS Code, JetBrains (IntelliJ, PyCharm…), Atom, Sublime Text
- **Langages de programmation** : Swift (documentation officielle), Kotlin, Rust (doc comments)
- **Publication académique** : R Markdown (RStudio), Jupyter Notebooks, Pandoc
- **CMS & blogs** : Ghost, WordPress (via plugin), Squarespace
- **Outils de prise de notes** : Obsidian, Notion, Joplin, Bear, iA Writer, Typora

---

## Pourquoi une spécification est-elle nécessaire ?

La description originale de Gruber est ambiguë sur de nombreux points. La spec GFM en liste 14 exemples de questions sans réponse claire :

1. Combien d'indentation pour une sous-liste ?
2. Faut-il une ligne vide avant un bloc de citation ou un titre ?
3. Faut-il une ligne vide avant un bloc de code indenté ?
4. Quand les items de liste sont-ils enveloppés dans des balises `<p>` ?
5. Les marqueurs de liste peuvent-ils être indentés ?
6. Règles de précédence entre les marqueurs inline (emphase, code, liens…)
7. …et bien d'autres

Ces ambiguïtés ont conduit à des **divergences considérables** entre les implémentations, d'où la nécessité de CommonMark.
