Mojibake: una biblioteca en C para procesamiento de texto Unicode 17 sin dependencias externas

Fuentes: Mojibake: a C11 Unicode 17 text-processing library with no dependencies

Mojibake es una biblioteca de bajo nivel escrita en C11 (compatible con C++17) que implementa procesamiento de texto conforme al estándar Unicode 17. Se distribuye como dos únicos archivos (mojibake.c y mojibake.h) bajo licencia MIT, lo que permite integrarla en cualquier proyecto C o C++ sin instalar dependencias ni enlazar bibliotecas externas.

La biblioteca ofrece normalización en sus cuatro formas (NFC, NFD, NFKC y NFKD), conversión de mayúsculas, minúsculas y tipo título con soporte completo de special-casing, plegado de casos para identificadores (NFKC casefold) y filtrado de controles, espacios y caracteres numéricos. Incorpora acceso a todas las propiedades de la Unicode Character Database: categoría, script y Script_Extensions, bloque, plano, valor numérico y nombre del codepoint.

En análisis de texto, Mojibake implementa segmentación por grafemas, palabras, oraciones y oportunidades de salto de línea según UAX #29 y UAX #14, el algoritmo bidireccional completo (UAX #9), propiedades de emojis con detección de secuencias RGI, y anchura de visualización con truncado consciente del ancho para terminales.

Para ordenación incluye el algoritmo de colación Unicode (UTS #10) en modos shifted y non-ignorable. En seguridad ofrece detección de confusables (UTS #39) mediante esqueletos reutilizables y validación de identificadores XID/ID (UAX #31).

La API acepta y produce cadenas en UTF-8, UTF-16LE/BE y UTF-32LE/BE, con detección y conversión de codificaciones. Incluye un envoltorio para C++17, un CLI, una compilación a WASM con TypeScript y macros de compilación que permiten recortar tablas opcionales —por ejemplo, los nombres de caracteres— para reducir el tamaño del binario alrededor de un 30 %. La suite de pruebas, basada en Attractor, ejecuta más de 1,5 millones de aserciones, incluidos los test suites oficiales de Unicode, y el código se analiza con libFuzzer, AddressSanitizer y UBSan.