6 #ifndef SWIFT_MISC_STRINGUTILS_H
7 #define SWIFT_MISC_STRINGUTILS_H
17 #include <QMapIterator>
21 #include <QStringView>
28 template <
class T1,
class T2>
38 std::copy_if(s.begin(), s.end(), std::back_inserter(result), [=](
auto c) { return !predicate(c); });
45 return removeChars(
string.simplified(), [&](QChar c) {
return inString.contains(c); });
51 return removeChars(
string.simplified(), [&](QChar c) {
return !inString.contains(c); });
57 return removeChars(s, [](QChar c) {
return c ==
'\n' || c ==
'\t'; });
67 return std::any_of(s.begin(), s.end(), predicate);
73 return containsChar(s, [](QChar c) {
return c ==
'\n' || c ==
'\t'; });
80 auto it = std::find_if(s.begin(), s.end(), predicate);
81 if (it == s.end()) {
return -1; }
82 return static_cast<int>(std::distance(s.begin(), it));
87 Qt::CaseSensitivity cs = Qt::CaseInsensitive);
94 QList<QStringRef> result;
95 auto notPredicate = [=](
auto c) {
return !predicate(c); };
96 auto begin = s.begin();
99 begin = std::find_if(
begin, s.end(), notPredicate);
100 if (
begin == s.end()) {
return result; }
101 auto end = std::find_if(
begin, s.end(), predicate);
102 result.push_back(QStringRef(&s, std::distance(s.begin(),
begin), std::distance(
begin,
end)));
136 template <
class K,
class V>
140 static const QString kv(
"%1: %2 ");
141 QMapIterator<K, V> i(map);
145 s.append(kv.arg(i.key()).arg(i.value()));
154 inline bool is09(
const QChar &c) {
return c >= u
'0' && c <= u
'9'; }
160 inline const QString &
safeAt(
const QStringList &stringList,
int index)
162 if (stringList.size() > index) {
return stringList.at(index); }
163 static const QString empty;
170 return !
containsChar(testString, [](QChar c) {
return !c.isDigit(); });
188 return removeChars(
string, [](QChar c) {
return !c.isDigit(); });
206 return removeChars(
string.simplified(), [](QChar c) {
return c.unicode() > 127; });
245 Qt::CaseSensitivity cs = Qt::CaseSensitive);
291 QLocale::FormatType format);
317 double failDefault = std::numeric_limits<double>::quiet_NaN());
325 template <
typename T,
typename =
void>
333 static QString toQString(
const QString &s) {
return s; }
336 struct TString<QStringRef>
338 static QString toQString(
const QStringRef &sr) {
return sr.toString(); }
341 struct TString<QStringView>
343 static QString toQString(QStringView sv) {
return sv.toString(); }
346 struct TString<QChar>
348 static QString toQString(QChar c) {
return c; }
353 static QString toQString(
char c) {
return QChar(c); }
358 static QString toQString(
bool n) {
return QString::number(n); }
363 static QString toQString(
int n) {
return QString::number(n); }
368 static QString toQString(uint n) {
return QString::number(n); }
373 static QString toQString(
long n) {
return QString::number(n); }
376 struct TString<ulong>
378 static QString toQString(ulong n) {
return QString::number(n); }
381 struct TString<qlonglong>
383 static QString toQString(qlonglong n) {
return QString::number(n); }
386 struct TString<qulonglong>
388 static QString toQString(qulonglong n) {
return QString::number(n); }
391 struct TString<short>
393 static QString toQString(
short n) {
return QString::number(n); }
396 struct TString<ushort>
398 static QString toQString(ushort n) {
return QString::number(n); }
401 struct TString<float>
403 static QString toQString(
float n) {
return QString::number(n); }
406 struct TString<double>
408 static QString toQString(
double n) {
return QString::number(n); }
410 template <
typename T>
411 struct TString<T, std::enable_if_t<std::is_enum_v<T>>>
413 static QString toQString(T e) {
return QString::number(e); }
415 template <
typename T>
416 struct TString<T, std::enable_if_t<std::is_convertible_v<T, QString>>>
418 static QString toQString(
const T &v) {
return v; }
420 template <
typename T>
421 struct TString<T, std::enable_if_t<THasToQString<T>::value>>
423 static QString toQString(
const T &v) {
return v.toQString(); }
425 template <
typename T>
426 struct TString<QFlags<T>>
428 static QString toQString(QFlags<T> n) {
return TString<typename QFlags<T>::Int>::toQString(n); }
430 template <
typename T>
431 struct TString<std::atomic<T>>
433 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 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 ","/";".
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 int nthIndexOf(const QString &string, QChar ch, int nth=1, Qt::CaseSensitivity cs=Qt::CaseInsensitive)
nth index of ch
SWIFT_MISC_EXPORT bool caseInsensitiveStringCompare(const QString &c1, const QString &c2)
Case insensitive string compare.
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.
SWIFT_MISC_EXPORT QStringList textCodecNames(bool simpleNames, bool mibNames)
Strip a designator from a combined string.
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.
QList< QStringRef > splitStringRefs(const QString &s, F predicate)
Split a string into multiple strings, using a predicate function to identify the split points.
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 & defaultIfEmpty(const QString &candidate, const QString &defaultIfEmpty)
Default string if string is empty.
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.
SWIFT_MISC_EXPORT QList< QStringRef > splitLinesRefs(const QString &s)
Split a string into multiple lines. Blank lines are skipped.
Stringification traits class.
#define SWIFT_MISC_EXPORT
Export a class or function from the library.