use crate::ported::renderers::shell::zsh::ZshPromptRenderer;
use std::collections::HashMap;
pub struct TcshPromptRenderer;
impl TcshPromptRenderer {
#[allow(non_upper_case_globals)]
pub const escape_hl_start: &'static str = ZshPromptRenderer::escape_hl_start;
#[allow(non_upper_case_globals)]
pub const escape_hl_end: &'static str = ZshPromptRenderer::escape_hl_end;
pub fn character_translations() -> HashMap<char, &'static str> {
let mut t = ZshPromptRenderer::character_translations();
t.insert('%', "%%");
t.insert('\\', "\\\\");
t.insert('^', "\\^");
t.insert('!', "\\!");
t
}
pub fn do_render(rendered: &str, hlstyle_end: &str, nbsp: &str) -> String {
let ret = rendered.to_string();
let end = hlstyle_end;
let trailing = format!("{}{}", nbsp, end);
if ret.ends_with(&trailing) {
let trim_len = nbsp.len() + end.len();
format!("{}{}{}", &ret[..ret.len() - trim_len], end, nbsp)
} else {
format!("{}{}", ret, nbsp)
}
}
}
#[allow(non_camel_case_types)]
pub type renderer = TcshPromptRenderer;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn tcsh_inherits_zsh_escape_markers() {
assert_eq!(TcshPromptRenderer::escape_hl_start, "%{");
assert_eq!(TcshPromptRenderer::escape_hl_end, "%}");
}
#[test]
fn tcsh_translations_include_caret_bang_backslash() {
let t = TcshPromptRenderer::character_translations();
assert_eq!(t.get(&'%'), Some(&"%%"));
assert_eq!(t.get(&'\\'), Some(&"\\\\"));
assert_eq!(t.get(&'^'), Some(&"\\^"));
assert_eq!(t.get(&'!'), Some(&"\\!"));
}
}