Skip to content

Commit

Permalink
use memory_buffer to make color print behave atomic fmtlib#1348 (fmtl…
Browse files Browse the repository at this point in the history
  • Loading branch information
tankiJong authored and vitaut committed Oct 10, 2019
1 parent 2730e90 commit a82c1dc
Showing 1 changed file with 13 additions and 7 deletions.
20 changes: 13 additions & 7 deletions include/fmt/color.h
Original file line number Diff line number Diff line change
Expand Up @@ -504,24 +504,30 @@ template <typename S, typename Char = char_t<S> >
void vprint(std::FILE* f, const text_style& ts, const S& format,
basic_format_args<buffer_context<Char> > args) {
bool has_style = false;
basic_memory_buffer<Char> buf;
if (ts.has_emphasis()) {
has_style = true;
internal::fputs<Char>(internal::make_emphasis<Char>(ts.get_emphasis()), f);
auto emphasis = internal::make_emphasis<Char>(ts.get_emphasis());
buf.append(emphasis.begin(), emphasis.end());
}
if (ts.has_foreground()) {
has_style = true;
internal::fputs<Char>(
internal::make_foreground_color<Char>(ts.get_foreground()), f);
auto foreground =
internal::make_foreground_color<Char>(ts.get_foreground());
buf.append(foreground.begin(), foreground.end());
}
if (ts.has_background()) {
has_style = true;
internal::fputs<Char>(
internal::make_background_color<Char>(ts.get_background()), f);
auto background =
internal::make_background_color<Char>(ts.get_background());
buf.append(background.begin(), background.end());
}
vprint(f, format, args);
vformat_to(buf, format, args);
if (has_style) {
internal::reset_color<Char>(f);
internal::reset_color<Char>(buf);
}
buf.push_back(Char(0));
internal::fputs(buf.data(), f);
}

/**
Expand Down

0 comments on commit a82c1dc

Please sign in to comment.