1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//! `uzor-text` — pretext-pattern text layout engine for uzor (Arc 2).
//!
//! Pure, stateless functions from styled spans + [`FontSpec`] to
//! per-glyph positions ([`ParagraphLayout`]) via a swappable [`LineShaper`]
//! ([`CosmicShaper`] today — cosmic-text, the same substrate
//! `uzor::shaper` already uses for single-line text; parley could swap in
//! later behind the same trait).
//!
//! This crate currently implements **Phase 1 + Phase 2 + Phase 3 + Phase 4
//! + Phase 5** of `nemo/docs/uzor-engines/uzor_text_arc2_design.md`: plain-text
//! greedy word-wrap ([`layout_text`], Phase 1), rich multi-run spans,
//! [`InlineBox`], and a mixed-run baseline pass ([`layout_paragraph`],
//! Phase 2), the resize-morph kinetics ([`kinetics::build_morph`]/
//! [`kinetics::sample`], Phase 3), the ASCII cell-shader mode ([`ascii`],
//! Phase 4 — absorbed verbatim from `uzor` core's
//! `ui::effects::text::cell_shader`, plus the net-new
//! [`ascii::ParagraphAsciiShader`] bridge from a real
//! [`layout::ParagraphLayout`] into an ASCII grid), and English Liang-pattern
//! hyphenation + Knuth-Plass total-fit line breaking
//! ([`linebreak::BreakStrategy`]/[`linebreak::Hyphenation`] on
//! [`Paragraph`], Phase 5, opt-in — [`layout_paragraph`]'s default remains
//! Phase 1/2's greedy packer byte-for-byte) — see this crate's `CLAUDE.md`
//! for exactly what each phase built vs. deferred, and where its
//! implementation diverges from the design doc's own sketch.
pub use ;
pub use ;
pub use ;
pub use ;
pub use paragraph_intrinsic_size;
pub use ;
pub use ;