37 while (!
text.empty() && std::isspace(
static_cast<unsigned char>(
text.front())))
39 text.remove_prefix(1);
41 while (!
text.empty() && std::isspace(
static_cast<unsigned char>(
text.back())))
43 text.remove_suffix(1);
52 std::transform(
lower.begin(),
lower.end(),
lower.begin(), [](
unsigned char c) { return std::tolower(c); });
60 if (!std::isdigit(
static_cast<unsigned char>(
suffix)))
87 if (
ec != std::errc{} ||
ptr !=
lower.data() +
lower.size() || value < 0)
93 if (
total > std::numeric_limits<int>::max())
97 return static_cast<int>(
total);
103 std::transform(
result.begin(),
result.end(),
result.begin(), [](
unsigned char c) { return std::tolower(c); });
109 auto begin = std::find_if(
str.begin(),
str.end(), [](
unsigned char c) { return !std::isspace(c); });
110 auto end = std::find_if(
str.rbegin(),
str.rend(), [](
unsigned char c) { return !std::isspace(c); }).base();
122 for (
size_t i = 1;
i <
parts.size(); ++
i)
219 out.reserve(value.size() + 2);
223 if (
c ==
'"' ||
c ==
'\\')
237 return std::string(
text);
241 while (
end > 0 && (
static_cast<unsigned char>(
text[
end]) & 0xC0) == 0x80)
254 return std::all_of(
str.begin(),
str.end(), [](
unsigned char c) { return std::isdigit(c); });
259 if (
buffer ==
nullptr || size == 0)
264 const std::size_t
length = std::min(size - 1,
text.size());
static std::string Trim(std::string_view str)
static void CopyToBuffer(char *buffer, std::size_t size, std::string_view text) noexcept
static std::string DisplayNameOr(int64_t id, std::string_view name, std::size_t maxBytes=20)
static bool ContainsIgnoreCase(std::string_view str, std::string_view substr)
static std::string QuoteConsoleArg(std::string_view value)
static std::string JoinNonEmpty(const std::vector< std::string > &parts, std::string_view delimiter)
static bool StartsWith(std::string_view str, std::string_view prefix)
static std::string SubstituteTokens(std::string text, const Tokens &tokens)
static std::string TruncateUtf8(std::string_view text, std::size_t maxBytes, std::string_view ellipsis="...")
static std::string Join(const std::vector< std::string > &parts, std::string_view delimiter)
static std::string ToLower(std::string_view str)
static bool IsNumeric(std::string_view str)
static std::string EscapeHtml(std::string_view text)
std::optional< int64_t > ParseInt64(std::string_view text)
int ParseDuration(std::string_view text)
static std::string ReadFile(const std::filesystem::path &path)
std::optional< uint64_t > ParseUInt64(std::string_view text)
std::map< std::string, std::string > Tokens
static std::string ReplaceAll(const std::string &str, const std::string &from, const std::string &to)