omw  0.2.1-beta
cli.h
1 /*
2 author Oliver Blaser
3 date 07.01.2022
4 copyright MIT - Copyright (c) 2022 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 OMWi_DOXYGEN_PREDEFINE
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 // OMWi_DOXYGEN_PREDEFINE
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
89  {
90  constexpr char argDelimiter = ';';
91 
92  constexpr char escChar = '\x1B';
93 
96  constexpr char SS2 = 'N';
97  constexpr char SS3 = 'O';
98  constexpr char DCS = 'P';
99  constexpr char CSI = '[';
100  constexpr char ST = '\\';
101  constexpr char OSC = ']';
102  constexpr char SOS = 'X';
103  constexpr char PM = '^';
104  constexpr char APC = '_';
105  constexpr char RIS = 'c';
107 
110  constexpr char singleShiftTwo = SS2;
111  constexpr char singleShiftThree = SS3;
112  constexpr char deviceControlString = DCS;
113  constexpr char controlSequenceIntroducer = CSI;
114  constexpr char stringTerminator = ST;
115  constexpr char osCommand = OSC;
116  constexpr char startOfString = SOS;
117  constexpr char privacyMessage = PM;
118  constexpr char appProgramCommand = APC;
119  constexpr char resetToInitialState = RIS;
121 
122  omw::string seq(char type, const omw::string& argstr = "");
123 
126 
128  enum MODE
129  {
132  MODE_ENABLED
133  };
134 
135  void setMode(int mode);
136  int getMode();
137  void enable(bool state = true);
138  void disable();
139  bool isEnabled();
141 
143  namespace csi
144  {
147  constexpr char CUU = 'A';
148  constexpr char CUD = 'B';
149  constexpr char CUF = 'C';
150  constexpr char CUB = 'D';
151  constexpr char CUP = 'H';
152  constexpr char ED = 'J';
153  constexpr char EL = 'K';
154  constexpr char SU = 'S';
155  constexpr char SD = 'T';
156  constexpr char HVP = 'f';
157  constexpr char SGR = 'm';
159 
162  constexpr char cursorUp = CUU;
163  constexpr char cursorDown = CUD;
164  constexpr char cursorFwd = CUF;
165  constexpr char cursorBack = CUB;
166  constexpr char cursorPos = CUP;
167  constexpr char eraseDisplay = ED;
168  constexpr char eraseLine = EL;
169  constexpr char scrollUp = SU;
170  constexpr char scrollDown = SD;
172 
175  constexpr int fromCurToEnd = 0;
176  constexpr int fromCurToBegin = 1;
177  constexpr int entire = 2;
178  constexpr int entireAndScrlBk = 3;
180 
181  omw::string seq(char ctrlSeqType, const omw::string& argstr = "");
182  omw::string seq(char ctrlSeqType, int arg);
183  omw::string seq(char ctrlSeqType, int arg0, int arg1);
184 
186  namespace sgr
187  {
188  constexpr int font_base = 10;
189  constexpr int foreground_base = 30;
190  constexpr int background_base = 40;
191  constexpr int brightForeground_base = 90;
192  constexpr int brightBackground_base = 100;
193 
194  constexpr int colorBlack = 0;
195  constexpr int colorRed = 1;
196  constexpr int colorGreen = 2;
197  constexpr int colorYellow = 3;
198  constexpr int colorBlue = 4;
199  constexpr int colorMagenta = 5;
200  constexpr int colorCyan = 6;
201  constexpr int colorWhite = 7;
202 
205  constexpr int reset = 0;
206  constexpr int bold = 1;
207  constexpr int faint = 2;
208  constexpr int italic = 3;
209  constexpr int underline = 4;
210  constexpr int blinkSlow = 5;
211  constexpr int blinkFast = 6;
212  constexpr int reverseVideo = 7;
213  constexpr int conceal = 8;
214  constexpr int strike = 9;
215  constexpr int defaultFont = font_base;
216  constexpr int font0 = font_base + 0;
217  constexpr int font1 = font_base + 1;
218  constexpr int font2 = font_base + 2;
219  constexpr int font3 = font_base + 3;
220  constexpr int font4 = font_base + 4;
221  constexpr int font5 = font_base + 5;
222  constexpr int font6 = font_base + 6;
223  constexpr int font7 = font_base + 7;
224  constexpr int font8 = font_base + 8;
225  constexpr int font9 = font_base + 9;
226  constexpr int fraktur = 20;
227  constexpr int boldFaintOff = 22;
228  constexpr int boldOff = boldFaintOff;
229  constexpr int faintOff = boldFaintOff;
230  constexpr int italicFrakturOff = 23;
231  constexpr int italicOff = italicFrakturOff;
232  constexpr int frakturOff = italicFrakturOff;
233  constexpr int underlineOff = 24;
234  constexpr int blinkOff = 25;
235  constexpr int reverseVideoOff = 27;
236  constexpr int concealOff = 28;
237  constexpr int reveal = concealOff;
238  constexpr int strikeOff = 29;
239  constexpr int fgColorBlack = foreground_base + colorBlack;
240  constexpr int fgColorRed = foreground_base + colorRed;
241  constexpr int fgColorGreen = foreground_base + colorGreen;
242  constexpr int fgColorYellow = foreground_base + colorYellow;
243  constexpr int fgColorBlue = foreground_base + colorBlue;
244  constexpr int fgColorMagenta = foreground_base + colorMagenta;
245  constexpr int fgColorCyan = foreground_base + colorCyan;
246  constexpr int fgColorWhite = foreground_base + colorWhite;
247  constexpr int setForeColor = 38;
248  constexpr int defaultForeColor = 39;
249  constexpr int fgColorDefault = defaultForeColor;
250  constexpr int bgColorBlack = background_base + colorBlack;
251  constexpr int bgColorRed = background_base + colorRed;
252  constexpr int bgColorGreen = background_base + colorGreen;
253  constexpr int bgColorYellow = background_base + colorYellow;
254  constexpr int bgColorBlue = background_base + colorBlue;
255  constexpr int bgColorMagenta = background_base + colorMagenta;
256  constexpr int bgColorCyan = background_base + colorCyan;
257  constexpr int bgColorWhite = background_base + colorWhite;
258  constexpr int setBackColor = 48;
259  constexpr int defaultBackColor = 49;
260  constexpr int bgColorDefault = defaultBackColor;
261  constexpr int framed = 51;
262  constexpr int encircled = 52;
263  constexpr int overlined = 53;
264  constexpr int framedEncircledOff = 54;
265  constexpr int framedOff = framedEncircledOff;
266  constexpr int encircledOff = framedEncircledOff;
267  constexpr int overlinedOff = 55;
268  constexpr int setUnderlineColor = 58;
269  constexpr int defaultUnderlineColor = 59;
270  constexpr int super = 73;
271  constexpr int sub = 74;
272  constexpr int superSubOff = 75;
273  constexpr int superOff = superSubOff;
274  constexpr int subOff = superSubOff;
275  constexpr int fgColorBrightBlack = brightForeground_base + colorBlack;
276  constexpr int fgColorBrightRed = brightForeground_base + colorRed;
277  constexpr int fgColorBrightGreen = brightForeground_base + colorGreen;
278  constexpr int fgColorBrightYellow = brightForeground_base + colorYellow;
279  constexpr int fgColorBrightBlue = brightForeground_base + colorBlue;
280  constexpr int fgColorBrightMagenta = brightForeground_base + colorMagenta;
281  constexpr int fgColorBrightCyan = brightForeground_base + colorCyan;
282  constexpr int fgColorBrightWhite = brightForeground_base + colorWhite;
283  constexpr int bgColorBrightBlack = brightBackground_base + colorBlack;
284  constexpr int bgColorBrightRed = brightBackground_base + colorRed;
285  constexpr int bgColorBrightGreen = brightBackground_base + colorGreen;
286  constexpr int bgColorBrightYellow = brightBackground_base + colorYellow;
287  constexpr int bgColorBrightBlue = brightBackground_base + colorBlue;
288  constexpr int bgColorBrightMagenta = brightBackground_base + colorMagenta;
289  constexpr int bgColorBrightCyan = brightBackground_base + colorCyan;
290  constexpr int bgColorBrightWhite = brightBackground_base + colorWhite;
292 
296  constexpr int setColor_8bit = 5;
297  constexpr int setColor_rgb = 2;
299 
300  omw::string seq(const omw::string& argstr = "");
301  omw::string seq(int param);
302  omw::string seq(int param, int arg0, int arg1);
303  omw::string seq(int param, int arg0, int arg1, int arg2, int arg3);
304  omw::string seq(const int* argv, size_t argc);
305  omw::string seq(const std::vector<int>& args);
306 
310  constexpr int col8bit_standardBlack = 0;
311  constexpr int col8bit_standardBlue = 1;
312  constexpr int col8bit_standardCyan = 2;
313  constexpr int col8bit_standardGreen = 3;
314  constexpr int col8bit_standardMagenta = 4;
315  constexpr int col8bit_standardRed = 5;
316  constexpr int col8bit_standardWhite = 6;
317  constexpr int col8bit_standardYellow = 7;
318  constexpr int col8bit_brightBlack = 8;
319  constexpr int col8bit_brightBlue = 9;
320  constexpr int col8bit_brightCyan = 10;
321  constexpr int col8bit_brightGreen = 11;
322  constexpr int col8bit_brightMagenta = 12;
323  constexpr int col8bit_brightRed = 13;
324  constexpr int col8bit_brightWhite = 14;
325  constexpr int col8bit_brightYellow = 15;
326  constexpr int col8bit_grayscale[24] =
327  {
328  232, 233, 234, 235, 236, 237, 238, 239,
329  240, 241, 242, 243, 244, 245, 246, 247,
330  248, 249, 250, 251, 252, 253, 254, 255
331  };
332  constexpr int col8bit_fullGrayscale[26] =
333  {
334  16, 232, 233, 234, 235, 236, 237, 238,
335  239, 240, 241, 242, 243, 244, 245, 246,
336  247, 248, 249, 250, 251, 252, 253, 254,
337  255, 231
338  };
340  //int to8bitColor(uint8_t r, uint8_t g, uint8_t b);
341  //int to8bitColor(const omw::Color& color);
342  //int to8bitGray(uint8_t value);
343  //int to8bitGray(double normValue);
345  }
346  }
347  }
348 
349 #pragma region sgr-ostream-manip
350  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); }
353  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); }
354  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()); }
355  template<class CharT, class Traits = std::char_traits<CharT>>
356  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()); }
357  template<class CharT, class Traits = std::char_traits<CharT>>
358  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()); }
359  template<class CharT, class Traits = std::char_traits<CharT>>
360  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()); }
361  template<class CharT, class Traits = std::char_traits<CharT>>
362  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()); }
363  template<class CharT, class Traits = std::char_traits<CharT>>
364  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()); }
365  template<class CharT, class Traits = std::char_traits<CharT>>
366  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()); }
367  template<class CharT, class Traits = std::char_traits<CharT>>
368  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()); }
369  template<class CharT, class Traits = std::char_traits<CharT>>
370  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()); }
371  template<class CharT, class Traits = std::char_traits<CharT>>
372  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()); }
373  template<class CharT, class Traits = std::char_traits<CharT>>
374  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()); }
375  template<class CharT, class Traits = std::char_traits<CharT>>
376  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()); }
377  template<class CharT, class Traits = std::char_traits<CharT>>
378  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()); }
379  template<class CharT, class Traits = std::char_traits<CharT>>
380  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()); }
381  template<class CharT, class Traits = std::char_traits<CharT>>
382  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()); }
383  template<class CharT, class Traits = std::char_traits<CharT>>
384  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()); }
385  template<class CharT, class Traits = std::char_traits<CharT>>
386  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()); }
387  template<class CharT, class Traits = std::char_traits<CharT>>
388  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()); }
389 
390  template<class CharT, class Traits = std::char_traits<CharT>>
391  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()); }
392  template<class CharT, class Traits = std::char_traits<CharT>>
393  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()); }
394  template<class CharT, class Traits = std::char_traits<CharT>>
395  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()); }
396  template<class CharT, class Traits = std::char_traits<CharT>>
397  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()); }
398  template<class CharT, class Traits = std::char_traits<CharT>>
399  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()); }
400  template<class CharT, class Traits = std::char_traits<CharT>>
401  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()); }
402  template<class CharT, class Traits = std::char_traits<CharT>>
403  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()); }
404 
405  template<class CharT, class Traits = std::char_traits<CharT>>
406  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()); }
407 
413  template<class CharT, class Traits = std::char_traits<CharT>>
414  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()); }
415  template<class CharT, class Traits = std::char_traits<CharT>>
416  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()); }
417  template<class CharT, class Traits = std::char_traits<CharT>>
418  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()); }
419  template<class CharT, class Traits = std::char_traits<CharT>>
420  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()); }
421 
422  template<class CharT, class Traits = std::char_traits<CharT>>
423  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()); }
424  template<class CharT, class Traits = std::char_traits<CharT>>
425  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()); }
426  template<class CharT, class Traits = std::char_traits<CharT>>
427  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()); }
428  template<class CharT, class Traits = std::char_traits<CharT>>
429  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()); }
430 
431  template<class CharT, class Traits = std::char_traits<CharT>>
432  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()); }
433  template<class CharT, class Traits = std::char_traits<CharT>>
434  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()); }
435  template<class CharT, class Traits = std::char_traits<CharT>>
436  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()); }
437  template<class CharT, class Traits = std::char_traits<CharT>>
438  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()); }
439  template<class CharT, class Traits = std::char_traits<CharT>>
440  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()); }
441  template<class CharT, class Traits = std::char_traits<CharT>>
442  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()); }
443  template<class CharT, class Traits = std::char_traits<CharT>>
444  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()); }
445  template<class CharT, class Traits = std::char_traits<CharT>>
446  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()); }
447  template<class CharT, class Traits = std::char_traits<CharT>>
448  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()); }
449  template<class CharT, class Traits = std::char_traits<CharT>>
450  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()); }
451  template<class CharT, class Traits = std::char_traits<CharT>>
452  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()); }
453  template<class CharT, class Traits = std::char_traits<CharT>>
454  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()); }
455  template<class CharT, class Traits = std::char_traits<CharT>>
456  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()); }
457  template<class CharT, class Traits = std::char_traits<CharT>>
458  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()); }
459  template<class CharT, class Traits = std::char_traits<CharT>>
460  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()); }
461  template<class CharT, class Traits = std::char_traits<CharT>>
462  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()); }
463  template<class CharT, class Traits = std::char_traits<CharT>>
464  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()); }
465 
466  inline omw::ansiesc_ostream_manip_t font(int index) { return omw::ansiesc::csi::sgr::seq(omw::ansiesc::csi::sgr::font_base + index); }
467  template<class CharT, class Traits = std::char_traits<CharT>>
468  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()); }
469  template<class CharT, class Traits = std::char_traits<CharT>>
470  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()); }
471  template<class CharT, class Traits = std::char_traits<CharT>>
472  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()); }
473  template<class CharT, class Traits = std::char_traits<CharT>>
474  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()); }
475  template<class CharT, class Traits = std::char_traits<CharT>>
476  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()); }
477  template<class CharT, class Traits = std::char_traits<CharT>>
478  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()); }
479  template<class CharT, class Traits = std::char_traits<CharT>>
480  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()); }
481  template<class CharT, class Traits = std::char_traits<CharT>>
482  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()); }
483  template<class CharT, class Traits = std::char_traits<CharT>>
484  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()); }
485  template<class CharT, class Traits = std::char_traits<CharT>>
486  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()); }
487  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); }
488  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); }
489  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()); }
490  template<class CharT, class Traits = std::char_traits<CharT>>
491  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()); }
492  template<class CharT, class Traits = std::char_traits<CharT>>
493  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()); }
494  template<class CharT, class Traits = std::char_traits<CharT>>
495  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()); }
496  template<class CharT, class Traits = std::char_traits<CharT>>
497  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()); }
498  template<class CharT, class Traits = std::char_traits<CharT>>
499  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()); }
500  template<class CharT, class Traits = std::char_traits<CharT>>
501  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()); }
502  template<class CharT, class Traits = std::char_traits<CharT>>
503  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()); }
504  template<class CharT, class Traits = std::char_traits<CharT>>
505  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()); }
506  template<class CharT, class Traits = std::char_traits<CharT>>
507  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()); }
508  template<class CharT, class Traits = std::char_traits<CharT>>
509  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()); }
510  template<class CharT, class Traits = std::char_traits<CharT>>
511  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()); }
512  template<class CharT, class Traits = std::char_traits<CharT>>
513  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()); }
514  template<class CharT, class Traits = std::char_traits<CharT>>
515  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()); }
516  template<class CharT, class Traits = std::char_traits<CharT>>
517  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()); }
518  template<class CharT, class Traits = std::char_traits<CharT>>
519  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()); }
520  template<class CharT, class Traits = std::char_traits<CharT>>
521  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()); }
522  template<class CharT, class Traits = std::char_traits<CharT>>
523  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()); }
524  template<class CharT, class Traits = std::char_traits<CharT>>
525  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()); }
526  template<class CharT, class Traits = std::char_traits<CharT>>
527  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()); }
528  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); }
529  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); }
530  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()); }
531  template<class CharT, class Traits = std::char_traits<CharT>>
532  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()); }
534 #pragma endregion sgr-ostream-manip
535 
536 
538 }
539 
540 #endif // IG_OMW_CLI_H
omw::Color::r
uint8_t r() const
Definition: color.cpp:228
omw::ansiesc::MODE_DISABLED
@ MODE_DISABLED
Definition: cli.h:131
omw::ansiesc::csi::sgr::col8bit_fullGrayscale
constexpr int col8bit_fullGrayscale[26]
Definition: cli.h:332
omw::operator<<
omw::SignedInt128 operator<<(const omw::SignedInt128 &a, unsigned int count)
omw::ansiesc::seq
omw::string seq(char type, const omw::string &argstr="")
Root of all sequence builders.
Definition: cli.cpp:61
omw::ansiesc::setMode
void setMode(int mode)
Definition: cli.cpp:74
omw::ansiesc::enable
void enable(bool state=true)
Definition: cli.cpp:100
omw::ansiesc::csi::sgr::seq
omw::string seq(const omw::string &argstr="")
Definition: cli.cpp:163
omw::ansiesc::MODE_ENABLED
@ MODE_ENABLED
Definition: cli.h:132
omw::ansiesc::disable
void disable()
Definition: cli.cpp:109
omw::Color::g
uint8_t g() const
Definition: color.cpp:234
omw::defaultColors
std::basic_ostream< CharT, Traits > & defaultColors(std::basic_ostream< CharT, Traits > &os)
Resets all color settings.
Definition: cli.h:414
omw::Color::b
uint8_t b() const
Definition: color.cpp:240
omw::ansiesc_ostream_manip_t
Definition: cli.h:57
omw::ansiesc::csi::seq
omw::string seq(char ctrlSeqType, const omw::string &argstr="")
Definition: cli.cpp:126
omw::ansiesc::csi
CSI (Control Sequence Introducer)
Definition: cli.h:144
omw::Color
Definition: color.h:21
omw::ansiesc::MODE_DEFAULT
@ MODE_DEFAULT
Definition: cli.h:130
omw::ansiesc::getMode
int getMode()
Definition: cli.cpp:92
omw::string
Definition: string.h:140
omw
Main namespace.
omw::ansiesc::MODE
MODE
ANSI escape sequence builder mode.
Definition: cli.h:129
omw::ansiesc::csi::sgr::col8bit_grayscale
constexpr int col8bit_grayscale[24]
Definition: cli.h:326