Arbeiten mit Markdown in Java: Überblick über Bibliotheken und Anwendungsbeispiele
\n\nMarkdown ist eine leichtgewichtige Auszeichnungssprache, die häufig zur Textformatierung in Dokumentationen, README-Dateien, Blogs und Content-Management-Systemen verwendet wird. In Java gibt es mehrere ausgereifte Bibliotheken, die das Parsen von Markdown, die Konvertierung in HTML und die Durchführung umgekehrter Operationen ermöglichen. In diesem Artikel betrachten wir die drei gängigsten Bibliotheken im Detail: CommonMark, Flexmark und Pegdown, und geben praktische Beispiele für deren Verwendung.
\n\n1. CommonMark (org.commonmark:commonmark)
\n\nCommonMark ist ein strenger Markdown-Standard, der die Mehrdeutigkeiten der ursprünglichen Spezifikation beseitigt. Die Bibliothek commonmark-java ist die Referenzimplementierung dieses Standards. Sie ist leichtgewichtig, schnell und unterstützt Erweiterungen (Tabellen, Durchstreichungen, automatische Links).
Einbindung (Maven):
\n<dependency>\n <groupId>org.commonmark</groupId>\n <artifactId>commonmark</artifactId>\n <version>0.21.0</version>\n</dependency>\n\nBeispiel für das Parsen von Markdown in HTML:
\nimport org.commonmark.node.*;\nimport org.commonmark.parser.Parser;\nimport org.commonmark.renderer.html.HtmlRenderer;\n\npublic class CommonMarkExample {\n public static void main(String[] args) {\n String markdown = "# Überschrift\\n\\nDies ist **fetter** Text und *kursiver* Text.\\n\\n- Punkt 1\\n- Punkt 2";\n\n Parser parser = Parser.builder().build();\n Node document = parser.parse(markdown);\n\n HtmlRenderer renderer = HtmlRenderer.builder().build();\n String html = renderer.render(document);\n\n System.out.println(html);\n }\n}\n\nErgebnis der Ausführung:
\n<h1>Überschrift</h1>\n<p>Dies ist <strong>fetter</strong> Text und <em>kursiver</em> Text.</p>\n<ul>\n<li>Punkt 1</li>\n<li>Punkt 2</li>\n</ul>\n\nZum Einbinden von Erweiterungen (z. B. Tabellen) verwenden Sie:
\nimport org.commonmark.ext.gfm.tables.TablesExtension;\n\nParser parser = Parser.builder()\n .extensions(List.of(TablesExtension.create()))\n .build();\n\n2. Flexmark (com.vladsch.flexmark)
\n\nFlexmark ist eine leistungsstarke Bibliothek für die Arbeit mit Markdown, die zahlreiche Erweiterungen unterstützt: GFM-Tabellen, Fußnoten, Attribute, Typografie, Syntax-Highlighting für Code und vieles mehr. Sie ist vollständig anpassbar und eignet sich für komplexe Projekte.
\n\nEinbindung (Maven):
\n<dependency>\n <groupId>com.vladsch.flexmark</groupId>\n <artifactId>flexmark-all</artifactId>\n <version>0.64.8</version>\n</dependency>\n\nBeispiel für die Konvertierung von Markdown in HTML mit Tabellen:
\nimport com.vladsch.flexmark.html.HtmlRenderer;\nimport com.vladsch.flexmark.parser.Parser;\nimport com.vladsch.flexmark.util.data.MutableDataSet;\nimport com.vladsch.flexmark.ext.tables.TablesExtension;\n\nimport java.util.Arrays;\n\npublic class FlexmarkExample {\n public static void main(String[] args) {\n MutableDataSet options = new MutableDataSet();\n options.set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create()));\n\n Parser parser = Parser.builder(options).build();\n HtmlRenderer renderer = HtmlRenderer.builder(options).build();\n\n String markdown = "| Spalte 1 | Spalte 2 |\\n|-----------|-----------|\\n| Zelle 1 | Zelle 2 |";\n\n String html = renderer.render(parser.parse(markdown));\n System.out.println(html);\n }\n}\n\nFlexmark ermöglicht auch das Extrahieren von Metadaten (YAML front matter), die Konvertierung in LaTeX und die Arbeit mit dem AST-Baum.
\n\n<Auch in der Bibliothek
Konfiguration von C++-Anwendungen: Bibliotheken und Ansätze
Arbeit mit S3 und Cloud-Speichern in Go: Die Bibliothek minio-go
EasyNetQ für C# (.NET): Vollständiges Tutorial mit Beispielen
Swagger/OpenAPI-Generierung für Rust: Utoipa-Bibliothek
PDF-Generierung auf Rust: Überblick über Bibliotheken und Codebeispiele