#unicode-text #unicode #text-layout #layout

unicode-linebreak

Implementation of the Unicode Line Breaking Algorithm

7 releases

0.1.5 Jul 25, 2023
0.1.4 Sep 29, 2022
0.1.2 Jul 25, 2021
0.1.1 Jan 30, 2021
0.0.1 Dec 10, 2018

#24 in Internationalization (i18n)

Download history 368029/week @ 2024-10-30 407256/week @ 2024-11-06 461870/week @ 2024-11-13 450996/week @ 2024-11-20 337787/week @ 2024-11-27 433951/week @ 2024-12-04 475349/week @ 2024-12-11 344833/week @ 2024-12-18 198927/week @ 2024-12-25 355727/week @ 2025-01-01 503372/week @ 2025-01-08 468965/week @ 2025-01-15 440027/week @ 2025-01-22 453909/week @ 2025-01-29 505126/week @ 2025-02-05 393999/week @ 2025-02-12

1,877,283 downloads per month
Used in 1,176 crates (12 directly)

Apache-2.0

79KB
159 lines

unicode-linebreak

Implementation of the Line Breaking Algorithm described in Unicode Standard Annex #14.

test Documentation

Given an input text, locates "line break opportunities", or positions appropriate for wrapping lines when displaying text.

Example

use unicode_linebreak::{linebreaks, BreakOpportunity::{Mandatory, Allowed}};

let text = "a b \nc";
assert!(linebreaks(text).eq([
	(2, Allowed),   // May break after first space
	(5, Mandatory), // Must break after line feed
	(6, Mandatory)  // Must break at end of text, so that there always is at least one LB
]));

Development

After cloning the repository or modifying LineBreak.txt the tables have to be (re-)generated:

# Generate src/tables.rs
(cd gen-tables && cargo run)
# Run tests to make sure it was successful
cargo test

No runtime deps