147 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Package cylogger provides ANSI color constants and utilities for terminal output.
 | |
| // This file contains all the color constants used by the logger for styling log messages.
 | |
| // It includes regular colors, bold colors, underlined colors, background colors,
 | |
| // high intensity colors, and utility functions for generating random colors.
 | |
| package cylogger
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"math/rand/v2"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	// Reset
 | |
| 	Reset = "\033[0m" // Text Reset
 | |
| 
 | |
| 	// Regular Colors
 | |
| 	Black   = "\033[0;30m"     // Black
 | |
| 	Red     = "\033[0;31m"     // Red
 | |
| 	Green   = "\033[0;32m"     // Green
 | |
| 	Yellow  = "\033[0;33m"     // Yellow
 | |
| 	Blue    = "\033[0;34m"     // Blue
 | |
| 	Purple  = "\033[0;35m"     // Purple
 | |
| 	Cyan    = "\033[0;36m"     // Cyan
 | |
| 	White   = "\033[0;37m"     // White
 | |
| 	Orange  = "\033[38;5;208m" // Orange
 | |
| 	Pink    = "\033[38;5;205m" // Pink
 | |
| 	Brown   = "\033[38;5;130m" // Brown
 | |
| 	Gray    = "\033[38;5;240m" // Gray
 | |
| 	Magenta = "\033[38;5;201m" // Magenta
 | |
| 
 | |
| 	// Bold
 | |
| 	BBlack   = "\033[1;30m"       // Black
 | |
| 	BRed     = "\033[1;31m"       // Red
 | |
| 	BGreen   = "\033[1;32m"       // Green
 | |
| 	BYellow  = "\033[1;33m"       // Yellow
 | |
| 	BBlue    = "\033[1;34m"       // Blue
 | |
| 	BPurple  = "\033[1;35m"       // Purple
 | |
| 	BCyan    = "\033[1;36m"       // Cyan
 | |
| 	BWhite   = "\033[1;37m"       // White
 | |
| 	BOrange  = "\033[1;38;5;208m" // Bold Orange
 | |
| 	BPink    = "\033[1;38;5;205m" // Bold Pink
 | |
| 	BBrown   = "\033[1;38;5;130m" // Bold Brown
 | |
| 	BGray    = "\033[1;38;5;240m" // Bold Gray
 | |
| 	BMagenta = "\033[1;38;5;201m" // Bold Magenta
 | |
| 
 | |
| 	// Underline
 | |
| 	UBlack   = "\033[4;30m"       // Black
 | |
| 	URed     = "\033[4;31m"       // Red
 | |
| 	UGreen   = "\033[4;32m"       // Green
 | |
| 	UYellow  = "\033[4;33m"       // Yellow
 | |
| 	UBlue    = "\033[4;34m"       // Blue
 | |
| 	UPurple  = "\033[4;35m"       // Purple
 | |
| 	UCyan    = "\033[4;36m"       // Cyan
 | |
| 	UWhite   = "\033[4;37m"       // White
 | |
| 	UOrange  = "\033[4;38;5;208m" // Underline Orange
 | |
| 	UPink    = "\033[4;38;5;205m" // Underline Pink
 | |
| 	UBrown   = "\033[4;38;5;130m" // Underline Brown
 | |
| 	UGray    = "\033[4;38;5;240m" // Underline Gray
 | |
| 	UMagenta = "\033[4;38;5;201m" // Underline Magenta
 | |
| 
 | |
| 	// Background
 | |
| 	On_Black   = "\033[40m"       // Black
 | |
| 	On_Red     = "\033[41m"       // Red
 | |
| 	On_Green   = "\033[42m"       // Green
 | |
| 	On_Yellow  = "\033[43m"       // Yellow
 | |
| 	On_Blue    = "\033[44m"       // Blue
 | |
| 	On_Purple  = "\033[45m"       // Purple
 | |
| 	On_Cyan    = "\033[46m"       // Cyan
 | |
| 	On_White   = "\033[47m"       // White
 | |
| 	On_Orange  = "\033[48;5;208m" // Orange Background
 | |
| 	On_Pink    = "\033[48;5;205m" // Pink Background
 | |
| 	On_Brown   = "\033[48;5;130m" // Brown Background
 | |
| 	On_Gray    = "\033[48;5;240m" // Gray Background
 | |
| 	On_Magenta = "\033[48;5;201m" // Magenta Background
 | |
| 
 | |
| 	// High Intensty
 | |
| 	IBlack   = "\033[0;90m"       // Black
 | |
| 	IRed     = "\033[0;91m"       // Red
 | |
