#语法高亮 #语法 #高亮 #专用 #能力 #集合 #加载

hlight

这个库致力于提供卓越的语法高亮能力

1 个不稳定版本

0.0.1 2023年5月30日
0.0.0 2023年5月29日

#20 in #专用


3 个crate中使用 (通过 glossa-codegen)

Apache-2.0

215KB
347

hlight

输出语法高亮的库。

快速入门

添加依赖项

cargo add hlight

打印到标准输出

use hlight::{gen_syntax_highlight, theme::theme_ayu_dark, HighLightRes};


let s: &str = r#"
[main]
enabled = false
"😎" = "🍥"
float = nan
"#;

let mut res = HighLightRes::default().with_background(false);
// theme_ayu_dark: Cow::from("ayu-dark")
*res.get_name_mut() = theme_ayu_dark();

gen_syntax_highlight("toml", s, Some(&res), None)
    .expect("Failed to get highlighted toml text");

输出

toml.svg

写入文件

use std::fs::File;

let mut file = File::create("test.txt").expect("Failed to create test.txt");
gen_syntax_highlight("toml", s, Some(&res), Some(&mut file))
    .expect("Unable to write syntax-highlighted text to file.")

高级

加载自定义集合

默认启用 ["preset-syntax-set", "preset-theme-set"] 功能。如果您想自定义集合,则不需要加载这些功能。

添加依赖项

cargo add hlight --no-default-features
cargo add once_cell

主题集合

use std::borrow::Cow;
use hlight::{theme::load_theme_set, HighLightRes};

fn main() {
    const THEMES: &[u8] = include_bytes!(concat!(
        env!("CARGO_MANIFEST_DIR"),
        "/assets/theme-set.packdump"
    ));
    let set = load_theme_set(Some(THEMES));

    let mut res = HighLightRes::default();

    *res.get_theme_set_mut() = &set;
    *res.get_name_mut() = Cow::from("Custom-theme-name");
}

语法集合

use hlight::{
    syntax::{load_syntax_set, SyntaxSet},
    HighLightRes,
};
// use std::cell::OnceCell;
use once_cell::sync::OnceCell;

const SYNTAXES: &[u8] = include_bytes!(concat!(
    env!("CARGO_MANIFEST_DIR"),
    "/assets/theme-syntax-set/syntax-set.packdump"
));

fn static_syntax_set() -> &'static SyntaxSet {
    static S: OnceCell<SyntaxSet> = OnceCell::new();
    S.get_or_init(|| load_syntax_set(Some(SYNTAXES)))
}

fn main() {
    let set = static_syntax_set();

    let mut res = HighLightRes::default();
    *res.get_syntax_set_mut() = set;
}

依赖项

~5–14MB
~158K SLoC