---
name: extract_frontmatter
kind: function
lang: py
domain: core
version: "1.0.0"
purity: pure
signature: "def extract_frontmatter(content: str) -> tuple[str, dict | None]"
description: "Extrae YAML frontmatter (delimitado por ---) del inicio de un string markdown. Retorna el contenido sin frontmatter y el dict parseado (o None si no hay)."
tags: [markdown, frontmatter, yaml, parsing]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: [re, yaml]
params:
  - name: content
    desc: "string con contenido markdown potencialmente precedido por YAML frontmatter"
output: "tupla (contenido_sin_frontmatter, dict_parseado_o_None)"
tested: true
tests:
  - "contenido con frontmatter"
  - "sin frontmatter retorna None"
  - "frontmatter vacio"
  - "frontmatter con listas"
test_file_path: "python/functions/core/parse_markdown_test.py"
file_path: "python/functions/core/core.py"
---

## Ejemplo

```python
content = "---\ntitle: Hello\nauthor: Alice\n---\n# Body\n"
remaining, data = extract_frontmatter(content)
# remaining = "# Body\n"
# data = {"title": "Hello", "author": "Alice"}

no_fm = "# Just markdown\n\nNo frontmatter."
remaining, data = extract_frontmatter(no_fm)
# remaining == no_fm
# data is None
```

## Notas

Funcion pura. Usa `yaml.safe_load` si PyYAML esta disponible; si no, cae back a un parser simple de `key: value`. Solo reconoce frontmatter al inicio estricto del string (posicion 0). El bloque debe estar delimitado por `---\n` de apertura y `\n---\n` de cierre.
