42 lines
1.3 KiB
Rust
42 lines
1.3 KiB
Rust
|
use regex::Regex;
|
||
|
use std::{ffi::OsString, fs::read_dir};
|
||
|
pub fn emoji_pass(
|
||
|
markdown: &str,
|
||
|
emoji_web_directory: &String,
|
||
|
emoji_local_directory: &String,
|
||
|
) -> 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_local_directory);
|
||
|
if emoji_file_name.is_none() {
|
||
|
continue;
|
||
|
}
|
||
|
let html_string = format!(
|
||
|
"<img class=\"emoji\" src=\"{emoji_web_directory}/{}\"><img>",
|
||
|
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<OsString> {
|
||
|
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
|
||
|
}
|