Added quotes for strings in ranges and tuple likes.

This commit is contained in:
Remotion 2018-06-07 22:32:47 +02:00 committed by Victor Zverovich
parent 1b8a7f8fa0
commit d2bfee13e2
2 changed files with 34 additions and 15 deletions

View File

@ -162,6 +162,33 @@ void for_each(Tuple &&tup, F &&f) {
const auto indexes = get_indexes(tup); const auto indexes = get_indexes(tup);
for_each(indexes, std::forward<Tuple>(tup), std::forward<F>(f)); for_each(indexes, std::forward<Tuple>(tup), std::forward<F>(f));
} }
template<typename Arg>
FMT_CONSTEXPR const char* format_str_quoted(bool add_space, const Arg&,
typename std::enable_if<!is_like_std_string<typename std::decay<Arg>::type>::value>::type* = nullptr) {
return add_space ? " {}" : "{}";
}
template<typename Arg>
FMT_CONSTEXPR const char* format_str_quoted(bool add_space, const Arg&,
typename std::enable_if<is_like_std_string<typename std::decay<Arg>::type>::value>::type* = nullptr) {
return add_space ? " \"{}\"" : "\"{}\"";
}
FMT_CONSTEXPR const char* format_str_quoted(bool add_space, const char*) {
return add_space ? " \"{}\"" : "\"{}\"";
}
FMT_CONSTEXPR const wchar_t* format_str_quoted(bool add_space, const wchar_t*) {
return add_space ? L" \"{}\"" : L"\"{}\"";
}
FMT_CONSTEXPR const char* format_str_quoted(bool add_space, const char) {
return add_space ? " '{}'" : "'{}'";
}
FMT_CONSTEXPR const wchar_t* format_str_quoted(bool add_space, const wchar_t) {
return add_space ? L" '{}'" : L"'{}'";
}
} // namespace internal } // namespace internal
template <typename T> template <typename T>
@ -185,11 +212,7 @@ private:
} }
internal::copy(formatting.delimiter, out); internal::copy(formatting.delimiter, out);
} }
if (formatting.add_delimiter_spaces && i > 0) { format_to(out, internal::format_str_quoted((formatting.add_delimiter_spaces && i > 0), v), v);
format_to(out, " {}", v);
} else {
format_to(out, "{}", v);
}
++i; ++i;
} }
@ -252,11 +275,7 @@ struct formatter<RangeT, Char,
} }
internal::copy(formatting.delimiter, out); internal::copy(formatting.delimiter, out);
} }
if (formatting.add_delimiter_spaces && i > 0) { format_to(out, internal::format_str_quoted((formatting.add_delimiter_spaces && i > 0), *it), *it);
format_to(out, " {}", *it);
} else {
format_to(out, "{}", *it);
}
if (++i > formatting.range_length_limit) { if (++i > formatting.range_length_limit) {
format_to(out, " ... <other elements>"); format_to(out, " ... <other elements>");
break; break;

View File

@ -32,7 +32,7 @@ TEST(RangesTest, FormatVector2) {
TEST(RangesTest, FormatMap) { TEST(RangesTest, FormatMap) {
std::map<std::string, int32_t> simap{{"one", 1}, {"two", 2}}; std::map<std::string, int32_t> simap{{"one", 1}, {"two", 2}};
EXPECT_EQ("{(one, 1), (two, 2)}", fmt::format("{}", simap)); EXPECT_EQ("{(\"one\", 1), (\"two\", 2)}", fmt::format("{}", simap));
} }
TEST(RangesTest, FormatPair) { TEST(RangesTest, FormatPair) {
@ -41,9 +41,9 @@ TEST(RangesTest, FormatPair) {
} }
TEST(RangesTest, FormatTuple) { TEST(RangesTest, FormatTuple) {
std::tuple<int64_t, float, std::string> tu1{42, 3.14159265358979f, std::tuple<int64_t, float, std::string, char> tu1{42, 3.14159265358979f,
"this is tuple"}; "this is tuple", 'i'};
EXPECT_EQ("(42, 3.14159, this is tuple)", fmt::format("{}", tu1)); EXPECT_EQ("(42, 3.14159, \"this is tuple\", 'i')", fmt::format("{}", tu1));
} }
/// Check if 'if constexpr' is supported. /// Check if 'if constexpr' is supported.
@ -81,7 +81,7 @@ struct tuple_element<N, my_struct> {
TEST(RangesTest, FormatStruct) { TEST(RangesTest, FormatStruct) {
my_struct mst{13, "my struct"}; my_struct mst{13, "my struct"};
EXPECT_EQ("(13, my struct)", fmt::format("{}", mst)); EXPECT_EQ("(13, \"my struct\")", fmt::format("{}", mst));
} }
#endif // (__cplusplus > 201402L) || (defined(_MSVC_LANG) && _MSVC_LANG > #endif // (__cplusplus > 201402L) || (defined(_MSVC_LANG) && _MSVC_LANG >