#grid #column #terminal #table #cli

cli-grid

一个小巧且无依赖的 crate,用于以基于列网格的风格格式化终端输出。

3 个版本

0.1.2 2020 年 11 月 14 日
0.1.1 2020 年 11 月 14 日
0.1.0 2020 年 11 月 14 日

#521命令行界面

每月 21 次下载

MIT/Apache

42KB
689

一个小巧且无依赖的 crate,用于以基于列网格的风格格式化终端输出。

[---------------------]     [---------------------]     [---------------------]
[---------------------]     [---------------------]     [---------------------]
[---------------------]     [---------------------]     [---------------------]
<----------1---------->                            <-2->
1: Grid column
2: Grid padding

网格中的每个 Cell 可以跨越 1 或多个列。

[ Cell with colspan 1 ]     [---------------------]     [---------------------]
[-------------- Cell with colspan 2 --------------]     [---------------------]
[---------------------------- Cell with colspan 3 ----------------------------]

单元格的水平对齐方式为 HAlign::LeftHAlign::CenterHAlign::RightHAlign::Fill

单元格的垂直对齐方式为 VAlign::TopVAlign::MiddleVAlign::Bottom

示例

use cli_grid::*;
let grid = Grid::builder(vec![
    Row::new(vec![
        Cell::new("1".into(), 1),
        Cell::new("1".into(), 1),
        Cell::new("1".into(), 1),
    ]),
    Row::new(vec![
        Cell::new("2".into(), 2),
        Cell::new("1".into(), 1),
    ]),
    Row::new(vec![
        Cell::new("3".into(), 3),
    ]),
])
.default_blank_char('.')
.column_width(15)
.build();
let expected = format!(
    "{}\n{}\n{}\n",
    "1.............. 1.............. 1..............",
    "2.............................. 1..............",
    "3..............................................",
);
assert_eq!(grid.to_string(), expected);

支持多行 Cell

use cli_grid::*;
let grid = Grid::builder(vec![
    Row::new(vec![
        Cell::new("1".into(), 1),
        Cell::new("1\n1\n1".into(), 1),
        Cell::new("1".into(), 1),
    ]),
    Row::new(vec![
        Cell::new("2".into(), 2),
        Cell::new("1".into(), 1),
    ]),
    Row::new(vec![
        Cell::new("3".into(), 3),
    ]),
])
.default_blank_char('.')
.column_width(15)
.build();
let expected = format!(
    "{}\n{}\n{}\n{}\n{}\n",
    "1.............. 1.............. 1..............",
    "............... 1.............. ...............",
    "............... 1.............. ...............",
    "2.............................. 1..............",
    "3..............................................",
);
assert_eq!(grid.to_string(), expected);

因此也支持嵌套网格。

use cli_grid::*;
let nested_grid = Grid::builder(vec![
    Row::new(vec![
        Cell::new("1".into(), 1),
        Cell::new("1".into(), 1),
    ]),
    Row::new(vec![
        Cell::new("1".into(), 1),
        Cell::new("1".into(), 1),
    ]),
    Row::new(vec![
        Cell::new("1".into(), 1),
        Cell::new("1".into(), 1),
    ]),
])
.default_h_align(HAlign::Center)
.default_blank_char('-')
.column_width(5)
.build();
let grid = Grid::builder(vec![
    Row::new(vec![
        Cell::new("2".into(), 2),
        Cell::new("1".into(), 1),
    ]),
    Row::new(vec![
        Cell::new("1".into(), 1),
        Cell::new(nested_grid.to_string(), 1),
        Cell::new("1".into(), 1),
    ]),
    Row::new(vec![
        Cell::new("3".into(), 3),
    ]),
])
.default_h_align(HAlign::Center)
.default_v_align(VAlign::Middle)
.default_blank_char('.')
.column_width(15)
.build();
let expected = format!(
    "{}\n{}\n{}\n{}\n{}\n",
    "...............2............... .......1.......",
    "............... ..--1-- --1--.. ...............",
    ".......1....... ..--1-- --1--.. .......1.......",
    "............... ..--1-- --1--.. ...............",
    ".......................3.......................",
);
assert_eq!(grid.to_string(), expected);

可以通过 Cell::new_emptyRow::new_empty 方法创建空单元格和行。

可以通过 Cell::new_fillRow::new_fill 方法创建填充单元格和行。

无运行时依赖