/
separator.go
81 lines (62 loc) · 2.31 KB
/
separator.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package fmtutil
// ////////////////////////////////////////////////////////////////////////////////// //
// //
// Copyright (c) 2022 ESSENTIAL KAOS //
// Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0> //
// //
// ////////////////////////////////////////////////////////////////////////////////// //
import (
"strings"
"pkg.re/essentialkaos/ek.v12/fmtc"
"pkg.re/essentialkaos/ek.v12/terminal/window"
)
// ////////////////////////////////////////////////////////////////////////////////// //
// SeparatorColorTag is fmtc color tag used for separator (light gray by default)
var SeparatorColorTag = "{s}"
// SeparatorTitleColorTag is fmtc color tag used for separator title (light gray by default)
var SeparatorTitleColorTag = "{s}"
// SeparatorFullscreen allow enabling full-screen separator
var SeparatorFullscreen = false
// SeparatorSymbol used for separator generation
var SeparatorSymbol = "-"
// SeparatorSize contains size of separator
var SeparatorSize = 88
// ////////////////////////////////////////////////////////////////////////////////// //
// Separator renders separator to console
func Separator(tiny bool, args ...string) {
var separator string
var size int
if SeparatorFullscreen {
size = between(window.GetWidth(), 16, 999999)
} else {
size = between(SeparatorSize, 80, 999999)
}
if len(args) != 0 {
name := args[0]
suffixSize := between((size-4)-len(name), 0, 999999)
separator += SeparatorColorTag
separator += strings.Repeat(SeparatorSymbol, 2) + "{!} "
separator += SeparatorTitleColorTag + name + "{!} "
separator += SeparatorColorTag + strings.Repeat(SeparatorSymbol, suffixSize) + "{!}"
} else {
separator = SeparatorColorTag + getSeparator(size) + "{!}"
}
if !tiny {
separator = "\n" + separator + "\n"
}
fmtc.Println(separator)
}
// ////////////////////////////////////////////////////////////////////////////////// //
func getSeparator(size int) string {
return strings.Repeat(SeparatorSymbol, size)
}
func between(val, min, max int) int {
switch {
case val < min:
return min
case val > max:
return max
default:
return val
}
}