Arbeiten mit Markdown in C++: Bibliotheken md4c, cmark und cpp-markdown

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit Markdown in C++: Überblick über Bibliotheken und Anwendungsbeispiele

Markdown ist eine leichtgewichtige Auszeichnungssprache, die häufig zur Textformatierung in Dokumentationen, README-Dateien, Blogs und Content-Management-Systemen verwendet wird. Im C++-Ökosystem gibt es mehrere ausgereifte Bibliotheken, die das Parsen von Markdown und die Konvertierung in HTML oder andere Formate ermöglichen. In diesem Artikel betrachten wir drei beliebte Werkzeuge: md4c, cmark und cpp-markdown, und geben praktische Beispiele für deren Verwendung.



1. Bibliothek md4c

md4c ist ein leichtgewichtiger Markdown-Parser, der in reinem C (mit C++-kompatiblen Headern) geschrieben ist. Er unterstützt die CommonMark-Spezifikation und Erweiterungen von GitHub Flavored Markdown (GFM), einschließlich Tabellen, Durchstreichungen und automatischen Links. Die Bibliothek zeichnet sich durch hohe Leistung und minimalen Speicherverbrauch aus.

Hauptfunktionen:

  • Einhaltung des CommonMark-Standards 0.30.
  • Unterstützung für GFM-Erweiterungen (Tabellen, Aufgabenlisten, Durchstreichungen).
  • API für schrittweises Parsen (SAX-ähnlich) und HTML-Generierung.
  • Keine externen Abhängigkeiten.

Beispiel für die Verwendung von md4c zur Konvertierung von Markdown in HTML:

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

// Callback zum Schreiben der HTML-Ausgabestatic 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 = "# Hallo, **Welt**!

Dies ist ein *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 fehlgeschlagen" << std::endl; } return 0;}


2. Bibliothek cmark

cmark (früher cmark-gfm) ist die Referenzimplementierung des CommonMark-Parsers aus der Community. Sie ist ebenfalls in C geschrieben und bietet einen C++-Wrapper. Die Bibliothek wird aktiv gepflegt und in Projekten wie GitHub, GitLab und Pandoc verwendet.

Hauptmerkmale:

  • Vollständige Unterstützung von CommonMark (einschließlich der neuesten Version der Spezifikation).
  • Integrierte Unterstützung für GitHub Flavored Markdown (Tabellen, Formeln, Erwähnungen).
  • Generierung von HTML, LaTeX, man, XML und anderen Formaten.
  • API zur programmatischen Steuerung des AST (Abstract Syntax Tree).

Beispiel für die Verwendung von cmark zum Parsen und Ausgeben von HTML:

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

int main() { const char* markdown = "## Aufgabenliste

- [x] Milch kaufen- [ ] Freund anrufen"; // Parsen mit GFM-Unterstützung cmark_node* doc = cmark_parse_document(markdown, strlen(markdown), CMARK_OPT_DEFAULT); // Konvertierung in HTML char* html = cmark_render_html(doc, CMARK_OPT_DEFAULT, NULL); std::cout << html << std::endl; // Speicher freigeben free(html); cmark_node_free(doc); return 0;}


3. Bibliothek cpp-markdown

cpp-markdown ist eine C++-Bibliothek, die von Grund auf mit STL und modernen C++11/14-Funktionen geschrieben wurde. Sie ist auf einfache Integration und Benutzerfreundlichkeit in C++-Projekten ausgerichtet. Im Gegensatz zu md4c und cmark erfordert sie keine externen C-Abhängigkeiten.

Eigenschaften:

  • Reine C++-Implementierung (Templates, RAII, Exceptions).
  • Unterstützung der grundlegenden Markdown-Syntax (Überschriften, Listen, Links, Bilder).
  • Erweiterbare Architektur (eigene Parsing-Regeln können hinzugefügt werden).
  • Ein

Empfehlungen