Trabalhando com Markdown em Java: visão geral das bibliotecas e exemplos de uso
\n\nMarkdown é uma linguagem de marcação leve, amplamente utilizada para formatar texto em documentação, arquivos README, blogs e sistemas de gerenciamento de conteúdo. Em Java, existem várias bibliotecas maduras que permitem fazer parsing de Markdown, convertê-lo para HTML e realizar operações inversas. Neste artigo, veremos detalhadamente as três bibliotecas mais populares: CommonMark, Flexmark e Pegdown, além de fornecer exemplos práticos de uso.
\n\n1. CommonMark (org.commonmark:commonmark)
\n\nCommonMark é um padrão rigoroso de Markdown que elimina ambiguidades da especificação original. A biblioteca commonmark-java é a implementação de referência deste padrão. Ela é leve, rápida e suporta extensões (tabelas, tachado, links automáticos).
Adicionando dependência (Maven):
\n<dependency>\n <groupId>org.commonmark</groupId>\n <artifactId>commonmark</artifactId>\n <version>0.21.0</version>\n</dependency>\n\nExemplo de parsing de Markdown para 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 = "# Título\\n\\nEste é um texto **negrito** e *itálico*.\\n\\n- Item 1\\n- Item 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\nResultado da execução:
\n<h1>Título</h1>\n<p>Este é um texto <strong>negrito</strong> e <em>itálico</em>.</p>\n<ul>\n<li>Item 1</li>\n<li>Item 2</li>\n</ul>\n\nPara adicionar extensões (por exemplo, tabelas), use:
\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 é uma biblioteca de alto desempenho para trabalhar com Markdown, que suporta muitas extensões: tabelas GFM, notas de rodapé, atributos, tipografia, realce de sintaxe de código e muito mais. Ela é totalmente personalizável e adequada para projetos complexos.
\n\nAdicionando dependência (Maven):
\n<dependency>\n <groupId>com.vladsch.flexmark</groupId>\n <artifactId>flexmark-all</artifactId>\n <version>0.64.8</version>\n</dependency>\n\nExemplo de conversão de Markdown para HTML com tabelas:
\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 = "| Coluna 1 | Coluna 2 |\\n|-----------|-----------|\\n| Célula 1 | Célula 2 |";\n\n String html = renderer.render(parser.parse(markdown));\n System.out.println(html);\n }\n}\n\nFlexmark também permite extrair metadados (YAML front matter), converter para LaTeX e trabalhar com a árvore AST.
\n\n<Também na biblioteca
Codeception para PHP: guia completo com exemplos práticos
Swashbuckle para C# (.NET): guia completo com exemplos práticos
Trabalhando com XML em C++: bibliotecas pugixml, TinyXML-2 e RapidXML
Trabalhando com CSV em C# (.NET): bibliotecas e exemplos
Processamento de Markdown em Swift para iOS e macOS: bibliotecas e exemplos