// 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_IOS) || defined(SPIRV_TVOS) || defined(SPIRV_FREEBSD) || \ defined(SPIRV_OPENBSD) || defined(SPIRV_EMSCRIPTEN) || \ defined(SPIRV_FUCHSIA) || defined(SPIRV_GNU) || defined(SPIRV_QNX) 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 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