#语法高亮 #主题 #HTML-CSS #tree-sitter #HTML渲染 #helix #编辑器

tree-painter

基于tree-sitter和Helix编辑器主题的源代码语法高亮库,并将其渲染为HTML和CSS

1 个不稳定版本

0.0.0 2022年8月13日

#21#helix

MIT 许可证

21KB
309

tree-painter – 一个基于tree-sitter和Helix编辑器主题的源代码语法高亮库,并将其渲染为HTML和CSS。

与使用基于正则表达式的解析器和基于Sublime-2主题定义的syntect不同,tree-painter使用tree-sitter来快速准确地解析源代码,以及使用Helix TOML主题来匹配已识别语言项的颜色和文本样式。

用法

首先,您需要定义要高亮的语言类型

// If you know what you are going to highlight ...
let cpp_lang = tree_painter::Lang::Cpp;

// ... if you don't, you can guess from the file extension.
let rust_lang = tree_painter::Lang::from("file.rs").unwrap();

然后加载一个Helix主题

let data = std::fs::read_to_string("custom.toml").unwrap();
let custom = tree_painter::Theme::from_helix(&data).unwrap();
// or use a bundled theme
let theme = tree_painter::Theme::from_helix(&tree_painter::themes::CATPPUCCIN_MOCHA).unwrap();

最后渲染代码

let mut renderer = tree_painter::Renderer::new(theme);
let source =  std::fs::read_to_string("file.rs").unwrap();

for line in renderer.render(&rust_lang, source.as_bytes()).unwrap() {
    println!("{line}");
}

请注意,每行都使用<span>和CSS类进行格式化。为了将CSS类映射到主题的颜色,请适当包含[Renderer::css()]的输出。

功能标志

默认功能标志启用了支持所有支持tree-sitter 0.20的tree-sitter语法的支持,以及一些捆绑的themes。您可以选择退出并启用特定的语法以减少冗余:

[dependencies]
tree-painter = { version = "0", default-features = false, features = ["tree-sitter-c"] }

依赖项

~62MB
~2M SLoC