18 releases
0.6.0 | Dec 13, 2022 |
---|---|
0.5.0 | Aug 20, 2022 |
0.4.3 | Aug 20, 2022 |
0.4.2 |
|
0.2.0 | Nov 23, 2020 |
#662 in Text processing
138 downloads per month
Used in 8 crates
(2 directly)
210KB
4K
SLoC
KAS Text
A pure-Rust rich-text processing library suitable for KAS and other GUI tools.
What it does (or may in the future) do:
- Font discovery (very limited; system configuration is ignored)
- Font fallback for missing glyphs
- Text layout: yield a sequence of positioned glyphs
- Supports bi-directional text
- Text shaping (optional) via rustybuzz or harfbuzz
- Handle combining diacritics correctly
- Support position navigation / lookup
- Sub-ligature navigation
- Visual-order BIDI text navigation
- Emoticons
- Rich text: choose font by style/weight/family for a sub-range
- Text annotations: highlight range, underline
- Raster glyphs (via
ab_glyph
orfontdue
) - Fast-ish: good enough for snappy GUIs; further optimisation possible
What it does not do:
- Draw: rastering glyphs yields a sequence of sprites. Caching these in a glyph atlas and rendering to a texture is beyond the scope of this project since it is dependent on the graphics libraries used.
- Editing: mapping input actions (e.g. from a winit
WindowEvent
) to text edit operations is beyond the scope of this project. The API does cover replacing text ranges and finding the nearest glyph index to a coordinate. - Rich text: there is no packaged format for rich text. A
FormattableText
trait and a (limited) Markdown processor are included. - Full text layout: there is no support for custom inter-paragraph gaps, inter-line gaps, embedded images, or horizontal rules.
For more, see the initial design document and issue #1.
Examples
Since kas-text
only concerns text-layout, all examples here are courtesy of KAS GUI. See the examples directory.
Alternatives
Pure-Rust alternatives for typesetting and rendering text:
- Swash: font introspection, shaping, character and script analysis, rendering
- fontdue: rastering and simple layout
- glyph_brush: rendering and simple layout
Non-pure-Rust alternatives include font-kit and piet among others.
MSRV
The Minium Supported Rust Version is 1.65.0.
Contributing
Contributions are welcome. For the less straightforward contributions it is advisable to discuss in an issue before creating a pull-request.
Testing is currently done in a very ad-hoc manner via KAS examples. This is facilitated by tying KAS commits to kas-text commit hashes during development and allows testing editing as well as display. A comprehensive test framework must consider a huge number of cases and the test framework alone would constitute considerably more work than building this library, so for now user-testing and bug reports will have to suffice.
Copyright and License
The COPYRIGHT file includes a list of contributors who claim copyright on this project. This list may be incomplete; new contributors may optionally add themselves to this list.
The KAS library is published under the terms of the Apache License, Version 2.0. You may obtain a copy of this license from the LICENSE file or on the following web page: https://www.apache.org/licenses/LICENSE-2.0
Dependencies
~1.7–4MB
~79K SLoC