3 个版本
0.1.2 | 2020 年 11 月 14 日 |
---|---|
0.1.1 | 2020 年 11 月 14 日 |
0.1.0 | 2020 年 11 月 14 日 |
#521 在 命令行界面
每月 21 次下载
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::Left
、HAlign::Center
、HAlign::Right
和 HAlign::Fill
。
单元格的垂直对齐方式为 VAlign::Top
、VAlign::Middle
和 VAlign::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_empty
和 Row::new_empty
方法创建空单元格和行。
可以通过 Cell::new_fill
和 Row::new_fill
方法创建填充单元格和行。