| 	IGreen   = "\033[0;92m"       // Green
 | |
| 	IYellow  = "\033[0;93m"       // Yellow
 | |
| 	IBlue    = "\033[0;94m"       // Blue
 | |
| 	IPurple  = "\033[0;95m"       // Purple
 | |
| 	ICyan    = "\033[0;96m"       // Cyan
 | |
| 	IWhite   = "\033[0;97m"       // White
 | |
| 	IOrange  = "\033[0;38;5;208m" // Intense Orange
 | |
| 	IPink    = "\033[0;38;5;205m" // Intense Pink
 | |
| 	IBrown   = "\033[0;38;5;130m" // Intense Brown
 | |
| 	IGray    = "\033[0;38;5;240m" // Intense Gray
 | |
| 	IMagenta = "\033[0;38;5;201m" // Intense Magenta
 | |
| 
 | |
| 	// Bold High Intensty
 | |
| 	BIBlack   = "\033[1;90m"       // Black
 | |
| 	BIRed     = "\033[1;91m"       // Red
 | |
| 	BIGreen   = "\033[1;92m"       // Green
 | |
| 	BIYellow  = "\033[1;93m"       // Yellow
 | |
| 	BIBlue    = "\033[1;94m"       // Blue
 | |
| 	BIPurple  = "\033[1;95m"       // Purple
 | |
| 	BICyan    = "\033[1;96m"       // Cyan
 | |
| 	BIWhite   = "\033[1;97m"       // White
 | |
| 	BIOrange  = "\033[1;38;5;208m" // Bold Intense Orange
 | |
| 	BIPink    = "\033[1;38;5;205m" // Bold Intense Pink
 | |
| 	BIBrown   = "\033[1;38;5;130m" // Bold Intense Brown
 | |
| 	BIGray    = "\033[1;38;5;240m" // Bold Intense Gray
 | |
| 	BIMagenta = "\033[1;38;5;201m" // Bold Intense Magenta
 | |
| 
 | |
| 	// High Intensty backgrounds
 | |
| 	On_IBlack   = "\033[0;100m"      // Black
 | |
| 	On_IRed     = "\033[0;101m"      // Red
 | |
| 	On_IGreen   = "\033[0;102m"      // Green
 | |
| 	On_IYellow  = "\033[0;103m"      // Yellow
 | |
| 	On_IBlue    = "\033[0;104m"      // Blue
 | |
| 	On_IPurple  = "\033[10;95m"      // Purple
 | |
| 	On_ICyan    = "\033[0;106m"      // Cyan
 | |
| 	On_IWhite   = "\033[0;107m"      // White
 | |
| 	On_IOrange  = "\033[0;48;5;208m" // Intense Orange Background
 | |
| 	On_IPink    = "\033[0;48;5;205m" // Intense Pink Background
 | |
| 	On_IBrown   = "\033[0;48;5;130m" // Intense Brown Background
 | |
| 	On_IGray    = "\033[0;48;5;240m" // Intense Gray Background
 | |
| 	On_IMagenta = "\033[0;48;5;201m" // Intense Magenta Background
 | |
| )
 | |
| 
 | |
| // The acceptable range is [16, 231] but here we remove some very dark colors
 | |
| // That make text unreadable on a dark terminal
 | |
| // See https://www.hackitu.de/termcolor256/
 | |
| var colors = []int{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, 57, 62, 63, 64, 65, 67, 68, 69, 70, 71, 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, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 148, 149, 150, 151, 152, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 226, 227, 228, 229, 230}
 | |
| var colorsIndex int = -1
 | |
| var shuffled bool
 | |
| 
 | |
| // GenerateRandomAnsiColor generates a random ANSI color code from a curated set of colors.
 | |
| // The colors are shuffled once and then cycled through in order.
 | |
| // This is useful for generating unique colors for different log sources or components.
 | |
| // The function returns a formatted ANSI color code that can be used for text styling.
 | |
| // Example:
 | |
| //
 | |
| //	color := cylogger.GenerateRandomAnsiColor()
 | |
| //	fmt.Printf("%sColored text%s", color, cylogger.Reset)
 | |
| func GenerateRandomAnsiColor() string {
 | |
| 	if !shuffled {
 | |
| 		rand.Shuffle(len(colors), func(i int, j int) {
 | |
| 			colors[i], colors[j] = colors[j], colors[i]
 | |
| 		})
 | |
| 		shuffled = true
 | |
| 	}
 | |
| 	colorsIndex++
 | |
| 	return fmt.Sprintf("\033[1;4;38;5;%dm", colors[colorsIndex%len(colors)])
 | |
| }
 |