github.com/chain5j/chain5j-pkg@v1.0.7/color/color.go (about) 1 // Package color 2 // 3 // @author: xwc1125 4 package color 5 6 import ( 7 "fmt" 8 "reflect" 9 "strings" 10 ) 11 12 // ShowType 显示方式 13 type ShowType int 14 15 const ( 16 ShowType_Terminal ShowType = 0 // 终端默认设置 17 ShowType_Highlight ShowType = 1 // 高亮显示 18 ShowType_Underline ShowType = 4 // 使用下划线 19 ShowType_Blink ShowType = 5 // 闪烁 20 ShowType_Reverse ShowType = 7 // 反白显示 21 ShowType_Invisible ShowType = 8 // 不可见 22 ) 23 24 type ForegroundColor int 25 26 const ( 27 ForegroundColor_Black ForegroundColor = iota + 30 // 30 28 ForegroundColor_Red // 31 29 ForegroundColor_Green // 32 30 ForegroundColor_Yellow // 33 31 ForegroundColor_Blue // 34 32 ForegroundColor_Purple // 35 33 ForegroundColor_Cyan // 36 34 ForegroundColor_White // 37 35 ) 36 37 type BackgroundColor int 38 39 const ( 40 BackgroundColor_Transparent BackgroundColor = iota + 39 // 39 41 BackgroundColor_Black // 40 42 BackgroundColor_Red // 41 43 BackgroundColor_Green // 42 44 BackgroundColor_Yellow // 43 45 BackgroundColor_Blue // 44 46 BackgroundColor_Fuchsia // 45 47 BackgroundColor_Cyan // 46 48 BackgroundColor_White // 47 49 ) 50 51 // Black 黑色 52 func Black(str string, modifier ...interface{}) string { 53 return cliColorRender(str, int(ForegroundColor_Black), 0, modifier...) 54 } 55 56 // DarkGray 深灰色 57 func DarkGray(str string, modifier ...interface{}) string { 58 return cliColorRender(str, int(ForegroundColor_Black), 1, modifier...) 59 } 60 61 // Red 红字体 62 func Red(str string, modifier ...interface{}) string { 63 return cliColorRender(str, int(ForegroundColor_Red), 0, modifier...) 64 } 65 66 // LightRed 淡红色 67 func LightRed(str string, modifier ...interface{}) string { 68 return cliColorRender(str, int(ForegroundColor_Red), 1, modifier...) 69 } 70 71 // Green 绿色字体,modifier里,第一个控制闪烁,第二个控制下划线 72 func Green(str string, modifier ...interface{}) string { 73 return cliColorRender(str, int(ForegroundColor_Green), 0, modifier...) 74 } 75 76 // LightGreen 淡绿 77 func LightGreen(str string, modifier ...interface{}) string { 78 return cliColorRender(str, int(ForegroundColor_Green), 1, modifier...) 79 } 80 81 // Yellow 黄色字体 82 func Yellow(str string, modifier ...interface{}) string { 83 return cliColorRender(str, int(ForegroundColor_Yellow), 0, modifier...) 84 } 85 86 // Brown 棕色 87 func Brown(str string, modifier ...interface{}) string { 88 return cliColorRender(str, int(ForegroundColor_Yellow), 0, modifier...) 89 } 90 91 // Blue 蓝色 92 func Blue(str string, modifier ...interface{}) string { 93 return cliColorRender(str, int(ForegroundColor_Blue), 0, modifier...) 94 } 95 96 // LightBlue 淡蓝 97 func LightBlue(str string, modifier ...interface{}) string { 98 return cliColorRender(str, int(ForegroundColor_Blue), 1, modifier...) 99 } 100 101 // Cyan 青色/蓝绿色 102 func Cyan(str string, modifier ...interface{}) string { 103 return cliColorRender(str, int(ForegroundColor_Cyan), 0, modifier...) 104 } 105 106 // LightCyan 淡青色 107 func LightCyan(str string, modifier ...interface{}) string { 108 return cliColorRender(str, int(ForegroundColor_Cyan), 1, modifier...) 109 } 110 111 // White 白色 112 func White(str string, modifier ...interface{}) string { 113 return cliColorRender(str, int(ForegroundColor_White), 1, modifier...) 114 } 115 116 // LightGray 浅灰色 117 func LightGray(str string, modifier ...interface{}) string { 118 return cliColorRender(str, int(ForegroundColor_White), 0, modifier...) 119 } 120 121 // Purple 紫色 122 func Purple(str string, modifier ...interface{}) string { 123 return cliColorRender(str, int(ForegroundColor_Purple), 0, modifier...) 124 } 125 126 // LightPurple 淡紫色 127 func LightPurple(str string, modifier ...interface{}) string { 128 return cliColorRender(str, int(ForegroundColor_Purple), 1, modifier...) 129 } 130 131 // cliColorRender color颜色处理 132 // str 文本 133 // color 颜色值 134 // weight 权重 135 // extraArgs [0]闪烁 [1]下划线 136 func cliColorRender(str string, color int, weight int, extraArgs ...interface{}) string { 137 // 闪烁效果 138 isBlink := int64(0) 139 if len(extraArgs) > 0 { 140 isBlink = reflect.ValueOf(extraArgs[0]).Int() 141 } 142 // 下划线效果 143 isUnderLine := int64(0) 144 if len(extraArgs) > 1 { 145 isUnderLine = reflect.ValueOf(extraArgs[1]).Int() 146 } 147 var mo []string 148 if isBlink > 0 { 149 mo = append(mo, "05") 150 } 151 if isUnderLine > 0 { 152 mo = append(mo, "04") 153 } 154 if weight > 0 { 155 mo = append(mo, fmt.Sprintf("%d", weight)) 156 } 157 if len(mo) <= 0 { 158 mo = append(mo, "0") 159 } 160 return fmt.Sprintf("\033[%s;%dm"+str+"\033[0m", strings.Join(mo, ";"), color) 161 } 162 163 // ColorRender color颜色处理 164 // str 文本 165 // foregroundColor 前景色 166 // backgroundColor 背景色 167 // extraArgs 扩展的显示方式 168 func ColorRender(str string, foregroundColor ForegroundColor, backgroundColor BackgroundColor, extraArgs ...ShowType) string { 169 var mo []string 170 if len(extraArgs) > 0 { 171 for _, arg := range extraArgs { 172 mo = append(mo, fmt.Sprintf("%d", arg)) 173 } 174 } 175 if backgroundColor >= BackgroundColor_Transparent && backgroundColor <= BackgroundColor_White { 176 mo = append(mo, fmt.Sprintf("%d", backgroundColor)) 177 } 178 if len(mo) <= 0 { 179 mo = append(mo, "0") 180 } 181 return fmt.Sprintf("\033[%s;%dm"+str+"\033[0m", strings.Join(mo, ";"), foregroundColor) 182 }