tecnickcom/tc-lib-unicode-data
Unicode data tables and constants for the Tecnick text stack. Provides lookup tables, mappings, and property, script, bracket, mirror, and shaping data consumed by tc-lib-unicode, keeping runtime libraries focused on algorithms with versioned, deterministic data updates.
Type::getType, Type::getBidiClass, Arabic::getJoiningType) and a versioned regeneration path (make gendata UCDVERSION=17.0.0), so the decision becomes "do we vendor the tables or own the pipeline?" The honest answer for most teams is vendor.Type::UNICODE_VERSION exposes the UCD release the tables derive from. That turns "are we current with Unicode 17?" from an open-ended research question into a tracked, schedulable dependency bump.Type::UNI and Pattern documented in the upgrade notes.NOASSERTION. That mismatch is a legal-review item, not an engineering one, and it should be resolved before the dependency appears in a distributed binary or an on-prem appliance.Adopt when:
Type::getType() resolving unlisted code points, and code-point-based Pattern::RTL / Pattern::ARABIC regexes requiring valid UTF-8 input.Look elsewhere when:
readme-level maturity rating. The ecosystem pedigree is real, but the package itself is not independently battle-tested. If your policy requires multiple maintainers or broad adoption, this fails the screen; pin the version and be prepared to fork the tables if maintenance lapses.To executives: This is a small, data-only dependency that determines whether our generated documents render Arabic, Hebrew and mixed-direction text correctly, or as garbled boxes. It is not a feature; it is the correctness floor under a feature. The cost is a Composer line and a license review. The alternative — building Unicode tables ourselves — is weeks of engineering plus permanent upkeep every time the Unicode standard revises, with zero competitive upside. The ecosystem behind it powers a very large installed base of PHP PDF generation, which is the strongest signal available; the package's own community footprint is small, so we pin the version and treat table regeneration as an owned, scheduled task rather than assuming upstream will carry it.
To engineering: The API is deliberately narrow and data-only — Type, Pattern, Mirror, Bracket, Arabic — covering Bidi_Class (UAX #9), Bidi_Mirroring_Glyph (rule L4), BidiBrackets (rule N0), and Arabic joining types and presentation forms. It does not give you the bidi algorithm, normalization, or shaping logic; that is still ours to write. Requirements are PHP 8.2+ and Composer. Two things to internalize before you start: the 3.x upgrade removes L-class code points from Type::UNI (use Type::getType() instead of array fallbacks), and the Pattern regexes are code-point based with the u modifier, so validate UTF-8 at the boundary. Tables regenerate via make gendata UCDVERSION=… followed by make qa, which is our lever for staying current on Unicode releases.
To legal and security: Two items to close before this ships in anything distributed. First, the repository declares LGPL v3 while Packagist reports NOASSERTION — get a definitive read on the license and confirm our linking and distribution model is compatible. Second, this is a single-maintainer package with minimal independent adoption; record it on the dependency watchlist, pin the version, and note that forking the generated tables is a realistic contingency if upstream goes quiet. Neither is a blocker for evaluation work.
How can I help you explore Laravel packages today?