Created
November 25, 2020 06:49
-
-
Save taylor-jones/224429a098499e995e344534a838e062 to your computer and use it in GitHub Desktop.
Apply ansi coloring to a string in C++
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "ansi_color.h" | |
/** | |
* @name inColor | |
* | |
* @brief returns a string, ansi-formatted to be displayed in a particular | |
* color & style in the console. | |
* | |
* @param content - string content to wrap in ansi formatting | |
* @param foreground - text foreground color (default: kAnsiColorDefault) | |
* @param background - text background color (default: kAnsiColorDefault) | |
* @param format - format to apply to the text (default: kAnsiFormatDefault) | |
* @return string - the formatted (colored) string | |
* @note The inspiration to create this function came from the following source: | |
* https://stackoverflow.com/questions/2616906/how-do-i-output-coloured-text-to-a-linux-terminal | |
*/ | |
std::string inColor(const std::string content, AnsiColor foreground, | |
AnsiColor background, AnsiFormat format) { | |
std::string fg, bg, fmt; | |
// get the foreground ansi color code | |
switch (foreground) { | |
case kAnsiColorDefault: | |
fg = "39;"; | |
break; | |
case kAnsiColorBlack: | |
fg = "30;"; | |
break; | |
case kAnsiColorRed: | |
fg = "31;"; | |
break; | |
case kAnsiColorGreen: | |
fg = "32;"; | |
break; | |
case kAnsiColorYellow: | |
fg = "33;"; | |
break; | |
case kAnsiColorBlue: | |
fg = "34;"; | |
break; | |
case kAnsiColorMagenta: | |
fg = "35;"; | |
break; | |
case kAnsiColorCyan: | |
fg = "36;"; | |
break; | |
case kAnsiColorWhite: | |
fg = "97;"; | |
break; | |
case kAnsiColorGrey: | |
fg = "37;"; | |
break; | |
case kAnsiColorInvisible: | |
fg = ";"; | |
break; | |
} | |
// get the background ansi color code | |
switch (background) { | |
case kAnsiColorDefault: | |
bg = "49m"; | |
break; | |
case kAnsiColorBlack: | |
bg = "40m"; | |
break; | |
case kAnsiColorRed: | |
bg = "41m"; | |
break; | |
case kAnsiColorGreen: | |
bg = "42m"; | |
break; | |
case kAnsiColorYellow: | |
bg = "43m"; | |
break; | |
case kAnsiColorBlue: | |
bg = "44m"; | |
break; | |
case kAnsiColorMagenta: | |
bg = "45m"; | |
break; | |
case kAnsiColorCyan: | |
bg = "46m"; | |
break; | |
case kAnsiColorWhite: | |
bg = "107m"; | |
break; | |
case kAnsiColorGrey: | |
bg = "47m"; | |
break; | |
case kAnsiColorInvisible: | |
bg = "m"; | |
break; | |
} | |
// get the formatting style | |
switch (format) { | |
case kAnsiFormatDefault: | |
fmt = "0;"; | |
break; | |
case kAnsiFormatBold: | |
fmt = "1;"; | |
break; | |
case kAnsiFormatDim: | |
fmt = "2;"; | |
break; | |
case kAnsiFormatUnderlined: | |
fmt = "3;"; | |
break; | |
case kAnsiFormatBlink: | |
fmt = "5;"; | |
break; | |
case kAnsiFormatReverse: | |
fmt = "7;"; | |
break; | |
case kAnsiFormatHidden: | |
fmt = "8;"; | |
break; | |
} | |
// wrap the content in the ansi color declaration and return the wrapped | |
// content | |
return kAnsiColorBegin + fmt + fg + bg + content + kAnsiColorEnd; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <string> | |
const char* kAnsiColorBegin = "\033["; | |
const char* kAnsiColorEnd = "\033[0m"; | |
enum AnsiColor { | |
kAnsiColorBlack, | |
kAnsiColorRed, | |
kAnsiColorGreen, | |
kAnsiColorYellow, | |
kAnsiColorBlue, | |
kAnsiColorMagenta, | |
kAnsiColorCyan, | |
kAnsiColorWhite, | |
kAnsiColorGrey, | |
kAnsiColorDefault, | |
kAnsiColorInvisible, | |
}; | |
enum AnsiFormat { | |
kAnsiFormatDefault, | |
kAnsiFormatBold, | |
kAnsiFormatDim, | |
kAnsiFormatUnderlined, | |
kAnsiFormatBlink, | |
kAnsiFormatReverse, | |
kAnsiFormatHidden, | |
}; | |
std::string inColor(std::string content = "", | |
AnsiColor foreground = kAnsiColorDefault, | |
AnsiColor background = kAnsiColorDefault, | |
AnsiFormat format = kAnsiFormatDefault); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment