A minor release with one new script and one new asset. Tamil is the fifth Indic script texish shapes, and
every release from this one on carries the font catalogue and the packages as a downloadable tarball — so a
downloaded binary is a complete installation rather than the compiled-in core on its own.
Tamil
\font tamil sets Tamil, shaped through the same IndicScript framework as Devanagari, Bengali, Gurmukhi
and Telugu, with Noto Serif Tamil joining the bundled catalogue in regular and bold.
Tamil turned out to need a change to shared behaviour, for a reason worth stating. The framework lifted a
pre-base vowel sign to the front of its cluster, which is right for the first three scripts — but only
because their virama is consumed by a half-form or a conjunct ligature before the sign is placed, so nothing
stands between the front of the cluster and the base and the two placements coincide.
Tamil keeps the virama visible as the pulli. A silenced consonant is a complete letter, not a half-form, and
the sign leaps only over the consonant it belongs to: க்கே sets ka, pulli, the ee sign, ka — not ee,
ka, pulli, ka. So IndicScript gains preBaseMatraBeforeBase, and reorderPreBaseMatra now takes the
font's halant glyph so it can insert after the last virama the cluster still shows, falling back to the
front of the cluster when a ligature has swallowed them all (க்ஷே → ee, ksha).
Also handled: no reph, the three two-part vowel signs (ொ ோ ௌ) and their canonical decomposition, the
short-i staying post-base unlike Bengali's, and the two surviving Sanskrit conjuncts — க்ஷ ksha and
ஸ்ரீ shrii, each one ligature. The bundled face carries only akhn, abvs and psts in GSUB, so most of
what Tamil needs is reordering rather than substitution.
Thirty new tests, and every glyph sequence asserted at the font level was confirmed against hb-shape.
Demo: scripts/tamil-demo.script.
A release you can install
Until now a release attached three bare binaries. Download one and you got the compiled-in core: \use{diagram}
failed, Hebrew failed. Self-location worked perfectly and had nothing to find.
Every release now also attaches texish-<version>-share.tar.gz — the font catalogue and the packages,
about 92MB compressed, laid out under a share/texish/ prefix. Unpack it at the prefix holding the binary
and the installation is complete, with no wrapper script and no environment variable:
curl -L -o ~/.local/bin/texish \
"https://github.com/edadma/texish/releases/download/v0.26.0/texish-0.26.0-macos-arm64"
chmod +x ~/.local/bin/texish
curl -L "https://github.com/edadma/texish/releases/download/v0.26.0/texish-0.26.0-share.tar.gz" \
| tar -xz -C ~/.localThe archive is built deterministically — sorted members, zeroed timestamps and ownership, no gzip mtime — so
rebuilding it against an existing tag produces the same bytes, and a checksum a package manager has pinned
stays valid. A .sha256 is attached beside it.
A Homebrew formula template ships in the repository at packaging/homebrew/, with the version and checksums
left as markers and a README covering how to fill them in.
Rendering the demos in CI
Three defects shipped in the previous release that ~1500 unit tests could not see. They were all invisible
for the same structural reason: the suite runs from the checkout, where \use searches . and ./packages
and the font tree sits at the repository root, so everything is always found — whether or not an installation
would have found it.
tools/render-corpus.sh renders every demo in scripts/ with a real binary from an empty working directory,
in the two configurations a user can actually be in. With nothing installed, the outcome is compared exactly
against a checked-in list of the demos that render from the compiled-in core alone, in both directions, so a
demo silently dropping out of that set fails the build. Installed in a prefix and reached without
$TEXISHHOME, all 36 must render — which exercises self-location too. A demo that fails must also fail for
the right reason: a missing face or a missing package, not a crash wearing the same exit code.
It runs in .github/workflows/ci.yml, which is the first workflow in this repository to run tests at all.
Fixes
- The installation and CLI reference pages named a build target that does not exist —
texishNative/nativeLink
producingnative/target/scala-3.8.4/texish, where it istexishCli/nativeLinkproducing
cli/target/scala-3.8.4/texish-cli.
A note on API
IndicScript.reorderPreBaseMatra gained a fourth parameter. The trait is public with no private[texish],
so this is technically a breaking change, though it is an internal extension point that nothing outside the
engine plausibly implements. It is on the list to be narrowed before 1.0.