-
Notifications
You must be signed in to change notification settings - Fork 0
/
ansi_code.go
125 lines (99 loc) · 2.92 KB
/
ansi_code.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
// Copyright (c) 2021 Michael Treanor
// https://
// MIT License
package sample
import (
"bytes"
"fmt"
"strings"
)
type Any = interface{}
const (
ansiEncodeBasicFMT string = "\x1b[%v;%v;%vm"
prefix string = "\x1b["
fg string = "38;5;"
bg string = "48;5;"
suffix string = "m"
ansiSep string = ";"
fg2 = ansiSep + fg
bg2 = ansiSep + bg
)
var (
defaultAnsiCode = NewColor("2", "0", "1")
)
func ansiEncodeBasic(fg, bg, ef string) string {
return fmt.Sprintf(ansiEncodeBasicFMT, fg, bg, ef)
}
func NewColor(foreground, background, effect string) string {
return newColorConcat(foreground, background, effect)
}
func newColorConcat(foreground, background, effect string) string {
// "\x1b[ %d ; 38;5; %d ; 48;5; %d m"
return prefix + effect + ansiSep + fg + foreground + ansiSep + bg + background + suffix
}
func newColorConcat2(foreground, background, effect string) string {
// "\x1b[ %d ;38;5; %d ;48;5; %d m"
return prefix + effect + fg2 + foreground + bg2 + background + suffix
}
const ansitemplate = "\x1b[000;38;5;000;48;5;000m"
const z = '0'
var a [24]byte
func NewColorMake(foreground, background, effect string) string {
// "\x1b[ 000 ;38;5; 000 ;48;5; 000 m"
// 0,1 2,3,4 5-10 11,12,13 14-19 20,21,22 23
var b = a[:0]
b = []byte(ansitemplate)
fmt.Printf("a: %q\n", a)
fmt.Printf("b: %q\n", b)
fz := 3 - len(foreground)
bz := 3 - len(background)
ez := 3 - len(effect)
for i := 0; i < fz; i++ {
b[2+i] = '0'
}
fmt.Println("fz: ", fz)
fmt.Println("bz: ", bz)
fmt.Println("ez: ", ez)
foreground = strings.Repeat("0", fz) + foreground
background = strings.Repeat("0", bz) + background
effect = strings.Repeat("0", ez) + effect
fmt.Println("foreground: ", foreground)
fmt.Println("background: ", background)
fmt.Println("effect: ", effect)
return ""
}
func newColorSB(foreground, background, effect string) string {
sb := strings.Builder{}
sb.WriteString(prefix)
sb.WriteString(effect)
sb.WriteString(ansiSep)
sb.WriteString(fg)
sb.WriteString(foreground)
sb.WriteString(ansiSep)
sb.WriteString(bg)
sb.WriteString(background)
sb.WriteString(suffix)
return sb.String()
}
func newColorBB(foreground, background, effect string) string {
sb := bytes.Buffer{}
sb.WriteString(prefix)
sb.WriteString(effect)
sb.WriteString(ansiSep)
sb.WriteString(fg)
sb.WriteString(foreground)
sb.WriteString(ansiSep)
sb.WriteString(bg)
sb.WriteString(background)
sb.WriteString(suffix)
return sb.String()
}
func newColorJoin(foreground, background, effect string) string {
return strings.Join(
[]string{prefix + effect, fg + foreground, bg + background + suffix},
ansiSep,
)
}
func newColorSprintf(foreground, background, effect string) string {
return fmt.Sprintf(ansiEncodeBasicFMT, effect, foreground, background)
}