pub use orbok_core::versions::NORMALIZATION_VERSION;
pub fn normalize_document(input: &str) -> String {
let input = input.strip_prefix('\u{FEFF}').unwrap_or(input);
let mut out = String::with_capacity(input.len());
let mut line = String::new();
let mut chars = input.chars().peekable();
while let Some(c) = chars.next() {
match c {
'\r' => {
if chars.peek() == Some(&'\n') {
chars.next();
}
flush_line(&mut out, &mut line);
}
'\n' => flush_line(&mut out, &mut line),
'\t' => line.push('\t'),
c if c.is_control() => {} c => line.push(c),
}
}
if !line.is_empty() {
out.push_str(line.trim_end());
}
out
}
fn flush_line(out: &mut String, line: &mut String) {
out.push_str(line.trim_end());
out.push('\n');
line.clear();
}