#syntax-highlighting #syntax #highlighting #capabilities #dedicated #set #delivering

hlight

This library is dedicated to delivering exceptional syntax highlighting capabilities

10 releases

Uses new Rust 2024

0.0.10 Mar 13, 2025
0.0.9 Mar 13, 2025
0.0.2 Feb 27, 2025
0.0.1 May 30, 2023

#290 in Text processing

Download history 9/week @ 2024-12-04 16/week @ 2024-12-11 1/week @ 2024-12-18 22/week @ 2025-02-12 159/week @ 2025-02-26 250/week @ 2025-03-05 842/week @ 2025-03-12

1,256 downloads per month
Used in 3 crates (via glossa-codegen)

Apache-2.0 and LGPL-3.0-or-later

79KB
470 lines

hlight

A library for output syntax highlighting.

ChangeLog

Changelog.md

Quick Start

add dependency

cargo add hlight

print to stdout

use hlight::{Highlighter, theme::names::ayu_dark, HighlightResource};


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

let res = HighlightResource::default()
  .with_background(false)
  .with_theme_name(ayu_dark());

let _ = Highlighter::default()
  .with_syntax_name("toml")
  .with_content(s)
  .with_resource(Some(&res))
  .run();

output:

toml.svg

write to file

use std::fs::File;

use hlight::{Highlighter, HighlightResource, theme::names::ayu_dark};

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

let res = HighlightResource::default()
  .with_background(false)
  .with_theme_name(ayu_dark());

let mut file = File::create("tmp.txt").expect("Failed to create test.txt");

let _ = Highlighter::default()
  .with_syntax_name("toml")
  .with_content(s)
  .with_resource(Some(&res))
  .with_writer(Some(&mut file))
  .run();

Advanced

Load custom set

The ["preset-syntax-set", "preset-theme-set"] features are enabled by default. If you want to customize the set, you don't need to enable these features.

disable default features:

cargo add hlight --no-default-features

theme-set

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

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

fn main() {
    let set = load_theme_set(Some(THEMES));

    let res = HighlightResource::default().with_theme_set(&set).with_theme_name("Custom-theme-name".into());

    show_theme_set(res.get_theme_set())
}

fn show_theme_set(set: &ThemeSet) {
    for k in set.themes.keys() {
        println!("{k}")
    }
}

syntax-set

use hlight::{
    syntax::{load_syntax_set, SyntaxSet},
    HighlightResource,
};
use std::sync::OnceLock;

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

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

fn main() {
    let res = HighlightResource::default().with_syntax_set(static_syntax_set());
    show_syntax_set(res.get_syntax_set())
}

fn show_syntax_set(set: &SyntaxSet) {
    for (name, ext) in set
        .syntaxes()
        .iter()
        .map(|x| (&x.name, &x.file_extensions))
    {
        println!(
            "name: {name}\n\
            ext: {ext:?}\n---"
        )
    }
}

Dependencies

~6–14MB
~161K SLoC