///|
/// 实测演示:库里每一种能力各画一张表,直接输出到终端。
///
/// 入口在 .temp/run-demo.sh:WSL 里跑一次,或把 JS 产物交给 bun / node。
/// 颜色与超链接只有在真实终端里才可见,落盘到文件时是一串转义序列。
fn main {
println(
"【1】基础表格:列定义说「这一列怎么显示」,行数据说「显示什么」",
)
let basic = @clitable.Table::new([
@clitable.Column::new("Name"),
@clitable.Column::new("Age").align(@clitable.Right),
@clitable.Column::new("City").align(@clitable.Center),
])
.push(["Alice", "24", "Hangzhou"])
.push(["Bob", "30", "Beijing"])
.push(["Carol", "17", "Suzhou"])
println(basic)
println("")
println("【2】CJK 宽度:全角按 2 列算,列不会跑偏")
let cjk = @clitable.Table::new([
@clitable.Column::new("名字"),
@clitable.Column::new("一句话"),
])
.push(["前端之虎", "写终端表格的"])
.push(["chensuiyi", "喜欢朴素直接"])
.push(["テスト", "全角折算"])
println(cjk)
println("")
println("【3】边框预设:rounded / double / ascii / none")
let cells : Array[Array[String]] = [["a", "b"], ["c", "d"]]
println(@clitable.Table::grid(cells).with_chars(@clitable.Chars::rounded()))
println("")
println(@clitable.Table::grid(cards()).with_chars(@clitable.Chars::double()))
println("")
println(@clitable.Table::grid(cells).with_chars(@clitable.Chars::ascii()))
println("")
println(@clitable.Table::grid(cells).with_chars(@clitable.Chars::none()))
println("")
println(
"【4】颜色:表头绿加粗、边框蓝、一格红(真实终端可见)",
)
let colored = @clitable.Table::new([
@clitable.Column::new("Name"),
@clitable.Column::new("Status"),
])
.with_head_style(@clicolor.green.bold())
.with_border_style(@clicolor.blue)
.push(["alpha", "ok"])
.push([
@clitable.Cell::text("beta"),
@clitable.Cell::text("failing").color(@clicolor.red),
])
println(colored)
println("")
println("【5】跨行跨列:空洞自己补,占位符不用手写")
let spans = @clitable.Table::new([
@clitable.Column::new(""),
@clitable.Column::new(""),
@clitable.Column::new(""),
@clitable.Column::new(""),
@clitable.Column::new(""),
])
.push([
@clitable.Cell::text("hello").span(2),
@clitable.Cell::text("sup").span(2, rows=2),
@clitable.Cell::text("hi").span(1, rows=3),
])
.push([@clitable.Cell::text("howdy").span(2)])
.push(["o", "k", "", ""])
println(spans)
println("")
println("【6】固定行高:放不下的内容末行收成省略号")
let fixed = @clitable.Table::grid([["hello\nhi\nsup"], ["two lines\nonly"]]).with_row_height(
2,
)
println(fixed)
println("")
println("【7】总宽 60 + 自动换行:窄列折行而不截断")
let wrapped = @clitable.Table::new([
@clitable.Column::new("Project").width(10),
@clitable.Column::new("Description").wrap_lines(),
])
.with_width(60)
.with_word_wrap()
.push([
"clitable", "Unicode tables for the command line, designed for MoonBit",
])
.push(["bm2", "A process manager written in MoonBit"])
println(wrapped)
println("")
println("【8】超链接:终端支持 OSC 8 时文本可点击")
let linked = @clitable.Table::new([
@clitable.Column::new("Name"),
@clitable.Column::new("Where"),
])
.push([
@clitable.Cell::text("package"),
@clitable.Cell::text("mooncakes").link("https://mooncakes.io"),
])
.push([
@clitable.Cell::text("source"),
@clitable.Cell::text("github").link(
"https://github.com/chenbimo/clitable",
),
])
println(linked)
println("")
println("【9】纵向表与无表头网格")
println(@clitable.Table::kv([("Name", "clitable"), ("License", "MIT")]))
println("")
println(@clitable.Table::grid([["x", "y"], ["1", "2"], ["3", "4"]]))
}
///|
fn cards() -> Array[Array[String]] {
[["foo", "bar"], ["frob", "quuz"]]
}