mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-01 00:17:01 +00:00
Add support for outputting ANSI colors to raw_fd_ostream.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72854 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -45,6 +45,19 @@ private:
|
||||
bool Unbuffered;
|
||||
|
||||
public:
|
||||
// color order matches ANSI escape sequence, don't change
|
||||
enum Colors {
|
||||
BLACK=0,
|
||||
RED,
|
||||
GREEN,
|
||||
YELLOW,
|
||||
BLUE,
|
||||
MAGENTA,
|
||||
CYAN,
|
||||
WHITE,
|
||||
SAVEDCOLOR
|
||||
};
|
||||
|
||||
explicit raw_ostream(bool unbuffered=false) : Unbuffered(unbuffered) {
|
||||
// Start out ready to flush.
|
||||
OutBufStart = OutBufEnd = OutBufCur = 0;
|
||||
@@ -167,6 +180,20 @@ public:
|
||||
// Formatted output, see the format() function in Support/Format.h.
|
||||
raw_ostream &operator<<(const format_object_base &Fmt);
|
||||
|
||||
/// Changes the foreground color of text that will be output from this point
|
||||
/// forward.
|
||||
/// @param colors ANSI color to use, the special SAVEDCOLOR can be used to
|
||||
/// change only the bold attribute, and keep colors untouched
|
||||
/// @param bold bold/brighter text, default false
|
||||
/// @param bg if true change the background, default: change foreground
|
||||
/// @returns itself so it can be used within << invocations
|
||||
virtual raw_ostream &changeColor(enum Colors colors, bool bold=false,
|
||||
bool bg=false) { return *this; }
|
||||
|
||||
/// Resets the colors to terminal defaults. Call this when you are done
|
||||
/// outputting colored text, or before program exit.
|
||||
virtual raw_ostream &resetColor() { return *this; }
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
// Subclass Interface
|
||||
//===--------------------------------------------------------------------===//
|
||||
@@ -243,6 +270,10 @@ public:
|
||||
/// seek - Flushes the stream and repositions the underlying file descriptor
|
||||
/// positition to the offset specified from the beginning of the file.
|
||||
uint64_t seek(uint64_t off);
|
||||
|
||||
virtual raw_ostream &changeColor(enum Colors colors, bool bold=false,
|
||||
bool bg=false);
|
||||
virtual raw_ostream &resetColor();
|
||||
};
|
||||
|
||||
/// raw_stdout_ostream - This is a stream that always prints to stdout.
|
||||
|
||||
@@ -107,6 +107,35 @@ namespace sys {
|
||||
/// console, or if the number of columns cannot be determined,
|
||||
/// this routine returns zero.
|
||||
static unsigned StandardErrColumns();
|
||||
|
||||
/// This function determines whether the terminal connected to standard
|
||||
/// output supports colors. If standard output is not connected to a
|
||||
/// terminal, this function returns false.
|
||||
static bool StandardOutHasColors();
|
||||
|
||||
/// This function determines whether the terminal connected to standard
|
||||
/// error supports colors. If standard error is not connected to a
|
||||
/// terminal, this function returns false.
|
||||
static bool StandardErrHasColors();
|
||||
|
||||
/// Whether changing colors requires the output to be flushed.
|
||||
/// This is needed on systems that don't support escape sequences for
|
||||
/// changing colors.
|
||||
static bool ColorNeedsFlush();
|
||||
|
||||
/// This function returns the colorcode escape sequences, and sets Len to
|
||||
/// the length of the escape sequence.
|
||||
/// If ColorNeedsFlush() is true then this function will change the colors
|
||||
/// and return an empty escape sequence. In that case it is the
|
||||
/// responsibility of the client to flush the output stream prior to
|
||||
/// calling this function.
|
||||
static const char *OutputColor(char c, bool bold, bool bg);
|
||||
|
||||
/// Same as OutputColor, but only enables the bold attribute.
|
||||
static const char *OutputBold(bool bg);
|
||||
|
||||
/// Resets the terminals colors, or returns an escape sequence to do so.
|
||||
static const char *ResetColor();
|
||||
/// @}
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user