| Index: tools/gn/standard_out.cc
|
| diff --git a/tools/gn/standard_out.cc b/tools/gn/standard_out.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f6a20318e41f229489633b28776d6c271452d4d0
|
| --- /dev/null
|
| +++ b/tools/gn/standard_out.cc
|
| @@ -0,0 +1,84 @@
|
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "tools/gn/standard_out.h"
|
| +
|
| +#include "build/build_config.h"
|
| +
|
| +#if defined(OS_WIN)
|
| +#include <windows.h>
|
| +#else
|
| +#include <stdio.h>
|
| +#endif
|
| +
|
| +namespace {
|
| +
|
| +bool initialized = false;
|
| +
|
| +#if defined(OS_WIN)
|
| +HANDLE hstdout;
|
| +WORD default_attributes;
|
| +
|
| +bool is_console = false;
|
| +#endif
|
| +
|
| +void EnsureInitialized() {
|
| + if (initialized)
|
| + return;
|
| + initialized = true;
|
| +
|
| +#if defined(OS_WIN)
|
| + hstdout = ::GetStdHandle(STD_OUTPUT_HANDLE);
|
| + CONSOLE_SCREEN_BUFFER_INFO info;
|
| + is_console = !!::GetConsoleScreenBufferInfo(hstdout, &info);
|
| + default_attributes = info.wAttributes;
|
| +#endif
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +#if defined(OS_WIN)
|
| +
|
| +void OutputString(const std::string& output, TextDecoration dec) {
|
| + EnsureInitialized();
|
| + if (is_console) {
|
| + switch (dec) {
|
| + case DECORATION_NONE:
|
| + break;
|
| + case DECORATION_BOLD:
|
| + ::SetConsoleTextAttribute(hstdout, FOREGROUND_INTENSITY);
|
| + break;
|
| + case DECORATION_RED:
|
| + ::SetConsoleTextAttribute(hstdout,
|
| + FOREGROUND_RED | FOREGROUND_INTENSITY);
|
| + break;
|
| + case DECORATION_GREEN:
|
| + // Keep green non-bold.
|
| + ::SetConsoleTextAttribute(hstdout, FOREGROUND_GREEN);
|
| + break;
|
| + case DECORATION_BLUE:
|
| + ::SetConsoleTextAttribute(hstdout,
|
| + FOREGROUND_BLUE | FOREGROUND_INTENSITY);
|
| + break;
|
| + case DECORATION_YELLOW:
|
| + ::SetConsoleTextAttribute(hstdout,
|
| + FOREGROUND_RED | FOREGROUND_GREEN);
|
| + break;
|
| + }
|
| + }
|
| +
|
| + DWORD written = 0;
|
| + ::WriteFile(hstdout, output.c_str(), output.size(), &written, NULL);
|
| +
|
| + if (is_console)
|
| + ::SetConsoleTextAttribute(hstdout, default_attributes);
|
| +}
|
| +
|
| +#else
|
| +
|
| +void OutputString(const std::string& output, TextDecoration dec) {
|
| + printf("%s", output.c_str());
|
| +}
|
| +
|
| +#endif
|
|
|