C++ Utilities  5.6.0
Useful C++ classes and routines such as argument parser, IO and conversion utilities
ansiescapecodes.h
Go to the documentation of this file.
1 #ifndef IOUTILITIES_ANSIESCAPECODES
2 #define IOUTILITIES_ANSIESCAPECODES
3 
4 #include "../global.h"
5 #include "../misc/traits.h"
6 
7 #include <ostream>
8 #include <string_view>
9 #include <tuple>
10 
11 namespace CppUtilities {
12 namespace EscapeCodes {
13 
14 extern CPP_UTILITIES_EXPORT bool enabled;
15 
16 enum class Color : char { Black = '0', Red, Green, Yellow, Blue, Purple, Cyan, White };
17 
18 enum class ColorContext : char { Foreground = '3', Background = '4' };
19 
20 enum class TextAttribute : char {
21  Reset = '0',
22  Bold = '1',
23  Dim = '2',
24  Italic = '3',
25  Underscore = '4',
26  Blink = '5',
27  ReverseVideo = '7',
28  Concealed = '8',
29  Strikethrough = '9',
30 };
31 
32 enum class Direction : char { Up = 'A', Down = 'B', Forward = 'C', Backward = 'D' };
33 
34 inline void setStyle(std::ostream &stream, TextAttribute displayAttribute = TextAttribute::Reset)
35 {
36  if (enabled) {
37  stream << '\e' << '[' << static_cast<char>(displayAttribute) << 'm';
38  }
39 }
40 
41 inline void setStyle(
42  std::ostream &stream, Color color, ColorContext context = ColorContext::Foreground, TextAttribute displayAttribute = TextAttribute::Reset)
43 {
44  if (enabled) {
45  stream << '\e' << '[' << static_cast<char>(displayAttribute) << ';' << static_cast<char>(context) << static_cast<char>(color) << 'm';
46  }
47 }
48 
49 inline void setStyle(std::ostream &stream, Color foregroundColor, Color backgroundColor, TextAttribute displayAttribute = TextAttribute::Reset)
50 {
51  if (enabled) {
52  stream << '\e' << '[' << static_cast<char>(displayAttribute) << ';' << static_cast<char>(ColorContext::Foreground)
53  << static_cast<char>(foregroundColor) << ';' << static_cast<char>(ColorContext::Background) << static_cast<char>(backgroundColor)
54  << 'm';
55  }
56 }
57 
58 inline void resetStyle(std::ostream &stream)
59 {
60  if (enabled) {
61  stream << '\e' << '[' << static_cast<char>(TextAttribute::Reset) << 'm';
62  }
63 }
64 
65 inline void setCursor(std::ostream &stream, unsigned int row = 0, unsigned int col = 0)
66 {
67  if (enabled) {
68  stream << '\e' << '[' << row << ';' << col << 'H';
69  }
70 }
71 
72 inline void moveCursor(std::ostream &stream, unsigned int cells, Direction direction)
73 {
74  if (enabled) {
75  stream << '\e' << '[' << cells << static_cast<char>(direction);
76  }
77 }
78 
79 inline void saveCursor(std::ostream &stream)
80 {
81  if (enabled) {
82  stream << "\e[s";
83  }
84 }
85 
86 inline void restoreCursor(std::ostream &stream)
87 {
88  if (enabled) {
89  stream << "\e[u";
90  }
91 }
92 
93 inline void eraseDisplay(std::ostream &stream)
94 {
95  if (enabled) {
96  stream << "\e[2J";
97  }
98 }
99 
100 inline void eraseLine(std::ostream &stream)
101 {
102  if (enabled) {
103  stream << "\33[2K";
104  }
105 }
106 
107 inline std::ostream &operator<<(std::ostream &stream, TextAttribute displayAttribute)
108 {
109  setStyle(stream, displayAttribute);
110  return stream;
111 }
112 
113 constexpr auto color(Color foreground, Color background, TextAttribute displayAttribute = TextAttribute::Reset)
114 {
115  return std::make_tuple(foreground, background, displayAttribute);
116 }
117 
118 constexpr auto color(Color foreground, ColorContext context, TextAttribute displayAttribute = TextAttribute::Reset)
119 {
120  return std::make_tuple(foreground, context, displayAttribute);
121 }
122 
123 template <typename TupleType,
125  std::is_same<TupleType, std::tuple<Color, ColorContext, TextAttribute>>> * = nullptr>
126 inline std::ostream &operator<<(std::ostream &stream, TupleType displayAttribute)
127 {
128  setStyle(stream, std::get<0>(displayAttribute), std::get<1>(displayAttribute), std::get<2>(displayAttribute));
129  return stream;
130 }
131 
137 enum class Phrases {
138  Error,
139  Warning,
140  End,
141  PlainMessage,
143  SubMessage,
144  ErrorMessage,
146  EndFlush,
147  Info,
148  Override,
149  SubError,
150  SubWarning,
151  InfoMessage,
152 };
153 CPP_UTILITIES_EXPORT std::ostream &operator<<(std::ostream &stream, Phrases phrase);
154 CPP_UTILITIES_EXPORT std::string_view phraseString(Phrases phrase);
155 
156 } // namespace EscapeCodes
157 } // namespace CppUtilities
158 
159 #endif // IOUTILITIES_ANSIESCAPECODES
CppUtilities::EscapeCodes::ColorContext
ColorContext
Definition: ansiescapecodes.h:18
CppUtilities::EscapeCodes::Color::Red
@ Red
CppUtilities::EscapeCodes::moveCursor
void moveCursor(std::ostream &stream, unsigned int cells, Direction direction)
Definition: ansiescapecodes.h:72
CppUtilities::EscapeCodes::TextAttribute::Bold
@ Bold
CppUtilities::EscapeCodes::setCursor
void setCursor(std::ostream &stream, unsigned int row=0, unsigned int col=0)
Definition: ansiescapecodes.h:65
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.
Definition: ansiescapecodes.h:137
CppUtilities::EscapeCodes::Color::Green
@ Green
CppUtilities::EscapeCodes::Phrases::Override
@ Override
CppUtilities::EscapeCodes::Direction::Up
@ Up
CppUtilities::EscapeCodes::phraseString
CPP_UTILITIES_EXPORT std::string_view phraseString(Phrases phrase)
Definition: ansiescapecodes.cpp:117
CppUtilities::EscapeCodes::Phrases::SubMessage
@ SubMessage
CppUtilities::EscapeCodes::Phrases::Warning
@ Warning
CppUtilities::EscapeCodes::Direction::Backward
@ Backward
CppUtilities::EscapeCodes::Color::Black
@ Black
CppUtilities::EscapeCodes::Phrases::End
@ End
CppUtilities::Traits::EnableIfAny
typename std::enable_if< Any< Condition... >::value, Detail::Enabler >::type EnableIfAny
Shortcut for std::enable_if to apply Traits::Any and omit ::value and ::type.
Definition: traits.h:56
CppUtilities::EscapeCodes::color
constexpr auto color(Color foreground, Color background, TextAttribute displayAttribute=TextAttribute::Reset)
Definition: ansiescapecodes.h:113
CppUtilities::EscapeCodes::operator<<
std::ostream & operator<<(std::ostream &stream, TextAttribute displayAttribute)
Definition: ansiescapecodes.h:107
CppUtilities::EscapeCodes::TextAttribute::ReverseVideo
@ ReverseVideo
CppUtilities::EscapeCodes::Phrases::InfoMessage
@ InfoMessage
CppUtilities::EscapeCodes::resetStyle
void resetStyle(std::ostream &stream)
Definition: ansiescapecodes.h:58
CppUtilities::EscapeCodes::Color::Yellow
@ Yellow
CppUtilities::EscapeCodes::Phrases::Error
@ Error
CppUtilities::EscapeCodes::Phrases::EndFlush
@ EndFlush
CppUtilities::EscapeCodes::Phrases::SubError
@ SubError
CppUtilities::EscapeCodes::Direction::Down
@ Down
CppUtilities::EscapeCodes::TextAttribute::Concealed
@ Concealed
CppUtilities::EscapeCodes::TextAttribute
TextAttribute
Definition: ansiescapecodes.h:20
CppUtilities::EscapeCodes::Phrases::ErrorMessage
@ ErrorMessage
CppUtilities::EscapeCodes::Direction
Direction
Definition: ansiescapecodes.h:32
CppUtilities
Contains all utilities provides by the c++utilities library.
Definition: argumentparser.h:17
CppUtilities::EscapeCodes::eraseDisplay
void eraseDisplay(std::ostream &stream)
Definition: ansiescapecodes.h:93
CppUtilities::EscapeCodes::TextAttribute::Underscore
@ Underscore
CppUtilities::EscapeCodes::Phrases::PlainMessage
@ PlainMessage
CppUtilities::EscapeCodes::saveCursor
void saveCursor(std::ostream &stream)
Definition: ansiescapecodes.h:79
CppUtilities::EscapeCodes::TextAttribute::Strikethrough
@ Strikethrough
CppUtilities::EscapeCodes::TextAttribute::Italic
@ Italic
CppUtilities::EscapeCodes::TextAttribute::Blink
@ Blink
CppUtilities::EscapeCodes::TextAttribute::Dim
@ Dim
CppUtilities::EscapeCodes::Direction::Forward
@ Forward
CppUtilities::EscapeCodes::Phrases::Info
@ Info
CppUtilities::EscapeCodes::Phrases::SuccessMessage
@ SuccessMessage
CppUtilities::EscapeCodes::Color
Color
Definition: ansiescapecodes.h:16
CppUtilities::EscapeCodes::ColorContext::Background
@ Background
CppUtilities::EscapeCodes::Color::White
@ White
CppUtilities::EscapeCodes::Phrases::WarningMessage
@ WarningMessage
CppUtilities::EscapeCodes::Color::Purple
@ Purple
CppUtilities::EscapeCodes::Phrases::SubWarning
@ SubWarning
CPP_UTILITIES_EXPORT
#define CPP_UTILITIES_EXPORT
Marks the symbol to be exported by the c++utilities library.
CppUtilities::EscapeCodes::restoreCursor
void restoreCursor(std::ostream &stream)
Definition: ansiescapecodes.h:86
CppUtilities::EscapeCodes::setStyle
void setStyle(std::ostream &stream, TextAttribute displayAttribute=TextAttribute::Reset)
Definition: ansiescapecodes.h:34
CppUtilities::EscapeCodes::ColorContext::Foreground
@ Foreground
CppUtilities::EscapeCodes::Color::Blue
@ Blue
CppUtilities::EscapeCodes::Color::Cyan
@ Cyan
CppUtilities::EscapeCodes::TextAttribute::Reset
@ Reset
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