1package ansi
2
3import (
4	"fmt"
5	"sort"
6
7	colorable "github.com/mattn/go-colorable"
8)
9
10// PrintStyles prints all style combinations to the terminal.
11func PrintStyles() {
12	// for compatibility with Windows, not needed for *nix
13	stdout := colorable.NewColorableStdout()
14
15	bgColors := []string{
16		"",
17		":black",
18		":red",
19		":green",
20		":yellow",
21		":blue",
22		":magenta",
23		":cyan",
24		":white",
25	}
26
27	keys := make([]string, 0, len(Colors))
28	for k := range Colors {
29		keys = append(keys, k)
30	}
31
32	sort.Sort(sort.StringSlice(keys))
33
34	for _, fg := range keys {
35		for _, bg := range bgColors {
36			fmt.Fprintln(stdout, padColor(fg, []string{"" + bg, "+b" + bg, "+bh" + bg, "+u" + bg}))
37			fmt.Fprintln(stdout, padColor(fg, []string{"+s" + bg, "+i" + bg}))
38			fmt.Fprintln(stdout, padColor(fg, []string{"+uh" + bg, "+B" + bg, "+Bb" + bg /* backgrounds */, "" + bg + "+h"}))
39			fmt.Fprintln(stdout, padColor(fg, []string{"+b" + bg + "+h", "+bh" + bg + "+h", "+u" + bg + "+h", "+uh" + bg + "+h"}))
40		}
41	}
42}
43
44func pad(s string, length int) string {
45	for len(s) < length {
46		s += " "
47	}
48	return s
49}
50
51func padColor(color string, styles []string) string {
52	buffer := ""
53	for _, style := range styles {
54		buffer += Color(pad(color+style, 20), color+style)
55	}
56	return buffer
57}
58