Il y a déjà quelques années, Markdown a gagné haut la main la bataille des langages de markup.
Et croyez-moi, il en existe plétore! Citons cependant ici les principaux:
Chacun définit donc sa syntaxe, ainsi que divers formats d'export: html
, pdf
, (La/Xe)TeX
, doc
, odt
, pdf
, etc.
Je me suis toujours demandé ce qui avait poussé la communauté du Web à retenir ce candidat en particulier. C'est pour moi une aberation mentale totale.
Tout d'abord, Markdown est fermé au possible: son principal créateur, John Gruber, ne veut strictement rien entendre depuis des années sur sa spécification, sur les propositions d'étendre la syntaxe, et prétent même que les bugs de son implémentation en Perl sont inexistants (cest pour lui une feature
). Lorsque je regarde le code source de Markdown, je ne peux m'empêcher de sourire: tout est traité à partir d'expressions régulières bien lourdes et sujettes au bugs, et on a même droit à du hachage cryptographique en md5
pour remplacer certaines balises inline
saloper le tout.
Mais bon après tout, celà concerne John Gruber uniquement, et si l'envie lui prend d'écrire son code comme ça, après tout pourquoi pas.
Parlons maintenant syntaxe deux minutes: Markdown a été conçu pour être lisible au format texte. Et il réussi plutôt bien sur ce point il faut le dire.
Par contre, la syntaxe est vraiment très peu intuitive, il ne me vient pas à l'idée par exemple que pour écrire un mot en italique comme ça, il faille écrire littéralement: __italique__
. Je ne parle même pas des liens: [Texte de rendu](adresse Web)
: pas facile à retenir: faut-il placer les crochets avant ou après les parenthèses ? Qu'est-ce qui vient d'abord: le texte de rendu ou l'adresse Web ?
Une tentative d'unifier tout cela a été faite il y a quelques années, et des gens(biens) y ont passé beaucoup de leur temps: c'est ainsi qu'est né Creole. Une syntaxe vraiment intuive, on écrira par exemple //italique//
pour avoir son texte en italiques, facile à retenir puisque c'est visuel. A cela ajoutons une spécification très bien fichue, de nombreux tests disponibles et une liste de cas "problématiques" avec des solutions enviseageables (oui, ils existeront toujours, et quelque soit le langage de markup choisit, on est obligé de faire des concessions).
Mais non: à mon grand regret Creole n'a pas été adopté par la communeauté. Je ne sais d'ailleurs comment s'est venu, petit à petit certainement: Github l'a adopté, puis StackOverflow, puis comme tout le monde utilise Github, alors on s'y est mis. Ce qui est marrant dans tout cela, c'est qu'en manque de spécification réèlle, chacun y va avec sa propre implémentation. Ainsi, un texte écrit avec le Markdown de Github ne sera pas nécessairement compatible avec celui de Stackoverflow: elle est pas belle la vie ?
Sans compter sur la multitude d'éditeurs de texte supportant son le format Markdown: marked sous OSX, MarkdownPad sous Windows, etc. Il en existe juste des dizaines, et il en pousse tous les jours.
En effet, et celui-ci se nomme Titatinic.
Jeff Atwood a publié cet article sur Coding Horror il y a de cela quelques jours, faisant un appel public à une spécification claire pour le langage.
Depuis, les réactions de John Gruber n'ont été que négatives, voire parfois infantiles (voir ici pour avoir un aperçu de ses twitts).
Des groupes se sont pourtant organisés pour apporter de l'eau au moulin, mais pour le moment j'ai comme l'impression qu'on n'ose pas toucher au bébé, parce que son papa n'est tout simplement pas d'acord.
Faut-il donc vraiment être adoubé par Monsieur J.Gruber pour avoir enfin quelque chose de propre à nous mettre sous la main ? Je crains que non: ça se fera certainement sans lui, et je dois dire que pour ma part ce sera tant mieux. S'il a fermé les yeux tant d'années, pourquoi bougerait-il le petit doigt maintenant ?
En attendant, il existe pourtant de belles choses à l'horizon, il reste juste à ouvrir les yeux pour s'apercevoir que le couloir n'est pas si sombre et que certaines portes restent ouvertes.
On peut, et on doit d'ailleurs, félciter Fletcher T. Penney pour son implémentation de MultiMarkdown exemplaire. Aucune expression régulière (le parseur est écrit en PEG, bien plus puissant et maintenable), une syntaxe enrichie, des tests en pagaille, etc.
J'aurai aussi du mal à oublier Pandoc qui depuis quelques années déjà se bat pour unifier un peu toutes les syntaxes les plus courantes (dont Markdown) dans un seul et même projet écrit en Haskell.
Enfin, signalons qu'il existe aussi de petites implémentations de Markdown qui ne font pas appel aux expressions régulières, celles-ci sont toutefois basées la plupart du temps sur des langages fonctionnels: