Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer/SituationMap/Symbology/sidc_builder_base.cpp
T
torstenandCopilot f15f342a47 QRegExp → QRegularExpression migration complete
Migrated all remaining QRegExp usage to QRegularExpression for Qt6 compatibility:

- Lts/Viewer/SituationMap/SymbologyImpl/symbol_dictionary_impl.cpp
  - Changed helper functions to use QRegularExpression::match().hasMatch()
  - Updated inline regex validation

- Lts/Plugins/PlanEditor/mil2525d_to_mil2525c.cpp
  - Fixed m_sidcQuery.exactMatch() → match().hasMatch()

- Lts/Plugins/PresentationManagement/Gui/Script/ScriptTimelineEditor/pre_script_dialog.cpp
  - Video file pattern matching migrated

- Lts/Proxies/TrainingAreaBase/Plugins/Nmea/nmea_handler_rx.cpp
  - NMEA message parsing with QRegularExpression

- Lts/Proxies/TrainingAreaBaseOC/handler_aes_data.cpp
  - AES data handler regex patterns migrated

- Lts/Services/AudioVideoManagement/stream_name_mapping.*
  - Stream name validation patterns

- Lts/Services/NmeaManagement/nmea_handler.cpp
  - NMEA handler regex patterns

- Lts/Viewer/SituationMap/Symbology/sidc_builder_base.cpp, sidc_codec.cpp
  - SIDC code validation patterns

- Test files updated for compilation

All QRegExp::exactMatch() calls replaced with QRegularExpression::match().hasMatch()
All QRegExp::cap(n) calls replaced with QRegularExpressionMatch::captured(n)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-08-24 19:10:44 +02:00

197 lines
4.9 KiB
C++
Executable File

