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.
Example
The below example code and console output is taken from the example app under example/fmt/main.rs
.
println!;
let mut tree: = new;
println!;
println!;
tree.set;
println!;
println!;
tree.set;
println!;
println!;
tree.set;
println!;
println!;
tree.remove;
println!;
println!;
tree.unset;
println!;
println!;
tree.set;
println!;
println!;
println!;
The output should be:
# Create new tree with text 'Hello World'
|-- 'Hello World' []
# Format 'o W' underlined
|-- 'Hello World' []
|-- 'Hell' []
|-- 'o W' [Underline]
|-- 'orld' []
# Format 'World' bold
|-- 'Hello World' []
|-- 'Hell' []
|-- 'o W' [Underline]
|-- 'o ' []
|-- 'W' [Bold]
|-- 'orld' [Bold]
# Format 'Wor' underlined
|-- 'Hello World' []
|-- 'Hell' []
|-- 'o W' [Underline]
|-- 'o ' []
|-- 'W' [Bold]
|-- 'orld' [Bold]
|-- 'or' [Underline]
|-- 'ld' []
# Remove 'o '
|-- 'HellWorld' []
|-- 'Hell' []
|-- 'World' [Bold]
|-- 'Wor' [Underline]
|-- 'ld' []
# Remove format underlined from every node in range 'HellW'
|-- 'HellWorld' []
|-- 'Hell' []
|-- 'World' [Bold]
# Format 'ellW' italic
|-- 'HellWorld' []
|-- 'H' []
|-- 'ell' [Italic]
|-- 'World' [Bold]
|-- 'W' [Italic]
|-- 'orld' []
# Could be rendered to HTML like this:
<p>H<em>ell</em><strong><em>W</em>orld</strong></p>
The above example HTML rendering would look like this when rendered in a browser: