# libime-table — los diccionarios de los métodos de entrada POR TABLA (wubi, cangjie, zhengma…). # # Hermana de `libime-lm` y `libime-dict`; la nota larga del por qué está en `libime-lm.toml`. # # ══ QUÉ SON, Y POR QUÉ NO SE SALTAN ════════════════════════════════════════════════════════════ # El pinyin se teclea por pronunciación; los métodos por TABLA se teclean por **forma** del # carácter, y son lo que usa mucha gente que escribe rápido o que escribe cantonés. Son ocho # tablas, y cada `.txt` se compila a un `.main.dict` con la misma herramienta: # # libime_tabledict # # db.txt erbi.txt qxm.txt wanfeng.txt wbpy.txt wbx.txt zrm.txt cj.txt # # ⚠ **Si esta receta no existiera, `fcitx5-chinese-addons` publicaría igual su método por tabla y no # tendría ni una tabla que cargar** — la figura de «sellado, con contenido, reproducible y sin la # función que promete» que este catálogo persigue. Por eso entra junto con las otras dos y no # después. # # ⚠ **`libime_tabledict` es una CUARTA herramienta, y mi guardián de `libime` sólo exigía tres.** # Había escrito el control contra las herramientas que necesitaban `libime-lm` y `libime-dict` # (`libime_slm_build_binary`, `libime_prediction`, `libime_pinyindict`) sin mirar el `data/` completo # de upstream, que usa también `LibIME::tabledict`. Es la misma clase de defecto que los cuatro # guardianes demasiado estrictos del 20-oct, con el signo contrario: **un guardián escrito contra lo # que yo iba a usar, no contra lo que el paquete promete.** Arreglado allá. # # Los `.main.dict` caen en `/usr/share/libime/` (`LIBIME_INSTALL_PKGDATADIR`), con el nombre que sale # de sustituir `.txt` por `.main.dict`, que es lo que hace el `foreach` de upstream. name = "libime-table" version = "20240108" license = "LGPL-2.1-or-later" [source] tarball = "https://download.fcitx-im.org/data/table-20240108.tar.zst" sha256 = "3e9d87b04a393f131723472c8eaa860dd23c378a3d4f6a9005513b2a95b3614b" # Los ocho `.txt` están en la raíz del tarball (comprobado con `tar -tf`). strip_components = 0 [build] compiler = "zig-cc" target = "x86_64-linux-musl" link = "static" flags = [] [build.phases] # La lista es EXPLÍCITA y no un glob, por el mismo motivo que upstream la escribe a mano: si el # tarball trajera un `.txt` más, un glob lo compilaría en silencio y el artefacto cambiaría de # contenido sin que nadie lo decidiera; y si trajera uno menos, el glob no se queja. configure = ''' set -e falta="" for f in db erbi qxm wanfeng wbpy wbx zrm cj; do [ -f "$f.txt" ] || falta="$falta $f.txt" done [ -z "$falta" ] || { echo "libime-table: el tarball no trae:$falta — upstream cambió el juego de tablas" >&2; ls -la >&2; exit 1; } echo "libime-table: las 8 tablas presentes" ''' compile = ''' set -e for f in db erbi qxm wanfeng wbpy wbx zrm cj; do libime_tabledict "$f.txt" "$f.main.dict" done ''' install = ''' set -e mkdir -p /out/usr/share/libime n=0 for f in db erbi qxm wanfeng wbpy wbx zrm cj; do cp "$f.main.dict" /out/usr/share/libime/ t=/out/usr/share/libime/$f.main.dict [ -s "$t" ] || { echo "libime-table: $f.main.dict quedó vacío — ese método por tabla no tendría nada que cargar" >&2; exit 1; } n=$((n+1)) done [ "$n" -eq 8 ] || { echo "libime-table: salieron $n de 8 tablas" >&2; exit 1; } echo "libime-table: $n tabla(s) compiladas en /usr/share/libime" ''' [deps] # ⚠ **`fcitx5` y `zstd` NO son opcionales acá, y el fallo NO dice que falten.** Las herramientas de # libime son binarios DINÁMICOS: `libime_pinyindict` declara # `NEEDED libIMEPinyin.so.0 libIMECore.so.0 libFcitx5Utils.so.2`. El sandbox sólo monta lo # declarado, así que con `libime` a secas el cargador no encuentra `libFcitx5Utils.so.2` y la fase # muere con **`exit 127`** — que se lee como «no existe el ejecutable» y es «no existe una de sus # bibliotecas». Cuesta un rato porque el ejecutable SÍ está. # # La lista no se adivinó: se recorrió el `NEEDED` recursivamente desde los tres binarios contra los # artefactos del store. Clausura completa = `libime` + `fcitx5` + `zstd`, cero sonames huérfanos. # Es la misma figura que la cadena de tres saltos de `espeak-ng`, con una diferencia: allá el `.a` # del medio CORTABA la propagación; acá todo es `.so` y propaga, pero **declarar sigue siendo # manual** porque el sandbox es hermético a propósito. build = ["libime", "fcitx5", "zstd"]