use crate::MarkdownThat;
use crate::parser::linkfmt::{LinkFormatter, MDLinkFormatter};
#[derive(Debug)]
struct LinkBeautifier {
max_length: usize,
parent: Box<dyn LinkFormatter>,
}
impl LinkFormatter for LinkBeautifier {
fn validate_link(&self, url: &str) -> Option<()> {
self.parent.as_ref().validate_link(url)
}
fn normalize_link(&self, url: &str) -> String {
markdown_that_url::format_url_for_computers(url)
}
fn normalize_link_text(&self, url: &str) -> String {
markdown_that_url::format_url_for_humans(url, self.max_length)
}
}
pub fn add(md: &mut MarkdownThat) {
add_with_char_limit(md, 50);
}
pub fn add_with_char_limit(md: &mut MarkdownThat, max_length: usize) {
let parent = std::mem::replace(&mut md.link_formatter, Box::new(MDLinkFormatter::new()));
md.link_formatter = Box::new(LinkBeautifier { max_length, parent });
}