#tree-structure #information #text #syntax #node #range #syntax-format

syntax-tree

文本的语法/格式信息管理树结构

5 个不稳定版本

0.3.2 2020年3月24日
0.3.1 2020年3月23日
0.3.0 2020年3月22日
0.2.0 2020年3月21日
0.1.0 2020年3月19日

#57 in #tree-structure

MIT 许可证

44KB
807 代码行,不包括注释

syntax-tree Build Status

... 是一个用于管理文本的语法/格式信息的树结构。它可以用来构建所见即所得编辑器的后端模型,或者用于语法高亮。

示例

以下示例代码和终端输出是从 example/fmt/main.rs 下的示例应用程序中获取的。

println!("# Create new tree with text 'Hello World'");
let mut tree: Tree<FontStyle> = 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));

输出应该是

# 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:
<p>H<em>ell</em><strong><em>W</em><u>or</u>ld</strong></p>

在浏览器中渲染上述示例 HTML 将看起来像这样

HellWorld

依赖项

~265–670KB
~12K SLoC