1 //===- WithColor.h ----------------------------------------------*- C++ -*-===// 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 #ifndef LLVM_SUPPORT_WITHCOLOR_H 11 #define LLVM_SUPPORT_WITHCOLOR_H 12 13 #include "llvm/ADT/StringRef.h" 14 #include "llvm/Support/CommandLine.h" 15 16 namespace llvm { 17 18 extern cl::OptionCategory ColorCategory; 19 20 class raw_ostream; 21 22 // Symbolic names for various syntax elements. 23 enum class HighlightColor { 24 Address, 25 String, 26 Tag, 27 Attribute, 28 Enumerator, 29 Macro, 30 Error, 31 Warning, 32 Note 33 }; 34 35 /// An RAII object that temporarily switches an output stream to a specific 36 /// color. 37 class WithColor { 38 raw_ostream &OS; 39 /// Determine whether colors should be displayed. 40 bool colorsEnabled(raw_ostream &OS); 41 42 public: 43 /// To be used like this: WithColor(OS, HighlightColor::String) << "text"; 44 WithColor(raw_ostream &OS, HighlightColor S); 45 ~WithColor(); 46 get()47 raw_ostream &get() { return OS; } 48 operator raw_ostream &() { return OS; } 49 50 /// Convenience method for printing "error: " to stderr. 51 static raw_ostream &error(); 52 /// Convenience method for printing "warning: " to stderr. 53 static raw_ostream &warning(); 54 /// Convenience method for printing "note: " to stderr. 55 static raw_ostream ¬e(); 56 57 /// Convenience method for printing "error: " to the given stream. 58 static raw_ostream &error(raw_ostream &OS, StringRef Prefix = ""); 59 /// Convenience method for printing "warning: " to the given stream. 60 static raw_ostream &warning(raw_ostream &OS, StringRef Prefix = ""); 61 /// Convenience method for printing "note: " to the given stream. 62 static raw_ostream ¬e(raw_ostream &OS, StringRef Prefix = ""); 63 }; 64 65 } // end namespace llvm 66 67 #endif // LLVM_LIB_DEBUGINFO_WITHCOLOR_H 68