Skip to content

Instantly share code, notes, and snippets.

@taylor-jones
Created November 25, 2020 06:49
Show Gist options
  • Save taylor-jones/224429a098499e995e344534a838e062 to your computer and use it in GitHub Desktop.
Save taylor-jones/224429a098499e995e344534a838e062 to your computer and use it in GitHub Desktop.
Apply ansi coloring to a string in C++
#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;
}
#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