You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
snekdown/src/format/mod.rs

60 lines
1.5 KiB
Rust

/*
* Snekdown - Custom Markdown flavour and parser
* Copyright (C) 2021 Trivernis
* See LICENSE for more information.
*/
use regex::Regex;
use std::collections::HashMap;
#[cfg(feature = "pdf")]
pub mod chromium_pdf;
pub mod html;
pub mod style;
pub struct PlaceholderTemplate {
value: String,
replacements: HashMap<String, String>,
}
impl PlaceholderTemplate {
pub fn empty() -> Self {
Self::new(String::new())
}
pub fn new(value: String) -> Self {
Self {
value,
replacements: HashMap::new(),
}
}
pub fn set_value(&mut self, value: String) {
self.value = value;
}
pub fn add_replacement(&mut self, name: &str, val: &str) {
self.replacements.insert(name.to_string(), val.to_string());
}
pub fn set_replacements(&mut self, replacements: HashMap<String, String>) {
self.replacements = replacements;
}
pub fn render(&self) -> String {
lazy_static::lazy_static! { static ref RE_REP: Regex = Regex::new(r"\{\{([^}]*)}}").unwrap(); }
let mut ret_string = self.value.clone();
RE_REP.find_iter(&self.value).for_each(|m| {
let full_match = m.as_str();
let name = &full_match[2..full_match.len() - 2];
if let Some(val) = self.replacements.get(name) {
ret_string = ret_string.replace(full_match, val)
} else {
ret_string = ret_string.replace(full_match, "")
}
});
ret_string
}
}