Files
gfn/printer.go

82 lines
1.4 KiB
Go
Raw Normal View History

package main
import (
"fmt"
"io"
"sort"
)
func ListTemplates(output io.Writer) {
names := []string{}
for name := range Templates {
names = append(names, name)
}
sort.Strings(names)
for _, name := range names {
fmt.Fprintln(output, name)
}
}
func PrintColumns(names []string, output io.Writer) error {
count := len(names)
// no need for the hassle to calculate columns
if count <= Columns {
for _, name := range names {
fmt.Fprintln(output, name)
}
return nil
}
// get a transposed list of columns
padlist, max := Getcolumns(names, Columns)
// make sure there's enough spacing between the columns
format := fmt.Sprintf("%%-%ds", max+1)
for _, row := range padlist {
for _, word := range row {
fmt.Fprintf(output, format, word)
}
fmt.Fprintln(output)
}
return nil
}
func Getcolumns(names []string, columns int) ([][]string, int) {
words := len(names)
max := 0
// we'll have a list of $columns columns
padlist := make([][]string, columns)
// initialize'em
for col := 0; col < columns; col++ {
padlist[col] = []string{}
}
// fill from input
for idx := 0; idx < words; idx += columns {
for col := 0; col < columns; col++ {
if idx+col >= words {
padlist[col] = append(padlist[col], "")
} else {
padlist[col] = append(padlist[col], names[idx+col])
length := len(names[idx+col])
if length > max {
max = length
}
}
}
}
// turn columns to rows
return Transpose(padlist), max
}