19 releases

new 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

#449 in Text processing

Download history 10/week @ 2024-08-17 16/week @ 2024-08-24 11/week @ 2024-08-31 10/week @ 2024-09-07 7/week @ 2024-09-14 85/week @ 2024-09-21 41/week @ 2024-09-28 1/week @ 2024-10-05 16/week @ 2024-10-12 9/week @ 2024-10-19 7/week @ 2024-10-26 12/week @ 2024-11-02 2/week @ 2024-11-09 7/week @ 2024-11-16 10/week @ 2024-11-23 172/week @ 2024-11-30

194 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
~104K SLoC