39 releases (14 breaking)

0.15.0 Apr 24, 2025
0.14.0 Feb 7, 2025
0.13.0 Nov 22, 2024
0.11.0 Dec 20, 2023
0.1.0 Mar 23, 2020

#164 in Command-line interface

Download history 172010/week @ 2025-01-10 124279/week @ 2025-01-17 130131/week @ 2025-01-24 151289/week @ 2025-01-31 235172/week @ 2025-02-07 220225/week @ 2025-02-14 263767/week @ 2025-02-21 277857/week @ 2025-02-28 270889/week @ 2025-03-07 259607/week @ 2025-03-14 235609/week @ 2025-03-21 220424/week @ 2025-03-28 240179/week @ 2025-04-04 278816/week @ 2025-04-11 284065/week @ 2025-04-18 251692/week @ 2025-04-25

1,097,907 downloads per month
Used in 479 crates (via tabled)

MIT license

275KB
7.5K SLoC

papergrid

This is library for pretty tables.

It has relatively low level API. If you're interested in a more friendly one take a look at tabled.

Usage

use papergrid::{
    colors::NoColors,
    config::{
        spanned::SpannedConfig, AlignmentHorizontal, AlignmentVertical, Borders, Entity, Indent,
        Sides,
    },
    dimension::{spanned::SpannedGridDimension, Estimate},
    grid::peekable::PeekableGrid,
    records::vec_records::{CellInfo, VecRecords},
};

fn main() {
    let mut cfg = SpannedConfig::default();
    cfg.set_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('+'),
    });
    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(Entity::Global, AlignmentVertical::Center);
    cfg.set_padding(
        (0, 0).into(),
        Sides::new(
            Indent::spaced(4),
            Indent::spaced(4),
            Indent::spaced(1),
            Indent::spaced(1),
        ),
    );

    let data = [
        ["Papergrid", "is a library", "for print tables", "!"],
        ["", "Just like this", "", ""],
    ];

    let data = data
        .iter()
        .map(|row| row.iter().map(CellInfo::new).collect())
        .collect();

    let records = VecRecords::new(data);

    let mut dims = SpannedGridDimension::default();
    dims.estimate(&records, &cfg);

    let grid = PeekableGrid::new(&records, &cfg, &dims, NoColors).to_string();

    println!("{grid}");
}

Running the example you must see.

+-----------------+------------+----------------+-+
|                 |is a library|for print tables|!|
+    Papergrid    +------------+----------------+-+
|                 |Just like this                 |
+-----------------+------------+----------------+-+

Dependencies

~1.5–2MB
~31K SLoC