deepu105 / syntect-tui

Lightweight translation layer between syntect.rs and tui.rs style types

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

syntect-tui Build Status

A lightweight translation layer between syntect and ratatui style types. If you're building a CLI app with a UI powered by tui.rs and need syntax highlighting, then you may find this crate useful!

Given the limited scope of this crate I do not have plans to extend existing functionality much further. However, I am open to requests and/or contributions, so feel free to fork and submit a pull request.

Getting Started

syntect-tui is available on crates.io. You can install it by adding the following line to your Cargo.toml:

syntect-tui = "1.0"

Docs

For more usage information read the docs

Example Code

Building upon syntect's simple example, here's a snippet that parses some rust code, highlights it using syntect and converts it into ratatui::text::Line ready for rendering in a tui appliction:

use syntect::easy::HighlightLines;
use syntect::parsing::SyntaxSet;
use syntect::highlighting::{ThemeSet, Style};
use syntect::util::LinesWithEndings;
use syntui::into_span;

let ps = SyntaxSet::load_defaults_newlines();
let ts = ThemeSet::load_defaults();
let syntax = ps.find_syntax_by_extension("rs").unwrap();
let mut h = HighlightLines::new(syntax, &ts.themes["base16-ocean.dark"]);
let s = "pub struct Wow { hi: u64 }\nfn blah() -> u64 {}";
for line in LinesWithEndings::from(s) { // LinesWithEndings enables use of newlines mode
    let line_spans: Vec<tui::text::Span> =
        h.highlight_line(line, &ps)
         .unwrap()
         .into_iter()
         .filter_map(|segment| into_span(segment).ok())
         .collect();
    let spans = tui::text::Spans::from(line_spans);
    print!("{:?}", spans);
}

Licence & Acknowledgements

Thanks to trishume, fdehau, and the ratatui community for building sytect, tui, and ratatui! All code is released under the MIT License.

About

Lightweight translation layer between syntect.rs and tui.rs style types

License:MIT License


Languages

Language:Rust 100.0%