1 //===- WithColor.cpp ------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "llvm/Support/WithColor.h" 11 #include "llvm/Support/CommandLine.h" 12 #include "llvm/Support/raw_ostream.h" 13 14 using namespace llvm; 15 16 static cl::opt<cl::boolOrDefault> 17 UseColor("color", 18 cl::desc("use colored syntax highlighting (default=autodetect)"), 19 cl::init(cl::BOU_UNSET)); 20 21 bool WithColor::colorsEnabled(raw_ostream &OS) { 22 if (UseColor == cl::BOU_UNSET) 23 return OS.has_colors(); 24 return UseColor == cl::BOU_TRUE; 25 } 26 27 WithColor::WithColor(raw_ostream &OS, HighlightColor Color) : OS(OS) { 28 // Detect color from terminal type unless the user passed the --color option. 29 if (colorsEnabled(OS)) { 30 switch (Color) { 31 case HighlightColor::Address: 32 OS.changeColor(raw_ostream::YELLOW); 33 break; 34 case HighlightColor::String: 35 OS.changeColor(raw_ostream::GREEN); 36 break; 37 case HighlightColor::Tag: 38 OS.changeColor(raw_ostream::BLUE); 39 break; 40 case HighlightColor::Attribute: 41 OS.changeColor(raw_ostream::CYAN); 42 break; 43 case HighlightColor::Enumerator: 44 OS.changeColor(raw_ostream::MAGENTA); 45 break; 46 case HighlightColor::Macro: 47 OS.changeColor(raw_ostream::RED); 48 break; 49 case HighlightColor::Error: 50 OS.changeColor(raw_ostream::RED, true); 51 break; 52 case HighlightColor::Warning: 53 OS.changeColor(raw_ostream::MAGENTA, true); 54 break; 55 case HighlightColor::Note: 56 OS.changeColor(raw_ostream::BLACK, true); 57 break; 58 } 59 } 60 } 61 62 WithColor::~WithColor() { 63 if (colorsEnabled(OS)) 64 OS.resetColor(); 65 } 66