Mercurial > minori
comparison dep/toml11/toml/color.hpp @ 318:3b355fa948c7
config: use TOML instead of INI
unfortunately, INI is not enough, and causes some paths including
semicolons to break with our current storage of the library folders.
so, I decided to switch to TOML which does support real arrays...
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Wed, 12 Jun 2024 05:25:41 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
317:b1f4d1867ab1 | 318:3b355fa948c7 |
---|---|
1 #ifndef TOML11_COLOR_HPP | |
2 #define TOML11_COLOR_HPP | |
3 #include <cstdint> | |
4 #include <ostream> | |
5 | |
6 #ifdef TOML11_COLORIZE_ERROR_MESSAGE | |
7 #define TOML11_ERROR_MESSAGE_COLORIZED true | |
8 #else | |
9 #define TOML11_ERROR_MESSAGE_COLORIZED false | |
10 #endif | |
11 | |
12 namespace toml | |
13 { | |
14 | |
15 // put ANSI escape sequence to ostream | |
16 namespace color_ansi | |
17 { | |
18 namespace detail | |
19 { | |
20 | |
21 inline int colorize_index() | |
22 { | |
23 static const int index = std::ios_base::xalloc(); | |
24 return index; | |
25 } | |
26 | |
27 // Control color mode globally | |
28 class color_mode | |
29 { | |
30 public: | |
31 inline void enable() | |
32 { | |
33 should_color_ = true; | |
34 } | |
35 inline void disable() | |
36 { | |
37 should_color_ = false; | |
38 } | |
39 | |
40 inline bool should_color() const | |
41 { | |
42 return should_color_; | |
43 } | |
44 | |
45 static color_mode& status() | |
46 { | |
47 static color_mode status_; | |
48 return status_; | |
49 } | |
50 | |
51 private: | |
52 bool should_color_ = false; | |
53 }; | |
54 | |
55 } // detail | |
56 | |
57 inline std::ostream& colorize(std::ostream& os) | |
58 { | |
59 // by default, it is zero. | |
60 os.iword(detail::colorize_index()) = 1; | |
61 return os; | |
62 } | |
63 inline std::ostream& nocolorize(std::ostream& os) | |
64 { | |
65 os.iword(detail::colorize_index()) = 0; | |
66 return os; | |
67 } | |
68 inline std::ostream& reset (std::ostream& os) | |
69 {if(os.iword(detail::colorize_index()) == 1) {os << "\033[00m";} return os;} | |
70 inline std::ostream& bold (std::ostream& os) | |
71 {if(os.iword(detail::colorize_index()) == 1) {os << "\033[01m";} return os;} | |
72 inline std::ostream& grey (std::ostream& os) | |
73 {if(os.iword(detail::colorize_index()) == 1) {os << "\033[30m";} return os;} | |
74 inline std::ostream& red (std::ostream& os) | |
75 {if(os.iword(detail::colorize_index()) == 1) {os << "\033[31m";} return os;} | |
76 inline std::ostream& green (std::ostream& os) | |
77 {if(os.iword(detail::colorize_index()) == 1) {os << "\033[32m";} return os;} | |
78 inline std::ostream& yellow (std::ostream& os) | |
79 {if(os.iword(detail::colorize_index()) == 1) {os << "\033[33m";} return os;} | |
80 inline std::ostream& blue (std::ostream& os) | |
81 {if(os.iword(detail::colorize_index()) == 1) {os << "\033[34m";} return os;} | |
82 inline std::ostream& magenta(std::ostream& os) | |
83 {if(os.iword(detail::colorize_index()) == 1) {os << "\033[35m";} return os;} | |
84 inline std::ostream& cyan (std::ostream& os) | |
85 {if(os.iword(detail::colorize_index()) == 1) {os << "\033[36m";} return os;} | |
86 inline std::ostream& white (std::ostream& os) | |
87 {if(os.iword(detail::colorize_index()) == 1) {os << "\033[37m";} return os;} | |
88 | |
89 inline void enable() | |
90 { | |
91 return detail::color_mode::status().enable(); | |
92 } | |
93 inline void disable() | |
94 { | |
95 return detail::color_mode::status().disable(); | |
96 } | |
97 | |
98 inline bool should_color() | |
99 { | |
100 return detail::color_mode::status().should_color(); | |
101 } | |
102 | |
103 } // color_ansi | |
104 | |
105 // ANSI escape sequence is the only and default colorization method currently | |
106 namespace color = color_ansi; | |
107 | |
108 } // toml | |
109 #endif// TOML11_COLOR_HPP |