--- 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 `""`.