omw  0.1.1
cli.h
1 /*
2 author Oliver Blaser
3 date 08.12.2021
4 copyright MIT - Copyright (c) 2021 Oliver Blaser
5 */
6 
7 #ifndef IG_OMW_CLI_H
8 #define IG_OMW_CLI_H
9 
10 #include <iostream>
11 #include <string>
12 #include <vector>
13 
14 #include "../omw/color.h"
15 #include "../omw/defs.h"
16 #include "../omw/string.h"
17 
18 
19 #ifndef DOXYGEN_EXCLUDE_FROM_DOC
20 // TODO: move to stream.cpp/.h or similar, and document it properly
21 namespace omw
22 {
23  class ostream_manip_t
24  {
25  public:
26  ostream_manip_t(const omw::string& argument) : m_arg(argument) {}
27  virtual ~ostream_manip_t() {}
28 
29  const omw::string& arg() const { return m_arg; }
30 
31  template<class CharT, class Traits = std::char_traits<CharT>>
32  friend inline std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, const omw::ostream_manip_t& manip)
33  {
34  const omw::string& str = manip.arg();
35  for (size_t i = 0; i < str.length(); ++i) { os.put(os.widen(str[i])); }
36  return os;
37  }
38 
39  protected:
40  omw::string m_arg;
41  };
42 
43  //template<class CharT, class Traits = std::char_traits<CharT>>
44  //inline std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, const omw::ostream_manip_t& manip)
45  //{
46  // const omw::string& str = manip.arg();
47  // for (size_t i = 0; i < str.length(); ++i) { os.put(os.widen(str[i])); }
48  // return os;
49  //}
50 }
51 #endif // DOXYGEN_EXCLUDE_FROM_DOC
52 
53 
54 namespace omw
55 {
56  class ansiesc_ostream_manip_t : public omw::ostream_manip_t
57  {
58  public:
59  ansiesc_ostream_manip_t(const omw::string& argument) : omw::ostream_manip_t(argument) {}
60  virtual ~ansiesc_ostream_manip_t() {}
61 
62  template<class CharT, class Traits = std::char_traits<CharT>>
63  friend inline std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, const omw::ansiesc_ostream_manip_t& manip) { return (os << manip.arg().c_str()); }
64  // since the escape sequences consists only out of ASCII chars, here is no std::basic_ostream<c,t>::widen() needed.
65  };
66  //template<class CharT, class Traits = std::char_traits<CharT>>
67  //inline std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, const omw::ansiesc_ostream_manip_t& manip) { return (os << manip.arg().c_str()); }
68 
69 
70 
76  namespace ansiesc
81  {
82  constexpr char argSepChar = ';';
83 
84  constexpr char escChar = '\x1B';
85 
86  constexpr char csiChar = '[';
87  constexpr char stChar = '\\';
88  constexpr char oscChar = ']';
89  constexpr char sosChar = 'X';
90 
92  namespace csi
93  {
96  constexpr char CUU = 'A';
97  constexpr char CUD = 'B';
98  constexpr char CUF = 'C';
99  constexpr char CUB = 'D';
100  constexpr char CUP = 'H';
101  constexpr char ED = 'J';
102  constexpr char EL = 'K';
103  constexpr char SU = 'S';
104  constexpr char SD = 'T';
105  constexpr char HVP = 'f';
106  constexpr char SGR = 'm';
108 
111  constexpr char cursorUp = CUU;
112  constexpr char cursorDown = CUD;
113  constexpr char cursorFwd = CUF;
114  constexpr char cursorBack = CUB;
115  constexpr char cursorPos = CUP;
116  constexpr char eraseDisplay = ED;
117  constexpr char eraseLine = EL;
118  constexpr char scrollUp = SU;
119  constexpr char scrollDown = SD;
121 
124  constexpr int fromCurToEnd = 0;
125  constexpr int fromCurToBegin = 1;
126  constexpr int entire = 2;
127  constexpr int entireAndScrlBk = 3;
129 
130  inline omw::string seq(char cs, const omw::string& arg = "") { return (omw::string(1, omw::ansiesc::escChar) + omw::ansiesc::csiChar + arg + cs); }
131  inline omw::string seq(char cs, int arg) { return omw::ansiesc::csi::seq(cs, omw::to_string(arg)); }
132  inline omw::string seq(char cs, int arg0, int arg1)
133  {
134  return omw::ansiesc::csi::seq(cs, omw::to_string(arg0) + omw::ansiesc::argSepChar + omw::to_string(arg1));
135  }
136 
138  namespace sgr
139  {
140  constexpr int font_base = 10;
141  constexpr int foreground_base = 30;
142  constexpr int background_base = 40;
143  constexpr int brightForeground_base = 90;
144  constexpr int brightBackground_base = 100;
145 
146  constexpr int colorBlack = 0;
147  constexpr int colorRed = 1;
148  constexpr int colorGreen = 2;
149  constexpr int colorYellow = 3;
150  constexpr int colorBlue = 4;
151  constexpr int colorMagenta = 5;
152  constexpr int colorCyan = 6;
153  constexpr int colorWhite = 7;
154 
157  constexpr int reset = 0;
158  constexpr int bold = 1;
159  constexpr int faint = 2;
160  constexpr int italic = 3;
161  constexpr int underline = 4;
162  constexpr int blinkSlow = 5;
163  constexpr int blinkFast = 6;
164  constexpr int reverseVideo = 7;
165  constexpr int conceal = 8;
166  constexpr int strike = 9;
167  constexpr int defaultFont = font_base;
168  constexpr int font0 = font_base + 0;
169  constexpr int font1 = font_base + 1;
170  constexpr int font2 = font_base + 2;
171  constexpr int font3 = font_base + 3;
172  constexpr int font4 = font_base + 4;
173  constexpr int font5 = font_base + 5;
174  constexpr int font6 = font_base + 6;
175  constexpr int font7 = font_base + 7;
176  constexpr int font8 = font_base + 8;
177  constexpr int font9 = font_base + 9;
178  constexpr int fraktur = 20;
179  constexpr int boldFaintOff = 22;
180  constexpr int boldOff = boldFaintOff;
181  constexpr int faintOff = boldFaintOff;
182  constexpr int italicFrakturOff = 23;
183  constexpr int italicOff = italicFrakturOff;
184  constexpr int frakturOff = italicFrakturOff;
185  constexpr int underlineOff = 24;
186  constexpr int blinkOff = 25;
187  constexpr int reverseVideoOff = 27;
188  constexpr int concealOff = 28;
189  constexpr int reveal = concealOff;
190  constexpr int strikeOff = 29;
191  constexpr int fgColorBlack = foreground_base + colorBlack;
192  constexpr int fgColorRed = foreground_base + colorRed;
193  constexpr int fgColorGreen = foreground_base + colorGreen;
194  constexpr int fgColorYellow = foreground_base + colorYellow;
195  constexpr int fgColorBlue = foreground_base + colorBlue;
196  constexpr int fgColorMagenta = foreground_base + colorMagenta;
197  constexpr int fgColorCyan = foreground_base + colorCyan;
198  constexpr int fgColorWhite = foreground_base + colorWhite;
199  constexpr int setForeColor = 38;
200  constexpr int defaultForeColor = 39;
201  constexpr int fgColorDefault = defaultForeColor;
202  constexpr int bgColorBlack = background_base + colorBlack;
203  constexpr int bgColorRed = background_base + colorRed;
204  constexpr int bgColorGreen = background_base + colorGreen;
205  constexpr int bgColorYellow = background_base + colorYellow;
206  constexpr int bgColorBlue = background_base + colorBlue;
207  constexpr int bgColorMagenta = background_base + colorMagenta;
208  constexpr int bgColorCyan = background_base + colorCyan;
209  constexpr int bgColorWhite = background_base + colorWhite;
210  constexpr int setBackColor = 48;
211  constexpr int defaultBackColor = 49;
212  constexpr int bgColorDefault = defaultBackColor;
213  constexpr int framed = 51;
214  constexpr int encircled = 52;
215  constexpr int overlined = 53;
216  constexpr int framedEncircledOff = 54;
217  constexpr int framedOff = framedEncircledOff;
218  constexpr int encircledOff = framedEncircledOff;
219  constexpr int overlinedOff = 55;
220  constexpr int setUnderlineColor = 58;
221  constexpr int defaultUnderlineColor = 59;
222  constexpr int super = 73;
223  constexpr int sub = 74;
224  constexpr int superSubOff = 75;
225  constexpr int superOff = superSubOff;
226  constexpr int subOff = superSubOff;
227  constexpr int fgColorBrightBlack = brightForeground_base + colorBlack;
228  constexpr int fgColorBrightRed = brightForeground_base + colorRed;
229  constexpr int fgColorBrightGreen = brightForeground_base + colorGreen;
230  constexpr int fgColorBrightYellow = brightForeground_base + colorYellow;
231  constexpr int fgColorBrightBlue = brightForeground_base + colorBlue;
232  constexpr int fgColorBrightMagenta = brightForeground_base + colorMagenta;
233  constexpr int fgColorBrightCyan = brightForeground_base + colorCyan;
234  constexpr int fgColorBrightWhite = brightForeground_base + colorWhite;
235  constexpr int bgColorBrightBlack = brightBackground_base + colorBlack;
236  constexpr int bgColorBrightRed = brightBackground_base + colorRed;
237  constexpr int bgColorBrightGreen = brightBackground_base + colorGreen;
238  constexpr int bgColorBrightYellow = brightBackground_base + colorYellow;
239  constexpr int bgColorBrightBlue = brightBackground_base + colorBlue;
240  constexpr int bgColorBrightMagenta = brightBackground_base + colorMagenta;
241  constexpr int bgColorBrightCyan = brightBackground_base + colorCyan;
242  constexpr int bgColorBrightWhite = brightBackground_base + colorWhite;
244 
248  constexpr int setColor_8bit = 5;
249  constexpr int setColor_rgb = 2;
251 
252  inline omw::string seq(const omw::string& args = "") { return omw::ansiesc::csi::seq(omw::ansiesc::csi::SGR, args); }
253  inline omw::string seq(int param) { return omw::ansiesc::csi::sgr::seq(omw::to_string(param)); }
254  inline omw::string seq(int param, int arg0, int arg1)
255  {
256  return omw::ansiesc::csi::sgr::seq(omw::to_string(param) + omw::ansiesc::argSepChar + omw::to_string(arg0) + omw::ansiesc::argSepChar + omw::to_string(arg1));
257  }
258  omw::string seq(int param, int arg0, int arg1, int arg2, int arg3);
259  omw::string seq(const int* argv, size_t argc);
260  inline omw::string seq(const std::vector<int>& args) { return omw::ansiesc::csi::sgr::seq(args.data(), args.size()); }
261 
265  constexpr int col8bit_standardBlack = 0;
266  constexpr int col8bit_standardBlue = 1;
267  constexpr int col8bit_standardCyan = 2;
268  constexpr int col8bit_standardGreen = 3;
269  constexpr int col8bit_standardMagenta = 4;
270  constexpr int col8bit_standardRed = 5;
271  constexpr int col8bit_standardWhite = 6;
272  constexpr int col8bit_standardYellow = 7;
273  constexpr int col8bit_brightBlack = 8;
274  constexpr int col8bit_brightBlue = 9;
275  constexpr int col8bit_brightCyan = 10;
276  constexpr int col8bit_brightGreen = 11;
277  constexpr int col8bit_brightMagenta = 12;
278  constexpr int col8bit_brightRed = 13;
279  constexpr int col8bit_brightWhite = 14;
280  constexpr int col8bit_brightYellow = 15;
281  constexpr int col8bit_grayscale26[26] = { 16, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 231 };
282 
283  //int to8bitColor(uint8_t r, uint8_t g, uint8_t b);
284  //int to8bitColor(const omw::Color& color);
285  //int to8bitGray(uint8_t value);
286  //int to8bitGray(double normValue);
288  }
289  }
290  }
291 
292 #pragma region ostream-manip
293  inline omw::ansiesc_ostream_manip_t backColor(int color8bit) { return omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::setBackColor, omw::ansiesc::csi::sgr::setColor_8bit, color8bit); }
296  inline omw::ansiesc_ostream_manip_t backColor(uint8_t r, uint8_t g, uint8_t b) { return omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::setBackColor, omw::ansiesc::csi::sgr::setColor_rgb, r, g, b); }
297  inline omw::ansiesc_ostream_manip_t backColor(const omw::Color& color) { return omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::setBackColor, omw::ansiesc::csi::sgr::setColor_rgb, color.r(), color.g(), color.b()); }
298  template<class CharT, class Traits = std::char_traits<CharT>>
299  inline std::basic_ostream<CharT, Traits>& bgBlack(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::bgColorBlack).c_str()); }
300  template<class CharT, class Traits = std::char_traits<CharT>>
301  inline std::basic_ostream<CharT, Traits>& bgBlue(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::bgColorBlue).c_str()); }
302  template<class CharT, class Traits = std::char_traits<CharT>>
303  inline std::basic_ostream<CharT, Traits>& bgBrightBlack(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::bgColorBrightBlack).c_str()); }
304  template<class CharT, class Traits = std::char_traits<CharT>>
305  inline std::basic_ostream<CharT, Traits>& bgBrightBlue(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::bgColorBrightBlue).c_str()); }
306  template<class CharT, class Traits = std::char_traits<CharT>>
307  inline std::basic_ostream<CharT, Traits>& bgBrightCyan(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::bgColorBrightCyan).c_str()); }
308  template<class CharT, class Traits = std::char_traits<CharT>>
309  inline std::basic_ostream<CharT, Traits>& bgBrightGreen(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::bgColorBrightGreen).c_str()); }
310  template<class CharT, class Traits = std::char_traits<CharT>>
311  inline std::basic_ostream<CharT, Traits>& bgBrightMagenta(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::bgColorBrightMagenta).c_str()); }
312  template<class CharT, class Traits = std::char_traits<CharT>>
313  inline std::basic_ostream<CharT, Traits>& bgBrightRed(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::bgColorBrightRed).c_str()); }
314  template<class CharT, class Traits = std::char_traits<CharT>>
315  inline std::basic_ostream<CharT, Traits>& bgBrightWhite(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::bgColorBrightWhite).c_str()); }
316  template<class CharT, class Traits = std::char_traits<CharT>>
317  inline std::basic_ostream<CharT, Traits>& bgBrightYellow(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::bgColorBrightYellow).c_str()); }
318  template<class CharT, class Traits = std::char_traits<CharT>>
319  inline std::basic_ostream<CharT, Traits>& bgCyan(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::bgColorCyan).c_str()); }
320  template<class CharT, class Traits = std::char_traits<CharT>>
321  inline std::basic_ostream<CharT, Traits>& bgDefault(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::bgColorDefault).c_str()); }
322  template<class CharT, class Traits = std::char_traits<CharT>>
323  inline std::basic_ostream<CharT, Traits>& bgGreen(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::bgColorGreen).c_str()); }
324  template<class CharT, class Traits = std::char_traits<CharT>>
325  inline std::basic_ostream<CharT, Traits>& bgMagenta(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::bgColorMagenta).c_str()); }
326  template<class CharT, class Traits = std::char_traits<CharT>>
327  inline std::basic_ostream<CharT, Traits>& bgRed(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::bgColorRed).c_str()); }
328  template<class CharT, class Traits = std::char_traits<CharT>>
329  inline std::basic_ostream<CharT, Traits>& bgWhite(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::bgColorWhite).c_str()); }
330  template<class CharT, class Traits = std::char_traits<CharT>>
331  inline std::basic_ostream<CharT, Traits>& bgYellow(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::bgColorYellow).c_str()); }
332 
333  template<class CharT, class Traits = std::char_traits<CharT>>
334  inline std::basic_ostream<CharT, Traits>& blinkFast(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::blinkFast).c_str()); }
335  template<class CharT, class Traits = std::char_traits<CharT>>
336  inline std::basic_ostream<CharT, Traits>& blinkOff(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::blinkOff).c_str()); }
337  template<class CharT, class Traits = std::char_traits<CharT>>
338  inline std::basic_ostream<CharT, Traits>& blinkSlow(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::blinkSlow).c_str()); }
339  template<class CharT, class Traits = std::char_traits<CharT>>
340  inline std::basic_ostream<CharT, Traits>& bold(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::bold).c_str()); }
341  template<class CharT, class Traits = std::char_traits<CharT>>
342  inline std::basic_ostream<CharT, Traits>& boldOff(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::boldOff).c_str()); }
343  template<class CharT, class Traits = std::char_traits<CharT>>
344  inline std::basic_ostream<CharT, Traits>& conceal(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::conceal).c_str()); }
345  template<class CharT, class Traits = std::char_traits<CharT>>
346  inline std::basic_ostream<CharT, Traits>& concealOff(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::concealOff).c_str()); }
347 
348  template<class CharT, class Traits = std::char_traits<CharT>>
349  inline std::basic_ostream<CharT, Traits>& defaultBackColor(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::defaultBackColor).c_str()); }
350 
356  template<class CharT, class Traits = std::char_traits<CharT>>
357  inline std::basic_ostream<CharT, Traits>& defaultColors(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::defaultBackColor, omw::ansiesc::csi::sgr::defaultForeColor, omw::ansiesc::csi::sgr::defaultUnderlineColor).c_str()); }
358  template<class CharT, class Traits = std::char_traits<CharT>>
359  inline std::basic_ostream<CharT, Traits>& defaultFont(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::defaultFont).c_str()); }
360  template<class CharT, class Traits = std::char_traits<CharT>>
361  inline std::basic_ostream<CharT, Traits>& defaultForeColor(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::defaultForeColor).c_str()); }
362  template<class CharT, class Traits = std::char_traits<CharT>>
363  inline std::basic_ostream<CharT, Traits>& defaultUnderlineColor(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::defaultUnderlineColor).c_str()); }
364 
365  template<class CharT, class Traits = std::char_traits<CharT>>
366  inline std::basic_ostream<CharT, Traits>& encircled(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::encircled).c_str()); }
367  template<class CharT, class Traits = std::char_traits<CharT>>
368  inline std::basic_ostream<CharT, Traits>& encircledOff(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::encircledOff).c_str()); }
369  template<class CharT, class Traits = std::char_traits<CharT>>
370  inline std::basic_ostream<CharT, Traits>& faint(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::faint).c_str()); }
371  template<class CharT, class Traits = std::char_traits<CharT>>
372  inline std::basic_ostream<CharT, Traits>& faintOff(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::faintOff).c_str()); }
373 
374  template<class CharT, class Traits = std::char_traits<CharT>>
375  inline std::basic_ostream<CharT, Traits>& fgBlack(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::fgColorBlack).c_str()); }
376  template<class CharT, class Traits = std::char_traits<CharT>>
377  inline std::basic_ostream<CharT, Traits>& fgBlue(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::fgColorBlue).c_str()); }
378  template<class CharT, class Traits = std::char_traits<CharT>>
379  inline std::basic_ostream<CharT, Traits>& fgBrightBlack(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::fgColorBrightBlack).c_str()); }
380  template<class CharT, class Traits = std::char_traits<CharT>>
381  inline std::basic_ostream<CharT, Traits>& fgBrightBlue(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::fgColorBrightBlue).c_str()); }
382  template<class CharT, class Traits = std::char_traits<CharT>>
383  inline std::basic_ostream<CharT, Traits>& fgBrightCyan(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::fgColorBrightCyan).c_str()); }
384  template<class CharT, class Traits = std::char_traits<CharT>>
385  inline std::basic_ostream<CharT, Traits>& fgBrightGreen(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::fgColorBrightGreen).c_str()); }
386  template<class CharT, class Traits = std::char_traits<CharT>>
387  inline std::basic_ostream<CharT, Traits>& fgBrightMagenta(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::fgColorBrightMagenta).c_str()); }
388  template<class CharT, class Traits = std::char_traits<CharT>>
389  inline std::basic_ostream<CharT, Traits>& fgBrightRed(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::fgColorBrightRed).c_str()); }
390  template<class CharT, class Traits = std::char_traits<CharT>>
391  inline std::basic_ostream<CharT, Traits>& fgBrightWhite(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::fgColorBrightWhite).c_str()); }
392  template<class CharT, class Traits = std::char_traits<CharT>>
393  inline std::basic_ostream<CharT, Traits>& fgBrightYellow(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::fgColorBrightYellow).c_str()); }
394  template<class CharT, class Traits = std::char_traits<CharT>>
395  inline std::basic_ostream<CharT, Traits>& fgCyan(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::fgColorCyan).c_str()); }
396  template<class CharT, class Traits = std::char_traits<CharT>>
397  inline std::basic_ostream<CharT, Traits>& fgDefault(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::fgColorDefault).c_str()); }
398  template<class CharT, class Traits = std::char_traits<CharT>>
399  inline std::basic_ostream<CharT, Traits>& fgGreen(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::fgColorGreen).c_str()); }
400  template<class CharT, class Traits = std::char_traits<CharT>>
401  inline std::basic_ostream<CharT, Traits>& fgMagenta(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::fgColorMagenta).c_str()); }
402  template<class CharT, class Traits = std::char_traits<CharT>>
403  inline std::basic_ostream<CharT, Traits>& fgRed(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::fgColorRed).c_str()); }
404  template<class CharT, class Traits = std::char_traits<CharT>>
405  inline std::basic_ostream<CharT, Traits>& fgWhite(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::fgColorWhite).c_str()); }
406  template<class CharT, class Traits = std::char_traits<CharT>>
407  inline std::basic_ostream<CharT, Traits>& fgYellow(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::fgColorYellow).c_str()); }
408 
409  inline omw::ansiesc_ostream_manip_t font(int index) { return omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::font_base + index); }
410  template<class CharT, class Traits = std::char_traits<CharT>>
411  inline std::basic_ostream<CharT, Traits>& font0(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::font0).c_str()); }
412  template<class CharT, class Traits = std::char_traits<CharT>>
413  inline std::basic_ostream<CharT, Traits>& font1(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::font1).c_str()); }
414  template<class CharT, class Traits = std::char_traits<CharT>>
415  inline std::basic_ostream<CharT, Traits>& font2(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::font2).c_str()); }
416  template<class CharT, class Traits = std::char_traits<CharT>>
417  inline std::basic_ostream<CharT, Traits>& font3(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::font3).c_str()); }
418  template<class CharT, class Traits = std::char_traits<CharT>>
419  inline std::basic_ostream<CharT, Traits>& font4(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::font4).c_str()); }
420  template<class CharT, class Traits = std::char_traits<CharT>>
421  inline std::basic_ostream<CharT, Traits>& font5(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::font5).c_str()); }
422  template<class CharT, class Traits = std::char_traits<CharT>>
423  inline std::basic_ostream<CharT, Traits>& font6(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::font6).c_str()); }
424  template<class CharT, class Traits = std::char_traits<CharT>>
425  inline std::basic_ostream<CharT, Traits>& font7(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::font7).c_str()); }
426  template<class CharT, class Traits = std::char_traits<CharT>>
427  inline std::basic_ostream<CharT, Traits>& font8(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::font8).c_str()); }
428  template<class CharT, class Traits = std::char_traits<CharT>>
429  inline std::basic_ostream<CharT, Traits>& font9(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::font9).c_str()); }
430  inline omw::ansiesc_ostream_manip_t foreColor(int color8bit) { return omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::setForeColor, omw::ansiesc::csi::sgr::setColor_8bit, color8bit); }
431  inline omw::ansiesc_ostream_manip_t foreColor(uint8_t r, uint8_t g, uint8_t b) { return omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::setForeColor, omw::ansiesc::csi::sgr::setColor_rgb, r, g, b); }
432  inline omw::ansiesc_ostream_manip_t foreColor(const omw::Color& color) { return omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::setForeColor, omw::ansiesc::csi::sgr::setColor_rgb, color.r(), color.g(), color.b()); }
433  template<class CharT, class Traits = std::char_traits<CharT>>
434  inline std::basic_ostream<CharT, Traits>& fraktur(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::fraktur).c_str()); }
435  template<class CharT, class Traits = std::char_traits<CharT>>
436  inline std::basic_ostream<CharT, Traits>& frakturOff(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::frakturOff).c_str()); }
437  template<class CharT, class Traits = std::char_traits<CharT>>
438  inline std::basic_ostream<CharT, Traits>& framed(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::framed).c_str()); }
439  template<class CharT, class Traits = std::char_traits<CharT>>
440  inline std::basic_ostream<CharT, Traits>& framedOff(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::framedOff).c_str()); }
441  template<class CharT, class Traits = std::char_traits<CharT>>
442  inline std::basic_ostream<CharT, Traits>& italic(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::italic).c_str()); }
443  template<class CharT, class Traits = std::char_traits<CharT>>
444  inline std::basic_ostream<CharT, Traits>& italicOff(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::italicOff).c_str()); }
445  template<class CharT, class Traits = std::char_traits<CharT>>
446  inline std::basic_ostream<CharT, Traits>& normal(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::reset).c_str()); }
447  template<class CharT, class Traits = std::char_traits<CharT>>
448  inline std::basic_ostream<CharT, Traits>& overlined(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::overlined).c_str()); }
449  template<class CharT, class Traits = std::char_traits<CharT>>
450  inline std::basic_ostream<CharT, Traits>& overlinedOff(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::overlinedOff).c_str()); }
451  template<class CharT, class Traits = std::char_traits<CharT>>
452  inline std::basic_ostream<CharT, Traits>& reveal(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::reveal).c_str()); }
453  template<class CharT, class Traits = std::char_traits<CharT>>
454  inline std::basic_ostream<CharT, Traits>& reverseVideo(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::reverseVideo).c_str()); }
455  template<class CharT, class Traits = std::char_traits<CharT>>
456  inline std::basic_ostream<CharT, Traits>& reverseVideoOff(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::reverseVideoOff).c_str()); }
457  template<class CharT, class Traits = std::char_traits<CharT>>
458  inline std::basic_ostream<CharT, Traits>& strike(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::strike).c_str()); }
459  template<class CharT, class Traits = std::char_traits<CharT>>
460  inline std::basic_ostream<CharT, Traits>& strikeOff(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::strikeOff).c_str()); }
461  template<class CharT, class Traits = std::char_traits<CharT>>
462  inline std::basic_ostream<CharT, Traits>& sub(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::sub).c_str()); }
463  template<class CharT, class Traits = std::char_traits<CharT>>
464  inline std::basic_ostream<CharT, Traits>& subOff(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::subOff).c_str()); }
465  template<class CharT, class Traits = std::char_traits<CharT>>
466  inline std::basic_ostream<CharT, Traits>& super(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::super).c_str()); }
467  template<class CharT, class Traits = std::char_traits<CharT>>
468  inline std::basic_ostream<CharT, Traits>& superOff(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::superOff).c_str()); }
469  template<class CharT, class Traits = std::char_traits<CharT>>
470  inline std::basic_ostream<CharT, Traits>& underline(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::underline).c_str()); }
471  inline omw::ansiesc_ostream_manip_t underlineColor(int color8bit) { return omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::setUnderlineColor, omw::ansiesc::csi::sgr::setColor_8bit, color8bit); }
472  inline omw::ansiesc_ostream_manip_t underlineColor(uint8_t r, uint8_t g, uint8_t b) { return omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::setUnderlineColor, omw::ansiesc::csi::sgr::setColor_rgb, r, g, b); }
473  inline omw::ansiesc_ostream_manip_t underlineColor(const omw::Color& color) { return omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::setUnderlineColor, omw::ansiesc::csi::sgr::setColor_rgb, color.r(), color.g(), color.b()); }
474  template<class CharT, class Traits = std::char_traits<CharT>>
475  inline std::basic_ostream<CharT, Traits>& underlineOff(std::basic_ostream<CharT, Traits>& os) { return (os << omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::underlineOff).c_str()); }
477 #pragma endregion ostream-manip
478 
479 
481 }
482 
483 #endif // IG_OMW_CLI_H
omw::Color::r
uint8_t r() const
Definition: color.cpp:222
omw::Color::g
uint8_t g() const
Definition: color.cpp:228
omw::defaultColors
std::basic_ostream< CharT, Traits > & defaultColors(std::basic_ostream< CharT, Traits > &os)
Resets all color settings.
Definition: cli.h:357
omw::Color::b
uint8_t b() const
Definition: color.cpp:234
omw::ansiesc_ostream_manip_t
Definition: cli.h:57
omw::ansiesc::csi::seq
omw::string seq(char cs, const omw::string &arg="")
Definition: cli.h:130
omw::ansiesc::csi
CSI (Control Sequence Introducer)
Definition: cli.h:93
omw::Color
Definition: color.h:21
omw::string
Definition: string.h:96
omw
Main namespace.
omw::ansiesc::csi::sgr::seq
omw::string seq(const omw::string &args="")
Definition: cli.h:252