2021-08-09 03:45:42 -04:00
|
|
|
use crate::common::gen::codepoints::WHITESPACE;
|
2021-08-06 07:56:54 -04:00
|
|
|
|
2021-08-10 03:35:14 -04:00
|
|
|
pub fn trimmed(val: &[u8]) -> &[u8] {
|
|
|
|
let mut start = 0;
|
|
|
|
while val.get(start).filter(|&&c| WHITESPACE[c]).is_some() {
|
|
|
|
start += 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
let mut end = val.len();
|
|
|
|
while end > start && val.get(end - 1).filter(|&&c| WHITESPACE[c]).is_some() {
|
|
|
|
end -= 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
&val[start..end]
|
|
|
|
}
|
|
|
|
|
2021-08-06 09:18:45 -04:00
|
|
|
pub fn left_trim(val: &mut Vec<u8>) {
|
2021-08-06 07:56:54 -04:00
|
|
|
let mut len = 0;
|
|
|
|
while val.get(len).filter(|&&c| WHITESPACE[c]).is_some() {
|
|
|
|
len += 1;
|
|
|
|
}
|
|
|
|
val.drain(0..len);
|
|
|
|
}
|
|
|
|
|
2021-08-06 09:18:45 -04:00
|
|
|
pub fn right_trim(val: &mut Vec<u8>) {
|
2021-08-06 07:56:54 -04:00
|
|
|
let mut retain = val.len();
|
|
|
|
while retain > 0 && val.get(retain - 1).filter(|&&c| WHITESPACE[c]).is_some() {
|
|
|
|
retain -= 1;
|
|
|
|
}
|
|
|
|
val.truncate(retain);
|
|
|
|
}
|
|
|
|
|
2021-08-06 09:18:45 -04:00
|
|
|
pub fn collapse_whitespace(val: &mut Vec<u8>) {
|
2021-08-06 07:56:54 -04:00
|
|
|
let mut write = 0;
|
|
|
|
let mut in_whitespace = false;
|
|
|
|
for i in 0..val.len() {
|
|
|
|
let mut c = val[i];
|
|
|
|
if WHITESPACE[c] {
|
|
|
|
if in_whitespace {
|
|
|
|
// Skip this character.
|
|
|
|
continue;
|
|
|
|
};
|
|
|
|
in_whitespace = true;
|
|
|
|
c = b' ';
|
|
|
|
} else {
|
|
|
|
in_whitespace = false;
|
|
|
|
};
|
|
|
|
val[write] = c;
|
|
|
|
write += 1;
|
|
|
|
}
|
|
|
|
val.truncate(write);
|
|
|
|
}
|
|
|
|
|
2021-08-09 12:56:48 -04:00
|
|
|
pub fn remove_all_whitespace(val: &mut Vec<u8>) {
|
|
|
|
let mut write = 0;
|
|
|
|
for i in 0..val.len() {
|
|
|
|
let c = val[i];
|
|
|
|
if WHITESPACE[c] {
|
|
|
|
// Skip this character.
|
|
|
|
continue;
|
|
|
|
};
|
|
|
|
val[write] = c;
|
|
|
|
write += 1;
|
|
|
|
}
|
|
|
|
val.truncate(write);
|
|
|
|
}
|
|
|
|
|
2021-08-06 07:56:54 -04:00
|
|
|
pub fn is_all_whitespace(val: &[u8]) -> bool {
|
|
|
|
for &c in val {
|
|
|
|
if !WHITESPACE[c] {
|
|
|
|
return false;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
true
|
|
|
|
}
|