feat(infra): auto-commit con 88 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
---
|
||||
name: slugify_obsidian_name
|
||||
kind: function
|
||||
lang: py
|
||||
domain: obsidian
|
||||
version: "1.0.0"
|
||||
purity: pure
|
||||
signature: "def slugify_obsidian_name(name: str) -> str"
|
||||
description: "Convierte un nombre o titulo a un slug kebab-case estable: transliteracion Unicode (NFKD + descarte de combining marks, mapeo explicito de ñ/Ñ -> n), minusculas, colapsa cualquier secuencia de caracteres no [a-z0-9] a un solo guion, y strip de guiones en los bordes. Sin guiones dobles. Deterministica, pura, sin I/O. Util para migrar notas de Obsidian a nombres de archivo/identificadores estables."
|
||||
tags: [obsidian, slug, kebab-case, transliterate, unicode, normalize, migrate]
|
||||
uses_functions: []
|
||||
uses_types: []
|
||||
returns: []
|
||||
returns_optional: false
|
||||
error_type: ""
|
||||
imports: ["re", "unicodedata"]
|
||||
params:
|
||||
- name: name
|
||||
desc: "Nombre o titulo arbitrario (puede llevar acentos, mayusculas, espacios y simbolos). P.ej. el titulo de una nota de Obsidian que se quiere convertir en slug estable."
|
||||
output: "String con el slug kebab-case: solo caracteres [a-z0-9-], sin guiones al inicio/fin ni guiones dobles. Cadena vacia si name no contiene ningun caracter slugificable."
|
||||
tested: true
|
||||
tests:
|
||||
- "acentos y espacios"
|
||||
- "enye se mapea a n"
|
||||
- "mezcla mayusculas y acentos"
|
||||
- "simbolos y dobles separadores"
|
||||
- "string vacio"
|
||||
- "solo simbolos devuelve vacio"
|
||||
test_file_path: "python/functions/obsidian/slugify_obsidian_name_test.py"
|
||||
file_path: "python/functions/obsidian/slugify_obsidian_name.py"
|
||||
---
|
||||
|
||||
## Ejemplo
|
||||
|
||||
```python
|
||||
slugify_obsidian_name("Enmanuel Gutiérrez Pérez") # "enmanuel-gutierrez-perez"
|
||||
slugify_obsidian_name("Jose manuel camaño castro") # "jose-manuel-camano-castro"
|
||||
slugify_obsidian_name("DNI de María del Mar") # "dni-de-maria-del-mar"
|
||||
slugify_obsidian_name(" raro__nombre!! ") # "raro-nombre"
|
||||
```
|
||||
|
||||
## Cuando usarla
|
||||
|
||||
Usala al migrar o extraer subgrafos de notas de Obsidian cuando necesites un
|
||||
identificador estable a partir de un titulo: renombrar archivos `.md`, generar
|
||||
claves de un mapa de equivalencias `titulo -> slug`, o crear nombres de carpeta
|
||||
deterministas. Es pura, asi que sirve igual de bien para indexar, ordenar o
|
||||
comparar nombres normalizados sin tocar disco.
|
||||
|
||||
## Gotchas
|
||||
|
||||
- Mapea `ñ`/`Ñ` -> `n` explicitamente porque `NFKD` NO descompone la enye en
|
||||
`n` + tilde (la cedilla queda como combining mark sobre la `n` base ya
|
||||
formada). Otros idiomas con letras especiales (ß, ø, đ) NO se transliteran:
|
||||
caen bajo el colapso de no-`[a-z0-9]` y desaparecen. Si necesitas soportarlas,
|
||||
amplia `_TRANSLIT_MAP`.
|
||||
- Dos titulos distintos pueden colisionar en el mismo slug (`"Mi Nota!"` y
|
||||
`"Mi Nota"` -> `"mi-nota"`). Si el slug debe ser unico en un vault, anade un
|
||||
desambiguador (sufijo numerico) por fuera de esta funcion.
|
||||
- No preserva ningun caracter no ASCII: emojis, ideogramas CJK, cirilico, etc.
|
||||
se descartan. Un titulo formado solo por esos caracteres devuelve `""`.
|
||||
Reference in New Issue
Block a user