Mercurial > minori
view dep/toml11/toml/color.hpp @ 347:a0aa8c8c4307
dep/anitomy: port to use UCS-4 rather than wide strings
rationale: wide strings are not the same on every platform, and
might not even be Unicode. (while they usually are, its possible
that they are not)
I was *going* to change StringToInt to use a string stream, but
outputting to an integer doesn't seem to work at all with UCS-4,
even though it ought to, so I just rolled my own that uses the
arabic digits only.
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Sun, 23 Jun 2024 10:32:09 -0400 |
parents | 3b355fa948c7 |
children |
line wrap: on
line source
#ifndef TOML11_COLOR_HPP #define TOML11_COLOR_HPP #include <cstdint> #include <ostream> #ifdef TOML11_COLORIZE_ERROR_MESSAGE #define TOML11_ERROR_MESSAGE_COLORIZED true #else #define TOML11_ERROR_MESSAGE_COLORIZED false #endif namespace toml { // put ANSI escape sequence to ostream namespace color_ansi { namespace detail { inline int colorize_index() { static const int index = std::ios_base::xalloc(); return index; } // Control color mode globally class color_mode { public: inline void enable() { should_color_ = true; } inline void disable() { should_color_ = false; } inline bool should_color() const { return should_color_; } static color_mode& status() { static color_mode status_; return status_; } private: bool should_color_ = false; }; } // detail inline std::ostream& colorize(std::ostream& os) { // by default, it is zero. os.iword(detail::colorize_index()) = 1; return os; } inline std::ostream& nocolorize(std::ostream& os) { os.iword(detail::colorize_index()) = 0; return os; } inline std::ostream& reset (std::ostream& os) {if(os.iword(detail::colorize_index()) == 1) {os << "\033[00m";} return os;} inline std::ostream& bold (std::ostream& os) {if(os.iword(detail::colorize_index()) == 1) {os << "\033[01m";} return os;} inline std::ostream& grey (std::ostream& os) {if(os.iword(detail::colorize_index()) == 1) {os << "\033[30m";} return os;} inline std::ostream& red (std::ostream& os) {if(os.iword(detail::colorize_index()) == 1) {os << "\033[31m";} return os;} inline std::ostream& green (std::ostream& os) {if(os.iword(detail::colorize_index()) == 1) {os << "\033[32m";} return os;} inline std::ostream& yellow (std::ostream& os) {if(os.iword(detail::colorize_index()) == 1) {os << "\033[33m";} return os;} inline std::ostream& blue (std::ostream& os) {if(os.iword(detail::colorize_index()) == 1) {os << "\033[34m";} return os;} inline std::ostream& magenta(std::ostream& os) {if(os.iword(detail::colorize_index()) == 1) {os << "\033[35m";} return os;} inline std::ostream& cyan (std::ostream& os) {if(os.iword(detail::colorize_index()) == 1) {os << "\033[36m";} return os;} inline std::ostream& white (std::ostream& os) {if(os.iword(detail::colorize_index()) == 1) {os << "\033[37m";} return os;} inline void enable() { return detail::color_mode::status().enable(); } inline void disable() { return detail::color_mode::status().disable(); } inline bool should_color() { return detail::color_mode::status().should_color(); } } // color_ansi // ANSI escape sequence is the only and default colorization method currently namespace color = color_ansi; } // toml #endif// TOML11_COLOR_HPP