OLD | NEW |
| (Empty) |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "tools/gn/standard_out.h" | |
6 | |
7 #include "build/build_config.h" | |
8 | |
9 #if defined(OS_WIN) | |
10 #include <windows.h> | |
11 #else | |
12 #include <stdio.h> | |
13 #endif | |
14 | |
15 namespace { | |
16 | |
17 bool initialized = false; | |
18 | |
19 #if defined(OS_WIN) | |
20 HANDLE hstdout; | |
21 WORD default_attributes; | |
22 | |
23 bool is_console = false; | |
24 #endif | |
25 | |
26 void EnsureInitialized() { | |
27 if (initialized) | |
28 return; | |
29 initialized = true; | |
30 | |
31 #if defined(OS_WIN) | |
32 hstdout = ::GetStdHandle(STD_OUTPUT_HANDLE); | |
33 CONSOLE_SCREEN_BUFFER_INFO info; | |
34 is_console = !!::GetConsoleScreenBufferInfo(hstdout, &info); | |
35 default_attributes = info.wAttributes; | |
36 #endif | |
37 } | |
38 | |
39 } // namespace | |
40 | |
41 #if defined(OS_WIN) | |
42 | |
43 void OutputString(const std::string& output, TextDecoration dec) { | |
44 EnsureInitialized(); | |
45 if (is_console) { | |
46 switch (dec) { | |
47 case DECORATION_NONE: | |
48 break; | |
49 case DECORATION_BOLD: | |
50 ::SetConsoleTextAttribute(hstdout, FOREGROUND_INTENSITY); | |
51 break; | |
52 case DECORATION_RED: | |
53 ::SetConsoleTextAttribute(hstdout, | |
54 FOREGROUND_RED | FOREGROUND_INTENSITY); | |
55 break; | |
56 case DECORATION_GREEN: | |
57 // Keep green non-bold. | |
58 ::SetConsoleTextAttribute(hstdout, FOREGROUND_GREEN); | |
59 break; | |
60 case DECORATION_BLUE: | |
61 ::SetConsoleTextAttribute(hstdout, | |
62 FOREGROUND_BLUE | FOREGROUND_INTENSITY); | |
63 break; | |
64 case DECORATION_YELLOW: | |
65 ::SetConsoleTextAttribute(hstdout, | |
66 FOREGROUND_RED | FOREGROUND_GREEN); | |
67 break; | |
68 } | |
69 } | |
70 | |
71 DWORD written = 0; | |
72 ::WriteFile(hstdout, output.c_str(), output.size(), &written, NULL); | |
73 | |
74 if (is_console) | |
75 ::SetConsoleTextAttribute(hstdout, default_attributes); | |
76 } | |
77 | |
78 #else | |
79 | |
80 void OutputString(const std::string& output, TextDecoration dec) { | |
81 printf("%s", output.c_str()); | |
82 } | |
83 | |
84 #endif | |
OLD | NEW |