pub(super) fn text(value: &str) -> String {
let mut escaped = String::with_capacity(value.len());
for character in value.chars() {
if matches!(
character,
'\\' | '`' | '*' | '_' | '{' | '}' | '[' | ']' | '<' | '>' | '#' | '+' | '-' | '!'
) {
escaped.push('\\');
}
escaped.push(character);
}
escaped
}
pub(super) fn table_cell(value: &str) -> String {
text(value).replace('|', "\\|").replace('\n', " ")
}
pub(super) fn code(value: &str) -> String {
let longest = value
.split(|character| character != '`')
.map(str::len)
.max()
.unwrap_or(0);
let fence = "`".repeat(longest + 1);
format!("{fence}{value}{fence}").replace('|', "\\|")
}