[llvm-commits] [llvm] r154800 - in /llvm/trunk: include/llvm/Support/Process.h include/llvm/Support/raw_ostream.h lib/Support/Unix/Process.inc lib/Support/Windows/Process.inc lib/Support/raw_ostream.cpp
Chandler Carruth
chandlerc at google.com
Mon Apr 16 00:51:34 PDT 2012
On Mon, Apr 16, 2012 at 9:07 AM, Argyrios Kyrtzidis <akyrtzi at gmail.com>wrote:
> Author: akirtzidis
> Date: Mon Apr 16 02:07:38 2012
> New Revision: 154800
>
> URL: http://llvm.org/viewvc/llvm-project?rev=154800&view=rev
> Log:
> Add reverseColor to raw_ostream.
>
> To be used in printing unprintable source in clang diagnostics.
> Patch by Seth Cantrell!
>
Ugh, this broke windows builders:
http://bb.pgr.jp/builders/clang-i686-msys/builds/729/steps/compile/logs/stdio
>
> Modified:
> llvm/trunk/include/llvm/Support/Process.h
> llvm/trunk/include/llvm/Support/raw_ostream.h
> llvm/trunk/lib/Support/Unix/Process.inc
> llvm/trunk/lib/Support/Windows/Process.inc
> llvm/trunk/lib/Support/raw_ostream.cpp
>
> Modified: llvm/trunk/include/llvm/Support/Process.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Process.h?rev=154800&r1=154799&r2=154800&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/Process.h (original)
> +++ llvm/trunk/include/llvm/Support/Process.h Mon Apr 16 02:07:38 2012
> @@ -136,6 +136,10 @@
> /// Same as OutputColor, but only enables the bold attribute.
> static const char *OutputBold(bool bg);
>
> + /// This function returns the escape sequence to reverse forground
> and
> + /// background colors.
> + static const char *OutputReverse();
> +
> /// Resets the terminals colors, or returns an escape sequence to do
> so.
> static const char *ResetColor();
> /// @}
>
> Modified: llvm/trunk/include/llvm/Support/raw_ostream.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/raw_ostream.h?rev=154800&r1=154799&r2=154800&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/raw_ostream.h (original)
> +++ llvm/trunk/include/llvm/Support/raw_ostream.h Mon Apr 16 02:07:38 2012
> @@ -222,6 +222,9 @@
> /// outputting colored text, or before program exit.
> virtual raw_ostream &resetColor() { return *this; }
>
> + /// Reverses the forground and background colors.
> + virtual raw_ostream &reverseColor() { return *this; }
> +
> /// This function determines if this stream is connected to a "tty" or
> /// "console" window. That is, the output would be displayed to the user
> /// rather than being put on a pipe or stored in a file.
> @@ -379,6 +382,8 @@
> bool bg=false);
> virtual raw_ostream &resetColor();
>
> + virtual raw_ostream &reverseColor();
> +
> virtual bool is_displayed() const;
>
> /// has_error - Return the value of the flag in this raw_fd_ostream
> indicating
>
> Modified: llvm/trunk/lib/Support/Unix/Process.inc
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Process.inc?rev=154800&r1=154799&r2=154800&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/Unix/Process.inc (original)
> +++ llvm/trunk/lib/Support/Unix/Process.inc Mon Apr 16 02:07:38 2012
> @@ -290,6 +290,10 @@
> return "\033[1m";
> }
>
> +const char *Process::OutputReverse() {
> + return "\033[7m";
> +}
> +
> const char *Process::ResetColor() {
> return "\033[0m";
> }
>
> Modified: llvm/trunk/lib/Support/Windows/Process.inc
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Process.inc?rev=154800&r1=154799&r2=154800&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/Windows/Process.inc (original)
> +++ llvm/trunk/lib/Support/Windows/Process.inc Mon Apr 16 02:07:38 2012
> @@ -215,6 +215,39 @@
> return 0;
> }
>
> +WORD GetConsoleTextAttribute(__in HANDLE hConsoleOutput)
> +{
> + CONSOLE_SCREEN_BUFFER_INFO info;
> + GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),&info);
> + return info.wAttributes;
> +}
> +
> +const char *Process::OutputReverse() {
> + const WORD attributes
> + = GetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE));
> +
> + const WORD foreground_mask = FOREGROUND_BLUE | FOREGROUND_GREEN |
> + FOREGROUND_RED | FOREGROUND_INTENSITY;
> + const WORD background_mask = BACKGROUND_BLUE | BACKGROUND_GREEN |
> + BACKGROUND_RED | BACKGROUND_INTENSITY;
> + const WORD color_mask = foreground_mask | background_mask;
> +
> + WORD new_attributes =
> + ((attributes & FOREGROUND_BLUE )?BACKGROUND_BLUE :0) |
> + ((attributes & FOREGROUND_GREEN )?BACKGROUND_GREEN :0) |
> + ((attributes & FOREGROUND_RED )?BACKGROUND_RED :0) |
> + ((attributes & FOREGROUND_INTENSITY)?BACKGROUND_INTENSITY:0) |
> + ((attributes & BACKGROUND_BLUE )?FOREGROUND_BLUE :0) |
> + ((attributes & BACKGROUND_GREEN )?FOREGROUND_GREEN :0) |
> + ((attributes & BACKGROUND_RED )?FOREGROUND_RED :0) |
> + ((attributes & BACKGROUND_INTENSITY)?FOREGROUND_INTENSITY:0) |
> + 0;
> + new_attributes = (attributes & ~color_mask) | (new_attributes &
> color_mask);
> +
> + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),new_attributes);
> + return 0;
> +}
> +
> const char *Process::ResetColor() {
> SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
> defaultColors());
> return 0;
>
> Modified: llvm/trunk/lib/Support/raw_ostream.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/raw_ostream.cpp?rev=154800&r1=154799&r2=154800&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/raw_ostream.cpp (original)
> +++ llvm/trunk/lib/Support/raw_ostream.cpp Mon Apr 16 02:07:38 2012
> @@ -633,6 +633,19 @@
> return *this;
> }
>
> +raw_ostream &raw_fd_ostream::reverseColor() {
> + if (sys::Process::ColorNeedsFlush())
> + flush();
> + const char *colorcode = sys::Process::OutputReverse();
> + if (colorcode) {
> + size_t len = strlen(colorcode);
> + write(colorcode, len);
> + // don't account colors towards output characters
> + pos -= len;
> + }
> + return *this;
> +}
> +
> bool raw_fd_ostream::is_displayed() const {
> return sys::Process::FileDescriptorIsDisplayed(FD);
> }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20120416/6a9f899f/attachment.html>
More information about the llvm-commits
mailing list