shape.rs

984 B · rust · 26 lines

1/// The characters that dip below the five-row baseline.2pub const DESCENDERS: &[char] = &[3    '@', '$', '\u{00a9}', '\u{00ae}', '(', ')', '[', ']', '{', '}',4];56/// Returns whether the character dips below the baseline.7pub fn descends(c: char) -> bool {8    DESCENDERS.contains(&c)9}1011/// Cuts blank edge columns from a bitmap, collapsing an all-blank one to a single '0' column.12pub fn trim(rows: &[String]) -> Vec<String> {13    let grid: Vec<Vec<char>> = rows.iter().map(|row| row.chars().collect()).collect();14    if grid.is_empty() || grid[0].is_empty() {15        return rows.to_vec();16    }17    let width = grid[0].len();18    let lit = |col: usize| grid.iter().any(|row| row[col] == '1');19    let Some(start) = (0..width).find(|&col| lit(col)) else {20        return grid.iter().map(|_| "0".to_string()).collect();21    };22    let end = (0..width).rev().find(|&col| lit(col)).unwrap();23    grid.iter()24        .map(|row| row[start..=end].iter().collect())25        .collect()26}