CFiggers / banquet

fancy tables

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

banquet

Fancy tables.

(def books
  [{:name "The Fellowship of the Ring" :word-count 187790}
   {:name "The Two Towers" :word-count 156198}
   {:name "The Return of the King" :word-count 137115}])

(banquet/print books)

# ╭────────────────────────────┬────────────╮
# │ name                       │ word-count │
# ├────────────────────────────┼────────────┤
# │ The Fellowship of the Ring │ 187790     │
# │ The Two Towers             │ 156198     │
# │ The Return of the King     │ 137115     │
# ╰────────────────────────────┴────────────╯

Banquet is a library for laying out text-based tables that represent lists of Janet structs or tables. It pairs well with Judge, as you can use Banquet in conjunction with test-stdout to write some very readable tests.

Usage

There are a few options to control the output:

(banquet/print books :padding 0)

# ╭──────────────────────────┬──────────╮
# │name                      │word-count│
# ├──────────────────────────┼──────────┤
# │The Fellowship of the Ring│187790    │
# │The Two Towers            │156198    │
# │The Return of the King    │137115    │
# ╰──────────────────────────┴──────────╯
(banquet/print books :separate-rows true)

# ╭────────────────────────────┬────────────╮
# │ name                       │ word-count │
# ├────────────────────────────┼────────────┤
# │ The Fellowship of the Ring │ 187790     │
# ├────────────────────────────┼────────────┤
# │ The Two Towers             │ 156198     │
# ├────────────────────────────┼────────────┤
# │ The Return of the King     │ 137115     │
# ╰────────────────────────────┴────────────╯
(banquet/print books :style banquet/styles/square)

# ┌────────────────────────────┬────────────┐
# │ name                       │ word-count │
# ├────────────────────────────┼────────────┤
# │ The Fellowship of the Ring │ 187790     │
# │ The Two Towers             │ 156198     │
# │ The Return of the King     │ 137115     │
# └────────────────────────────┴────────────┘
(banquet/print books :style banquet/styles/ascii)

# .-----------------------------------------.
# | name                       | word-count |
# |----------------------------+------------|
# | The Fellowship of the Ring | 187790     |
# | The Two Towers             | 156198     |
# | The Return of the King     | 137115     |
# '-----------------------------------------'

The default style is banquet/styles/round. Currently the only styles are:

  • banquet/styles/square
  • banquet/styles/round
  • banquet/styles/ascii

But it's easy to add more.

(banquet/print books :column-order [:word-count :name])

# ╭────────────┬────────────────────────────╮
# │ word-count │ name                       │
# ├────────────┼────────────────────────────┤
# │ 187790     │ The Fellowship of the Ring │
# │ 156198     │ The Two Towers             │
# │ 137115     │ The Return of the King     │
# ╰────────────┴────────────────────────────╯

:column-order should be an array or tuple containing the same elements as your table's header row, in the order you'd like your columns to appear in the output.

API

banquet/print-rows takes an iterable of iterables of strings.

(banquet/print-rows [["x" "x²"] ["1" "2"] ["2" "4"]])

banquet/print takes an iterable of dicts, and infers the headers from them.

(banquet/print [{:x 1 :y 2} {:x 2 :y 4}])

Both can take the optional named arguments :padding, :separate-rows, :style, and :column-order.

There are lower-level helpers for formatting values and inferring headers from dicts. It's probably easiest to just read the source for those.

Changelog

next

  • renamed print-table to print-rows
  • ability to reorder columns with :column-order named argument

v1.0.0 2023-06-19

Initial release.

About

fancy tables

License:MIT License


Languages

Language:Janet 100.0%