summaryrefslogtreecommitdiff
path: root/src/main.rs
blob: 60288013239426ccc5776f274e110a3b664cf95e (plain)
use std::io::Read;
use std::path::PathBuf;

use syntect::dumps::{from_binary, from_uncompressed_data};
use syntect::highlighting::ThemeSet;
use syntect::html::highlighted_html_for_string;
use syntect::parsing::SyntaxSet;

fn main() {
	let syntax_set: SyntaxSet =
		from_uncompressed_data(include_bytes!("../assets/newlines.packdump")).unwrap();
	let theme_set = from_binary::<ThemeSet>(include_bytes!("../assets/themepack.themedump"));
	let mut theme = theme_set.themes["Coldark-Cold"].clone();
	theme.settings.background = None;

	let filename = std::env::args().nth(1).map(PathBuf::from);
	let extension = filename
		.as_ref()
		.and_then(|p| p.extension())
		.and_then(|s| s.to_str());
	let syntax = extension.and_then(|extension| syntax_set.find_syntax_by_extension(extension));

	let mut file = String::new();
	let _ = std::io::stdin().read_to_string(&mut file);

	let Some(syntax) = syntax else {
		print!("{file}");
		return;
	};

	let highlighted_file =
		highlighted_html_for_string(&file, &syntax_set, syntax, &theme).unwrap_or(file);
	println!("{highlighted_file}");
}