X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=formatter.hpp;h=181e2d1539d5c14bc14e070db1325a31d2593ad4;hb=75e8c9b7c7f2f10d9b7f479d45f58d81ea729d30;hp=c2d3455f05ab30eb5160b91d5d56d217b33a958e;hpb=3ade2112c3a0e8a3227eea2640ede1c722bd3a15;p=apitrace diff --git a/formatter.hpp b/formatter.hpp index c2d3455..181e2d1 100644 --- a/formatter.hpp +++ b/formatter.hpp @@ -23,6 +23,10 @@ * **************************************************************************/ +/* + * Helpers for coloring output. + */ + #ifndef _FORMATTER_HPP_ #define _FORMATTER_HPP_ @@ -38,38 +42,38 @@ namespace Formatter { class Attribute { public: - virtual ~Attribute() {} + virtual ~Attribute() {} - virtual void apply(std::ostream& os) const {} + virtual void apply(std::ostream &) const {} }; enum Color { - RED, - GREEN, - BLUE, + RED, + GREEN, + BLUE, }; class Formatter { public: - virtual ~Formatter() {} + virtual ~Formatter() {} - virtual Attribute *normal(void) const { return new Attribute; } - virtual Attribute *bold(void) const { return new Attribute; } - virtual Attribute *italic(void) const { return new Attribute; } - virtual Attribute *color(Color color) const { return new Attribute; } + virtual Attribute *normal(void) const { return new Attribute; } + virtual Attribute *bold(void) const { return new Attribute; } + virtual Attribute *italic(void) const { return new Attribute; } + virtual Attribute *color(Color) const { return new Attribute; } }; - + class AnsiAttribute : public Attribute { protected: - const char *escape; + const char *escape; public: - AnsiAttribute(const char *_escape) : escape(_escape) {} - void apply(std::ostream& os) const { - os << "\33[" << escape; - } + AnsiAttribute(const char *_escape) : escape(_escape) {} + void apply(std::ostream& os) const { + os << "\33[" << escape; + } }; @@ -81,51 +85,51 @@ public: class AnsiFormatter : public Formatter { protected: public: - virtual Attribute *normal(void) const { return new AnsiAttribute("0m"); } - virtual Attribute *bold(void) const { return new AnsiAttribute("1m"); } - virtual Attribute *italic(void) const { return new AnsiAttribute("3m"); } - virtual Attribute *color(Color c) const { - static const char *color_escapes[] = { - "31m", /* red */ - "32m", /* green */ - "34m", /* blue */ - }; - return new AnsiAttribute(color_escapes[c]); - } + virtual Attribute *normal(void) const { return new AnsiAttribute("0m"); } + virtual Attribute *bold(void) const { return new AnsiAttribute("1m"); } + virtual Attribute *italic(void) const { return new AnsiAttribute("3m"); } + virtual Attribute *color(Color c) const { + static const char *color_escapes[] = { + "31m", /* red */ + "32m", /* green */ + "34m", /* blue */ + }; + return new AnsiAttribute(color_escapes[c]); + } }; inline std::ostream& operator<<(std::ostream& os, const Attribute *attr) { - attr->apply(os); - return os; + attr->apply(os); + return os; } -#ifdef WIN32 +#ifdef _WIN32 #include class WindowsAttribute : public Attribute { protected: - WORD wAttributes; + WORD wAttributes; public: - WindowsAttribute(WORD _wAttributes) : wAttributes(_wAttributes) {} - void apply(std::ostream& os) const { - DWORD nStdHandleOutput; - if (os == std::cout) { - nStdHandleOutput = STD_OUTPUT_HANDLE; - } else if (os == std::cerr) { - nStdHandleOutput = STD_ERROR_HANDLE; - } else { - return; - } - HANDLE hConsoleOutput = GetStdHandle(nStdHandleOutput); - if (hConsoleOutput == INVALID_HANDLE_VALUE) { - return; - } - - SetConsoleTextAttribute(hConsoleOutput, wAttributes); - } + WindowsAttribute(WORD _wAttributes) : wAttributes(_wAttributes) {} + void apply(std::ostream& os) const { + DWORD nStdHandleOutput; + if (os == std::cout) { + nStdHandleOutput = STD_OUTPUT_HANDLE; + } else if (os == std::cerr) { + nStdHandleOutput = STD_ERROR_HANDLE; + } else { + return; + } + HANDLE hConsoleOutput = GetStdHandle(nStdHandleOutput); + if (hConsoleOutput == INVALID_HANDLE_VALUE) { + return; + } + + SetConsoleTextAttribute(hConsoleOutput, wAttributes); + } }; @@ -135,28 +139,32 @@ public: class WindowsFormatter : public Formatter { protected: public: - virtual Attribute *normal(void) const { return new WindowsAttribute(FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED); } - virtual Attribute *bold(void) const { return new WindowsAttribute(FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY); } - virtual Attribute *italic(void) const { return new WindowsAttribute(FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED); } - virtual Attribute *color(Color c) const { - static const WORD color_escapes[] = { - FOREGROUND_RED | FOREGROUND_INTENSITY, - FOREGROUND_GREEN | FOREGROUND_INTENSITY, - FOREGROUND_BLUE | FOREGROUND_INTENSITY, - }; - return new WindowsAttribute(color_escapes[c]); - } + virtual Attribute *normal(void) const { return new WindowsAttribute(FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED); } + virtual Attribute *bold(void) const { return new WindowsAttribute(FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY); } + virtual Attribute *italic(void) const { return new WindowsAttribute(FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED); } + virtual Attribute *color(Color c) const { + static const WORD color_escapes[] = { + FOREGROUND_RED | FOREGROUND_INTENSITY, + FOREGROUND_GREEN | FOREGROUND_INTENSITY, + FOREGROUND_BLUE | FOREGROUND_INTENSITY, + }; + return new WindowsAttribute(color_escapes[c]); + } }; #endif -inline Formatter *defaultFormatter(void) { -#ifdef WIN32 - return new WindowsFormatter; +inline Formatter *defaultFormatter(bool color = true) { + if (color) { +#ifdef _WIN32 + return new WindowsFormatter; #else - return new AnsiFormatter; + return new AnsiFormatter; #endif + } else { + return new Formatter; + } }