7个稳定版本
3.0.3 | 2024年7月25日 |
---|---|
3.0.2 | 2024年3月8日 |
3.0.1 | 2024年1月7日 |
2.0.0 | 2023年10月12日 |
1.0.1 | 2022年12月27日 |
#210 in 命令行界面
683 每月下载
用于 5 crates
18KB
156 代码行,不包括注释
syntect-tui
syntect 和 ratatui 风格类型之间的轻量级转换层。如果你正在构建一个由 tui.rs 驱动的 UI 的 CLI 应用程序并且需要语法高亮,那么这个 crate 可能对你很有用!
鉴于这个 crate 的范围有限,我目前没有计划扩展现有功能。然而,我愿意接受请求和/或贡献,所以请随意分叉并提交 pull request。
入门
syntect-tui
在 crates.io 上可用。您可以通过将以下行添加到您的 Cargo.toml
来安装它
syntect-tui = "3.0"
文档
有关更多信息,请阅读 文档
示例代码
基于 syntect 的简单示例,以下是一个解析一些 Rust 代码,使用 syntect 进行高亮并将其转换为 ratatui::text::Line 以在 tui 应用程序中渲染的代码片段
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);
}
许可证 & 致谢
所有代码均在 MIT 许可证下发布。感谢 trishume、fdehau 和 ratatui 社区 构建 sytect
、tui
和 ratatui
!还要感谢为维护此 crate 做出贡献的同行 Rustaceans!
依赖项
~8–16MB
~181K SLoC