Fix incorrect wide encoding of 'µs'

I think might be a source file encoding issue, so I used \u00B5 instead.
This commit is contained in:
zeffy 2020-01-23 04:43:03 -08:00
parent e4c47e6038
commit 21470714d6

View File

@ -440,32 +440,50 @@ template <typename Char> struct formatter<std::tm, Char> {
}; };
namespace internal { namespace internal {
template <typename Period> FMT_CONSTEXPR const char* get_units() {
return nullptr; template <typename Char, typename Period> FMT_CONSTEXPR const Char* get_units() { return nullptr; }
template <> FMT_CONSTEXPR const char* get_units<char, std::atto>() { return "as"; }
template <> FMT_CONSTEXPR const wchar_t* get_units<wchar_t, std::atto>() { return L"as"; }
template <> FMT_CONSTEXPR const char* get_units<char, std::femto>() { return "fs"; }
template <> FMT_CONSTEXPR const wchar_t* get_units<wchar_t, std::femto>() { return L"fs"; }
template <> FMT_CONSTEXPR const char* get_units<char, std::pico>() { return "ps"; }
template <> FMT_CONSTEXPR const wchar_t* get_units<wchar_t, std::pico>() { return L"ps"; }
template <> FMT_CONSTEXPR const char* get_units<char, std::nano>() { return "ns"; }
template <> FMT_CONSTEXPR const wchar_t* get_units<wchar_t, std::nano>() { return L"ns"; }
template <> FMT_CONSTEXPR const char* get_units<char, std::micro>() {
return "µs";
} }
template <> FMT_CONSTEXPR const char* get_units<std::atto>() { return "as"; } template <> FMT_CONSTEXPR const wchar_t* get_units<wchar_t, std::micro>() {
template <> FMT_CONSTEXPR const char* get_units<std::femto>() { return "fs"; } return L"\u00B5s";
template <> FMT_CONSTEXPR const char* get_units<std::pico>() { return "ps"; }
template <> FMT_CONSTEXPR const char* get_units<std::nano>() { return "ns"; }
template <> FMT_CONSTEXPR const char* get_units<std::micro>() { return "µs"; }
template <> FMT_CONSTEXPR const char* get_units<std::milli>() { return "ms"; }
template <> FMT_CONSTEXPR const char* get_units<std::centi>() { return "cs"; }
template <> FMT_CONSTEXPR const char* get_units<std::deci>() { return "ds"; }
template <> FMT_CONSTEXPR const char* get_units<std::ratio<1>>() { return "s"; }
template <> FMT_CONSTEXPR const char* get_units<std::deca>() { return "das"; }
template <> FMT_CONSTEXPR const char* get_units<std::hecto>() { return "hs"; }
template <> FMT_CONSTEXPR const char* get_units<std::kilo>() { return "ks"; }
template <> FMT_CONSTEXPR const char* get_units<std::mega>() { return "Ms"; }
template <> FMT_CONSTEXPR const char* get_units<std::giga>() { return "Gs"; }
template <> FMT_CONSTEXPR const char* get_units<std::tera>() { return "Ts"; }
template <> FMT_CONSTEXPR const char* get_units<std::peta>() { return "Ps"; }
template <> FMT_CONSTEXPR const char* get_units<std::exa>() { return "Es"; }
template <> FMT_CONSTEXPR const char* get_units<std::ratio<60>>() {
return "m";
}
template <> FMT_CONSTEXPR const char* get_units<std::ratio<3600>>() {
return "h";
} }
template <> FMT_CONSTEXPR const char* get_units<char, std::milli>() { return "ms"; }
template <> FMT_CONSTEXPR const wchar_t* get_units<wchar_t, std::milli>() { return L"ms"; }
template <> FMT_CONSTEXPR const char* get_units<char, std::centi>() { return "cs"; }
template <> FMT_CONSTEXPR const wchar_t* get_units<wchar_t, std::centi>() { return L"cs"; }
template <> FMT_CONSTEXPR const char* get_units<char, std::deci>() { return "ds"; }
template <> FMT_CONSTEXPR const wchar_t* get_units<wchar_t, std::deci>() { return L"ds"; }
template <> FMT_CONSTEXPR const char* get_units<char, std::ratio<1>>() { return "s"; }
template <> FMT_CONSTEXPR const wchar_t* get_units<wchar_t, std::ratio<1>>() { return L"s"; }
template <> FMT_CONSTEXPR const char* get_units<char, std::deca>() { return "das"; }
template <> FMT_CONSTEXPR const wchar_t* get_units<wchar_t, std::deca>() { return L"das"; }
template <> FMT_CONSTEXPR const char* get_units<char, std::hecto>() { return "hs"; }
template <> FMT_CONSTEXPR const wchar_t* get_units<wchar_t, std::hecto>() { return L"hs"; }
template <> FMT_CONSTEXPR const char* get_units<char, std::kilo>() { return "ks"; }
template <> FMT_CONSTEXPR const wchar_t* get_units<wchar_t, std::kilo>() { return L"ks"; }
template <> FMT_CONSTEXPR const char* get_units<char, std::mega>() { return "Ms"; }
template <> FMT_CONSTEXPR const wchar_t* get_units<wchar_t, std::mega>() { return L"Ms"; }
template <> FMT_CONSTEXPR const char* get_units<char, std::giga>() { return "Gs"; }
template <> FMT_CONSTEXPR const wchar_t* get_units<wchar_t, std::giga>() { return L"Gs"; }
template <> FMT_CONSTEXPR const char* get_units<char, std::tera>() { return "Ts"; }
template <> FMT_CONSTEXPR const wchar_t* get_units<wchar_t, std::tera>() { return L"Ts"; }
template <> FMT_CONSTEXPR const char* get_units<char, std::peta>() { return "Ps"; }
template <> FMT_CONSTEXPR const wchar_t* get_units<wchar_t, std::peta>() { return L"Ps"; }
template <> FMT_CONSTEXPR const char* get_units<char, std::exa>() { return "Es"; }
template <> FMT_CONSTEXPR const wchar_t* get_units<wchar_t, std::exa>() { return L"Es"; }
template <> FMT_CONSTEXPR const char* get_units<char, std::ratio<60>>() { return "m"; }
template <> FMT_CONSTEXPR const wchar_t* get_units<wchar_t, std::ratio<60>>() { return L"m"; }
template <> FMT_CONSTEXPR const char* get_units<char, std::ratio<3600>>() { return "h"; }
template <> FMT_CONSTEXPR const wchar_t* get_units<wchar_t, std::ratio<3600>>() { return L"h"; }
enum class numeric_system { enum class numeric_system {
standard, standard,
@ -496,12 +514,12 @@ FMT_CONSTEXPR const Char* parse_chrono_format(const Char* begin,
break; break;
case 'n': { case 'n': {
const Char newline[] { '\n', 0 }; const Char newline[] { '\n', 0 };
handler.on_text(newline, newline + 1); handler.on_text(newline, &newline[1]);
break; break;
} }
case 't': { case 't': {
const Char tab[] { '\t', 0 }; const Char tab[] { '\t', 0 };
handler.on_text(tab, tab + 1); handler.on_text(tab, &tab[1]);
break; break;
} }
// Day of the week: // Day of the week:
@ -759,18 +777,23 @@ inline std::chrono::duration<Rep, std::milli> get_milliseconds(
return std::chrono::duration<Rep, std::milli>(static_cast<Rep>(ms)); return std::chrono::duration<Rep, std::milli>(static_cast<Rep>(ms));
} }
template <typename Rep, typename OutputIt> template <typename Char, typename Rep, typename OutputIt>
OutputIt format_duration_value(OutputIt out, Rep val, int precision) { OutputIt format_duration_value(OutputIt out, Rep val, int precision) {
if (precision >= 0) return format_to(out, "{:.{}f}", val, precision); const Char pr_f[] { '{', ':', '.', '{', '}', 'f', '}', 0 };
return format_to(out, std::is_floating_point<Rep>::value ? "{:g}" : "{}", if (precision >= 0) return format_to(out, pr_f, val, precision);
val); const Char fp_f[] { '{', ':', 'g', '}', 0 };
const Char format[] { '{', '}', 0 };
return format_to(out, std::is_floating_point<Rep>::value ? fp_f : format, val);
} }
template <typename Period, typename OutputIt> template <typename Char, typename Period, typename OutputIt>
OutputIt format_duration_unit(OutputIt out) { OutputIt format_duration_unit(OutputIt out) {
if (const char* unit = get_units<Period>()) return format_to(out, "{}", unit); const Char format[] { '{', '}', 0 };
if (Period::den == 1) return format_to(out, "[{}]s", Period::num); if (const Char* unit = get_units<Char, Period>()) return format_to(out, format, unit);
return format_to(out, "[{}/{}]s", Period::num, Period::den); const Char num_f[] { '[', '{', '}', ']', 's', 0 };
if (Period::den == 1) return format_to(out, num_f, Period::num);
const Char num_def_f[] { '[', '{', '}', '/', '{', '}', ']', 's', 0 };
return format_to(out, num_def_f, Period::num, Period::den);
} }
template <typename FormatContext, typename OutputIt, typename Rep, template <typename FormatContext, typename OutputIt, typename Rep,
@ -959,7 +982,6 @@ struct chrono_formatter {
void on_12_hour_time() { void on_12_hour_time() {
if (handle_nan_inf()) return; if (handle_nan_inf()) return;
const char_type format[] { '%', 'r', 0 }; const char_type format[] { '%', 'r', 0 };
format_localized(time(), format); format_localized(time(), format);
} }
@ -992,10 +1014,10 @@ struct chrono_formatter {
void on_duration_value() { void on_duration_value() {
if (handle_nan_inf()) return; if (handle_nan_inf()) return;
write_sign(); write_sign();
out = format_duration_value(out, val, precision); out = format_duration_value<char_type>(out, val, precision);
} }
void on_duration_unit() { out = format_duration_unit<Period>(out); } void on_duration_unit() { out = format_duration_unit<char_type, Period>(out); }
}; };
} // namespace internal } // namespace internal
@ -1094,8 +1116,8 @@ struct formatter<std::chrono::duration<Rep, Period>, Char> {
internal::handle_dynamic_spec<internal::precision_checker>( internal::handle_dynamic_spec<internal::precision_checker>(
precision, precision_ref, ctx); precision, precision_ref, ctx);
if (begin == end || *begin == '}') { if (begin == end || *begin == '}') {
out = internal::format_duration_value(out, d.count(), precision); out = internal::format_duration_value<Char>(out, d.count(), precision);
internal::format_duration_unit<Period>(out); internal::format_duration_unit<Char, Period>(out);
} else { } else {
internal::chrono_formatter<FormatContext, decltype(out), Rep, Period> f( internal::chrono_formatter<FormatContext, decltype(out), Rep, Period> f(
ctx, out, d); ctx, out, d);