No description
Find a file
romanstingler a2f1f4b2a0
refactor: address clippy warnings and improve code quality (#409)
- Fix string formatting with modern interpolation syntax
- Improve Debug implementation with finish_non_exhaustive()
- Fix function placement in shape.rs to avoid items_after_statements warning
- Use more idiomatic Rust patterns (map_or_else, next_back)
- Clean up conditional imports in vi.rs
- Convert multiple methods to `const` functions for optimization and consistency
- Introduce `core_maths` for enhanced no-std compatibility
- Update `Cargo.toml` for the new optional dependency and feature adjustments
2025-08-11 13:58:59 -06:00
.github/workflows Do not keep github pages history 2024-06-18 09:13:09 -06:00
benches Optimize BidiParagraphs with ASCII fast path (#408) 2025-08-11 13:15:09 -06:00
examples Variable font support (#400) 2025-07-07 08:50:40 -06:00
fonts Variable font support (#400) 2025-07-07 08:50:40 -06:00
sample Fix extra newline in crlf sample 2024-04-30 12:26:28 -06:00
screenshots Add screenshots 2022-11-09 07:22:20 -07:00
src refactor: address clippy warnings and improve code quality (#409) 2025-08-11 13:58:59 -06:00
tests fix for test.sh 2025-03-31 17:03:51 +11:00
.gitattributes Add image render tests 2023-09-27 11:57:18 +03:00
.gitignore Add image render tests 2023-09-27 11:57:18 +03:00
Cargo.toml refactor: address clippy warnings and improve code quality (#409) 2025-08-11 13:58:59 -06:00
CHANGELOG.md 0.14.2 2025-04-14 08:57:14 -06:00
ci.sh Fix no_std build 2024-02-12 10:37:49 -07:00
deny.toml Allow syn duplicate until derivative updates its syn dependency 2024-06-12 08:00:33 -06:00
editor-test.sh Do not use mono feature for editor test 2022-10-25 10:18:11 -06:00
editor.sh Add line ending abstraction (#250) 2024-04-30 12:12:25 -06:00
LICENSE-APACHE Relicense MIT OR Apache 2.0 2022-10-24 12:58:15 -06:00
LICENSE-MIT Relicense MIT OR Apache 2.0 2022-10-24 12:58:15 -06:00
multiview.sh multiview example 2024-01-17 13:31:03 -07:00
README.md Add screenshots 2022-11-09 07:22:20 -07:00
redoxer.sh Fix redoxer script 2023-11-15 12:43:14 -07:00
rich-text.sh Use Color in more places 2022-10-27 09:07:47 -06:00
terminal.sh Improvements to syntax editor, integrate with libcosmic editor 2022-11-09 10:44:51 -07:00
test.sh Vi-style editor and other editor improvements (#40) 2022-11-15 12:26:59 -07:00

COSMIC Text

crates.io docs.rs license Rust workflow

Pure Rust multi-line text handling.

COSMIC Text provides advanced text shaping, layout, and rendering wrapped up into a simple abstraction. Shaping is provided by rustybuzz, and supports a wide variety of advanced shaping operations. Rendering is provided by swash, which supports ligatures and color emoji. Layout is implemented custom, in safe Rust, and supports bidirectional text. Font fallback is also a custom implementation, reusing some of the static fallback lists in browsers such as Chromium and Firefox. Linux, macOS, and Windows are supported with the full feature set. Other platforms may need to implement font fallback capabilities.

Screenshots

Arabic translation of Universal Declaration of Human Rights Arabic screenshot

Hindi translation of Universal Declaration of Human Rights Hindi screenshot

Simplified Chinese translation of Universal Declaration of Human Rights Simplified Chinses screenshot

Roadmap

The following features must be supported before this is "ready":

  • Font loading (using fontdb)
    • Preset fonts
    • System fonts
  • Text styles (bold, italic, etc.)
    • Per-buffer
    • Per-span
  • Font shaping (using rustybuzz)
    • Cache results
    • RTL
    • Bidirectional rendering
  • Font fallback
    • Choose font based on locale to work around "unification"
    • Per-line granularity
    • Per-character granularity
  • Font layout
    • Click detection
    • Simple wrapping
    • Wrapping with indentation
    • No wrapping
    • Ellipsize
  • Font rendering (using swash)
    • Cache results
    • Font hinting
    • Ligatures
    • Color emoji
  • Text editing
    • Performance improvements
    • Text selection
    • Can automatically recreate https://unicode.org/udhr/ without errors (see below)
    • Bidirectional selection
    • Copy/paste
  • no_std support (with default-features = false)
    • no_std font loading
    • no_std shaping
    • no_std layout
    • no_std rendering

The UDHR (Universal Declaration of Human Rights) test involves taking the entire set of UDHR translations (almost 500 languages), concatenating them as one file (which ends up being 8 megabytes!), then via the editor-test example, automatically simulating the entry of that file into cosmic-text per-character, with the use of backspace and delete tested per character and per line. Then, the final contents of the buffer is compared to the original file. All of the 106746 lines are correct.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.