mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-22 04:11:16 -05:00
Better identification of DXCC Entity when a prefix is used as a suffix
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@8624 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
d72586e7a7
commit
078b76ceaa
34
Radio.cpp
34
Radio.cpp
@ -17,6 +17,10 @@ namespace Radio
|
|||||||
// very loose validation - callsign must contain a letter next to
|
// very loose validation - callsign must contain a letter next to
|
||||||
// a number
|
// a number
|
||||||
QRegularExpression valid_callsign_regexp {R"(\d[[:alpha:]]|[[:alpha:]]\d)"};
|
QRegularExpression valid_callsign_regexp {R"(\d[[:alpha:]]|[[:alpha:]]\d)"};
|
||||||
|
|
||||||
|
// suffixes that are often used and should not be interpreted as a
|
||||||
|
// DXCC Entity prefix used as a suffix
|
||||||
|
QRegularExpression non_prefix_suffix {R"(\A([0-9AMPQR]|QRP|F[DF]|[AM]M|L[HT]|LGT)\z)"};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -125,6 +129,34 @@ namespace Radio
|
|||||||
callsign = callsign.left (slash_pos);
|
callsign = callsign.left (slash_pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return callsign;
|
return callsign.toUpper ();
|
||||||
|
}
|
||||||
|
|
||||||
|
// analyze the callsign and determine the effective prefix, returns
|
||||||
|
// the full call if no valid prefix (or prefix as a suffix) is specified
|
||||||
|
QString effective_prefix (QString callsign)
|
||||||
|
{
|
||||||
|
auto prefix = callsign.toUpper ();
|
||||||
|
auto slash_pos = callsign.indexOf ('/');
|
||||||
|
if (slash_pos >= 0)
|
||||||
|
{
|
||||||
|
auto right_size = callsign.size () - slash_pos - 1;
|
||||||
|
if (right_size >= slash_pos) // naive call is longer than
|
||||||
|
// prefix/suffix algorithm
|
||||||
|
{
|
||||||
|
prefix = callsign.left (slash_pos);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
prefix = callsign.mid (slash_pos + 1);
|
||||||
|
if (prefix.contains (non_prefix_suffix))
|
||||||
|
{
|
||||||
|
prefix = callsign.left (slash_pos); // ignore
|
||||||
|
// non-prefix
|
||||||
|
// suffixes
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return prefix;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,7 @@ namespace Radio
|
|||||||
bool UDP_EXPORT is_callsign (QString const&);
|
bool UDP_EXPORT is_callsign (QString const&);
|
||||||
bool UDP_EXPORT is_compound_callsign (QString const&);
|
bool UDP_EXPORT is_compound_callsign (QString const&);
|
||||||
QString UDP_EXPORT base_callsign (QString);
|
QString UDP_EXPORT base_callsign (QString);
|
||||||
|
QString UDP_EXPORT effective_prefix (QString);
|
||||||
}
|
}
|
||||||
|
|
||||||
Q_DECLARE_METATYPE (Radio::Frequency);
|
Q_DECLARE_METATYPE (Radio::Frequency);
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QTextStream>
|
#include <QTextStream>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include "Radio.hpp"
|
||||||
|
|
||||||
void CountryDat::init(const QString filename)
|
void CountryDat::init(const QString filename)
|
||||||
{
|
{
|
||||||
@ -131,14 +132,15 @@ QString CountryDat::find(QString call) const
|
|||||||
return fixup (_data.value ("=" + call), call);
|
return fixup (_data.value ("=" + call), call);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto prefix = call;
|
auto prefix = Radio::effective_prefix (call);
|
||||||
while (prefix.size () >= 1)
|
auto match_candidate = prefix;
|
||||||
|
while (match_candidate.size () >= 1)
|
||||||
{
|
{
|
||||||
if (_data.contains (prefix))
|
if (_data.contains (match_candidate))
|
||||||
{
|
{
|
||||||
return fixup (_data.value (prefix), call);
|
return fixup (_data.value (match_candidate), prefix);
|
||||||
}
|
}
|
||||||
prefix = prefix.left (prefix.size () - 1);
|
match_candidate = match_candidate.left (match_candidate.size () - 1);
|
||||||
}
|
}
|
||||||
return QString {};
|
return QString {};
|
||||||
}
|
}
|
||||||
@ -150,7 +152,7 @@ QString CountryDat::fixup (QString country, QString const& call) const
|
|||||||
//
|
//
|
||||||
|
|
||||||
// KG4 2x1 and 2x3 calls that map to Gitmo are mainland US not Gitmo
|
// KG4 2x1 and 2x3 calls that map to Gitmo are mainland US not Gitmo
|
||||||
if (call.startsWith ("KG4") && call.size () != 5)
|
if (call.startsWith ("KG4") && call.size () != 5 && call.size () != 3)
|
||||||
{
|
{
|
||||||
country.replace ("Guantanamo Bay; KG4; NA", "United States; K; NA");
|
country.replace ("Guantanamo Bay; KG4; NA", "United States; K; NA");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user