Trabalhando com Markdown em Java: bibliotecas, parsers e exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com Markdown em Java: visão geral das bibliotecas e exemplos de uso

\n\n

Markdown é 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\n

1. CommonMark (org.commonmark:commonmark)

\n\n

CommonMark é 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).

\n\n

Adicionando dependência (Maven):

\n
<dependency>\n    <groupId>org.commonmark</groupId>\n    <artifactId>commonmark</artifactId>\n    <version>0.21.0</version>\n</dependency>
\n\n

Exemplo de parsing de Markdown para HTML:

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

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

Para adicionar extensões (por exemplo, tabelas), use:

\n
import org.commonmark.ext.gfm.tables.TablesExtension;\n\nParser parser = Parser.builder()\n    .extensions(List.of(TablesExtension.create()))\n    .build();
\n\n

2. Flexmark (com.vladsch.flexmark)

\n\n

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

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

Exemplo de conversão de Markdown para HTML com tabelas:

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

Flexmark também permite extrair metadados (YAML front matter), converter para LaTeX e trabalhar com a árvore AST.

\n\n<

Recommendations