191 : r((hex >> 16) & 0xFF), g((hex >> 8) & 0xFF), b(hex & 0xFF) {}
193 : r((uint32_t(hex) >> 16) & 0xFF),
194 g((uint32_t(hex) >> 8) & 0xFF),
195 b(uint32_t(hex) & 0xFF) {}
208 value.rgb_color =
static_cast<uint32_t
>(rgb_color);
211 value.rgb_color = (
static_cast<uint32_t
>(rgb_color.r) << 16) |
212 (
static_cast<uint32_t
>(rgb_color.g) << 8) | rgb_color.b;
216 value.term_color =
static_cast<uint8_t
>(term_color);
230 : set_foreground_color(),
231 set_background_color(),
235 if (!set_foreground_color) {
244 if (!set_background_color) {
253 ems =
static_cast<emphasis>(
static_cast<uint8_t
>(ems) |
254 static_cast<uint8_t>(rhs.
ems));
264 if (!set_foreground_color) {
273 if (!set_background_color) {
282 ems =
static_cast<emphasis>(
static_cast<uint8_t
>(ems) &
283 static_cast<uint8_t>(rhs.
ems));
293 return set_foreground_color;
296 return set_background_color;
299 return static_cast<uint8_t
>(ems) != 0;
302 FMT_ASSERT(has_foreground(),
"no foreground specified for this style");
303 return foreground_color;
306 FMT_ASSERT(has_background(),
"no background specified for this style");
307 return background_color;
310 FMT_ASSERT(has_emphasis(),
"no emphasis specified for this style");
317 : set_foreground_color(),
318 set_background_color(),
321 foreground_color = text_color;
322 set_foreground_color =
true;
324 background_color = text_color;
325 set_background_color =
true;
360 if (!text_color.is_rgb) {
365 if (is_background) value += 10u;
367 std::size_t
index = 0;
368 buffer[index++] =
static_cast<Char
>(
'\x1b');
369 buffer[index++] =
static_cast<Char
>(
'[');
372 buffer[index++] =
static_cast<Char
>(
'1');
375 buffer[index++] =
static_cast<Char
>(
'0' + value / 10u);
376 buffer[index++] =
static_cast<Char
>(
'0' + value % 10u);
378 buffer[index++] =
static_cast<Char
>(
'm');
379 buffer[index++] =
static_cast<Char
>(
'\0');
383 for (
int i = 0; i < 7; i++) {
384 buffer[i] =
static_cast<Char
>(esc[i]);
386 rgb color(text_color.value.rgb_color);
387 to_esc(color.
r,
buffer + 7,
';');
388 to_esc(color.
g,
buffer + 11,
';');
389 to_esc(color.
b,
buffer + 15,
'm');
390 buffer[19] =
static_cast<Char
>(0);
393 uint8_t em_codes[4] = {};
394 uint8_t em_bits =
static_cast<uint8_t
>(em);
395 if (em_bits & static_cast<uint8_t>(
emphasis::bold)) em_codes[0] = 1;
401 std::size_t
index = 0;
402 for (
int i = 0; i < 4; ++i) {
403 if (!em_codes[i])
continue;
404 buffer[index++] =
static_cast<Char
>(
'\x1b');
405 buffer[index++] =
static_cast<Char
>(
'[');
406 buffer[index++] =
static_cast<Char
>(
'0' + em_codes[i]);
407 buffer[index++] =
static_cast<Char
>(
'm');
409 buffer[index++] =
static_cast<Char
>(0);
423 out[0] =
static_cast<Char
>(
'0' + c / 100);
424 out[1] =
static_cast<Char
>(
'0' + c / 10 % 10);
425 out[2] =
static_cast<Char
>(
'0' + c % 10);
426 out[3] =
static_cast<Char
>(delimiter);
430 template <
typename Char>
436 template <
typename Char>
442 template <
typename Char>
447 template <
typename Char>
454 std::fputws(chars, stream);
465 template <
typename Char>
472 template <
typename Char>
476 bool has_style =
false;
486 buf.
append(foreground.begin(), foreground.end());
492 buf.
append(background.begin(), background.end());
496 internal::reset_color<Char>(buf);
501 template <
typename S,
typename Char =
char_t<S>>
517 template <
typename S,
typename... Args,
520 const Args&... args) {
534 template <
typename S,
typename... Args,
537 return print(stdout, ts, format_str, args...);
540 template <
typename S,
typename Char =
char_t<S>>
561 template <
typename S,
typename... Args,
typename Char =
char_t<S>>
563 const Args&... args) {
570 #endif // FMT_COLOR_H_
#define FMT_BEGIN_NAMESPACE
basic_string_view< Char > to_string_view(const Char *s)
#define FMT_ASSERT(condition, message)
std::basic_string< Char > format(const text_style &ts, const S &format_str, const Args &... args)
FMT_CONSTEXPR rgb(color hex)
static const char foreground_color[]
FMT_CONSTEXPR text_style & operator|=(const text_style &rhs)
FMT_CONSTEXPR ansi_color_escape< Char > make_background_color(internal::color_type background) FMT_NOEXCEPT
void reset_color(basic_memory_buffer< Char > &buffer) FMT_NOEXCEPT
static const char reset_color[5]
FMT_CONSTEXPR text_style fg(internal::color_type foreground) FMT_NOEXCEPT
internal::color_type foreground_color
FMT_CONSTEXPR rgb(uint32_t hex)
FMT_CONSTEXPR bool has_emphasis() const FMT_NOEXCEPT
FMT_CONSTEXPR color_type(rgb rgb_color) FMT_NOEXCEPT
#define FMT_CONSTEXPR_DECL
FMT_CONSTEXPR text_style(emphasis em=emphasis()) FMT_NOEXCEPT
void append(const U *begin, const U *end)
FMT_CONSTEXPR ansi_color_escape(internal::color_type text_color, const char *esc) FMT_NOEXCEPT
void check_format_string(const S &)
FMT_CONSTEXPR color_type(color rgb_color) FMT_NOEXCEPT
FMT_CONSTEXPR bool has_foreground() const FMT_NOEXCEPT
void vformat_to(basic_memory_buffer< Char > &buf, const text_style &ts, basic_string_view< Char > format_str, basic_format_args< buffer_context< Char >> args)
bool set_foreground_color
typename internal::char_t_impl< S >::type char_t
#define FMT_END_NAMESPACE
static const wchar_t wreset_color[5]
internal::color_type background_color
FMT_CONSTEXPR ansi_color_escape(emphasis em) FMT_NOEXCEPT
FMT_CONSTEXPR bool has_background() const FMT_NOEXCEPT
FMT_CONSTEXPR color_type() FMT_NOEXCEPT
FMT_CONSTEXPR const Char * begin() const FMT_NOEXCEPT
void fputs(const Char *chars, FILE *stream) FMT_NOEXCEPT
FMT_CONSTEXPR color_type(terminal_color term_color) FMT_NOEXCEPT
#define FMT_ENABLE_IF(...)
void reset_color< wchar_t >(FILE *stream) FMT_NOEXCEPT
FMT_CONSTEXPR value(int val=0)
void fputs< wchar_t >(const wchar_t *chars, FILE *stream) FMT_NOEXCEPT
union internal::color_type::color_union value
format_arg_store< buffer_context< Char >, remove_reference_t< Args >... > make_args_checked(const S &format_str, const remove_reference_t< Args > &... args)
std::basic_string< Char > vformat(const text_style &ts, const S &format_str, basic_format_args< buffer_context< Char >> args)
void vprint(std::FILE *f, const text_style &ts, const S &format, basic_format_args< buffer_context< Char >> args)
void push_back(const T &value)
bool set_background_color
FMT_CONSTEXPR text_style operator|(emphasis lhs, emphasis rhs) FMT_NOEXCEPT
FMT_CONSTEXPR text_style(bool is_foreground, internal::color_type text_color) FMT_NOEXCEPT
FMT_CONSTEXPR ansi_color_escape< Char > make_foreground_color(internal::color_type foreground) FMT_NOEXCEPT
static const char background_color[]
FMT_CONSTEXPR rgb(uint8_t r_, uint8_t g_, uint8_t b_)
void print(std::FILE *f, const text_style &ts, const S &format_str, const Args &... args)
FMT_CONSTEXPR ansi_color_escape< Char > make_emphasis(emphasis em) FMT_NOEXCEPT
FMT_CONSTEXPR internal::color_type get_background() const FMT_NOEXCEPT
friend FMT_CONSTEXPR text_style operator|(text_style lhs, const text_style &rhs)
FMT_CONSTEXPR text_style bg(internal::color_type background) FMT_NOEXCEPT
FMT_CONSTEXPR emphasis get_emphasis() const FMT_NOEXCEPT
FMT_CONSTEXPR const Char * end() const FMT_NOEXCEPT
static FMT_CONSTEXPR void to_esc(uint8_t c, Char *out, char delimiter) FMT_NOEXCEPT
FMT_CONSTEXPR internal::color_type get_foreground() const FMT_NOEXCEPT