19 releases

0.7.0 Dec 2, 2024
0.6.0 Dec 13, 2022
0.5.0 Aug 20, 2022
0.4.2 Feb 10, 2022
0.2.0 Nov 23, 2020

#407 in Text processing

Download history 84/week @ 2024-09-22 40/week @ 2024-09-29 1/week @ 2024-10-06 18/week @ 2024-10-13 7/week @ 2024-10-20 8/week @ 2024-10-27 12/week @ 2024-11-03 1/week @ 2024-11-10 7/week @ 2024-11-17 12/week @ 2024-11-24 190/week @ 2024-12-01 101/week @ 2024-12-08 31/week @ 2024-12-15 1/week @ 2024-12-22 10/week @ 2024-12-29 26/week @ 2025-01-05

76 downloads per month
Used in 8 crates (2 directly)

Apache-2.0

210KB
4K SLoC

KAS Text

kas Docs

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 or fontdue)
  • 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.

BIDI layout and editing Markdown

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.

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.

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

~2.7–5MB
~105K SLoC