Trabajo con Markdown en Java: bibliotecas, analizadores y ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con Markdown en Java: resumen de bibliotecas y ejemplos de uso

\n\n

Markdown es un lenguaje de marcado ligero, ampliamente utilizado para formatear texto en documentación, archivos README, blogs y sistemas de gestión de contenido. En Java existen varias bibliotecas maduras que permiten analizar Markdown, convertirlo a HTML y realizar operaciones inversas. En este artículo, revisaremos en detalle las tres bibliotecas más populares: CommonMark, Flexmark y Pegdown, y proporcionaremos ejemplos prácticos de su uso.

\n\n

1. CommonMark (org.commonmark:commonmark)

\n\n

CommonMark es un estándar estricto de Markdown que elimina las ambigüedades de la especificación original. La biblioteca commonmark-java es la implementación de referencia de este estándar. Es ligera, rápida y admite extensiones (tablas, tachado, enlaces automáticos).

\n\n

Configuración (Maven):

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

Ejemplo de análisis de Markdown a 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 es texto en **negrita** y *cursiva*.\\n\\n- Elemento 1\\n- Elemento 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 de la ejecución:

\n
<h1>Título</h1>\n<p>Este es texto en <strong>negrita</strong> y <em>cursiva</em>.</p>\n<ul>\n<li>Elemento 1</li>\n<li>Elemento 2</li>\n</ul>
\n\n

Para agregar extensiones (por ejemplo, tablas), 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 es una biblioteca de alto rendimiento para trabajar con Markdown que admite múltiples extensiones: tablas GFM, notas al pie, atributos, tipografía, resaltado de sintaxis de código y mucho más. Es completamente personalizable y adecuada para proyectos complejos.

\n\n

Configuración (Maven):

\n
<dependency>\n    <groupId>com.vladsch.flexmark</groupId>\n    <artifactId>flexmark-all</artifactId>\n    <version>0.64.8</version>\n</dependency>
\n\n

Ejemplo de conversión de Markdown a HTML con tablas:

\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 = "| Columna 1 | Columna 2 |\\n|-----------|-----------|\\n| Celda 1   | Celda 2   |";\n\n        String html = renderer.render(parser.parse(markdown));\n        System.out.println(html);\n    }\n}
\n\n

Flexmark también permite extraer metadatos (YAML front matter), convertir a LaTeX y trabajar con el árbol AST.

\n\n<

Recommendations