
Markdown vers HTML et retour : un convertisseur avec aperçu en direct
Collez du Markdown : vous voyez la page finie et, à côté, du HTML propre. Collez du HTML : vous obtenez du Markdown utilisable pour un README ou un article de blog. Les deux sens fonctionnent dans votre navigateur : le texte n'est envoyé nulle part et n'est jamais conservé.
.md — il est lu localement. CommonMark est pris en charge dans son étendue habituelle, plus les extensions GFM : tableaux, barré, listes de tâches.
Collez du Markdown ci-dessus — le HTML apparaîtra ici.
.html — il est lu localement. L'analyse passe par DOMParser, elle fonctionne donc aussi bien avec un fragment qu'avec une page entière.
Collez du HTML ci-dessus — le Markdown apparaîtra ici.
Le texte ne quitte pas votre navigateur : la conversion s'exécute localement, sans rien envoyer à un serveur.
Ce qui est exactement pris en charge
Côté Markdown — CommonMark dans son étendue habituelle, plus les extensions GFM : titres à dièses et soulignés, paragraphes, filets horizontaux ; listes à puces, numérotées et imbriquées, en version serrée comme aérée ; listes de tâches entre crochets ; citations, y compris avec continuation paresseuse de ligne ; code encadré avec nom de langage et code indenté ; tableaux GFM avec alignement des colonnes ; liens, images, liens automatiques, liens vers des définitions en bas de document ; gras, italique, barré, code en ligne, caractères échappés, saut de ligne dur. Côté HTML, l'analyse passe par le DOMParser du navigateur lui-même : un fragment comme une page entière avec head fonctionnent. Les tableaux à cellules fusionnées ne se transposent pas en Markdown — cette syntaxe n'y existe pas, ils restent donc des balises et l'outil le signale. Ce qui est délibérément absent : la coloration syntaxique dans les blocs de code, les notes de bas de page, les formules et les directives de tel ou tel générateur de site statique. Ce n'est plus du Markdown mais le dialecte d'un outil particulier.
Un saut de ligne : deux Markdown différents
La source la plus fréquente de divergences entre convertisseurs, c'est précisément le simple saut de ligne à l'intérieur d'un paragraphe. Selon CommonMark, c'est une espace ordinaire : deux lignes se collent en un seul paragraphe. C'est ainsi que se comportent Pandoc, les générateurs de documentation et la plupart des sites statiques. GitHub fait l'inverse dans les commentaires, les descriptions de tickets et les revues : chaque saut devient une balise br. C'est exactement pour cela qu'un texte qui rendait bien dans un ticket s'agglomère en un pavé une fois déplacé dans un README. La case « Un simple saut de ligne vaut br » bascule entre ces deux habitudes. Par défaut, la règle CommonMark s'applique.
Pourquoi l'aperçu ne montre pas tout ce qu'il y a dans le HTML
Par spécification, Markdown autorise le HTML en son sein. C'est commode et cela signifie en même temps que tout texte collé peut contenir du code exécutable. Les visionneuses en ligne populaires déposent le résultat dans innerHTML tel quel. La bibliothèque marked sur laquelle elles reposent n'a plus aucune désinfection intégrée depuis la version quatre : une balise script venue du Markdown d'autrui s'y exécute tout simplement. Ici l'aperçu est construit à partir de nœuds DOM selon une liste blanche : script, iframe, object, les gestionnaires d'événements du type onclick et les liens au schéma javascript: n'y parviennent pas, et la liste de ce qui a été retiré s'affiche sous le résultat. Dans l'onglet « Code HTML » vous voyez la sortie complète sans coupe : c'est du texte, pas une page, et il est impossible de l'exécuter. Le HTML de la source ne peut atteindre l'aperçu que si vous avez vous-même coché la case correspondante. Par défaut, les balises sont échappées et affichées comme du texte.
