46 lines
1.1 KiB
Go
46 lines
1.1 KiB
Go
package asciigraph
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"strings"
|
|
"unicode/utf8"
|
|
)
|
|
|
|
// Create legend item as a colored box and text
|
|
func createLegendItem(text string, color AnsiColor) (string, int) {
|
|
return fmt.Sprintf(
|
|
"%s■%s %s",
|
|
color.String(),
|
|
Default.String(),
|
|
text,
|
|
),
|
|
// Can't use len() because of AnsiColor, add 2 for box and space
|
|
utf8.RuneCountInString(text) + 2
|
|
}
|
|
|
|
// Add legend for each series added to the graph
|
|
func addLegends(lines *bytes.Buffer, config *config, lenMax int, leftPad int) {
|
|
lines.WriteString("\n\n")
|
|
lines.WriteString(strings.Repeat(" ", leftPad))
|
|
|
|
var legendsText string
|
|
var legendsTextLen int
|
|
rightPad := 3
|
|
for i, text := range config.SeriesLegends {
|
|
item, itemLen := createLegendItem(text, config.SeriesColors[i])
|
|
legendsText += item
|
|
legendsTextLen += itemLen
|
|
|
|
if i < len(config.SeriesLegends)-1 {
|
|
legendsText += strings.Repeat(" ", rightPad)
|
|
legendsTextLen += rightPad
|
|
}
|
|
}
|
|
|
|
if legendsTextLen < lenMax {
|
|
lines.WriteString(strings.Repeat(" ", (lenMax-legendsTextLen)/2))
|
|
}
|
|
lines.WriteString(legendsText)
|
|
}
|