crates.io API license build status codecov Lines of code

text-document

A text document structure and management for Rust

This model is thought as a backend for a text UI. [TextDocument] can't be modified directly by the user, only for setting the whole document with set_plain_text(...). The user must use a [TextCursor] using document.create_cursor() to make any change.

Document structure

Elements

All these items are encapsulated in its corresponding [Element] for ease of storage.

The simpler plain text

raw Frame |- Block |- Text |- Block |- Text

The more complex rich text

raw Frame |- Block |- Text --> I really lo |- Text --> ve (imagine it Formatted in bold) |- Text --> Rust |- Image |- Text |- Frame |- Block |- Text |- Text |- Text |- Block |- Text |- Text |- Text |- Block |- Image

Signaling changes

Each modififcation is signaled using callbacks. [TextDocument] offers different ways to make your code aware of any change: - [TextDocument::add_text_change_callback()]

Give the number of removed characters and number of added characters with the reference of a cursor position.

Examples

```rust use text_document::{TextDocument, ChangeReason, MoveMode};

let mut document = TextDocument::new();

document.addtextchangecallback(|position, removedcharacters, addedcharacters|{ println!("position: {}, removedcharacters: {}, addedcharacters: {}", position, removedcharacters, added_characters); } );

document.addelementchangecallback(|element, reason|{ asserteq!(element.uuid(), 0); asserteq!(reason, ChangeReason::ChildrenChanged ); } ); document.setplain_text("beginningend").unwrap();

let mut cursor = document.createcursor(); cursor.setposition(9, MoveMode::MoveAnchor); cursor.insertplaintext("new\nplain_text\ntest");

```

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.