Fix cty.dat lookups that were not honouring exact match flags

git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@8152 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
Bill Somerville 2017-10-01 21:44:07 +00:00
parent c3bacf6b07
commit e2771c0cd7
2 changed files with 31 additions and 22 deletions

View File

@ -51,7 +51,6 @@ void CountryDat::_removeBrackets(QString &line, const QString a, const QString b
QStringList CountryDat::_extractPrefix(QString &line, bool &more) const QStringList CountryDat::_extractPrefix(QString &line, bool &more) const
{ {
line = line.remove(" \n"); line = line.remove(" \n");
line = line.replace("=","");
line = line.replace(" ",""); line = line.replace(" ","");
_removeBrackets(line,"(",")"); _removeBrackets(line,"(",")");
@ -117,29 +116,38 @@ void CountryDat::load()
} }
// return country name else "" // return country name else ""
QString CountryDat::find(QString prefix) const QString CountryDat::find(QString call) const
{ {
prefix = prefix.toUpper (); call = call.toUpper ();
auto pf = prefix;
while (pf.size () >= 1) // check for exact match first
{ if (_data.contains ("=" + call))
if (_data.contains (pf)) {
return fixup (_data.value ("=" + call), call);
}
auto prefix = call;
while (prefix.size () >= 1)
{
if (_data.contains (prefix))
{ {
QString country {_data.value (pf)}; return fixup (_data.value (prefix), call);
//
// deal with special rules that cty.dat does not cope with
//
// KG4 2x1 and 2x3 calls that map to Gitmo are mainland US not Gitmo
if (prefix.startsWith ("KG4") && prefix.size () != 5)
{
country.replace ("Guantanamo Bay", "United States");
}
return country;
} }
pf = pf.left (pf.size () - 1); prefix = prefix.left (prefix.size () - 1);
} }
return QString {}; return QString {};
} }
QString CountryDat::fixup (QString country, QString const& call) const
{
//
// deal with special rules that cty.dat does not cope with
//
// KG4 2x1 and 2x3 calls that map to Gitmo are mainland US not Gitmo
if (call.startsWith ("KG4") && call.size () != 5)
{
country.replace ("Guantanamo Bay", "United States");
}
return country;
}

View File

@ -26,6 +26,7 @@ private:
QString _extractName(const QString line) const; QString _extractName(const QString line) const;
void _removeBrackets(QString &line, const QString a, const QString b) const; void _removeBrackets(QString &line, const QString a, const QString b) const;
QStringList _extractPrefix(QString &line, bool &more) const; QStringList _extractPrefix(QString &line, bool &more) const;
QString fixup (QString country, QString const& call) const;
QString _filename; QString _filename;
QStringList _countryNames; QStringList _countryNames;