Skip to content

Cómo funciona Markdown ​

Entender cómo funciona Markdown te ayuda a aprovechar mejor esta poderosa herramienta. En este capítulo descubrirás cómo el texto plano se transforma en un documento bien formateado.

Flujo de trabajo básico ​

El flujo de trabajo de Markdown se puede resumir en los siguientes pasos:

Archivo fuente Markdown (.md) → Analizador Markdown → Documento HTML → Renderizado en el navegador

1. Escribir el archivo fuente Markdown ​

Puedes usar cualquier editor de texto para crear un archivo .md y escribir contenido usando la sintaxis Markdown:

markdown
# Mi documento

Este es un párrafo **importante**.

## Ejemplo de lista

- Elemento 1
- Elemento 2
- Elemento 3

2. Procesamiento mediante el analizador Markdown ​

El analizador lee el archivo Markdown, reconoce los elementos sintácticos y los convierte en el HTML correspondiente:

html
<h1>Mi documento</h1>
<p>Este es un <strong>importante</strong> párrafo.</p>
<h2>Ejemplo de lista</h2>
<ul>
  <li>Elemento 1</li>
  <li>Elemento 2</li>
  <li>Elemento 3</li>
</ul>

3. Renderizado en el navegador ​

El HTML generado se muestra como un documento formateado en el navegador.

Cómo funcionan los analizadores ​

Análisis léxico ​

El analizador primero realiza un análisis léxico, dividiendo el texto Markdown en tokens:

  • # reconocido como token de encabezado
  • **texto** como token de negrita
  • - elemento como token de elemento de lista

Análisis sintáctico ​

Luego se realiza el análisis sintáctico para construir un árbol sintáctico abstracto (AST):

Documento
├── Encabezado (nivel 1): "Mi documento"
├── Párrafo
│   ├── Texto: "Este es un"
│   ├── Negrita: "importante"
│   └── Texto: "párrafo."
├── Encabezado (nivel 2): "Ejemplo de lista"
└── Lista no ordenada
    ├── Elemento: "Elemento 1"
    ├── Elemento: "Elemento 2"
    └── Elemento: "Elemento 3"

Generación de HTML ​

Finalmente, el árbol sintáctico se recorre para generar la salida HTML correspondiente.

Analizadores más populares ​

CommonMark ​

  • Especificación estándar – Proporciona un estándar unificado para el análisis de Markdown
  • Definición estricta – Elimina ambigüedades entre implementaciones
  • Amplio soporte – Adoptado por muchos analizadores

GitHub Flavored Markdown (GFM) ​

Basado en CommonMark, con extensiones:

  • Soporte de tablas
  • Tachado
  • Listas de tareas
  • Reconocimiento de autolinks
  • Resaltado de sintaxis en bloques de código

Otros analizadores ​

AnalizadorLenguajeCaracterísticas
markedJavaScriptRápido, ligero
markdown-itJavaScriptExtensible, muchos plugins
Python-MarkdownPythonRico en funciones, sistema de plugins
kramdownRubySoporta múltiples formatos de salida
PandocHaskellConvertidor universal de documentos

Motores de renderizado ​

Renderizado del lado del cliente ​

El Markdown se analiza en el navegador en tiempo real:

javascript
// Con marked.js
const html = marked.parse('# Hola mundo');
document.body.innerHTML = html;

Ventajas:

  • No requiere procesamiento en el servidor
  • Vista previa en tiempo real
  • Reduce la carga del servidor

Desventajas:

  • Depende de JavaScript
  • No es óptimo para SEO
  • Carga inicial más lenta

Renderizado del lado del servidor ​

El HTML se genera previamente en el servidor:

javascript
// Ejemplo Node.js
const fs = require('fs');
const marked = require('marked');

const markdown = fs.readFileSync('documento.md', 'utf8');
const html = marked.parse(markdown);

Ventajas:

  • Óptimo para SEO
  • Carga rápida
  • No depende de JavaScript en el cliente

Desventajas:

  • Carga en el servidor
  • Gestión de caché compleja

Generación de sitios estáticos ​

Todas las páginas se generan por adelantado durante la build:

bash
# Con VitePress
npm run build

Ventajas:

  • Velocidad de carga máxima
  • Mejor SEO
  • Alta seguridad
  • Distribución sencilla

Desventajas:

  • Soporte limitado para contenido dinámico
  • Tiempos de build más largos

Mecanismos de extensión ​

Sistema de plugins ​

Muchos analizadores soportan extensiones mediante plugins:

javascript
// Ejemplo de plugin markdown-it
const md = require('markdown-it')()
  .use(require('markdown-it-footnote'))
  .use(require('markdown-it-deflist'))
  .use(require('markdown-it-abbr'));

Renderizador personalizado ​

javascript
// Renderizador personalizado para enlaces
const renderer = new marked.Renderer();
renderer.link = function(href, title, text) {
  return `<a href="${href}" target="_blank">${text}</a>`;
};

Optimización del rendimiento ​

Estrategia de caché ​

javascript
const cache = new Map();

function parseMarkdown(content) {
  const hash = generateHash(content);
  if (cache.has(hash)) {
    return cache.get(hash);
  }
  
  const result = marked.parse(content);
  cache.set(hash, result);
  return result;
}

Carga diferida (Lazy Loading) ​

javascript
// Analiza solo el área visible
const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      parseAndRender(entry.target);
    }
  });
});

Procesamiento en streaming ​

javascript
// Análisis en flujo para archivos grandes
const fs = require('fs');
const { Transform } = require('stream');

const markdownTransform = new Transform({
  transform(chunk, encoding, callback) {
    const html = marked.parse(chunk.toString());
    callback(null, html);
  }
});

fs.createReadStream('documento-grande.md')
  .pipe(markdownTransform)
  .pipe(fs.createWriteStream('output.html'));

Problemas comunes ​

1. Problemas con saltos de línea ​

Diferentes analizadores pueden manejar los saltos de línea de forma distinta:

markdown
Línea 1
Línea 2        ← Pueden interpretarse como el mismo párrafo

Línea 1  
Línea 2        ← Dos espacios al final de la línea fuerzan un salto de línea

Línea 1

Línea 2        ← Una línea en blanco separa los párrafos

2. Mezcla de HTML ​

markdown
Esto es una mezcla de **Markdown** y <em>HTML</em>.

Presta atención a cerrar y anidar correctamente las etiquetas HTML.

3. Escape de caracteres especiales ​

markdown
Aquí debes escapar \* y \_ .

Escenarios de aplicación práctica ​

1. Sistemas de blogs ​

Artículos Markdown → Generador de sitios estáticos → Sitio web HTML

2. Sitios de documentación ​

Documentos .md → VitePress/Docusaurus → Documentación online

3. Archivos README ​

README.md → GitHub/GitLab → Página principal del proyecto

4. Apps de notas ​

Notas Markdown → Renderizado en tiempo real → Visualización rich text

Próximos pasos ​

Ahora que sabes cómo funciona Markdown, puedes:

Construido con VitePress