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
Auch in der Bibliothek
QR-Code-Generierung in Java: Bibliothek ZXing (ausführliche Anleitung)
Arbeiten mit CSV in PHP: Lesen, Schreiben und Datenverarbeitung
gRPC C++ Leitfaden: Vollständiges Tutorial mit Beispielen
Awaitility für Java: Vollständige Anleitung mit Beispielen