1// Copyright 2015 Keybase, Inc. All rights reserved. Use of
2// this source code is governed by the included BSD license.
3
4package libkb
5
6import (
7	"fmt"
8	"io"
9	"strings"
10	"text/tabwriter"
11)
12
13func Tablify(writer io.Writer, headings []string, rowfunc func() []string) {
14	w := new(tabwriter.Writer)
15	w.Init(writer, 5, 0, 3, ' ', 0)
16
17	TablifyWithTabWriter(w, headings, rowfunc)
18}
19
20func TablifyWithTabWriter(w *tabwriter.Writer, headings []string, rowfunc func() []string) {
21	dorow := func(cells []string) {
22		fmt.Fprintln(w, strings.Join(cells, "\t"))
23	}
24
25	if headings != nil {
26		dorow(headings)
27		seps := make([]string, len(headings))
28		for i, h := range headings {
29			seps[i] = strings.Repeat("=", len(h)+1)
30		}
31		dorow(seps)
32	}
33
34	for {
35		row := rowfunc()
36		if row == nil {
37			break
38		}
39		dorow(row)
40	}
41
42	w.Flush()
43}
44