#syntax-highlighting #syntax-set #hlight #highlighting #syntax #file #start #theme-set

hlight

This library is dedicated to delivering exceptional syntax highlighting capabilities

11 releases

Uses new Rust 2024

new 0.0.11 Apr 26, 2025
0.0.10 Mar 13, 2025
0.0.2 Feb 27, 2025
0.0.1 May 30, 2023

#451 in Text processing


Used in 3 crates (via glossa-codegen)

Apache-2.0 and LGPL-3.0-or-later

81KB
548 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::{HighlightResource, theme::load_theme_set};

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

fn show_theme_set(set: &HlightThemeSet) {
  set
    .get_inner()
    .themes
    .keys()
    .for_each(|k| println!("{k}"))
}

let set = load_theme_set(Some(THEMES));

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

show_theme_set(res.get_theme_set())

syntax-set

use std::sync::OnceLock;

use hlight::{
  HighlightResource,
  syntax::{SyntaxSet, load_syntax_set},
};

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

let res = HighlightResource::default()
  .with_syntax_set(Cow::Borrowed(static_syntax_set()));

show_syntax_set(res.get_syntax_set())

Dependencies

~6–14MB
~160K SLoC