Markdown-Verarbeitung in Rust: Bibliotheken, Parser und Werkzeuge

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 Rust: Überblick über die wichtigsten Bibliotheken

\n\n

Die Sprache Rust bietet leistungsstarke und sichere Werkzeuge für die Verarbeitung von Textdaten, einschließlich Parsing und Rendering von Markdown. Dank strenger Typisierung, fehlendem Garbage Collector und hoher Leistung eignen sich die Bibliotheken für die Arbeit mit Markdown in Rust hervorragend für die Erstellung statischer Websites, Dokumentationen, Blogs, Chat-Systeme und aller Anwendungen, die eine Konvertierung von Markdown in HTML oder andere Formate erfordern. In diesem Artikel betrachten wir die drei beliebtesten Werkzeuge: pulldown-cmark, comrak und das offizielle markdown crate.

\n\n

1. pulldown-cmark — ereignisgesteuerter Parser

\n\n

pulldown-cmark ist die beliebteste und leistungsfähigste Bibliothek zum Parsen von Markdown in Rust. Sie basiert auf einem ereignisgesteuerten Modell (Pull-Parser), das eine streamartige Verarbeitung von Dokumenten ermöglicht, ohne einen vollständigen AST im Speicher aufzubauen. Dies macht sie ideal für große Dateien und Anwendungen mit begrenzten Ressourcen.

\n\n

Die Bibliothek entspricht der CommonMark-Spezifikation und unterstützt alle grundlegenden Elemente: Überschriften, Listen, Code, Tabellen, Links, Bilder und Escape-Sequenzen.

\n\n
// Beispiel für das Parsen von Markdown in HTML mit pulldown-cmark\nuse pulldown_cmark::{Parser, Options, html};\n\nlet markdown_input = "# Hallo, Welt!\\n\\nDies ist **fetter Text** und *kursiv*.";\nlet mut options = Options::empty();\noptions.insert(Options::ENABLE_TABLES);\noptions.insert(Options::ENABLE_FOOTNOTES);\n\nlet parser = Parser::new_ext(&markdown_input, options);\nlet mut html_output = String::new();\nhtml::push_html(&mut html_output, parser);\n\nprintln!("{}", html_output);\n// Ausgabe: <h1>Hallo, Welt!</h1>\n// <p>Dies ist <strong>fetter Text</strong> und <em>kursiv</em>.</p>
\n\n

Besonderheiten von pulldown-cmark:

\n
    \n
  • Minimaler Speicherverbrauch — Parsing ohne AST.
  • \n
  • Unterstützung von Erweiterungen: Tabellen, Fußnoten, Durchstreichungen, automatische URL-Verknüpfung.
  • \n
  • Vollständige Unterstützung von CommonMark 0.31.2.
  • \n
  • Möglichkeit der benutzerdefinierten Ereignisverarbeitung (z. B. für Syntax-Highlighting).
  • \n
\n\n

2. comrak — erweiterbarer Parser mit GFM-Unterstützung

\n\n

Comrak ist ein Fork der beliebten JavaScript-Bibliothek cmark-gfm, portiert auf Rust. Es bietet vollständige Kompatibilität mit GitHub Flavored Markdown (GFM), einschließlich Erweiterungen wie Aufgabenlisten, Tabellen, Durchstreichungen, automatische Links und HTML-Escaping.

\n\n

Comrak bietet eine flexible API mit der Möglichkeit, den Parser über die Struktur ComrakOptions zu konfigurieren. Sie können einzelne Erweiterungen aktivieren oder deaktivieren, die Tabstoppbreite festlegen und bestimmte HTML-Tags erlauben oder verbieten.

\n\n
// Beispiel für die Verwendung von comrak zur Konvertierung von Markdown in HTML\nuse comrak::{markdown_to_html, ComrakOptions};\n\nlet markdown = "## Aufgabenliste\\n\\n- [x] Hausaufgaben erledigen\\n- [ ] Lebensmittel kaufen\\n\\n```rust\\nfn main() {\\n    println!(\\"Hallo\\");\\n}\\n```";\n\nlet options = ComrakOptions::default();\nlet html = markdown_to_html(markdown, &options);\n\nprintln!("{}", html);\n// Ausgabe umfasst: Überschrift, Kontrollkästchen, Codeblock mit Highlighting
\n\n

Vorteile von comrak:

\n
    \n
  • Vollständige Unterstützung von GFM (GitHub Flavored Markdown).
  • \n
  • Anpassbare Sicherheit: Escaping gefährlicher HTML-Tags.
  • \n
  • Unterstützung von verschachtelten Codeblöcken, mathematischen Formeln (über Erweiterungen).
  • \n
  • Hohe Geschwindigkeit, vergleichbar mit pulldown-cmark.
  • \n
\n\n

3. markdown crate — einfacher und leichter Parser

\n\n

Das offizielle markdown crate (crate markdown) ist eine minimalistische Bibliothek, die die grundlegende Markdown-Spezifikation implementiert. Es unterstützt keine Erweiterungen und Tabellen, eignet sich aber hervorragend für einfache Aufgaben, bei denen nur eine Konvertierung benötigt wird.

Empfehlungen