123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- //===- WithColor.cpp ------------------------------------------------------===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- #include "llvm/Support/WithColor.h"
- #include "llvm/Support/raw_ostream.h"
- using namespace llvm;
- cl::OptionCategory llvm::ColorCategory("Color Options");
- static cl::opt<cl::boolOrDefault>
- UseColor("color", cl::cat(ColorCategory),
- cl::desc("Use colors in output (default=autodetect)"),
- cl::init(cl::BOU_UNSET));
- WithColor::WithColor(raw_ostream &OS, HighlightColor Color, bool DisableColors)
- : OS(OS), DisableColors(DisableColors) {
- // Detect color from terminal type unless the user passed the --color option.
- if (colorsEnabled()) {
- OS.enable_colors();
- 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;
- case HighlightColor::Remark:
- OS.changeColor(raw_ostream::BLUE, true);
- break;
- }
- }
- }
- raw_ostream &WithColor::error() { return error(errs()); }
- raw_ostream &WithColor::warning() { return warning(errs()); }
- raw_ostream &WithColor::note() { return note(errs()); }
- raw_ostream &WithColor::remark() { return remark(errs()); }
- raw_ostream &WithColor::error(raw_ostream &OS, StringRef Prefix,
- bool DisableColors) {
- if (!Prefix.empty())
- OS << Prefix << ": ";
- return WithColor(OS, HighlightColor::Error, DisableColors).get()
- << "error: ";
- }
- raw_ostream &WithColor::warning(raw_ostream &OS, StringRef Prefix,
- bool DisableColors) {
- if (!Prefix.empty())
- OS << Prefix << ": ";
- return WithColor(OS, HighlightColor::Warning, DisableColors).get()
- << "warning: ";
- }
- raw_ostream &WithColor::note(raw_ostream &OS, StringRef Prefix,
- bool DisableColors) {
- if (!Prefix.empty())
- OS << Prefix << ": ";
- return WithColor(OS, HighlightColor::Note, DisableColors).get() << "note: ";
- }
- raw_ostream &WithColor::remark(raw_ostream &OS, StringRef Prefix,
- bool DisableColors) {
- if (!Prefix.empty())
- OS << Prefix << ": ";
- return WithColor(OS, HighlightColor::Remark, DisableColors).get()
- << "remark: ";
- }
- bool WithColor::colorsEnabled() {
- if (DisableColors)
- return false;
- if (UseColor == cl::BOU_UNSET)
- return OS.has_colors();
- return UseColor == cl::BOU_TRUE;
- }
- WithColor &WithColor::changeColor(raw_ostream::Color C, bool Bold, bool BG) {
- if (colorsEnabled())
- OS.changeColor(C, Bold, BG);
- return *this;
- }
- WithColor &WithColor::resetColor() {
- if (colorsEnabled())
- OS.resetColor();
- return *this;
- }
- WithColor::~WithColor() { resetColor(); }
|