Repository navigation
[1.0.0] — 2026-09-20
First stable release. No functional change from the unreleased 0.7 series; the version bump signals API stability across the surface documented in the README and guides.
Breaking changes
-
Link detection now follows UTS #58 instead of the twitter-text rules; pass
twitter_quirks: truetourls/2,emails/2,all/2orsplit/2for the previous behaviour.Text.Extract.Boundaryis removed, superseded byText.Extract.Link. -
Predicate helpers in
Text.Inflect.En,.Pluralizeand.Singularizeare renamed fromis_foo/ntofoo?/n(e.g.is_pronoun/2→pronoun?/2); stdlib guards are untouched. The data-returningText.Inflect.En.Helpers.is_ides/0becomesides_pattern/0.
Enhancements
-
The
:unicodedependency requirement is~> 2.2, based upon Unicode 18. -
Adds
Text.Extract.Link, implementing UTS #58 §3.5.1 termination against the full Unicode repertoire — 65 bracket pairs and 129 ranges of soft terminators, against the 4 pairs and 7 characters handled before. -
Adds
Text.Extract.Escape, implementing UTS #58 §4.1 minimal escaping, which rewrites a URL into its most readable form without changing where link detection ends it.minimal/1accepts either a serialised URL or a keyword list of already-parsed parts, the latter for when a syntax character is data rather than structure. -
Adds
mix text.download_uts58to vendor the UTS #58 conformance suites intotest/fixtures/uts58/, with--release,--into,--diffand--dry-run. Both suites run as part of the test suite and pass in full. -
URL detection now accepts hosts and paths that are wholly non-ASCII, all four UTS #46 label separators (so
普遍适用测试。我爱你is a two-label host), hosts carrying an explicit root label (foo.example.com./path), andmailto:addresses. Script-internal punctuation such as the Tibetan tsheg is accepted in host labels, since UTS #46 processing validates the host afterwards.
Bug fixes
-
mix text.download_tlds,text.download_lemma_dataandtext.download_lid176no longer crash when run without--force.not options[:force]raised anArgumentErroron thenilthe option parser supplies when a boolean switch is absent, which made the up-to-date path unreachable. -
Text.Slug.slugify/2expectations updated forunicode_transform1.1.0, which now emits a separator between Pinyin syllables as ICU does, so北京slugifies tobei-jing.