From 6c9804a1df25079e3b7efe9e77d39da1edb1ae25 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 14 Sep 2018 16:54:45 +0200 Subject: [PATCH] Ref T353, clean string used with remarks and route * use ASCII only characters * simplify string * max. length --- src/blackmisc/aviation/flightplan.cpp | 21 ++++++++++++++++++--- src/blackmisc/aviation/flightplan.h | 5 ++++- src/blackmisc/stringutils.h | 6 ++++++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/blackmisc/aviation/flightplan.cpp b/src/blackmisc/aviation/flightplan.cpp index 5bead61b7..b1fbe9668 100644 --- a/src/blackmisc/aviation/flightplan.cpp +++ b/src/blackmisc/aviation/flightplan.cpp @@ -24,13 +24,13 @@ namespace BlackMisc CFlightPlanRemarks::CFlightPlanRemarks() { } - CFlightPlanRemarks::CFlightPlanRemarks(const QString &remarks, bool parse) : m_remarks(remarks) + CFlightPlanRemarks::CFlightPlanRemarks(const QString &remarks, bool parse) : m_remarks(cleanRemarks(remarks)) { if (parse) { this->parseFlightPlanRemarks(); } } CFlightPlanRemarks::CFlightPlanRemarks(const QString &remarks, CVoiceCapabilities voiceCapabilities, bool parse) : - m_remarks(remarks), m_voiceCapabilities(voiceCapabilities) + m_remarks(cleanRemarks(remarks)), m_voiceCapabilities(voiceCapabilities) { if (parse) { this->parseFlightPlanRemarks(); } } @@ -76,7 +76,15 @@ namespace BlackMisc if (r.contains("/V/", Qt::CaseInsensitive)) { r.replace("/V/", newCaps, Qt::CaseInsensitive); return r; } if (r.contains("/R/", Qt::CaseInsensitive)) { r.replace("/R/", newCaps, Qt::CaseInsensitive); return r; } if (r.contains("/T/", Qt::CaseInsensitive)) { r.replace("/T/", newCaps, Qt::CaseInsensitive); return r; } - return newCaps + " " + r; + return newCaps % QStringLiteral(" ") % r; + } + + QString CFlightPlanRemarks::cleanRemarks(const QString &remarksIn) + { + QString r = remarksIn; + r.replace(':', ' '); + r = asciiOnlyString(removeAccents(remarksIn)); + return r; } void CFlightPlanRemarks::parseFlightPlanRemarks(bool force) @@ -161,6 +169,13 @@ namespace BlackMisc m_equipmentSuffix = parts[2]; } + void CFlightPlan::setRoute(const QString &route) + { + QString r = route; + r.replace(':', ' '); + m_route = asciiOnlyString(r).left(MaxRouteLength).toUpper(); + } + void CFlightPlan::setRemarks(const QString &remarks) { m_remarks = CFlightPlanRemarks(remarks, true); diff --git a/src/blackmisc/aviation/flightplan.h b/src/blackmisc/aviation/flightplan.h index de820b2b9..5902e0f5e 100644 --- a/src/blackmisc/aviation/flightplan.h +++ b/src/blackmisc/aviation/flightplan.h @@ -104,6 +104,9 @@ namespace BlackMisc //! Replace the voice capabilities remarks part static QString replaceVoiceCapabilities(const QString &newCaps, const QString &oldRemarks); + //! Clean up remarks string + static QString cleanRemarks(const QString &remarksIn); + private: QString m_remarks; //!< the unparsed string QString m_radioTelephony; //!< radio telephony designator @@ -226,7 +229,7 @@ namespace BlackMisc void setFlightRule(FlightRules flightRules) { m_flightRules = flightRules; } //! Set route string - void setRoute(const QString &route) { m_route = route.trimmed().left(MaxRouteLength).toUpper(); } + void setRoute(const QString &route); //! Set remarks string (max 100 characters) void setRemarks(const QString &remarks); diff --git a/src/blackmisc/stringutils.h b/src/blackmisc/stringutils.h index 2d6f8c3bd..e4100148c 100644 --- a/src/blackmisc/stringutils.h +++ b/src/blackmisc/stringutils.h @@ -164,6 +164,12 @@ namespace BlackMisc return removeChars(string, [](QChar c) { return !is09OrSeparator(c); }); } + //! String only with 0-9 + inline QString asciiOnlyString(const QString &string) + { + return removeChars(string.simplified(), [](QChar c) { return c.unicode() > 127; }); + } + //! Return string in apostrophes BLACKMISC_EXPORT const QString inApostrophes(const QString &in, bool ignoreEmpty = false);