Trabajo con Markdown en C++: bibliotecas md4c, cmark y cpp-markdown

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 C++: revisión de bibliotecas y ejemplos de uso

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 el ecosistema de C++ existen varias bibliotecas maduras que permiten analizar Markdown y convertirlo a HTML u otros formatos. En este artículo revisaremos tres herramientas populares: md4c, cmark y cpp-markdown, y proporcionaremos ejemplos prácticos de su uso.



1. Biblioteca md4c

md4c es un analizador Markdown ligero, escrito en C puro (con encabezados compatibles con C++). Soporta la especificación CommonMark y las extensiones de GitHub Flavored Markdown (GFM), incluyendo tablas, tachado y enlaces automáticos. La biblioteca se caracteriza por su alto rendimiento y mínimo consumo de memoria.

Características principales:

  • Cumplimiento del estándar CommonMark 0.30.
  • Soporte de extensiones GFM (tablas, listas de tareas, tachado).
  • API para análisis paso a paso (tipo SAX) y generación de HTML.
  • Sin dependencias externas.

Ejemplo de uso de md4c para convertir Markdown a HTML:

#include <md4c-html.h>#include <iostream>#include <string>

// Callback para escribir la salida HTMLstatic void append_html(const MD_CHAR* text, MD_SIZE size, void* userdata) { std::string* output = static_cast<std::string*>(userdata); output->append(text, size);}

int main() { std::string markdown = "# Hello, **World**!

This is a *test*."; std::string html; MD_HTML_FLAGS flags = MD_HTML_FLAG_SKIP_UTF8_BOM; int result = md_html(markdown.c_str(), markdown.length(), append_html, &html, flags, 0); if (result == 0) { std::cout << html << std::endl; } else { std::cerr << "Parsing failed" << std::endl; } return 0;}


2. Biblioteca cmark

cmark (anteriormente cmark-gfm) es la implementación de referencia del analizador CommonMark de la comunidad. También está escrita en C y proporciona un envoltorio para C++. La biblioteca cuenta con soporte activo y se utiliza en proyectos como GitHub, GitLab y Pandoc.

Características clave:

  • Soporte completo de CommonMark (incluyendo la última versión de la especificación).
  • Soporte integrado de GitHub Flavored Markdown (tablas, fórmulas, menciones).
  • Generación de HTML, LaTeX, man, XML y otros formatos.
  • API para control programático del AST (Árbol de Sintaxis Abstracta).

Ejemplo de uso de cmark para analizar y generar HTML:

#include <cmark-gfm.h>#include <iostream>

int main() { const char* markdown = "## Lista de tareas

- [x] Comprar leche- [ ] Llamar a un amigo"; // Análisis con soporte GFM cmark_node* doc = cmark_parse_document(markdown, strlen(markdown), CMARK_OPT_DEFAULT); // Conversión a HTML char* html = cmark_render_html(doc, CMARK_OPT_DEFAULT, NULL); std::cout << html << std::endl; // Liberación de memoria free(html); cmark_node_free(doc); return 0;}


3. Biblioteca cpp-markdown

cpp-markdown es una biblioteca C++ escrita desde cero utilizando STL y las capacidades modernas de C++11/14. Está orientada a la simplicidad de integración y facilidad de uso en proyectos C++. A diferencia de md4c y cmark, no requiere dependencias externas de C.

Características:

  • Implementación en C++ puro (plantillas, RAII, excepciones).
  • Soporte de sintaxis básica de Markdown (encabezados, listas, enlaces, imágenes).
  • Arquitectura extensible (se pueden agregar reglas de análisis propias).
  • Pro

Recommendations