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  }