Aligned plain-text table renderer in Nim
Nim
import std/[strutils, sequtils]
proc formatRow(cells: seq[string]; widths: seq[int]): string =
for i, cell in cells:
if i > 0: result.add(" | ")
result.add(cell.alignLeft(widths[i]))
proc renderTable(headers: seq[string]; rows: seq[seq[string]]): string =
var widths = newSeq[int](headers.len)
for i, h in headers: widths[i] = h.len
for row in rows:
for i, cell in row:
if cell.len > widths[i]: widths[i] = cell.len
result.add(formatRow(headers, widths))
result.add("\n" & widths.mapIt(repeat("-", it)).join("-+-"))
for row in rows:
result.add("\n" & formatRow(row, widths))
echo renderTable(@["name", "lang"], @[@["ada", "nim"], @["grace", "cobol"]])