// Formatting library for C++ - formatters for standard library types // // Copyright (c) 2012 - present, Victor Zverovich // All rights reserved. // // For the license information refer to format.h. #ifndef FMT_STD_H_ #define FMT_STD_H_ #include #include "ostream.h" #if FMT_HAS_INCLUDE() # include #endif #ifdef __cpp_lib_filesystem # include FMT_BEGIN_NAMESPACE namespace detail { template void write_escaped_path(basic_memory_buffer& quoted, const std::filesystem::path& p) { write_escaped_string(std::back_inserter(quoted), p.string()); } # ifdef _WIN32 template <> inline void write_escaped_path(basic_memory_buffer& quoted, const std::filesystem::path& p) { auto s = p.u8string(); write_escaped_string( std::back_inserter(quoted), string_view(reinterpret_cast(s.c_str()), s.size())); } # endif template <> inline void write_escaped_path( basic_memory_buffer& quoted, const std::filesystem::path& p) { write_escaped_string( std::back_inserter(quoted), p.native()); } } // namespace detail template struct formatter : formatter> { template auto format(const std::filesystem::path& p, FormatContext& ctx) const -> typename FormatContext::iterator { basic_memory_buffer quoted; detail::write_escaped_path(quoted, p); return formatter>::format( basic_string_view(quoted.data(), quoted.size()), ctx); } }; FMT_END_NAMESPACE #endif FMT_BEGIN_NAMESPACE template struct formatter : basic_ostream_formatter {}; FMT_END_NAMESPACE #endif // FMT_STD_H_