diff --git a/format.cc b/format.cc index c4a00a14..43dbbcf8 100644 --- a/format.cc +++ b/format.cc @@ -120,19 +120,18 @@ struct IntChecker { }; #ifdef _WIN32 - uint8_t win32_colors[] = - { - 0, - FOREGROUND_RED | FOREGROUND_INTENSITY, - FOREGROUND_GREEN | FOREGROUND_INTENSITY, - FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY, - FOREGROUND_BLUE | FOREGROUND_INTENSITY, - FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY, - FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE, - FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY - }; +const uint8_t WIN32_COLORS[] = { + 0, + FOREGROUND_RED | FOREGROUND_INTENSITY, + FOREGROUND_GREEN | FOREGROUND_INTENSITY, + FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY, + FOREGROUND_BLUE | FOREGROUND_INTENSITY, + FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY, + FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY, + FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY +}; #else - const char RESET_COLOR[] = "\x1b[0m"; +const char RESET_COLOR[] = "\x1b[0m"; #endif typedef void (*FormatFunc)(fmt::Writer &, int, fmt::StringRef); @@ -1114,25 +1113,23 @@ FMT_FUNC void fmt::print(std::ostream &os, StringRef format_str, ArgList args) { FMT_FUNC void fmt::print_colored(Color c, StringRef format, ArgList args) { #ifdef _WIN32 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); - if(handle == INVALID_HANDLE_VALUE) + if (handle == INVALID_HANDLE_VALUE) FMT_THROW(GetLastError(), "cannot get output handle"); - CONSOLE_SCREEN_BUFFER_INFO infoCon; - if(!GetConsoleScreenBufferInfo(handle, &infoCon)) - FMT_THROW(GetLastError(), "cannot get console informations"); - WORD reset_color = infoCon.wAttributes; - WORD color = static_cast(c) >= ARRAYSIZE(win32_colors) ? reset_color : win32_colors[c]; - if(!SetConsoleTextAttribute(handle, color)) + CONSOLE_SCREEN_BUFFER_INFO info_con; + if (!GetConsoleScreenBufferInfo(handle, &info_con)) + FMT_THROW(GetLastError(), "cannot get console information"); + WORD reset_color = info_con.wAttributes; + WORD color = static_cast(c) >= ARRAYSIZE(WIN32_COLORS) ? reset_color : WIN32_COLORS[c]; + if (!SetConsoleTextAttribute(handle, color)) + FMT_THROW(GetLastError(), "cannot set console color"); + print(format, args); + if (!SetConsoleTextAttribute(handle, reset_color)) FMT_THROW(GetLastError(), "cannot set console color"); #else char escape[] = "\x1b[30m"; escape[3] = '0' + static_cast(c); std::fputs(escape, stdout); -#endif print(format, args); -#ifdef _WIN32 - if(!SetConsoleTextAttribute(handle, reset_color)) - FMT_THROW(GetLastError(), "cannot set console color"); -#else std::fputs(RESET_COLOR, stdout); #endif }