mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-05 09:45:44 +08:00
PQ string parsing improvements
This commit is contained in:
@@ -31,7 +31,7 @@ namespace BlackMisc
|
|||||||
{
|
{
|
||||||
QString CPqString::convertToQString(bool /** i18n **/) const
|
QString CPqString::convertToQString(bool /** i18n **/) const
|
||||||
{
|
{
|
||||||
return this->m_string;
|
return m_string;
|
||||||
}
|
}
|
||||||
|
|
||||||
CVariant CPqString::parseToVariant(const QString &value, SeparatorMode mode)
|
CVariant CPqString::parseToVariant(const QString &value, SeparatorMode mode)
|
||||||
@@ -45,68 +45,68 @@ namespace BlackMisc
|
|||||||
if (vs.isEmpty()) { return v; }
|
if (vs.isEmpty()) { return v; }
|
||||||
|
|
||||||
thread_local const QRegularExpression regex("([-+]?[0-9]*[\\.,]?[0-9]+)\\s*(\\D*)$");
|
thread_local const QRegularExpression regex("([-+]?[0-9]*[\\.,]?[0-9]+)\\s*(\\D*)$");
|
||||||
auto match = regex.match(value);
|
const auto match = regex.match(value);
|
||||||
if (!match.hasMatch()) { return v; } // not a valid number
|
if (!match.hasMatch()) { return v; } // not a valid number
|
||||||
QString unit = match.captured(2).trimmed();
|
QString unit = match.captured(2).trimmed();
|
||||||
QString number = QString(value).replace(unit, "");
|
const QString number = QString(value).replace(unit, "");
|
||||||
unit = unit.trimmed(); // trim after replace, not before
|
unit = unit.trimmed(); // trim after replace, not before
|
||||||
|
|
||||||
if (unit.isEmpty() || number.isEmpty()) { return v; }
|
if (unit.isEmpty() || number.isEmpty()) { return v; }
|
||||||
bool success;
|
bool success;
|
||||||
double numberD = parseNumber(number, success, mode);
|
const double numberD = parseNumber(number, success, mode);
|
||||||
if (!success) {return v; }
|
if (!success) {return v; }
|
||||||
|
|
||||||
if (CMeasurementUnit::isValidUnitSymbol<CAccelerationUnit>(unit))
|
if (CMeasurementUnit::isValidUnitSymbol<CAccelerationUnit>(unit))
|
||||||
{
|
{
|
||||||
CAcceleration pq(numberD, CMeasurementUnit::unitFromSymbol<CAccelerationUnit>(unit, false));
|
const CAcceleration pq(numberD, CMeasurementUnit::unitFromSymbol<CAccelerationUnit>(unit, false));
|
||||||
return CVariant::from(pq);
|
return CVariant::from(pq);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CMeasurementUnit::isValidUnitSymbol<CAngleUnit>(unit))
|
if (CMeasurementUnit::isValidUnitSymbol<CAngleUnit>(unit))
|
||||||
{
|
{
|
||||||
CAngle pq(numberD, CMeasurementUnit::unitFromSymbol<CAngleUnit>(unit, false));
|
const CAngle pq(numberD, CMeasurementUnit::unitFromSymbol<CAngleUnit>(unit, false));
|
||||||
return CVariant::from(pq);
|
return CVariant::from(pq);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CMeasurementUnit::isValidUnitSymbol<CFrequencyUnit>(unit))
|
if (CMeasurementUnit::isValidUnitSymbol<CFrequencyUnit>(unit))
|
||||||
{
|
{
|
||||||
CFrequency pq(numberD, CMeasurementUnit::unitFromSymbol<CFrequencyUnit>(unit, false));
|
const CFrequency pq(numberD, CMeasurementUnit::unitFromSymbol<CFrequencyUnit>(unit, false));
|
||||||
return CVariant::from(pq);
|
return CVariant::from(pq);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CMeasurementUnit::isValidUnitSymbol<CLengthUnit>(unit))
|
if (CMeasurementUnit::isValidUnitSymbol<CLengthUnit>(unit))
|
||||||
{
|
{
|
||||||
CLength pq(numberD, CMeasurementUnit::unitFromSymbol<CLengthUnit>(unit, false));
|
const CLength pq(numberD, CMeasurementUnit::unitFromSymbol<CLengthUnit>(unit, false));
|
||||||
return CVariant::from(pq);
|
return CVariant::from(pq);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CMeasurementUnit::isValidUnitSymbol<CMassUnit>(unit))
|
if (CMeasurementUnit::isValidUnitSymbol<CMassUnit>(unit))
|
||||||
{
|
{
|
||||||
CMass pq(numberD, CMeasurementUnit::unitFromSymbol<CMassUnit>(unit, false));
|
const CMass pq(numberD, CMeasurementUnit::unitFromSymbol<CMassUnit>(unit, false));
|
||||||
return CVariant::from(pq);
|
return CVariant::from(pq);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CMeasurementUnit::isValidUnitSymbol<CPressureUnit>(unit))
|
if (CMeasurementUnit::isValidUnitSymbol<CPressureUnit>(unit))
|
||||||
{
|
{
|
||||||
CPressure pq(numberD, CMeasurementUnit::unitFromSymbol<CPressureUnit>(unit, false));
|
const CPressure pq(numberD, CMeasurementUnit::unitFromSymbol<CPressureUnit>(unit, false));
|
||||||
return CVariant::from(pq);
|
return CVariant::from(pq);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CMeasurementUnit::isValidUnitSymbol<CSpeedUnit>(unit))
|
if (CMeasurementUnit::isValidUnitSymbol<CSpeedUnit>(unit))
|
||||||
{
|
{
|
||||||
CSpeed pq(numberD, CMeasurementUnit::unitFromSymbol<CSpeedUnit>(unit, false));
|
const CSpeed pq(numberD, CMeasurementUnit::unitFromSymbol<CSpeedUnit>(unit, false));
|
||||||
return CVariant::from(pq);
|
return CVariant::from(pq);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CMeasurementUnit::isValidUnitSymbol<CTimeUnit>(unit))
|
if (CMeasurementUnit::isValidUnitSymbol<CTimeUnit>(unit))
|
||||||
{
|
{
|
||||||
CTime pq(numberD, CMeasurementUnit::unitFromSymbol<CTimeUnit>(unit, false));
|
const CTime pq(numberD, CMeasurementUnit::unitFromSymbol<CTimeUnit>(unit, false));
|
||||||
return CVariant::from(pq);
|
return CVariant::from(pq);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CMeasurementUnit::isValidUnitSymbol<CTemperatureUnit>(unit))
|
if (CMeasurementUnit::isValidUnitSymbol<CTemperatureUnit>(unit))
|
||||||
{
|
{
|
||||||
CTemperature pq(numberD, CMeasurementUnit::unitFromSymbol<CTemperatureUnit>(unit, false));
|
const CTemperature pq(numberD, CMeasurementUnit::unitFromSymbol<CTemperatureUnit>(unit, false));
|
||||||
return CVariant::from(pq);
|
return CVariant::from(pq);
|
||||||
}
|
}
|
||||||
return v;
|
return v;
|
||||||
@@ -133,6 +133,5 @@ namespace BlackMisc
|
|||||||
}
|
}
|
||||||
return numberD;
|
return numberD;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
@@ -62,16 +62,14 @@ namespace BlackMisc
|
|||||||
//! Parse into concrete type
|
//! Parse into concrete type
|
||||||
template <class PQ> static PQ parse(const QString &value, SeparatorMode mode = SeparatorsCLocale)
|
template <class PQ> static PQ parse(const QString &value, SeparatorMode mode = SeparatorsCLocale)
|
||||||
{
|
{
|
||||||
PQ null;
|
if (value.isEmpty()) {return PQ::null(); }
|
||||||
null.setNull();
|
if (value.contains("null", Qt::CaseInsensitive)) { return PQ::null(); }
|
||||||
if (value.isEmpty()) {return null; }
|
|
||||||
if (value.contains("null", Qt::CaseInsensitive)) { return null; }
|
|
||||||
const CVariant qv = parseToVariant(value, mode);
|
const CVariant qv = parseToVariant(value, mode);
|
||||||
if (!qv.isNull() && qv.canConvert<PQ>())
|
if (!qv.isNull() && qv.canConvert<PQ>())
|
||||||
{
|
{
|
||||||
return qv.value<PQ>();
|
return qv.value<PQ>();
|
||||||
}
|
}
|
||||||
return null;
|
return PQ::null();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Locale aware parsing
|
//! Locale aware parsing
|
||||||
|
|||||||
Reference in New Issue
Block a user