Travailler avec Markdown en C++ : bibliothèques md4c, cmark et cpp-markdown

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec Markdown en C++ : revue des bibliothèques et exemples d'utilisation

Markdown est un langage de balisage léger, largement utilisé pour formater du texte dans la documentation, les fichiers README, les blogs et les systèmes de gestion de contenu. Dans l'écosystème C++, il existe plusieurs bibliothèques matures qui permettent d'analyser le Markdown et de le convertir en HTML ou en d'autres formats. Dans cet article, nous examinerons trois outils populaires : md4c, cmark et cpp-markdown, et nous fournirons des exemples pratiques de leur utilisation.



1. Bibliothèque md4c

md4c est un analyseur syntaxique Markdown léger, écrit en C pur (avec des en-têtes compatibles C++). Il prend en charge la spécification CommonMark et les extensions GitHub Flavored Markdown (GFM), y compris les tableaux, le barré et les liens automatiques. La bibliothèque se distingue par ses hautes performances et sa consommation mémoire minimale.

Fonctionnalités principales :

  • Conformité à la norme CommonMark 0.30.
  • Prise en charge des extensions GFM (tableaux, listes de tâches, barré).
  • API pour l'analyse pas à pas (de type SAX) et génération de HTML.
  • Aucune dépendance externe.

Exemple d'utilisation de md4c pour la conversion de Markdown en HTML :

#include <md4c-html.h>#include <iostream>#include <string>

// Callback pour écrire la sortie HTMLstatic void append_html(const MD_CHAR* text, MD_SIZE size, void* userdata) { std::string* output = static_cast<std::string*>(userdata); output->append(text, size);}

int main() { std::string markdown = "# Hello, **World**!

This is a *test*."; std::string html; MD_HTML_FLAGS flags = MD_HTML_FLAG_SKIP_UTF8_BOM; int result = md_html(markdown.c_str(), markdown.length(), append_html, &html, flags, 0); if (result == 0) { std::cout << html << std::endl; } else { std::cerr << "Parsing failed" << std::endl; } return 0;}


2. Bibliothèque cmark

cmark (anciennement cmark-gfm) est l'implémentation de référence de l'analyseur CommonMark par la communauté. Elle est également écrite en C et fournit une enveloppe C++. La bibliothèque est activement maintenue et utilisée dans des projets tels que GitHub, GitLab et Pandoc.

Caractéristiques clés :

  • Prise en charge complète de CommonMark (y compris la dernière version de la spécification).
  • Prise en charge intégrée de GitHub Flavored Markdown (tableaux, formules, mentions).
  • Génération de HTML, LaTeX, man, XML et d'autres formats.
  • API pour la manipulation programmatique de l'AST (Abstract Syntax Tree).

Exemple d'utilisation de cmark pour l'analyse et la sortie HTML :

#include <cmark-gfm.h>#include <iostream>

int main() { const char* markdown = "## Liste de tâches

- [x] Acheter du lait- [ ] Appeler un ami"; // Analyse avec prise en charge GFM cmark_node* doc = cmark_parse_document(markdown, strlen(markdown), CMARK_OPT_DEFAULT); // Conversion en HTML char* html = cmark_render_html(doc, CMARK_OPT_DEFAULT, NULL); std::cout << html << std::endl; // Libération de la mémoire free(html); cmark_node_free(doc); return 0;}


3. Bibliothèque cpp-markdown

cpp-markdown est une bibliothèque C++ écrite de zéro en utilisant la STL et les fonctionnalités modernes de C++11/14. Elle est conçue pour une intégration simple et une facilité d'utilisation dans les projets C++. Contrairement à md4c et cmark, elle ne nécessite pas de dépendances C externes.

Caractéristiques :

  • Implémentation en C++ pur (templates, RAII, exceptions).
  • Prise en charge de la syntaxe Markdown de base (titres, listes, liens, images).
  • Architecture extensible (possibilité d'ajouter ses propres règles d'analyse).
  • Pro

Recommendations