#![allow(non_snake_case)]
pub fn vim_ispathsep(c: char) -> bool {
c == '/'
}
pub fn vim_ispathsep_nocolon(c: char) -> bool {
vim_ispathsep(c)
}
pub fn get_past_head(path: &str) -> usize {
let bytes = path.as_bytes();
let mut retval = 0;
while retval < bytes.len() && vim_ispathsep(bytes[retval] as char) {
retval += 1;
}
retval
}
pub fn path_tail(fname: &str) -> usize {
let start = get_past_head(fname);
let mut tail = start;
for (i, c) in fname[start..].char_indices() {
if vim_ispathsep_nocolon(c) {
tail = start + i + c.len_utf8();
}
}
tail
}
pub fn shorten_dir_len(str: &str, trim_len: i32) -> String {
let tail = path_tail(str);
let mut d = String::with_capacity(str.len());
let mut skip = false;
let mut dirchunk_len = 0i32;
for (i, c) in str.char_indices() {
if i >= tail {
d.push_str(&str[i..]);
break;
} else if vim_ispathsep(c) {
d.push(c);
skip = false;
dirchunk_len = 0;
} else if !skip {
d.push(c);
if c != '~' && c != '.' {
dirchunk_len += 1;
if dirchunk_len >= trim_len {
skip = true;
}
}
}
}
d
}