• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2015-2016 The Khronos Group Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #include "source/print.h"
16 
17 #if defined(SPIRV_ANDROID) || defined(SPIRV_LINUX) || defined(SPIRV_MAC) || \
18     defined(SPIRV_IOS) || defined(SPIRV_TVOS) || defined(SPIRV_FREEBSD) ||  \
19     defined(SPIRV_OPENBSD) || defined(SPIRV_EMSCRIPTEN) ||                  \
20     defined(SPIRV_FUCHSIA) || defined(SPIRV_GNU)
21 namespace spvtools {
22 
operator const char*()23 clr::reset::operator const char*() { return "\x1b[0m"; }
24 
operator const char*()25 clr::grey::operator const char*() { return "\x1b[1;30m"; }
26 
operator const char*()27 clr::red::operator const char*() { return "\x1b[31m"; }
28 
operator const char*()29 clr::green::operator const char*() { return "\x1b[32m"; }
30 
operator const char*()31 clr::yellow::operator const char*() { return "\x1b[33m"; }
32 
operator const char*()33 clr::blue::operator const char*() { return "\x1b[34m"; }
34 
35 }  // namespace spvtools
36 #elif defined(SPIRV_WINDOWS)
37 #include <windows.h>
38 
39 namespace spvtools {
40 
SetConsoleForegroundColorPrimary(HANDLE hConsole,WORD color)41 static void SetConsoleForegroundColorPrimary(HANDLE hConsole, WORD color) {
42   // Get screen buffer information from console handle
43   CONSOLE_SCREEN_BUFFER_INFO bufInfo;
44   GetConsoleScreenBufferInfo(hConsole, &bufInfo);
45 
46   // Get background color
47   color = WORD(color | (bufInfo.wAttributes & 0xfff0));
48 
49   // Set foreground color
50   SetConsoleTextAttribute(hConsole, color);
51 }
52 
SetConsoleForegroundColor(WORD color)53 static void SetConsoleForegroundColor(WORD color) {
54   SetConsoleForegroundColorPrimary(GetStdHandle(STD_OUTPUT_HANDLE), color);
55   SetConsoleForegroundColorPrimary(GetStdHandle(STD_ERROR_HANDLE), color);
56 }
57 
operator const char*()58 clr::reset::operator const char*() {
59   if (isPrint) {
60     SetConsoleForegroundColor(0xf);
61     return "";
62   }
63   return "\x1b[0m";
64 }
65 
operator const char*()66 clr::grey::operator const char*() {
67   if (isPrint) {
68     SetConsoleForegroundColor(FOREGROUND_INTENSITY);
69     return "";
70   }
71   return "\x1b[1;30m";
72 }
73 
operator const char*()74 clr::red::operator const char*() {
75   if (isPrint) {
76     SetConsoleForegroundColor(FOREGROUND_RED);
77     return "";
78   }
79   return "\x1b[31m";
80 }
81 
operator const char*()82 clr::green::operator const char*() {
83   if (isPrint) {
84     SetConsoleForegroundColor(FOREGROUND_GREEN);
85     return "";
86   }
87   return "\x1b[32m";
88 }
89 
operator const char*()90 clr::yellow::operator const char*() {
91   if (isPrint) {
92     SetConsoleForegroundColor(FOREGROUND_RED | FOREGROUND_GREEN);
93     return "";
94   }
95   return "\x1b[33m";
96 }
97 
operator const char*()98 clr::blue::operator const char*() {
99   // Blue all by itself is hard to see against a black background (the
100   // default on command shell), or a medium blue background (the default
101   // on PowerShell).  So increase its intensity.
102 
103   if (isPrint) {
104     SetConsoleForegroundColor(FOREGROUND_BLUE | FOREGROUND_INTENSITY);
105     return "";
106   }
107   return "\x1b[94m";
108 }
109 
110 }  // namespace spvtools
111 #else
112 namespace spvtools {
113 
operator const char*()114 clr::reset::operator const char*() { return ""; }
115 
operator const char*()116 clr::grey::operator const char*() { return ""; }
117 
operator const char*()118 clr::red::operator const char*() { return ""; }
119 
operator const char*()120 clr::green::operator const char*() { return ""; }
121 
operator const char*()122 clr::yellow::operator const char*() { return ""; }
123 
operator const char*()124 clr::blue::operator const char*() { return ""; }
125 
126 }  // namespace spvtools
127 #endif
128