use regex::Regex; use std::{ffi::OsString, fs::read_dir}; use crate::config; pub fn emoji_pass(markdown: &str, emoji_config: &Option) -> String { if emoji_config.is_none() { return markdown.to_string(); } let mut markdown = markdown.to_owned(); let re_emojis = Regex::new(r":\w+:").unwrap(); for emoji in re_emojis.find_iter(&markdown.clone()) { let emoji_file_name = get_emoji_file_name( &get_emoji_name(emoji.as_str()), &emoji_config.as_ref().unwrap().emoji_local_directory, ); if emoji_file_name.is_none() { continue; } let html_string = format!( "", emoji_config.as_ref().unwrap().emoji_web_directory, emoji_file_name.unwrap().to_str().unwrap() ); markdown = markdown.replacen(emoji.as_str(), &html_string, 1); } markdown } fn get_emoji_name(emoji_match: &str) -> String { emoji_match.replace(':', "") } fn get_emoji_file_name(emoji_name: &String, emoji_local_directory: &String) -> Option { let all_emojis = read_dir(emoji_local_directory).expect("Failed to read emoji dir"); for e in all_emojis { let e = e.unwrap(); if OsString::from(emoji_name) == e.path().file_stem().unwrap() { return Some(e.file_name()); } } eprintln!("WARNING: No emoji found for {emoji_name} did you add it to your emoji dir?"); None }