syntax-tree
... is a tree structure managing syntax/format information for text. It can be used to build the backing model for a WYSIWYG editor or to do syntax highlighting.
The below example code and console output is taken from the example app under example/fmt/main.rs
.
```rust
println!("# Create new tree with text 'Hello World'");
let mut tree: Tree
println!("# Format 'o W' underlined"); tree.set(4, 7, Fmt::Underline); println!("{:#?}", tree);
println!("# Format 'World' bold"); tree.set(6, "Hello World".len(), Fmt::Bold); println!("{:#?}", tree);
println!("# Format 'Wor' underlined"); tree.set(6, 9, Fmt::Underline); println!("{:#?}", tree);
println!("# Remove 'o '"); tree.remove(4, 2); println!("{:#?}", tree);
println!("# Remove format underlined from every node in range 'HellW'"); tree.unset(0, 6, &Fmt::Underline); println!("{:#?}", tree);
println!("# Format 'ellW' italic"); tree.set(1, 5, Fmt::Italic); println!("{:#?}", tree);
println!("# Could be rendered to HTML like this:"); println!("{}", to_html(&tree)); ```
The output should be:
```
|-- 'Hello World' []
|-- 'Hello World' [] |-- 'Hell' [] |-- 'o W' [Underline] |-- 'orld' []
|-- 'Hello World' [] |-- 'Hell' [] |-- 'o W' [Underline] |-- 'o ' [] |-- 'W' [Bold] |-- 'orld' [Bold]
|-- 'Hello World' [] |-- 'Hell' [] |-- 'o W' [Underline] |-- 'o ' [] |-- 'W' [Bold] |-- 'orld' [Bold] |-- 'or' [Underline] |-- 'ld' []
|-- 'HellWorld' [] |-- 'Hell' [] |-- 'World' [Bold] |-- 'Wor' [Underline] |-- 'ld' []
|-- 'HellWorld' [] |-- 'Hell' [] |-- 'World' [Bold]
|-- 'HellWorld' [] |-- 'H' [] |-- 'ell' [Italic] |-- 'World' [Bold] |-- 'W' [Italic] |-- 'orld' []
HellWorld
```
The above example HTML rendering would look like this when rendered in a browser:
HellWorld