[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
This commit is contained in:
Jonas Devlieghere
2018-03-09 09:56:24 +00:00
parent ed70dc4de2
commit 01d72e5767
9 changed files with 98 additions and 89 deletions
+65
View File
@@ -0,0 +1,65 @@
//===- 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();
}