3. Cómo funciona Markdown {#3-cómo-funciona-markdown}

3.1 Lenguaje de marcado ligero {#31-lenguaje-de-marcado-ligero}

Un lenguaje de marcado ligero usa convenciones de texto plano (símbolos como #, *, -, >) en lugar de etiquetas explícitas. El software interpreta esas convenciones y genera la salida formateada.

3.2 Pipeline de conversión {#32-pipeline-de-conversión}

flowchart LR
    A[Texto Markdown] --> B[Parser]
    B --> C[AST]
    C --> D[Renderizador HTML]
    C --> E[Renderizador PDF / DOCX / LaTeX...]
    D --> F[Documento HTML]
  1. Parser: lee el texto y reconoce bloques (párrafos, listas, código) y elementos en línea (énfasis, enlaces).
  2. AST (Abstract Syntax Tree): representación en árbol del documento (nodos como heading, paragraph, list, emphasis…). Muchos procesadores modernos (CommonMark, Pandoc, remark/unified) trabajan con un AST.
  3. Renderizador: recorre el árbol y emite HTML u otro formato.

Los parsers clásicos (como Markdown.pl) usaban expresiones regulares y conversión directa a HTML; los modernos suelen ser de dos fases (bloques → inline).

Implementaciones de referencia y habituales:

Implementación Lenguaje Notas
cmark / cmark-gfm C Referencia de CommonMark; cmark-gfm añade las extensiones de GitHub
commonmark.js JavaScript Implementación de referencia en JavaScript
markdown-it JavaScript CommonMark + plugins; base de muchas webs y de la vista previa de VS Code
marked JavaScript Rápida y muy extendida
remark / micromark JavaScript Ecosistema unified basado en AST; base de MDX
pulldown-cmark Rust Usado por rustdoc
Python-Markdown Python Base de MkDocs, con extensiones
Goldmark Go Parser de Hugo (CommonMark + extensiones)
Pandoc Haskell Múltiples dialectos de entrada y salida

3.3 Sintaxis frente a especificación {#33-sintaxis-frente-a-especificación}

Concepto Descripción
Markdown como sintaxis Convenciones de escritura (# título, **negrita**)
Markdown como especificación Reglas precisas y verificables sobre cómo interpretar cada caso. Markdown original no la tenía; CommonMark sí
Markdown como implementación Programa concreto (markdown-it, cmark, Pandoc, Goldmark…)

3.4 Ejemplo de AST conceptual {#34-ejemplo-de-ast-conceptual}

Entrada:

## Hola *mundo*

AST simplificado (representación ilustrativa, no de una librería concreta):

document
└── heading (level=2)
    ├── text "Hola "
    └── emphasis
        └── text "mundo"

Salida HTML:

<h2>Hola <em>mundo</em></h2>