syntax-tree Build Status

... 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.

```rust println!("# Create new tree with text 'Hello World'"); let mut tree: Tree = Tree::new("Hello World", None); println!("{:#?}", tree);

println!("# Format 'o W' underlined"); tree.set(4, 7, FontStyle::Underline); println!("{:#?}", tree);

println!("# Format 'World' bold"); tree.set(6, "Hello World".len(), FontStyle::Bold); println!("{:#?}", tree);

println!("# Format 'Wor' underlined"); tree.set(6, 9, FontStyle::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, 5, FontStyle::Underline); println!("{:#?}", tree);

println!("# Format 'ellW' italic"); tree.set(1, 5, FontStyle::Italic); println!("{:#?}", tree);

println!("# Could be rendered to HTML like this:"); println!("{}", to_html(&tree)); ```

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]

Remove 'o '

|-- 'HellWorld' [] |-- 'Hell' [] |-- 'World' [Bold] |-- 'Wor' [Underline] |-- 'ld' []

Remove format underlined from every node in range 'HellW'

|-- 'HellWorld' [] |-- 'Hell' [] |-- 'World' [Bold] |-- 'W' [] |-- 'or' [Underline] |-- 'ld' []

Format 'ellW' italic

|-- 'HellWorld' [] |-- 'H' [] |-- 'ell' [Italic] |-- 'World' [Bold] |-- 'W' [Italic] |-- 'or' [Underline] |-- 'ld' []

Could be rendered to HTML like this:

HellWorld

```

The above example HTML rendering would look like this when rendered in a browser:

HellWorld