C++ Utilities  5.10.0
Useful C++ classes and routines such as argument parser, IO and conversion utilities
ansiescapecodes.cpp
Go to the documentation of this file.
1 #include "./ansiescapecodes.h"
2 
3 namespace CppUtilities {
4 
8 namespace EscapeCodes {
9 
22 bool enabled =
23 #ifdef CPP_UTILITIES_ESCAPE_CODES_ENABLED_BY_DEFAULT
24  true
25 #else
26  false
27 #endif
28  ;
29 
33 std::ostream &operator<<(std::ostream &stream, Phrases phrase)
34 {
35  switch (phrase) {
36  case Phrases::Error:
37  setStyle(stream, Color::Red, ColorContext::Foreground, TextAttribute::Bold);
38  stream << "Error: ";
39  setStyle(stream, TextAttribute::Reset);
40  setStyle(stream, TextAttribute::Bold);
41  break;
42  case Phrases::Warning:
43  setStyle(stream, Color::Yellow, ColorContext::Foreground, TextAttribute::Bold);
44  stream << "Warning: ";
45  setStyle(stream, TextAttribute::Reset);
46  setStyle(stream, TextAttribute::Bold);
47  break;
48  case Phrases::End:
49  setStyle(stream, TextAttribute::Reset);
50  stream << '\n';
51  break;
52  case Phrases::PlainMessage:
53  stream << " ";
54  setStyle(stream, TextAttribute::Reset);
55  setStyle(stream, TextAttribute::Bold);
56  break;
57  case Phrases::SuccessMessage:
58  setStyle(stream, Color::Green, ColorContext::Foreground, TextAttribute::Bold);
59  stream << "==> ";
60  setStyle(stream, TextAttribute::Reset);
61  setStyle(stream, TextAttribute::Bold);
62  break;
63  case Phrases::SubMessage:
64  setStyle(stream, Color::Green, ColorContext::Foreground, TextAttribute::Bold);
65  stream << " -> ";
66  setStyle(stream, TextAttribute::Reset);
67  setStyle(stream, TextAttribute::Bold);
68  break;
69  case Phrases::ErrorMessage:
70  setStyle(stream, Color::Red, ColorContext::Foreground, TextAttribute::Bold);
71  stream << "==> ERROR: ";
72  setStyle(stream, TextAttribute::Reset);
73  setStyle(stream, TextAttribute::Bold);
74  break;
75  case Phrases::WarningMessage:
76  setStyle(stream, Color::Yellow, ColorContext::Foreground, TextAttribute::Bold);
77  stream << "==> WARNING: ";
78  setStyle(stream, TextAttribute::Reset);
79  setStyle(stream, TextAttribute::Bold);
80  break;
81  case Phrases::EndFlush:
82  setStyle(stream, TextAttribute::Reset);
83  stream << std::endl;
84  break;
85  case Phrases::Info:
86  setStyle(stream, Color::Blue, ColorContext::Foreground, TextAttribute::Bold);
87  stream << "Info: ";
88  setStyle(stream, TextAttribute::Reset);
89  setStyle(stream, TextAttribute::Bold);
90  break;
91  case Phrases::Override:
92  eraseLine(stream);
93  stream << '\r';
94  break;
95  case Phrases::SubError:
96  setStyle(stream, Color::Red, ColorContext::Foreground, TextAttribute::Bold);
97  stream << " -> ERROR: ";
98  setStyle(stream, TextAttribute::Reset);
99  setStyle(stream, TextAttribute::Bold);
100  break;
101  case Phrases::SubWarning:
102  setStyle(stream, Color::Yellow, ColorContext::Foreground, TextAttribute::Bold);
103  stream << " -> WARNING: ";
104  setStyle(stream, TextAttribute::Reset);
105  setStyle(stream, TextAttribute::Bold);
106  break;
108  setStyle(stream, Color::White, ColorContext::Foreground, TextAttribute::Bold);
109  stream << "==> ";
110  setStyle(stream, TextAttribute::Reset);
111  setStyle(stream, TextAttribute::Bold);
112  break;
113  }
114  return stream;
115 }
116 
120 std::string_view phraseString(Phrases phrase)
121 {
122  using namespace std::string_view_literals;
123  switch (phrase) {
124  case Phrases::Error:
125  return "Error: "sv;
126  case Phrases::Warning:
127  return "Warning: "sv;
128  case Phrases::PlainMessage:
129  return " "sv;
130  case Phrases::SuccessMessage:
131  return "==> "sv;
132  case Phrases::SubMessage:
133  return " -> "sv;
134  case Phrases::ErrorMessage:
135  return "==> ERROR: "sv;
136  case Phrases::WarningMessage:
137  return "==> WARNING: ";
138  case Phrases::Info:
139  return "Info: "sv;
140  case Phrases::SubError:
141  return " -> ERROR: "sv;
142  case Phrases::SubWarning:
143  return " -> WARNING: "sv;
145  return "==> "sv;
146  case Phrases::End:
147  case Phrases::EndFlush:
148  return "\n";
149  default:
150  return std::string_view{};
151  }
152 }
153 
159 std::string_view formattedPhraseString(Phrases phrase)
160 {
161  if (!enabled) {
162  return phraseString(phrase);
163  }
164  using namespace std::string_view_literals;
165  switch (phrase) {
166  case Phrases::Error:
167  return "\e[1;31mError: \e[0m\e[1m"sv;
168  case Phrases::Warning:
169  return "\e[1;33mWarning: \e[0m\e[1m"sv;
170  case Phrases::PlainMessage:
171  return " \e[0m\e[1m"sv;
172  case Phrases::SuccessMessage:
173  return "\e[1;32m==> \e[0m\e[1m"sv;
174  case Phrases::SubMessage:
175  return "\e[1;32m -> \e[0m\e[1m"sv;
176  case Phrases::ErrorMessage:
177  return "\e[1;31m==> ERROR: \e[0m\e[1m"sv;
178  case Phrases::WarningMessage:
179  return "\e[1;33m==> WARNING: \e[0m\e[1m";
180  case Phrases::Info:
181  return "\e[1;34mInfo: \e[0m\e[1m"sv;
182  case Phrases::SubError:
183  return "\e[1;31m -> ERROR: \e[0m\e[1m"sv;
184  case Phrases::SubWarning:
185  return "\e[1;33m -> WARNING: \e[0m\e[1m"sv;
187  return "\e[1;37m==> \e[0m\e[1m"sv;
188  case Phrases::End:
189  case Phrases::EndFlush:
190  return "\e[0m\n";
191  default:
192  return std::string_view{};
193  }
194 }
195 
196 } // namespace EscapeCodes
197 
198 } // namespace CppUtilities
CppUtilities::EscapeCodes::eraseLine
void eraseLine(std::ostream &stream)
Definition: ansiescapecodes.h:100
CppUtilities::EscapeCodes::Phrases
Phrases
The Phrases enum contains standard phrases which can be printed to any std::ostream and obtained as s...
Definition: ansiescapecodes.h:138
CppUtilities::EscapeCodes::formattedPhraseString
CPP_UTILITIES_EXPORT std::string_view formattedPhraseString(Phrases phrase)
Returns a string for the specified phrase which is formatted using ANSI escape codes.
Definition: ansiescapecodes.cpp:159
CppUtilities::EscapeCodes::phraseString
CPP_UTILITIES_EXPORT std::string_view phraseString(Phrases phrase)
Returns a string for the specified phrase without formatting.
Definition: ansiescapecodes.cpp:120
CppUtilities::EscapeCodes::Color::Black
@ Black
CppUtilities::EscapeCodes::operator<<
std::ostream & operator<<(std::ostream &stream, TextAttribute displayAttribute)
Definition: ansiescapecodes.h:107
CppUtilities::EscapeCodes::Phrases::Error
@ Error
ansiescapecodes.h
CppUtilities
Contains all utilities provides by the c++utilities library.
Definition: argumentparser.h:17
CppUtilities::EscapeCodes::setStyle
void setStyle(std::ostream &stream, TextAttribute displayAttribute=TextAttribute::Reset)
Definition: ansiescapecodes.h:34
CppUtilities::EscapeCodes::enabled
CPP_UTILITIES_EXPORT bool enabled
Controls whether the functions inside the EscapeCodes namespace actually make use of escape codes.
Definition: ansiescapecodes.cpp:22