| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #ifndef TERMINAL_COLOR_H | ||
| 2 | #define TERMINAL_COLOR_H | ||
| 3 | |||
| 4 | #include <stdbool.h> | ||
| 5 | #include <stddef.h> | ||
| 6 | #include <stdint.h> | ||
| 7 | #include "feature.h" | ||
| 8 | #include "util/macros.h" | ||
| 9 | |||
| 10 | #define COLOR_RGB(x) (COLOR_FLAG_RGB | (x)) | ||
| 11 | |||
| 12 | enum { | ||
| 13 | COLOR_INVALID = -3, | ||
| 14 | COLOR_KEEP = -2, | ||
| 15 | COLOR_DEFAULT = -1, | ||
| 16 | COLOR_BLACK = 0, | ||
| 17 | COLOR_RED = 1, | ||
| 18 | COLOR_GREEN = 2, | ||
| 19 | COLOR_YELLOW = 3, | ||
| 20 | COLOR_BLUE = 4, | ||
| 21 | COLOR_MAGENTA = 5, | ||
| 22 | COLOR_CYAN = 6, | ||
| 23 | COLOR_GRAY = 7, | ||
| 24 | COLOR_DARKGRAY = 8, | ||
| 25 | COLOR_LIGHTRED = 9, | ||
| 26 | COLOR_LIGHTGREEN = 10, | ||
| 27 | COLOR_LIGHTYELLOW = 11, | ||
| 28 | COLOR_LIGHTBLUE = 12, | ||
| 29 | COLOR_LIGHTMAGENTA = 13, | ||
| 30 | COLOR_LIGHTCYAN = 14, | ||
| 31 | COLOR_WHITE = 15, | ||
| 32 | |||
| 33 | // This bit flag is used to allow 24-bit RGB colors to be differentiated | ||
| 34 | // from basic colors (e.g. #000004 vs. COLOR_BLUE) | ||
| 35 | COLOR_FLAG_RGB = INT32_C(1) << 24 | ||
| 36 | }; | ||
| 37 | |||
| 38 | 1406 | static inline bool color_is_rgb(int32_t color) | |
| 39 | { | ||
| 40 | 1406 | return !!(color & COLOR_FLAG_RGB); | |
| 41 | } | ||
| 42 | |||
| 43 | 2363 | static inline bool color_is_valid(int32_t color) | |
| 44 | { | ||
| 45 | 2363 | bool palette = (color >= COLOR_KEEP && color <= 255); | |
| 46 | 2363 | bool rgb = (color >= COLOR_RGB(0) && color <= COLOR_RGB(0xFFFFFF)); | |
| 47 | 2363 | return palette || rgb; | |
| 48 | } | ||
| 49 | |||
| 50 | // Extract red channel from RGB color | ||
| 51 | 425 | static inline uint8_t color_r(int32_t rgb) | |
| 52 | { | ||
| 53 | 425 | return (rgb >> 16) & 0xFF; | |
| 54 | } | ||
| 55 | |||
| 56 | // Extract green channel from RGB color | ||
| 57 | 425 | static inline uint8_t color_g(int32_t rgb) | |
| 58 | { | ||
| 59 | 425 | return (rgb >> 8) & 0xFF; | |
| 60 | } | ||
| 61 | |||
| 62 | // Extract blue channel from RGB color | ||
| 63 | 425 | static inline uint8_t color_b(int32_t rgb) | |
| 64 | { | ||
| 65 | 425 | return rgb & 0xFF; | |
| 66 | } | ||
| 67 | |||
| 68 | int32_t parse_rgb(const char *str, size_t len); | ||
| 69 | int32_t color_to_nearest(int32_t color, TermFeatureFlags flags, bool optimize); | ||
| 70 | |||
| 71 | #endif | ||
| 72 |