dimanche 28 avril 2013

Markdown Versus reStructuredText

Markdown est un langage que j'utilise pour à peu près toute ma doc depuis plus d'un an maintenant. Je m'en sert pour générer rapidement du html à copier coller dans un doc Word ou dans ce blog, par exemple. Dernièrement, je me suis intéressé à reStructuredText dont l'objectif est similaire mais qui est originellement implémenté en Python (est-ce ce qui le rend moins populaire ?)

Les deux langages proposent de définir la mise en forme d'un document texte via un balisage (markup) léger, à la manière de ce que proposent les syntaxes wiki. On utilise un outil pour générer le document formaté suivant la sortie désiré (principalement du html). L'intéret est d'avoir un document texte, éditable avec les éditeur moderne dont la mise en forme donne déjà un aperçu du rendu final. En fait un document texte décrit en utilisant ces syntaxes se suffirait presque à lui-même ! La possibilité de le transformer est un plus pour communiquer avec le reste du monde.

Les deux langages présentent une syntaxe de base très similaire pour écrire du texte en gras ou en italique, faire des titres ou des listes. Toutefois, reStructuredText se veut beaucoup plus complet, permet de décrire des tableaux, des notes en bas de page, d'insérer des formules en Latex (j'en passe...). Il est également livré avec des outils permettant de générer du texte dans plusieurs formats (html, Latex, odt,...). Ces fonctionnalités le rendent également bien plus complexe à apréhenter, alors que celles de Markdown tiennent sur une page.

Il y a une différence aussi sur le html généré. Pour schématiser, disons que Markdown génère le minimum et et reStructuredText le maximum. En effet, Markdown fait juste une conversion du balisage en html alors que reStructuredText génère un document complet, avec du CSS dedans, un doctype xhtml et un en-tête détaillé. De ce fait, il est, en première approche, plus simple d'intégrer du Markdown dans un autre document. Pour cet article par exemple, j'écris en Markdown, génère le html et le colle directement dans l'interface Blogger. Je pourrais le faire aussi en reStructuredText, mais en utilisant la commande de base, il faut que j'aille chercher le bout de html à extraire avant de le coller dans Blogger. C'est moins pratique.

Autre point en faveur de Markdown, la possibilité d'écrire directement du html dedans. Moi je trouve ça cool pour mettre des entities unicode (car j'en connais plusieurs). Avec reStructuredText, c'est plus compliqué, il faut utiliser les substitutions, inclure un fichier regroupant toutes les entities et utiliser une syntaxe qui ne fonctionne pas dans toutes les situation (par exemple, pas en début de ligne...). D'un autre côté, quand vous voulez faire des tableau, le html c'est sympa mais c'est vite peu lisible. Avec reStructuredText, vous pouvez (vous faire chier à) dessiner tout le tableau en ascii, avec des - et des + ! Bon, je vous rassure, il y a également une syntaxe simplifiée.

J'ai l'air super dur avec reStructuredText en comparaison avec Markdown. Je pense qu'on peut en faire une utilisation différente. Pour générer rapidement des bouts de html, je continuerai d'utiliser Markdown car j'aime bien sa syntaxe minimaliste et il ne génère que le strict nécessaire. Pour générer des documents plus complets toutefois, comme ce que j'ai besoin de faire au travail, je vais donner une chance à reStructuredText. Il est plus simple d'intégrer des styles dans le workflow et, qui sait, peut-être possible de générer directement du Open XML ! Les fonctionnalités proposées permettent aussi plus de fantaisie que du classique gras / italique / bullet points. Si je trouve des trucs cools à faire avec, cela me redonnera l'occasion d'écrire quelque chose.