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); });
66 return std::any_of(s.
begin(), s.
end(), predicate);
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));
94 auto notPredicate = [=](
auto c) {
return !predicate(c); };
99 if (
begin == s.
end()) {
return result; }
100 auto end = std::find_if(
begin, s.
end(), predicate);
135 template <
class K,
class V>
139 static const QString kv(
"%1: %2 ");
153 inline bool is09(
const QChar &c) {
return c >= u
'0' && c <= u
'9'; }
161 if (stringList.
size() > index) {
return stringList.
at(index); }
310 double failDefault = std::numeric_limits<double>::quiet_NaN());
318 template <
typename T,
typename =
void>
334 struct TString<
QChar>
364 struct TString<ulong>
369 struct TString<qlonglong>
374 struct TString<qulonglong>
379 struct TString<short>
384 struct TString<ushort>
389 struct TString<float>
394 struct TString<double>
398 template <
typename T>
399 struct TString<T, std::enable_if_t<std::is_enum_v<T>>>
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>
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.
bool isDigit(char32_t ucs4)
QList< T >::const_reference at(qsizetype i) const const
void push_back(QList< T >::parameter_type value)
qsizetype size() const const
bool hasNext() const const
const Key & key() const const
QMapIterator< Key, T >::Item next()
const T & value() const const
QString & append(QChar ch)
QString arg(Args &&... args) const const
QString::iterator begin()
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
QString number(double n, char format, int precision)
QString trimmed() const const
QString toString() const const
Stringification traits class.
#define SWIFT_MISC_EXPORT
Export a class or function from the library.