el corrector habla castellano: 23 variantes, y los diccionarios pasan a ser deps de RUNTIME
`hunspell-es` sale del MISMO tarball que `hunspell-en` (mismo sha256 ⇒ el fetcher lo cachea y no se baja otra vez), pero es receta aparte: un paquete llamado `hunspell-en` que instala castellano es un nombre que miente, y este repo ya tiene medido lo que cuesta eso. Van las 23 variantes de RLA-ES —es_ES, es_MX, es_AR, es_PE, es_BO, es_CL, es_CO, es_CR, es_CU, es_DO, es_EC, es_GQ, es_GT, es_HN, es_NI, es_PA, es_PH, es_PR, es_PY, es_SV, es_US, es_UY, es_VE— por 20 MB en total (~880 KB cada una), que sobre una imagen de escritorio de 10,8 G es el 0,18 %. Elegir una o dos sería elegir el país del usuario, y equivocarse ahí se nota en cada palabra subrayada que no debería estarlo; enchant escoge por locale y cae a la genérica si la exacta falta. Recortarlo es cambiar un glob. NO se instalan `hyph_es.dic` (guionado) ni `th_es_v2.dat` (tesauro): hunspell no lee ninguno de los dos —son de libhyphen y libmythes, que no están en el catálogo—, así que ponerlos en /usr/share/hunspell sería dejar ficheros donde nada los busca. Y una corrección de modelado: los diccionarios estaban declarados en `[deps] build` de gnome-text-editor. Funcionaba —la clausura del perfil es build ∪ runtime, así que viajaban igual— pero mentía sobre por qué están (ni un .pc ni un NEEDED los menciona; los abre enchant en disco, cuando el usuario escribe) y los metía en hash_inputs: añadir un idioma habría RECONSTRUIDO el editor. En `runtime` no re-hashea, y el idioma 24 es gratis. La sonda del install comprueba las 23 variantes, que es_ES traiga >10.000 líneas y que contenga `ñandú` — que además ejercita el camino UTF-8, que bajo musl no es gratis darlo por bueno. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Semántico sayk'uy
Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.
2 qillqakuna · +70 −1
diff --git a/recipes/incoming-gnome/gnome-text-editor.toml b/recipes/incoming-gnome/gnome-text-editor.toml
index d1959217..9a0c4ba8 100644
--- a/recipes/incoming-gnome/gnome-text-editor.toml
+++ b/recipes/incoming-gnome/gnome-text-editor.toml
@@ -86,6 +86,14 @@ install = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson ins
[deps]
# `desktop-file-utils` está por la lección de nautilus y gnome-console: las apps de GNOME llaman a
# `update-desktop-database` desde el configure como programa REQUERIDO.
+# ⚠ LOS DICCIONARIOS SON `runtime`, NO `build`, y estaban mal la primera vez. El editor no los
+# necesita para COMPILAR —ni un `.pc` ni un `NEEDED` los menciona—: los busca `enchant` en disco, en
+# `/usr/share/hunspell`, cuando el usuario escribe. Declararlos en `build` funcionaba (la clausura
+# del perfil es `build ∪ runtime`, así que viajaban a la imagen igual) pero mentía sobre por qué
+# están, y además los metía en `hash_inputs`: añadir un idioma habría RECONSTRUIDO el editor.
+# En `runtime` no re-hashea nada ([[runtime-no-rehashea]]) y el idioma 24 es gratis.
+#
# `appstream` + su cierre (libxmlb, libyaml-shared, libxml2-shared, curl, openssl, zstd) entran por
# `libadwaita-1.pc`, que lo declara en `Requires.private`.
-build = ["meson", "samurai", "python3", "pkgconf", "gettext-tiny", "desktop-file-utils", "itstool", "glib", "gtk4", "libadwaita", "gtksourceview", "libspelling", "enchant", "hunspell", "hunspell-en", "editorconfig-core-c", "gsettings-desktop-schemas", "pango", "cairo-shared", "gdk-pixbuf", "graphene", "harfbuzz", "fribidi", "fontconfig-shared", "freetype-shared", "pixman", "libpng-shared", "expat", "libjpeg-turbo-shared", "libtiff-shared", "libepoxy", "wayland", "wayland-protocols", "libxkbcommon", "libdrm", "mesa", "appstream", "libxmlb", "libyaml-shared", "libxml2-shared", "curl", "openssl", "zstd", "pcre2", "libffi", "zlib-shared"]
+runtime = ["hunspell-en", "hunspell-es"]
+build = ["meson", "samurai", "python3", "pkgconf", "gettext-tiny", "desktop-file-utils", "itstool", "glib", "gtk4", "libadwaita", "gtksourceview", "libspelling", "enchant", "hunspell", "editorconfig-core-c", "gsettings-desktop-schemas", "pango", "cairo-shared", "gdk-pixbuf", "graphene", "harfbuzz", "fribidi", "fontconfig-shared", "freetype-shared", "pixman", "libpng-shared", "expat", "libjpeg-turbo-shared", "libtiff-shared", "libepoxy", "wayland", "wayland-protocols", "libxkbcommon", "libdrm", "mesa", "appstream", "libxmlb", "libyaml-shared", "libxml2-shared", "curl", "openssl", "zstd", "pcre2", "libffi", "zlib-shared"]
diff --git a/recipes/incoming-gnome/hunspell-es.toml b/recipes/incoming-gnome/hunspell-es.toml
new file mode 100644
index 00000000..b130e1b4
--- /dev/null
+++ b/recipes/incoming-gnome/hunspell-es.toml
@@ -0,0 +1,61 @@
+# hunspell-es — los diccionarios de CASTELLANO para hunspell. Datos, no código.
+#
+# ── POR QUÉ ES UNA RECETA APARTE Y NO UNA LÍNEA EN `hunspell-en` ───────────────────────────────
+# El encabezado de `hunspell-en.toml` decía que añadir otro idioma «es UNA LÍNEA en el install»,
+# y técnicamente lo es — pero un paquete llamado `hunspell-en` que instala castellano es un nombre
+# que miente, y este repo ya tiene medido lo que cuesta eso ([[la-etiqueta-no-es-el-hecho]]).
+# Misma fuente, mismo sha256, otro paquete: el fetcher cachea el tarball por URL+sha, así que los
+# 110 MB se bajan UNA vez para los dos (y para los ~88 idiomas que queden por venir).
+#
+# ── LAS 23 VARIANTES, Y POR QUÉ VAN TODAS ─────────────────────────────────────────────────────
+# El castellano no viene como un fichero: el proyecto RLA-ES publica una variante por país —es_ES,
+# es_MX, es_AR, es_PE, es_BO, es_CL, es_CO, es_CR, es_CU, es_DO, es_EC, es_GQ, es_GT, es_HN, es_NI,
+# es_PA, es_PH, es_PR, es_PY, es_SV, es_US, es_UY, es_VE— que se diferencian en regionalismos sobre
+# un tronco común. **Cuestan 20 MB en total** (~880 KB cada una: 715 KB de `.dic` y 169 KB de
+# `.aff`), sobre una imagen de escritorio de ~10,8 G ⇒ 0,18 %.
+#
+# Van las 23 a propósito, y la alternativa se consideró: elegir una o dos es elegir el país del
+# usuario, y equivocarse ahí se nota en cada palabra subrayada que no debería estarlo. `enchant`
+# escoge la variante por el locale (`es_PE`, `es_MX`…) y cae a la genérica si la exacta no está, así
+# que traerlas todas es lo que hace que el corrector funcione sin configurar nada.
+# ⚠ Recortarlo es UNA LÍNEA: cambiar el glob `es_*` de abajo por los códigos que se quieran. Si
+# algún día 20 MB pesan —en una imagen mínima, por ejemplo— ése es el sitio.
+#
+# ── LO QUE NO SE INSTALA, Y NO ES OLVIDO ──────────────────────────────────────────────────────
+# El directorio `es/` del tarball trae también `hyph_es.dic` (guionado) y `th_es_v2.dat` (tesauro
+# MyThes). **Hunspell no lee ninguno de los dos**: el guionado es de `libhyphen` y el tesauro de
+# `libmythes`, dos librerías que no están en el catálogo y que nadie pide todavía. Instalarlos en
+# `/usr/share/hunspell` sería poner ficheros donde nada los va a buscar.
+#
+# ⚠ EL DIRECTORIO IMPORTA: `enchant` busca en `${datadir}/hunspell` (su `ENCHANT_HUNSPELL_DICT_DIR`).
+# Un diccionario en el sitio equivocado es indistinguible de uno que no está.
+name = "hunspell-es"
+version = "25.2.5.2"
+license = "GPL-3.0-only OR LGPL-3.0-only OR MPL-1.1"
+
+[source]
+tarball = "https://github.com/LibreOffice/dictionaries/archive/refs/tags/libreoffice-25.2.5.2.tar.gz"
+sha256 = "cb9f172aae04efec384dd7193109b2d99852d825d70ad85d12c69639045c3ba6"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+link = "dynamic"
+
+[build.phases]
+configure = "true"
+compile = "true"
+install = '''
+set -e
+mkdir -p /out/usr/share/hunspell /out/usr/share/licenses/hunspell-es
+cp -a es/es_*.aff es/es_*.dic /out/usr/share/hunspell/
+cp -a es/README_hunspell_es.txt es/LICENSE.md es/GPLv3.txt es/LGPLv3.txt es/MPL-1.1.txt /out/usr/share/licenses/hunspell-es/
+# Regla 3 del repo: un diccionario vacío es un diccionario que no está. Se comprueba que haya las
+# 23 variantes Y que la de referencia traiga palabras de verdad — no sólo que el fichero exista.
+test "$(ls /out/usr/share/hunspell/es_*.dic | wc -l)" -eq 23
+test "$(wc -l < /out/usr/share/hunspell/es_ES.dic)" -gt 10000
+grep -q '^ñandú' /out/usr/share/hunspell/es_ES.dic
+'''
+
+[deps]
+build = []