7 #ifndef _FCITX_UTILS_STRINGUTILS_H_ 8 #define _FCITX_UTILS_STRINGUTILS_H_ 16 #include <initializer_list> 20 #include <string_view> 23 #include <fcitx-utils/fcitxutils_export.h> 24 #include <fcitx-utils/stringutils_details.h> 29 FCITXUTILS_DEPRECATED_EXPORT
bool startsWith(std::string_view str,
30 std::string_view prefix);
33 inline bool startsWith(std::string_view str,
char prefix) {
34 return !str.empty() && str.front() == prefix;
38 FCITXUTILS_DEPRECATED_EXPORT
bool endsWith(std::string_view str,
39 std::string_view suffix);
42 inline bool endsWith(std::string_view str,
char suffix) {
43 return !str.empty() && str.back() == suffix;
47 inline bool isConcatOf(std::string_view str, std::string_view sub1,
48 std::string_view sub2) {
49 return str.size() == sub1.size() + sub2.size() && str.starts_with(sub1) &&
57 FCITXUTILS_EXPORT std::pair<std::string::size_type, std::string::size_type>
63 FCITXUTILS_EXPORT std::string_view
trimView(std::string_view);
67 FCITXUTILS_EXPORT std::string
trim(std::string_view str);
70 FCITXUTILS_EXPORT std::vector<std::string>
split(std::string_view str,
71 std::string_view delim);
73 enum class SplitBehavior { KeepEmpty, SkipEmpty };
76 FCITXUTILS_EXPORT std::vector<std::string>
77 split(std::string_view str, std::string_view delim, SplitBehavior behavior);
80 FCITXUTILS_EXPORT std::string
replaceAll(std::string str,
81 const std::string &before,
82 const std::string &after);
87 FCITXUTILS_EXPORT
const char *
backwardSearch(
const char *haystack,
size_t l,
88 const char *needle,
size_t ol,
94 const char *needle,
size_t ol,
104 FCITXUTILS_EXPORT
size_t backwardSearch(
const std::string &haystack,
105 const std::string &needle,
size_t from);
108 template <
typename Iter,
typename T>
109 inline std::string
join(Iter start, Iter end, T &&delim) {
115 for (; start != end; start++) {
123 template <
typename C,
typename T>
124 inline std::string
join(C &&container, T &&delim) {
127 return join(begin(container), end(container), delim);
131 template <
typename C,
typename T>
132 inline std::string
join(std::initializer_list<C> &&container, T &&delim) {
135 return join(begin(container), end(container), delim);
138 template <
typename... Args>
139 std::string concat(
const Args &...args) {
141 return concatPieces({
static_cast<const UniversalPiece &
>(
146 template <
typename FirstArg,
typename... Args>
147 std::string joinPath(
const FirstArg &firstArg,
const Args &...args) {
149 return concatPathPieces(
150 {
static_cast<const UniversalPiece &
>(
151 UniversalPieceHelper<FirstArg>::forward(firstArg))
153 static_cast<const UniversalPiece &
>(
154 UniversalPieceHelper<Args>::forward(args))
158 constexpr
bool literalEqual(
char const *a,
char const *b) {
159 return *a == *b && (*a ==
'\0' || literalEqual(a + 1, b + 1));
163 FCITXUTILS_EXPORT
bool unescape(std::string &str,
bool unescapeQuote);
173 FCITXUTILS_EXPORT std::optional<std::string>
184 FCITXUTILS_EXPORT std::string
escapeForValue(std::string_view str);
194 std::string_view prefix);
198 #endif // _FCITX_UTILS_STRINGUTILS_H_ std::optional< std::string > unescapeForValue(std::string_view str)
unescape a string, that is potentially quoted.
bool unescape(std::string &str, bool unescapeQuote)
Inplace unescape a string contains slash, new line, optionally quote.
bool consumePrefix(std::string_view &str, std::string_view prefix)
Return a substring of input str if str starts with given prefix.
std::pair< std::string::size_type, std::string::size_type > trimInplace(std::string_view str)
Trim the whitespace by returning start end end of first and list non whitespace character position...
bool endsWith(std::string_view str, char suffix)
Check if a string ends with a suffix char.
std::vector< std::string > split(std::string_view str, std::string_view delim, SplitBehavior behavior)
Split the string by delim.
std::string_view trimView(std::string_view str)
Trim the white space in string view.
std::string join(std::initializer_list< C > &&container, T &&delim)
Join the strings with delim.
const char * backwardSearch(const char *haystack, size_t l, const char *needle, size_t ol, size_t from)
Search string needle of size ol in string haystack.
std::string replaceAll(std::string str, const std::string &before, const std::string &after)
Replace all substring appearance of before with after.
std::string escapeForValue(std::string_view str)
escape a string, add quote if needed.
std::string trim(std::string_view str)
Trim the white space in str.
bool isConcatOf(std::string_view str, std::string_view sub1, std::string_view sub2)
Check if a string is a concatenation of two other strings.
bool startsWith(std::string_view str, char prefix)
Check if a string starts with a prefix char.