Le parseur Markdown utilisé par mdBook est pulldown-cmark
C’est une bibliothèque écrite en Rust qui implémente l’analyseur CommonMark. 1
pulldown-cmark est développé sous forme d’un analyseur par flux (pull parser).
Où l’on parle de pulldown-cmark
Dans la documentation mdBook, pulldown-cmark est abordé dans le chapitre pour les développeurs·ses décrivant le fonctionnement des préprocesseurs, dans le sous-chapitre « trucs pour développer un préprocesseurs » :
« The
mdbook-markdowncrate exposes thepulldown-cmarkcrate used bymdBookto parseMarkdown. Thepulldown-cmark-to-cmarkcrate can be used to translate events back into markdown text. » 2« Le paquet (crate)
mdbook-markdownexpose le paquetpulldown-cmarkutilisé parmdBookpour analyser leMarkdown. Le paquetpulldown-cmark-to-cmarkpeut être utilisé pour traduire à nouveau ces événements en texte Markdown. »
Plus simplement, on retrouve pulldown-cmark dans la documentation du paquet (crate) mdbook-markdown :
« This crate provides functions for processing
Markdownin the same way asmdBook. Thepulldown_cmarkcrate is used as the underlying parser. This crate re-exportspulldown_cmarkso that you can access its types. » 3« Ce paquet (crate) fournit des fonctions pour traiter le
Markdownde la même manière quemdBook. Le paquetpulldown_cmarkest utilisé comme parseur sous-jacent. Cette caisse ré-exportepulldown_cmarkafin que vous puissiez accéder à ses types. »
Fonctionnement (pour les développeurs·ses)
L’analyse par « événements » (pull parsing)
Contrairement à d’autres parseurs qui créent un arbre complet du document en mémoire (DOM), pulldown-cmark découpe le document Markdown en un flux d’événements (stream of events).
Lorsqu’il lit un fichier source Markdown, il génère des signaux au fur et à mesure :
Start(Heading(Level1)): Début d’un titre de niveau 1Text("Mon super titre"): Le texte du titreEnd(Heading(Level1)): Fin du titreStart(List): Début d’une liste- …
Le rôle des bibliothèques citées
pulldown-cmarkest le moteur de base qui transforme le code sourceMarkdownen une série d’événements (flux).mdbook-markdownest la passerelle interne demdBook. Elle nous donne un accès direct à ce moteur pour que nous puissions intercepter et modifier les événements à la volée.pulldown-cmark-to-cmarkest l’outil inverse. Une fois que notre préprocesseur a intercepté et modifié les événements (par exemple en remplaçant un mot-clé ou en formatant un tableau),pulldown-cmark-to-cmarkréassemble le résultat pour recréer un fichier texteMarkdown.
La méthode par événements évite d’avoir à manipuler du texte brut avec des expressions régulières (Regex) complexes et risquées. Elle nous propose de manipuler des objets logiques (des titres, du texte, des liens).