Dès que mes yeux se sont posés sur le Markdown, un langage de balisage qui peut être facilement compilée en HTML et d’autres formats, je n’ai pu m’empêcher de tomber amoureux de la simplicité et de l’interopérabilité offerte par cette syntaxe.
J’évite de manière systématique les logiciels du type de Microsoft Word, qui malgré leur puissance, m’ont toujours semblés étoufants et poussifs.
Depuis que j’ai découvert le Markdown, c’est le language que j’utilise pour toutes mes tâches de rédaction, que ce soit pour de la documentation utilisateur ou technique, les comptes-rendus de réunions, les notes de formations ou même cet article.
Il y a quelque chose d’envoutant dans la simplicité de ce langage, qui me permet
d’être plus productif en me concentrant sur le contenu que je rédige. Le
Markdown me permet aussi de distribuer les fichiers que je produit dans une
variété de formats, y compris l’effrayant format .docx
, grâce à
Pandoc.
De toute évidence, la passion que j’éprouve pour le Markdown est la motivation principale qui me pousse à écrire mon propre parseur. Il existe déjà de nombreux parseurs, complets, optimisés et performants. Mais le premier parseur a été écrit par John Gruber, en utilisant Perl. Cela me laisse à penser que la tâche ne sera pas trop compliquée.
Cette préface est déjà plus longue que nécessaire. J’espère que vous aimez étudier la syntaxe des langages, les boucles et les expressions régulières, parce que là où nous allons, il y en aura des piles entières.
Je ne sais pas encore quel langage de programmation j’utiliserai pour ce projet. J’aviserai au fil de l’eau. Ça sera d’autant plus fun.
Définir un objectif clair
Avant de commencer à écrire la première ligne de code, il nous faut d’abord nous fixer un objectif clair. Cet objectif nous aidera à prioriser quelles constructions du language notre parseur va supporter et nous guidera quand il faudra faire des compromis.
Prise en charge de la syntaxe
Le parseur s’efforcera d’être conforme à la syntaxe officielle (sans les améliorations apportées par GFM ou d’autres extensions de Markdown) dont on peut trouver un descriptif sur Daring Fireball, le site de John Gruber, créateur du Markdown.
Nous allons prendre en charge toutes les fonctionnalités de cette syntaxe :
- HTML intégré
- Echappement automatique des caractères spéciaux
- Paragraphes
- Titre
- Gras et italique
- Listes
- Liens
- Liens automatiques
- Citations
- Cartouche de code
- Blocs de code
- Ligne horizontales
- Images
Prendre en charge ces différents aspects de la syntax implique de bien comprendre leur fonctionnement.
Nous allons étudier les spécifications de la syntaxe et tester la logique nécessaire pour parser chacune de ces éléments.