#text #bidi #shaping

kas-text

Text layout and font management

18 releases

0.6.0 Dec 13, 2022
0.5.0 Aug 20, 2022
0.4.3 Aug 20, 2022
0.4.2 Feb 10, 2022
0.2.0 Nov 23, 2020

#760 in Text processing

Download history 89/week @ 2023-10-26 59/week @ 2023-11-02 73/week @ 2023-11-09 71/week @ 2023-11-16 87/week @ 2023-11-23 116/week @ 2023-11-30 179/week @ 2023-12-07 139/week @ 2023-12-14 108/week @ 2023-12-21 63/week @ 2023-12-28 40/week @ 2024-01-04 61/week @ 2024-01-11 87/week @ 2024-01-18 64/week @ 2024-01-25 46/week @ 2024-02-01 65/week @ 2024-02-08

272 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.

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.

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.6–4.5MB
~76K SLoC