| 1 | package scribe |
| 2 | |
| 3 | import "log/slog" |
| 4 | |
| 5 | // Color represents an ANSI color code. |
| 6 | type Color string |
| 7 | |
| 8 | // ANSI color codes. |
| 9 | const ( |
| 10 | Reset Color = "\033[0m" |
| 11 | Bold Color = "\033[1m" |
| 12 | Faint Color = "\033[2m" |
| 13 | Italic Color = "\033[3m" |
| 14 | Black Color = "\033[30m" |
| 15 | Red Color = "\033[31m" |
| 16 | Green Color = "\033[32m" |
| 17 | Yellow Color = "\033[33m" |
| 18 | Blue Color = "\033[34m" |
| 19 | Magenta Color = "\033[35m" |
| 20 | Cyan Color = "\033[36m" |
| 21 | White Color = "\033[37m" |
| 22 | Gray Color = "\033[90m" |
| 23 | |
| 24 | // Bright variants |
| 25 | BrightRed Color = "\033[91m" |
| 26 | BrightGreen Color = "\033[92m" |
| 27 | BrightYellow Color = "\033[93m" |
| 28 | BrightBlue Color = "\033[94m" |
| 29 | BrightMagenta Color = "\033[95m" |
| 30 | BrightCyan Color = "\033[96m" |
| 31 | BrightWhite Color = "\033[97m" |
| 32 | ) |
| 33 | |
| 34 | // DefaultLevelColors returns sensible default colors for log levels. |
| 35 | func DefaultLevelColors() map[slog.Level]Color { |
| 36 | return map[slog.Level]Color{ |
| 37 | slog.LevelDebug: Gray, |
| 38 | slog.LevelInfo: Green, |
| 39 | slog.LevelWarn: Yellow, |
| 40 | slog.LevelError: Red, |
| 41 | } |
| 42 | } |
| 43 | |
| 44 | // Wrap wraps a string with this color and resets at the end. |
| 45 | func (c Color) Wrap(s string) string { |
| 46 | return string(c) + s + string(Reset) |
| 47 | } |
| 48 | |
| 49 | // String returns the ANSI escape sequence. |
| 50 | func (c Color) String() string { |
| 51 | return string(c) |
| 52 | } |
| 53 | |