diff --git a/src/tools/stringTools.cpp b/src/tools/stringTools.cpp index 05ed6a19..e42209d3 100644 --- a/src/tools/stringTools.cpp +++ b/src/tools/stringTools.cpp @@ -29,7 +29,8 @@ #include #include - +#include +#include #include #include #include @@ -450,3 +451,11 @@ std::string kiwix::getSlugifiedFileName(const std::string& filename) #endif return std::regex_replace(filename, reservedCharsReg, "_"); } + +std::string kiwix::trim(const std::string& s) +{ + auto is_space = [](unsigned char c) { return std::isspace(c); }; + auto start = std::find_if_not(s.begin(), s.end(), is_space); + auto end = std::find_if_not(s.rbegin(), s.rend(), is_space).base(); + return (start < end) ? std::string(start, end) : std::string(); +} diff --git a/src/tools/stringTools.h b/src/tools/stringTools.h index 4ddbfd6b..7e0afa9c 100644 --- a/src/tools/stringTools.h +++ b/src/tools/stringTools.h @@ -60,6 +60,8 @@ std::string escapeForJSON(const std::string& s, bool escapeQuote = true); std::string urlEncode(const std::string& value); std::string urlDecode(const std::string& value, bool component = false); +std::string trim(const std::string& s); + std::string join(const std::vector& list, const std::string& sep); std::string ucAll(const std::string& word); diff --git a/test/stringTools.cpp b/test/stringTools.cpp index 19aba3b6..163d291e 100644 --- a/test/stringTools.cpp +++ b/test/stringTools.cpp @@ -184,4 +184,16 @@ TEST(stringTools, getSlugifiedFileName) #endif } +TEST(stringTools, Trim) +{ + EXPECT_EQ(kiwix::trim(""), ""); + EXPECT_EQ(kiwix::trim("abc123"), "abc123"); + EXPECT_EQ(kiwix::trim(" abc123"), "abc123"); + EXPECT_EQ(kiwix::trim("abc123 "), "abc123"); + EXPECT_EQ(kiwix::trim(" abc123 "), "abc123"); + EXPECT_EQ(kiwix::trim("abc 123"), "abc 123"); + EXPECT_EQ(kiwix::trim(" "), ""); + EXPECT_EQ(kiwix::trim("\t abc123 \n"), "abc123"); +} + };