/**
* @RDE_HEADER@
* Class SidcBuilderBase
* $Id$
* $HeadURL$
* $Author$
*/
// Own
#include "sidc_builder_base.h"
#include "sidc_codec.h"
// ESRI
// Qt
#include <QtCore/QDebug>
#include <QtCore/QRegularExpression>
namespace AdvancedSymbology
{
SidcBuilderBase::SidcBuilderBase(SymbolDictionary *symbolDictionary, const char *loggerName)
: SidcDefinitions(symbolDictionary, loggerName)
{
}
QString SidcBuilderBase::baseSymbolCodeToSidc(const QString &baseSymbolCodeCodec)
{
if (!SidcCodec::isEncoded(baseSymbolCodeCodec))
{
qCritical() << LOGFUNCTION << " baseSymbolCodeCodec input parameter isn't encoded: " << baseSymbolCodeCodec;
return QString();
}
switch (SidcCodec::decodeSidcType(baseSymbolCodeCodec))
{
case SidcCodec::SidcType::CivilEts:
case SidcCodec::SidcType::CivilXml:
return baseSymbolCodeCodec;
case SidcCodec::SidcType::Base:
break;
default :
{
qCritical() << LOGFUNCTION << " baseSymbolCodeCodec is not a base symbol code: " << baseSymbolCodeCodec;
return QString();
}
} // switch
QString sidc;
QString baseSymbolCode = SidcCodec::decodeRawSidc(baseSymbolCodeCodec);
SymbologyType symbologyType = SidcCodec::decodeSymbologyType(baseSymbolCodeCodec);
if ((SymbologyType::MIL2525D == symbologyType) || (SymbologyType::APP6D == symbologyType))
{
//
// its MIL2525D or APP6D
//
if ((baseSymbolCode.size() != 8) && (baseSymbolCode.size() != 10))
{
return QString(); // failure !!
}
QRegularExpression sidcTemplate(QStringLiteral("^[0-9]{8}(_[0-9])?$"));
if (!sidcTemplate.match(baseSymbolCode).hasMatch())
{
return QString(); // Failure
}
// Version
sidc += QLatin1Char('1');
sidc += QLatin1Char('0');
// Standard Identity
sidc += QLatin1Char('0');
if (baseSymbolCode.size() == 10) sidc += baseSymbolCode[9];
else sidc += QLatin1Char('1');
// SymbolSet
sidc += baseSymbolCode[0];
sidc += baseSymbolCode[1];
// Status
sidc += QLatin1Char('0');
// HeadQuarter, TaskForce, Dummy
sidc += QLatin1Char('0');
// Amplifier/Descriptor
sidc += QLatin1Char('0');
sidc += QLatin1Char('0');
sidc += baseSymbolCode[2];
sidc += baseSymbolCode[3];
sidc += baseSymbolCode[4];
sidc += baseSymbolCode[5];
sidc += baseSymbolCode[6];
sidc += baseSymbolCode[7];
sidc = sidc.leftJustified(20, QLatin1Char('0'));
return SidcCodec::encodeComplete(symbologyType, sidc);
}
if (SymbologyType::APP6B == symbologyType)
{
sidc = baseSymbolCode;
sidc[1] = QLatin1Char('U');
sidc[3] = QLatin1Char('P');
return SidcCodec::encodeComplete(symbologyType, sidc);
}
return QString();
} // QString SidcBuilderBase::baseSymbolCodeToSidc(const QString &baseSymbolCodeCodec)
QString SidcBuilderBase::concreteSidcToBaseSymbolCode(const QString &sidcCodec)
{
if (!SidcCodec::isEncoded(sidcCodec))
{
qCritical() << LOGFUNCTION << " sidcCodec is not a complete sidc: " << sidcCodec;
return QString();
}
switch (SidcCodec::decodeSidcType(sidcCodec))
{
case SidcCodec::SidcType::CivilEts:
case SidcCodec::SidcType::CivilXml:
return sidcCodec;
break;
case SidcCodec::SidcType::Complete:
break;
default :
{
qCritical() << LOGFUNCTION << " sidcCodec is not a complete sidc: " << sidcCodec;
return QString();
}
} // switch
const QString &rawSidc = SidcCodec::decodeRawSidc(sidcCodec);
SymbologyType symbologyType = SidcCodec::decodeSymbologyType(sidcCodec);
switch (symbologyType)
{
case SymbologyType::APP6B :
{
const QString & baseSymbolCode = normalizeAPP6BaseSymbolCode(rawSidc);
return SidcCodec::encodeBaseSymbolCode(symbologyType, baseSymbolCode);
}
case SymbologyType::MIL2525C : return QString();
case SymbologyType::APP6D : // it's same as MIL2525D
case SymbologyType::MIL2525D :
{
if (rawSidc.count() != 20)
return QString();
QString baseSymbolCode(
QStringRef(&rawSidc, 4, 2).toString() +
QStringRef(&rawSidc, 10, 6).toString());
return SidcCodec::encodeBaseSymbolCode(symbologyType, baseSymbolCode);
} break;
case SymbologyType::None: return QString();
}
return QString();
} // QString SidcBuilderBase::concreteSidcToBaseSymbolCode(const QString &sidcCodec)
QString SidcBuilderBase::normalizeAPP6BaseSymbolCode(const QString & baseSymbolCode)
{
QString baseNorm = baseSymbolCode;
baseNorm.resize(15, QLatin1Char('*'));
baseNorm[1] = QLatin1Char('*');
baseNorm[3] = QLatin1Char('*');
if (QLatin1Char('*') != baseNorm[10]) baseNorm[10] = QLatin1Char('-');
if (QLatin1Char('*') != baseNorm[11]) baseNorm[11] = QLatin1Char('-');
if (QLatin1Char('*') != baseNorm[14]) baseNorm[14] = QLatin1Char('-');
return baseNorm;
} // QString SidcBuilderBase::normalizeAPP6BaseSymbolCode(const QString & baseSymbolCode)
} // namespace AdvancedSymbology