diff options
author | amatanhead <amatanhead@yandex-team.ru> | 2022-02-10 16:50:04 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:50:04 +0300 |
commit | 8879605a63ac17539be5b3bd41b529791f4d4b02 (patch) | |
tree | 5739c7303cbe09d02b881e25bb294a4a173422a0 /library/cpp/colorizer/colors.h | |
parent | 830fe7ae4073c2707f3f3138303ccc56052c0327 (diff) | |
download | ydb-8879605a63ac17539be5b3bd41b529791f4d4b02.tar.gz |
Restoring authorship annotation for <amatanhead@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'library/cpp/colorizer/colors.h')
-rw-r--r-- | library/cpp/colorizer/colors.h | 382 |
1 files changed, 191 insertions, 191 deletions
diff --git a/library/cpp/colorizer/colors.h b/library/cpp/colorizer/colors.h index 474a918994..1ac3d689f6 100644 --- a/library/cpp/colorizer/colors.h +++ b/library/cpp/colorizer/colors.h @@ -3,195 +3,195 @@ #include "fwd.h" #include <util/generic/string.h> -#include <util/generic/strbuf.h> +#include <util/generic/strbuf.h> #include <cstdio> - + namespace NColorizer { - /** - * List of ECMA-48 colors. - * - * When printing elements of this enum via `operator<<`, `AutoColors()` (see below) function will be used - * to produce colors, i.e. nothing will be printed to non-tty streams. When converting elements of this enum - * via `ToString`, escape code is always returned. - * - * Note: as of now (2019-03), `ya make` strips out some escape codes from compiler output. - * It also inserts `RESET` before each color code. See https://st.yandex-team.ru/DEVTOOLS-5269 for details. - * For now, do not use `OLD`, `ST_*`, `FG_*` and `BG_*` in tools that run through `ya make`. - * - * Note: refrain from using black colors because there's high chance they'll not be visible on some terminals. - * Default windows and ubuntu color schemes shows them as black letters on black background. - * Also, white colors are barely visible in default OSX color scheme. Light black is usually fine though. - */ - enum EAnsiCode: i8 { - // Note: not using `GENERATE_ENUM_SERIALIZATION` because serialization generator depends on this library. - - /// Does not change anything. - INVALID, - - /// Reset all styles and colors. Safe to use in `ya make` tools. - RESET, - - /// Change style, don't change anything else. - ST_LIGHT, - ST_DARK, - ST_NORMAL, - - /// Additional styles. - ITALIC_ON, - ITALIC_OFF, - UNDERLINE_ON, - UNDERLINE_OFF, - - /// Change foreground color, don't change anything else. - FG_DEFAULT, - FG_BLACK, - FG_RED, - FG_GREEN, - FG_YELLOW, - FG_BLUE, - FG_MAGENTA, - FG_CYAN, - FG_WHITE, - - /// Change background color, don't change anything else. - BG_DEFAULT, - BG_BLACK, - BG_RED, - BG_GREEN, - BG_YELLOW, - BG_BLUE, - BG_MAGENTA, - BG_CYAN, - BG_WHITE, - - /// Reset all styles and colors, then enable a (possibly light or dark) color. Safe to use in `ya make` tools. - DEFAULT, - BLACK, - RED, - GREEN, - YELLOW, - BLUE, - MAGENTA, - CYAN, - WHITE, - LIGHT_DEFAULT, - LIGHT_BLACK, - LIGHT_RED, - LIGHT_GREEN, - LIGHT_YELLOW, - LIGHT_BLUE, - LIGHT_MAGENTA, - LIGHT_CYAN, - LIGHT_WHITE, - DARK_DEFAULT, - DARK_BLACK, - DARK_RED, - DARK_GREEN, - DARK_YELLOW, - DARK_BLUE, - DARK_MAGENTA, - DARK_CYAN, - DARK_WHITE, - }; - - /** - * Produces escape codes or empty stringbuf depending on settings. - * All color functions return zero-terminated stringbuf. - */ - class TColors { - public: - static bool CalcIsTTY(FILE* file); - + /** + * List of ECMA-48 colors. + * + * When printing elements of this enum via `operator<<`, `AutoColors()` (see below) function will be used + * to produce colors, i.e. nothing will be printed to non-tty streams. When converting elements of this enum + * via `ToString`, escape code is always returned. + * + * Note: as of now (2019-03), `ya make` strips out some escape codes from compiler output. + * It also inserts `RESET` before each color code. See https://st.yandex-team.ru/DEVTOOLS-5269 for details. + * For now, do not use `OLD`, `ST_*`, `FG_*` and `BG_*` in tools that run through `ya make`. + * + * Note: refrain from using black colors because there's high chance they'll not be visible on some terminals. + * Default windows and ubuntu color schemes shows them as black letters on black background. + * Also, white colors are barely visible in default OSX color scheme. Light black is usually fine though. + */ + enum EAnsiCode: i8 { + // Note: not using `GENERATE_ENUM_SERIALIZATION` because serialization generator depends on this library. + + /// Does not change anything. + INVALID, + + /// Reset all styles and colors. Safe to use in `ya make` tools. + RESET, + + /// Change style, don't change anything else. + ST_LIGHT, + ST_DARK, + ST_NORMAL, + + /// Additional styles. + ITALIC_ON, + ITALIC_OFF, + UNDERLINE_ON, + UNDERLINE_OFF, + + /// Change foreground color, don't change anything else. + FG_DEFAULT, + FG_BLACK, + FG_RED, + FG_GREEN, + FG_YELLOW, + FG_BLUE, + FG_MAGENTA, + FG_CYAN, + FG_WHITE, + + /// Change background color, don't change anything else. + BG_DEFAULT, + BG_BLACK, + BG_RED, + BG_GREEN, + BG_YELLOW, + BG_BLUE, + BG_MAGENTA, + BG_CYAN, + BG_WHITE, + + /// Reset all styles and colors, then enable a (possibly light or dark) color. Safe to use in `ya make` tools. + DEFAULT, + BLACK, + RED, + GREEN, + YELLOW, + BLUE, + MAGENTA, + CYAN, + WHITE, + LIGHT_DEFAULT, + LIGHT_BLACK, + LIGHT_RED, + LIGHT_GREEN, + LIGHT_YELLOW, + LIGHT_BLUE, + LIGHT_MAGENTA, + LIGHT_CYAN, + LIGHT_WHITE, + DARK_DEFAULT, + DARK_BLACK, + DARK_RED, + DARK_GREEN, + DARK_YELLOW, + DARK_BLUE, + DARK_MAGENTA, + DARK_CYAN, + DARK_WHITE, + }; + + /** + * Produces escape codes or empty stringbuf depending on settings. + * All color functions return zero-terminated stringbuf. + */ + class TColors { public: + static bool CalcIsTTY(FILE* file); + + public: explicit TColors(FILE* = stderr); explicit TColors(bool ontty); - TStringBuf Reset() const noexcept; - - TStringBuf StyleLight() const noexcept; - TStringBuf StyleDark() const noexcept; - TStringBuf StyleNormal() const noexcept; - - TStringBuf ItalicOn() const noexcept; - TStringBuf ItalicOff() const noexcept; - TStringBuf UnderlineOn() const noexcept; - TStringBuf UnderlineOff() const noexcept; - - TStringBuf ForeDefault() const noexcept; - TStringBuf ForeBlack() const noexcept; - TStringBuf ForeRed() const noexcept; - TStringBuf ForeGreen() const noexcept; - TStringBuf ForeYellow() const noexcept; - TStringBuf ForeBlue() const noexcept; - TStringBuf ForeMagenta() const noexcept; - TStringBuf ForeCyan() const noexcept; - TStringBuf ForeWhite() const noexcept; - - TStringBuf BackDefault() const noexcept; - TStringBuf BackBlack() const noexcept; - TStringBuf BackRed() const noexcept; - TStringBuf BackGreen() const noexcept; - TStringBuf BackYellow() const noexcept; - TStringBuf BackBlue() const noexcept; - TStringBuf BackMagenta() const noexcept; - TStringBuf BackCyan() const noexcept; - TStringBuf BackWhite() const noexcept; - - TStringBuf Default() const noexcept; - TStringBuf Black() const noexcept; - TStringBuf Red() const noexcept; - TStringBuf Green() const noexcept; - TStringBuf Yellow() const noexcept; - TStringBuf Blue() const noexcept; - TStringBuf Magenta() const noexcept; - TStringBuf Cyan() const noexcept; - TStringBuf White() const noexcept; - - TStringBuf LightDefault() const noexcept; - TStringBuf LightBlack() const noexcept; - TStringBuf LightRed() const noexcept; - TStringBuf LightGreen() const noexcept; - TStringBuf LightYellow() const noexcept; - TStringBuf LightBlue() const noexcept; - TStringBuf LightMagenta() const noexcept; - TStringBuf LightCyan() const noexcept; - TStringBuf LightWhite() const noexcept; - - TStringBuf DarkDefault() const noexcept; - TStringBuf DarkBlack() const noexcept; - TStringBuf DarkRed() const noexcept; - TStringBuf DarkGreen() const noexcept; - TStringBuf DarkYellow() const noexcept; - TStringBuf DarkBlue() const noexcept; - TStringBuf DarkMagenta() const noexcept; - TStringBuf DarkCyan() const noexcept; - TStringBuf DarkWhite() const noexcept; - - /// Compatibility; prefer using methods without `Color` suffix in their names. - /// Note: these behave differently from their un-suffixed counterparts. - /// While functions declared above will reset colors completely, these will only reset foreground color and - /// style, without changing the background color and underline/italic settings. Also, names of these functions - /// don't conform with standard, e.g. `YellowColor` actually emits the `lite yellow` escape code. - TStringBuf OldColor() const noexcept; - TStringBuf BoldColor() const noexcept; - TStringBuf BlackColor() const noexcept; - TStringBuf BlueColor() const noexcept; - TStringBuf GreenColor() const noexcept; - TStringBuf CyanColor() const noexcept; - TStringBuf RedColor() const noexcept; - TStringBuf PurpleColor() const noexcept; - TStringBuf BrownColor() const noexcept; - TStringBuf LightGrayColor() const noexcept; - TStringBuf DarkGrayColor() const noexcept; - TStringBuf LightBlueColor() const noexcept; - TStringBuf LightGreenColor() const noexcept; - TStringBuf LightCyanColor() const noexcept; - TStringBuf LightRedColor() const noexcept; - TStringBuf LightPurpleColor() const noexcept; - TStringBuf YellowColor() const noexcept; - TStringBuf WhiteColor() const noexcept; - + TStringBuf Reset() const noexcept; + + TStringBuf StyleLight() const noexcept; + TStringBuf StyleDark() const noexcept; + TStringBuf StyleNormal() const noexcept; + + TStringBuf ItalicOn() const noexcept; + TStringBuf ItalicOff() const noexcept; + TStringBuf UnderlineOn() const noexcept; + TStringBuf UnderlineOff() const noexcept; + + TStringBuf ForeDefault() const noexcept; + TStringBuf ForeBlack() const noexcept; + TStringBuf ForeRed() const noexcept; + TStringBuf ForeGreen() const noexcept; + TStringBuf ForeYellow() const noexcept; + TStringBuf ForeBlue() const noexcept; + TStringBuf ForeMagenta() const noexcept; + TStringBuf ForeCyan() const noexcept; + TStringBuf ForeWhite() const noexcept; + + TStringBuf BackDefault() const noexcept; + TStringBuf BackBlack() const noexcept; + TStringBuf BackRed() const noexcept; + TStringBuf BackGreen() const noexcept; + TStringBuf BackYellow() const noexcept; + TStringBuf BackBlue() const noexcept; + TStringBuf BackMagenta() const noexcept; + TStringBuf BackCyan() const noexcept; + TStringBuf BackWhite() const noexcept; + + TStringBuf Default() const noexcept; + TStringBuf Black() const noexcept; + TStringBuf Red() const noexcept; + TStringBuf Green() const noexcept; + TStringBuf Yellow() const noexcept; + TStringBuf Blue() const noexcept; + TStringBuf Magenta() const noexcept; + TStringBuf Cyan() const noexcept; + TStringBuf White() const noexcept; + + TStringBuf LightDefault() const noexcept; + TStringBuf LightBlack() const noexcept; + TStringBuf LightRed() const noexcept; + TStringBuf LightGreen() const noexcept; + TStringBuf LightYellow() const noexcept; + TStringBuf LightBlue() const noexcept; + TStringBuf LightMagenta() const noexcept; + TStringBuf LightCyan() const noexcept; + TStringBuf LightWhite() const noexcept; + + TStringBuf DarkDefault() const noexcept; + TStringBuf DarkBlack() const noexcept; + TStringBuf DarkRed() const noexcept; + TStringBuf DarkGreen() const noexcept; + TStringBuf DarkYellow() const noexcept; + TStringBuf DarkBlue() const noexcept; + TStringBuf DarkMagenta() const noexcept; + TStringBuf DarkCyan() const noexcept; + TStringBuf DarkWhite() const noexcept; + + /// Compatibility; prefer using methods without `Color` suffix in their names. + /// Note: these behave differently from their un-suffixed counterparts. + /// While functions declared above will reset colors completely, these will only reset foreground color and + /// style, without changing the background color and underline/italic settings. Also, names of these functions + /// don't conform with standard, e.g. `YellowColor` actually emits the `lite yellow` escape code. + TStringBuf OldColor() const noexcept; + TStringBuf BoldColor() const noexcept; + TStringBuf BlackColor() const noexcept; + TStringBuf BlueColor() const noexcept; + TStringBuf GreenColor() const noexcept; + TStringBuf CyanColor() const noexcept; + TStringBuf RedColor() const noexcept; + TStringBuf PurpleColor() const noexcept; + TStringBuf BrownColor() const noexcept; + TStringBuf LightGrayColor() const noexcept; + TStringBuf DarkGrayColor() const noexcept; + TStringBuf LightBlueColor() const noexcept; + TStringBuf LightGreenColor() const noexcept; + TStringBuf LightCyanColor() const noexcept; + TStringBuf LightRedColor() const noexcept; + TStringBuf LightPurpleColor() const noexcept; + TStringBuf YellowColor() const noexcept; + TStringBuf WhiteColor() const noexcept; + inline bool IsTTY() const noexcept { return IsTTY_; } @@ -212,17 +212,17 @@ namespace NColorizer { bool IsTTY_; }; - /// Singletone `TColors` instances for stderr/stdout. + /// Singletone `TColors` instances for stderr/stdout. TColors& StdErr(); TColors& StdOut(); - /// Choose `TColors` depending on output stream. If passed stream is stderr/stdout, return a corresponding - /// singletone. Otherwise, return a disabled singletone (which you can, but should *not* enable). + /// Choose `TColors` depending on output stream. If passed stream is stderr/stdout, return a corresponding + /// singletone. Otherwise, return a disabled singletone (which you can, but should *not* enable). TColors& AutoColors(IOutputStream& os); - - /// Calculate total length of all ANSI escape codes in the text. - size_t TotalAnsiEscapeCodeLen(TStringBuf text); + + /// Calculate total length of all ANSI escape codes in the text. + size_t TotalAnsiEscapeCodeLen(TStringBuf text); } - -TStringBuf ToStringBuf(NColorizer::EAnsiCode x); -TString ToString(NColorizer::EAnsiCode x); + +TStringBuf ToStringBuf(NColorizer::EAnsiCode x); +TString ToString(NColorizer::EAnsiCode x); |