Skip to content

tree-sitter based syntax highlighting HTML rendering

License

Notifications You must be signed in to change notification settings

matze/tree-painter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tree-painter

Rust

A source code syntax highlighting library based on tree-sitter and Helix editor themes and rendering to HTML and CSS.

Unlike syntect which uses a regex-based parser and Sublime-2-based theme definitions, tree-painter employs tree-sitter to parse source code quickly and correctly as well as Helix TOML themes to match colors and text styles with recognized language items.

Usage

First, you need to define which kind of language you want to highlight:

// 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();

Then load a Helix theme:

// Load theme from a file ...
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();

Finally render the code:

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}");
}

Note that each line is formatted using <span>s and CSS classes. In order to map the CSS classes to the theme's color include the output of [Renderer::css()] appropriately.

Feature flags

The default feature flag enables support for all tree-sitter grammars supporting tree-sitter 0.20 as well as a couple of bundled [themes]. You can opt out and enable specific grammars to reduce bloat with

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

About

tree-sitter based syntax highlighting HTML rendering

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages