6 #ifndef SWIFT_MISC_STRINGUTILS_H
7 #define SWIFT_MISC_STRINGUTILS_H
17 #include <QMapIterator>
20 #include <QStringView>
27 template <
class T1,
class T2>
37 std::copy_if(s.begin(), s.end(), std::back_inserter(result), [=](
auto c) { return !predicate(c); });
44 return removeChars(
string.simplified(), [&](QChar c) {
return inString.contains(c); });
50 return removeChars(
string.simplified(), [&](QChar c) {
return !inString.contains(c); });
56 return removeChars(s, [](QChar c) {
return c ==
'\n' || c ==
'\t'; });
66 return std::any_of(s.begin(), s.end(), predicate);
72 return containsChar(s, [](QChar c) {
return c ==
'\n' || c ==
'\t'; });
79 auto it = std::find_if(s.begin(), s.end(), predicate);
80 if (it == s.end()) {
return -1; }
81 return static_cast<int>(std::distance(s.begin(), it));
86 Qt::CaseSensitivity cs = Qt::CaseInsensitive);
93 QList<QStringView> result;
94 auto notPredicate = [=](
auto c) {
return !predicate(c); };
95 const auto *
begin = s.begin();
98 begin = std::find_if(
begin, s.end(), notPredicate);
99 if (
begin == s.end()) {
return result; }
100 auto end = std::find_if(
begin, s.end(), predicate);
101 result.push_back(QStringView(s).slice(std::distance(s.begin(),
begin), std::distance(
begin,
end)));
135 template <
class K,
class V>
139 static const QString kv(
"%1: %2 ");
140 QMapIterator<K, V> i(map);
144 s.append(kv.arg(i.key()).arg(i.value()));
153 inline bool is09(
const QChar &c) {
return c >= u
'0' && c <= u
'9'; }
159 inline const QString &
safeAt(
const QStringList &stringList,
int index)
161 if (stringList.size() > index) {
return stringList.at(index); }
162 static const QString empty;
169 return !
containsChar(testString, [](QChar c) {
return !c.isDigit(); });
187 return removeChars(
string, [](QChar c) {
return !c.isDigit(); });
205 return removeChars(
string.simplified(), [](QChar c) {
return c.unicode() > 127; });
244 Qt::CaseSensitivity cs = Qt::CaseSensitive);
287 QLocale::FormatType format);
310 double failDefault = std::numeric_limits<double>::quiet_NaN());
318 template <
typename T,
typename =
void>
326 static QString toQString(
const QString &s) {
return s; }
329 struct TString<QStringView>
331 static QString toQString(QStringView sv) {
return sv.toString(); }
334 struct TString<QChar>
336 static QString toQString(QChar c) {
return c; }
341 static QString toQString(
char c) {
return QChar(c); }
346 static QString toQString(
bool n) {
return QString::number(n); }
351 static QString toQString(
int n) {
return QString::number(n); }
356 static QString toQString(uint n) {
return QString::number(n); }
361 static QString toQString(
long n) {
return QString::number(n); }
364 struct TString<ulong>
366 static QString toQString(ulong n) {
return QString::number(n); }
369 struct TString<qlonglong>
371 static QString toQString(qlonglong n) {
return QString::number(n); }
374 struct TString<qulonglong>
376 static QString toQString(qulonglong n) {
return QString::number(n); }
379 struct TString<short>
381 static QString toQString(
short n) {
return QString::number(n); }
384 struct TString<ushort>
386 static QString toQString(ushort n) {
return QString::number(n); }
389 struct TString<float>
391 static QString toQString(
float n) {
return QString::number(n); }
394 struct TString<double>
396 static QString toQString(
double n) {
return QString::number(n); }
398 template <
typename T>
399 struct TString<T, std::enable_if_t<std::is_enum_v<T>>>
401 static QString toQString(T e) {
return QString::number(e); }
403 template <
typename T>
404 struct TString<T, std::enable_if_t<std::is_convertible_v<T, QString>>>
406 static QString toQString(
const T &v) {
return v; }
408 template <
typename T>
409 struct TString<T, std::enable_if_t<THasToQString<T>::value>>
411 static QString toQString(
const T &v) {
return v.toQString(); }
413 template <
typename T>
414 struct TString<QFlags<T>>
416 static QString toQString(QFlags<T> n) {
return TString<typename QFlags<T>::Int>::toQString(n); }
418 template <
typename T>
419 struct TString<std::atomic<T>>
421 static QString toQString(
const std::atomic<T> &n) {
return TString<T>::toQString(n); }
Free functions in swift::misc.
SWIFT_MISC_EXPORT QString withQuestionMark(const QString &question)
Add a question mark at the end if not existing.
SWIFT_MISC_EXPORT QString simplifyNameForSearch(const QString &name)
Get a simplified upper case name for searching by removing all characters except A-Z.
const QString & safeAt(const QStringList &stringList, int index)
Safe "at" function, returns empty string if index does not exists.
SWIFT_MISC_EXPORT qsizetype nthIndexOf(const QString &string, QChar ch, int nth=1, Qt::CaseSensitivity cs=Qt::CaseInsensitive)
nth index of ch
SWIFT_MISC_EXPORT QString cleanNumber(const QString &number)
Remove leading 0, trailing 0, " ", and "." from a number.
SWIFT_MISC_EXPORT QString inApostrophes(const QString &in, bool ignoreEmpty=false)
Return string in apostrophes.
T::const_iterator begin(const LockFreeReader< T > &reader)
Non-member begin() and end() for so LockFree containers can be used in ranged for loops.
SWIFT_MISC_EXPORT QString intToHex(int value, int digits=2)
Int to hex value.
bool is09(const QChar &c)
Is 0-9 char, isDigit allows a bunch of more characters.
SWIFT_MISC_EXPORT QByteArray utfToPercentEncoding(const QString &s, const QByteArray &allow={}, char percent='%')
Extended percent encoding supporting UTF-16.
SWIFT_MISC_EXPORT QString stripDesignatorFromCompleterString(const QString &candidate)
Strip a designator from a combined string.
SWIFT_MISC_EXPORT QDateTime parseMultipleDateTimeFormats(const QString &dateTimeString)
Parse multiple date time formats.
QString removeIfInString(const QString &string, const QString &inString)
Remove if in string.
SWIFT_MISC_EXPORT QString utfFromPercentEncoding(const QByteArray &ba, char percent='%')
Reverse utfFromPercentEncoding.
SWIFT_MISC_EXPORT int fuzzyShortStringComparision(const QString &str1, const QString &str2, Qt::CaseSensitivity cs=Qt::CaseSensitive)
Fuzzy compare for short strings (like ICAO designators)
QString removeIfNotInString(const QString &string, const QString &inString)
Remove if NOT in string.
QString removeChars(const QString &s, F predicate)
Return a string with characters removed that match the given predicate.
bool is09OrSeparator(const QChar &c)
Is 0-9, or ","/";".
SWIFT_MISC_EXPORT QList< QStringView > splitLinesRefs(const QString &s)
Split a string into multiple lines. Blank lines are skipped.
bool is09OrSeparatorOnlyString(const QString &testString)
String with 0-9/separator only.
SWIFT_MISC_EXPORT QString removeDateTimeSeparators(const QString &s)
Remove the typical separators such as "-", " ".
SWIFT_MISC_EXPORT QMap< QString, QString > parseIniValues(const QString &data)
Obtain ini file like values, e.g. foo=bar.
auto makeRange(I begin, I2 end) -> CRange< I >
Returns a CRange constructed from begin and end iterators of deduced types.
bool is09OnlyString(const QString &testString)
String with 0-9 only.
SWIFT_MISC_EXPORT QString simplifyByDecomposition(const QString &candidate)
Remove accents / diacritic marks from a string by doing a Unicode decomposition and removing mark cha...
SWIFT_MISC_EXPORT bool caseInsensitiveStringCompare(const QString &c1, const QString &c2)
Case insensitive string compare.
QList< QStringView > splitStringRefs(const QString &s, F predicate)
Split a string into multiple strings, using a predicate function to identify the split points.
SWIFT_MISC_EXPORT const QString & boolToOnOff(bool v)
Bool to on/off.
SWIFT_MISC_EXPORT QString removeSurroundingQuotes(const QString &in)
Remove surrounding quotes "foo" -> foo.
SWIFT_MISC_EXPORT double parseFraction(const QString &fraction, double failDefault=std::numeric_limits< double >::quiet_NaN())
Parse a fraction like 2/3.
SWIFT_MISC_EXPORT bool hasBalancedQuotes(const QString &in, char quote='"')
Has balanced quotes.
SWIFT_MISC_EXPORT QString dotToLocaleDecimalPoint(QString &input)
Replace dot '.' by locale decimal point.
SWIFT_MISC_EXPORT QString simplifyAccents(const QString &candidate)
Remove accents / diacritic marks from a string.
bool containsLineBreakOrTab(const QString &s)
Contains a line break or tab.
SWIFT_MISC_EXPORT bool stringCompare(const QString &c1, const QString &c2, Qt::CaseSensitivity cs)
String compare.
int indexOfChar(const QString &s, F predicate)
Index of first character in the string matching the given predicate, or -1 if not found.
SWIFT_MISC_EXPORT QString inQuotes(const QString &in, bool ignoreEmpty=false)
Return string in quotes.
QString asciiOnlyString(const QString &string)
String only with ASCII values.
T::const_iterator end(const LockFreeReader< T > &reader)
Non-member begin() and end() for so LockFree containers can be used in ranged for loops.
SWIFT_MISC_EXPORT QString removeSurroundingApostrophes(const QString &in)
Remove surrounding apostrophes 'foo' -> foo.
SWIFT_MISC_EXPORT QString joinStringSet(const QSet< QString > &set, const QString &separator)
Convert string to bool.
SWIFT_MISC_EXPORT const QString & boolToNullNotNull(bool isNull)
Bool isNull to null/no null.
QString digitOnlyString(const QString &string)
String only with digits.
SWIFT_MISC_EXPORT QStringList splitLines(const QString &s)
Split a string into multiple lines. Blank lines are skipped.
QString char09OnlyString(const QString &string)
String only with 0-9.
SWIFT_MISC_EXPORT QString removeComments(const QString &in, bool removeSlash, bool removeDoubleSlash)
Remove comments such as /** **/ or //.
SWIFT_MISC_EXPORT const QString & boolToEnabledDisabled(bool v)
Bool to enabled/disabled.
QStringList splitString(const QString &s, F predicate)
Split a string into multiple strings, using a predicate function to identify the split points.
SWIFT_MISC_EXPORT bool stringToBool(const QString &boolString)
Convert string to bool.
SWIFT_MISC_EXPORT bool containsAny(const QString &testString, const QStringList &any, Qt::CaseSensitivity cs)
Contains any string of the list?
SWIFT_MISC_EXPORT const QString & boolToTrueFalse(bool v)
Bool to true/false.
QString char09OrSeparatorOnlyString(const QString &string)
String only with 0-9, or separator.
bool isDigitsOnlyString(const QString &testString)
String with digits only.
QString removeLineBreakAndTab(const QString &s)
Remove line breaks and tabs.
SWIFT_MISC_EXPORT QDateTime fromStringUtc(const QString &dateTimeString, const QString &format)
Same as QDateTime::fromString but QDateTime will be set to UTC.
bool containsChar(const QString &s, F predicate)
True if any character in the string matches the given predicate.
SWIFT_MISC_EXPORT const QString & boolToYesNo(bool v)
Bool to yes/no.
SWIFT_MISC_EXPORT QDateTime parseDateTimeStringOptimized(const QString &dateTimeString)
Parse yyyyMMddHHmmsszzz strings optimized.
QString qmapToString(const QMap< K, V > &map)
A map converted to string.
Stringification traits class.
#define SWIFT_MISC_EXPORT
Export a class or function from the library.