Arbeiten mit Markdown in Kotlin: Bibliotheken und Parser

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 Kotlin: Überblick über Bibliotheken und Werkzeuge

\n\n

Markdown 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.

\n\n

1. Die Bibliothek commonmark-java

\n\n

commonmark-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\n

Installation

\n

Fügen Sie die Abhängigkeit in build.gradle.kts hinzu:

\n
implementation("org.commonmark:commonmark:0.21.0")
\n\n

Anwendungsbeispiel

\n
import 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\n

Die 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.

\n\n

2. Die Bibliothek flexmark-java

\n\n

flexmark-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\n

Installation

\n
implementation("com.vladsch.flexmark:flexmark-all:0.64.8")
\n\n

Beispiel mit Erweiterungen

\n
import 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\n

Flexmark 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\n

3. Die native Bibliothek kmarkdown

\n\n

kmarkdown 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\n

Installation

\n
implementation("net.nightwhistler:kmarkdown:1.0.2")
\n\n

Beispiel

\n
import 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\n

Kmarkdown 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

Empfehlungen