|  | // Copyright (c) 2015-2016 The Khronos Group Inc. | 
|  | // | 
|  | // Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | // you may not use this file except in compliance with the License. | 
|  | // You may obtain a copy of the License at | 
|  | // | 
|  | //     http://www.apache.org/licenses/LICENSE-2.0 | 
|  | // | 
|  | // Unless required by applicable law or agreed to in writing, software | 
|  | // distributed under the License is distributed on an "AS IS" BASIS, | 
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | // See the License for the specific language governing permissions and | 
|  | // limitations under the License. | 
|  |  | 
|  | #include "source/print.h" | 
|  |  | 
|  | #if defined(SPIRV_ANDROID) || defined(SPIRV_LINUX) || defined(SPIRV_MAC) || \ | 
|  | defined(SPIRV_FREEBSD) | 
|  | namespace spvtools { | 
|  |  | 
|  | clr::reset::operator const char*() { return "\x1b[0m"; } | 
|  |  | 
|  | clr::grey::operator const char*() { return "\x1b[1;30m"; } | 
|  |  | 
|  | clr::red::operator const char*() { return "\x1b[31m"; } | 
|  |  | 
|  | clr::green::operator const char*() { return "\x1b[32m"; } | 
|  |  | 
|  | clr::yellow::operator const char*() { return "\x1b[33m"; } | 
|  |  | 
|  | clr::blue::operator const char*() { return "\x1b[34m"; } | 
|  |  | 
|  | }  // namespace spvtools | 
|  | #elif defined(SPIRV_WINDOWS) | 
|  | #include <windows.h> | 
|  |  | 
|  | namespace spvtools { | 
|  |  | 
|  | static void SetConsoleForegroundColorPrimary(HANDLE hConsole, WORD color) { | 
|  | // Get screen buffer information from console handle | 
|  | CONSOLE_SCREEN_BUFFER_INFO bufInfo; | 
|  | GetConsoleScreenBufferInfo(hConsole, &bufInfo); | 
|  |  | 
|  | // Get background color | 
|  | color = WORD(color | (bufInfo.wAttributes & 0xfff0)); | 
|  |  | 
|  | // Set foreground color | 
|  | SetConsoleTextAttribute(hConsole, color); | 
|  | } | 
|  |  | 
|  | static void SetConsoleForegroundColor(WORD color) { | 
|  | SetConsoleForegroundColorPrimary(GetStdHandle(STD_OUTPUT_HANDLE), color); | 
|  | SetConsoleForegroundColorPrimary(GetStdHandle(STD_ERROR_HANDLE), color); | 
|  | } | 
|  |  | 
|  | clr::reset::operator const char*() { | 
|  | if (isPrint) { | 
|  | SetConsoleForegroundColor(0xf); | 
|  | return ""; | 
|  | } | 
|  | return "\x1b[0m"; | 
|  | } | 
|  |  | 
|  | clr::grey::operator const char*() { | 
|  | if (isPrint) { | 
|  | SetConsoleForegroundColor(FOREGROUND_INTENSITY); | 
|  | return ""; | 
|  | } | 
|  | return "\x1b[1;30m"; | 
|  | } | 
|  |  | 
|  | clr::red::operator const char*() { | 
|  | if (isPrint) { | 
|  | SetConsoleForegroundColor(FOREGROUND_RED); | 
|  | return ""; | 
|  | } | 
|  | return "\x1b[31m"; | 
|  | } | 
|  |  | 
|  | clr::green::operator const char*() { | 
|  | if (isPrint) { | 
|  | SetConsoleForegroundColor(FOREGROUND_GREEN); | 
|  | return ""; | 
|  | } | 
|  | return "\x1b[32m"; | 
|  | } | 
|  |  | 
|  | clr::yellow::operator const char*() { | 
|  | if (isPrint) { | 
|  | SetConsoleForegroundColor(FOREGROUND_RED | FOREGROUND_GREEN); | 
|  | return ""; | 
|  | } | 
|  | return "\x1b[33m"; | 
|  | } | 
|  |  | 
|  | clr::blue::operator const char*() { | 
|  | // Blue all by itself is hard to see against a black background (the | 
|  | // default on command shell), or a medium blue background (the default | 
|  | // on PowerShell).  So increase its intensity. | 
|  |  | 
|  | if (isPrint) { | 
|  | SetConsoleForegroundColor(FOREGROUND_BLUE | FOREGROUND_INTENSITY); | 
|  | return ""; | 
|  | } | 
|  | return "\x1b[94m"; | 
|  | } | 
|  |  | 
|  | }  // namespace spvtools | 
|  | #else | 
|  | namespace spvtools { | 
|  |  | 
|  | clr::reset::operator const char*() { return ""; } | 
|  |  | 
|  | clr::grey::operator const char*() { return ""; } | 
|  |  | 
|  | clr::red::operator const char*() { return ""; } | 
|  |  | 
|  | clr::green::operator const char*() { return ""; } | 
|  |  | 
|  | clr::yellow::operator const char*() { return ""; } | 
|  |  | 
|  | clr::blue::operator const char*() { return ""; } | 
|  |  | 
|  | }  // namespace spvtools | 
|  | #endif |