use super::{is_pipe_only, reflow_table};
pub(crate) fn reflow_generated_rows(lines: &[String]) -> Vec<String> {
let (empty, filled): (Vec<_>, Vec<_>) = lines
.iter()
.enumerate()
.partition(|(_, line)| is_pipe_only(line));
if empty.is_empty() || empty.iter().any(|(index, _)| *index < 2) {
return reflow_table(lines);
}
let filled: Vec<String> = filled.into_iter().map(|(_, line)| line.clone()).collect();
let mut out = reflow_table(&filled);
let Some(blank) = out
.get(1)
.filter(|line| is_delimiter_geometry(line))
.map(|line| blank_cells(line))
else {
return reflow_table(lines);
};
for (index, _) in empty {
out.insert(index.min(out.len()), blank.clone());
}
out
}
fn is_delimiter_geometry(line: &str) -> bool {
line.contains('-') && line.chars().all(|ch| matches!(ch, '|' | '-' | ':' | ' '))
}
fn blank_cells(line: &str) -> String {
line.chars()
.map(|ch| if ch == '|' { ch } else { ' ' })
.collect()
}