# liblouis 3.39.0 — el traductor de braille LITERARIO. Es lo que separa «hay un display braille» # de «se puede leer cómodamente en braille». # # ══ QUÉ AÑADE, Y POR QUÉ NO ES UN LUJO ═════════════════════════════════════════════════════════ # Sin liblouis, `brltty` escribe braille de ORDENADOR: una celda por carácter, uno a uno. Se puede # leer, pero ocupa el triple y nadie lee así un texto largo. El braille de verdad es **contraído**: # contracciones, signos compuestos y reglas que dependen del idioma y del contexto — «and» es una # celda, no tres. Eso son tablas, y liblouis es el motor que las aplica. # # ⇒ Entra junto con `brltty` y no después, por el mismo criterio que `libime-table` con el chino: # publicar el display sin el traductor sería dar la capacidad a medias y llamarla cerrada. # # ══ LO QUE CUESTA: NADA NUEVO ══════════════════════════════════════════════════════════════════ # Medido sobre su `configure.ac`: su única dep externa es `yaml`, y va detrás de `--with-yaml` # (es para su suite de tests). ⇒ **cero deps nuevas en el corpus.** # # Se usa el tarball del RELEASE y no el archive del tag: trae `configure` ya generado y el lab no # tiene autoconf ni automake. Tercera vez que esa comprobación ahorra escribir un autoconf # (`pcaudiolib`, `speech-dispatcher`, ésta). # # `--enable-ucs4`: los `widechar` de 4 bytes. Con 2 bytes, los caracteres fuera del BMP —y buena # parte de las matemáticas y la notación musical braille están ahí— se truncan en silencio. name = "liblouis" version = "3.39.0" license = "LGPL-2.1-or-later" [source] tarball = "https://github.com/liblouis/liblouis/releases/download/v3.39.0/liblouis-3.39.0.tar.gz" sha256 = "629fa8cb0dfd9ad457c5bf47a42f0953b673e62c8ad6b1d03ddc4e2bd20008f1" [build] compiler = "zig-cc" target = "x86_64-linux-musl" link = "dynamic" flags = [] [build.phases] configure = ''' set -e [ -f ./configure ] || { echo "liblouis: el tarball no trae ./configure — ¿se cambió por el archive del tag?" >&2; exit 1; } ./configure --build=$CBUILD --host=$CHOST --prefix=/usr --sysconfdir=/etc \ --enable-ucs4 --without-yaml --disable-static ''' compile = 'make -j"$(nproc)"' # ⚠ EL GUARDIÁN DE LAS TABLAS ES EL PUNTO DE ESTA RECETA. # # `libllouis.so` sin sus tablas **carga, enlaza y traduce la identidad**: devolvería el texto sin # contraer y sin un solo error. Es exactamente la figura que este catálogo persigue —sellado, con # contenido, reproducible y sin la función que promete—, y acá es peor que en otros frentes porque # la promesa es que alguien que no ve pueda LEER. # # El piso de 100 no es un número inventado: upstream distribuye más de mil ficheros de tabla (una o # varias por idioma). Con una docena, algo se recortó; con cero, el motor es un `.so` mudo. install = ''' set -e make install DESTDIR=/out so=$(find /out/usr/lib -name 'liblouis.so*' -type f 2>/dev/null | head -1) [ -n "$so" ] || { echo "liblouis: no quedó liblouis.so — brltty la carga dinámicamente" >&2; exit 1; } [ -f /out/usr/include/liblouis/liblouis.h ] || { echo "liblouis: falta include/liblouis/liblouis.h" >&2; find /out/usr/include -name 'liblouis*' >&2; exit 1; } t=$(find /out/usr/share/liblouis/tables -type f 2>/dev/null | wc -l) [ "$t" -gt 100 ] || { echo "liblouis: sólo $t fichero(s) de tabla — esperaba >100; sin tablas traduce la identidad EN SILENCIO" >&2; find /out/usr/share -maxdepth 3 2>/dev/null | head -20 >&2; exit 1; } # Y el `.pc`, que es como brltty la encuentra. [ -f /out/usr/lib/pkgconfig/liblouis.pc ] || { echo "liblouis: falta liblouis.pc — brltty no la detectaría" >&2; exit 1; } # `lou_translate` es la herramienta que permite comprobar a mano que traduce de verdad. [ -x /out/usr/bin/lou_translate ] || echo "liblouis: aviso — no quedó lou_translate; no es fatal, pero es la única forma de probar la traducción sin un display" >&2 echo "liblouis: $(basename "$so") + $t tabla(s) + liblouis.pc" ''' [deps] build = ["make", "pkgconf", "libtool"]