/* * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef _STRING_FORMAT_H_ #define _STRING_FORMAT_H_ #include "Define.h" #include #include #include #include namespace Acore { template using FormatString = fmt::format_string; using FormatStringView = fmt::string_view; using FormatArgs = fmt::format_args; template constexpr auto MakeFormatArgs(Args&&... args) { return fmt::make_format_args(args...); } /// Default AC string format function. template inline std::string StringFormat(FormatString fmt, Args&&... args) { try { return fmt::format(fmt, std::forward(args)...); } catch (std::exception const& e) { return fmt::format("Wrong format occurred ({}). Fmt string: '{}'", e.what(), fmt.get()); } } /// Format directly to an output iterator. template inline OutputIt StringFormatTo(OutputIt out, FormatString fmt, Args&&... args) { try { return fmt::format_to(out, fmt, std::forward(args)...); } catch (std::exception const& e) { return fmt::format_to(out, "Wrong format occurred ({}). Fmt string: '{}'", e.what(), fmt.get()); } } /// Format with pre-built format args. inline std::string StringVFormat(FormatStringView fmt, FormatArgs args) { try { return fmt::vformat(fmt, args); } catch (std::exception const& e) { return fmt::format("Wrong format occurred ({}). Fmt string: '{}'", e.what(), fmt); } } /// Format with pre-built format args directly to an output iterator. template inline OutputIt StringVFormatTo(OutputIt out, FormatStringView fmt, FormatArgs args) { try { return fmt::vformat_to(out, fmt, args); } catch (std::exception const& e) { return fmt::format_to(out, "Wrong format occurred ({}). Fmt string: '{}'", e.what(), fmt); } } /// Returns true if the given char pointer is null. inline bool IsFormatEmptyOrNull(char const* fmt) { return fmt == nullptr; } /// Returns true if the given std::string is empty. inline bool IsFormatEmptyOrNull(std::string_view fmt) { return fmt.empty(); } } namespace Acore::String { template AC_COMMON_API Str Trim(const Str& s, const std::locale& loc = std::locale()); AC_COMMON_API std::string TrimRightInPlace(std::string& str); AC_COMMON_API std::string AddSuffixIfNotExists(std::string str, const char suffix); } // Add support enum for fmt //template , int> = 0> template )> auto format_as(T f) { return fmt::underlying(f); } #endif