Arbeiten mit Markdown in Kotlin: Überblick über Bibliotheken und Werkzeuge
\n\nMarkdown ist eine beliebte Auszeichnungssprache zur Textformatierung, die häufig in Dokumentationen, README-Dateien, Blogs und Content-Management-Systemen verwendet wird. Im Kotlin-Ökosystem gibt es mehrere ausgereifte Bibliotheken, die das Parsen von Markdown, die Umwandlung in HTML sowie die Erstellung eigener Erweiterungen ermöglichen. In diesem Artikel betrachten wir drei Hauptansätze: die Verwendung von commonmark-java, flexmark-java und der nativen Bibliothek kmarkdown.
1. Die Bibliothek commonmark-java
\n\ncommonmark-java ist die offizielle Java-Implementierung der CommonMark-Spezifikation, die hervorragend mit Kotlin funktioniert. Sie bietet eine einfache API, hohe Leistung und strikte Einhaltung des Standards.
\n\nInstallation
\nFügen Sie die Abhängigkeit in build.gradle.kts hinzu:
implementation("org.commonmark:commonmark:0.21.0")\n\nAnwendungsbeispiel
\nimport org.commonmark.parser.Parser\nimport org.commonmark.renderer.html.HtmlRenderer\n\nfun main() {\n val parser = Parser.builder().build()\n val document = parser.parse("**Hallo**, das ist *Markdown* in Kotlin!")\n val renderer = HtmlRenderer.builder().build()\n val html = renderer.render(document)\n println(html)\n // Ausgabe: <p><strong>Hallo</strong>, das ist <em>Markdown</em> in Kotlin!</p>\n}\n\nDie Bibliothek unterstützt alle grundlegenden Elemente: Überschriften, Listen, Links, Bilder, Code und Codeblöcke. Zur Erweiterung der Funktionalität können zusätzliche Module eingebunden werden, z. B. commonmark-ext-gfm-tables für Tabellen im GitHub Flavored Markdown-Stil.
2. Die Bibliothek flexmark-java
\n\nflexmark-java ist eine leistungsfähigere und flexiblere Alternative. Sie unterstützt CommonMark, GitHub Flavored Markdown (GFM) sowie zahlreiche Erweiterungen: Fußnoten, Anker, Emojis, mathematische Formeln und benutzerdefinierte Syntaxen.
\n\nInstallation
\nimplementation("com.vladsch.flexmark:flexmark-all:0.64.8")\n\nBeispiel mit Erweiterungen
\nimport com.vladsch.flexmark.html.HtmlRenderer\nimport com.vladsch.flexmark.parser.Parser\nimport com.vladsch.flexmark.ext.tables.TablesExtension\nimport com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughExtension\n\nfun main() {\n val extensions = listOf(TablesExtension.create(), StrikethroughExtension.create())\n val parser = Parser.builder().extensions(extensions).build()\n val document = parser.parse("| Überschrift | Beschreibung |\\n|-------------|--------------|\\n| Kotlin | Sprache |\\n\\n~~Durchgestrichener Text~~")\n val renderer = HtmlRenderer.builder().extensions(extensions).build()\n println(renderer.render(document))\n}\n\nFlexmark ermöglicht auch die Anpassung des Renderings: Hinzufügen von CSS-Klassen, Ändern der Attributreihenfolge, Erstellen eigener Besucher für den AST-Baum. Dies macht es zur idealen Wahl für komplexe Projekte, bei denen eine Feinabstimmung der Ausgabe erforderlich ist.
\n\n3. Die native Bibliothek kmarkdown
\n\nkmarkdown ist eine reine Kotlin-Implementierung eines Markdown-Parsers, die unter Verwendung von Koroutinen und integrierten Sprachmitteln geschrieben wurde. Sie ist leichtgewichtig und benötigt außer der Standard-Kotlin-Bibliothek keine weiteren Abhängigkeiten.
\n\nInstallation
\nimplementation("net.nightwhistler:kmarkdown:1.0.2")\n\nBeispiel
\nimport net.nightwhistler.kmarkdown.KMarkdown\n\nfun main() {\n val markdown = KMarkdown()\n val html = markdown.parseToHtml("# Überschrift\\n\\nNormaler **Text**")\n println(html)\n // Ausgabe: <h1>Überschrift</h1><p>Normaler <strong>Text</strong></p>\n}\n\nKmarkdown eignet sich für einfache Szenarien, in denen keine Unterstützung für erweiterte GFM-Funktionen erforderlich ist. Sein Vorteil liegt in der sauberen Codebasis und dem Fehlen
Auch in der Bibliothek
C++ Aufgabenplaner: Erstellung und Verwaltung von Aufgaben
JSON-Verarbeitung in C++: Bibliotheken, Parsing und Datenserialisierung
Verwaltung der Konfiguration von TypeScript-Anwendungen: Vollständiger Leitfaden
Boost für C++: Vollständiger Leitfaden mit Beispielen
Kafka Client Java: Vollständiges Tutorial mit Code-Beispielen