//! This example demonstrates the flexibility of [`papergrid`] with manual configurations //! of [`Borders`], [`SpannedConfig`], and column counts with [`IterRecords`]. //! //! * For an alternative to [`Grid`] and [`SpannedGridDimension`] with //! uniform row height and intra-column spans see [`CompactGrid`] and [`CompactGridDimension`]. //! * Note that [`Grid`] supports multiline cells whereas [`CompactGrid`] does not. //! * Note that [`Dimension`] implementations rely on [`Dimension::estimate()`] //! to correctly format outputs, and typically trigger index-out-of-bounds errors otherwise. use papergrid::{ colors::NoColors, config::spanned::SpannedConfig, config::{AlignmentHorizontal, AlignmentVertical, Borders, Entity::Global, Indent, Sides}, dimension::spanned::SpannedGridDimension, dimension::Estimate, grid::iterable::Grid, records::IterRecords, }; fn main() { let cfg = generate_table_config(); let data = [ ["Papergrid", "is a library", "for printing tables", "!"], [ "", "Just like\n\nthis", "", "", ], ]; let records = IterRecords::new(data, 4, None); let mut dim = SpannedGridDimension::default(); dim.estimate(records, &cfg); let grid = Grid::new(records, &dim, &cfg, NoColors).to_string(); println!("{grid}"); } fn generate_table_config() -> SpannedConfig { const STYLE: Borders = Borders { top: Some('-'), top_left: Some('+'), top_right: Some('+'), top_intersection: Some('+'), bottom: Some('-'), bottom_left: Some('+'), bottom_right: Some('+'), bottom_intersection: Some('+'), horizontal: Some('-'), left_intersection: Some('+'), right_intersection: Some('+'), vertical: Some('|'), left: Some('|'), right: Some('|'), intersection: Some('+'), }; let mut cfg = SpannedConfig::default(); cfg.set_borders(STYLE); cfg.set_column_span((1, 1), 3); cfg.set_row_span((0, 0), 2); cfg.set_alignment_horizontal((1, 0).into(), AlignmentHorizontal::Center); cfg.set_alignment_vertical(Global, AlignmentVertical::Center); cfg.set_padding( (0, 0).into(), Sides::new( Indent::spaced(4), Indent::spaced(4), Indent::spaced(1), Indent::spaced(1), ), ); cfg }