llvm/lib/Support/WithColor.cpp
Jonas Devlieghere 01d72e5767 [Support] Move syntax highlighting into support
Move the DWARF syntax highlighting into support. This has several
advantages, most notably that this makes the WithColor RAII wrapper
available outside libDebugInfo. Furthermore, several projects all have
their own code for handling colored output. This provides a place to
centralize it.

Differential revision: https://reviews.llvm.org/D44215

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@327108 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-09 09:56:24 +00:00

66 lines
1.9 KiB
C++

//===- WithColor.cpp ------------------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "llvm/Support/WithColor.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/raw_ostream.h"
using namespace llvm;
static cl::opt<cl::boolOrDefault>
UseColor("color",
cl::desc("use colored syntax highlighting (default=autodetect)"),
cl::init(cl::BOU_UNSET));
bool WithColor::colorsEnabled(raw_ostream &OS) {
if (UseColor == cl::BOU_UNSET)
return OS.has_colors();
return UseColor == cl::BOU_TRUE;
}
WithColor::WithColor(raw_ostream &OS, HighlightColor Color) : OS(OS) {
// Detect color from terminal type unless the user passed the --color option.
if (colorsEnabled(OS)) {
switch (Color) {
case HighlightColor::Address:
OS.changeColor(raw_ostream::YELLOW);
break;
case HighlightColor::String:
OS.changeColor(raw_ostream::GREEN);
break;
case HighlightColor::Tag:
OS.changeColor(raw_ostream::BLUE);
break;
case HighlightColor::Attribute:
OS.changeColor(raw_ostream::CYAN);
break;
case HighlightColor::Enumerator:
OS.changeColor(raw_ostream::MAGENTA);
break;
case HighlightColor::Macro:
OS.changeColor(raw_ostream::RED);
break;
case HighlightColor::Error:
OS.changeColor(raw_ostream::RED, true);
break;
case HighlightColor::Warning:
OS.changeColor(raw_ostream::MAGENTA, true);
break;
case HighlightColor::Note:
OS.changeColor(raw_ostream::BLACK, true);
break;
}
}
}
WithColor::~WithColor() {
if (colorsEnabled(OS))
OS.resetColor();
}