Version.cpp: Improve version parsing to handle mixed numeric and alphabetic characters

Signed-off-by: Edgars Cīrulis <edgarsscirulis@gmail.com>
This commit is contained in:
Edgars Cīrulis 2023-01-15 09:47:31 +02:00
parent 72a9b98ef0
commit c0c3892064
No known key found for this signature in database
GPG Key ID: 307C4E4663F1FCC3

View File

@ -74,12 +74,36 @@ bool Version::operator!=(const Version &other) const
void Version::parse()
{
m_sections.clear();
// FIXME: this is bad. versions can contain a lot more separators...
QStringList parts = m_string.split('.');
for (const auto& part : parts)
{
m_sections.append(Section(part));
QString currentSection;
bool lastCharWasDigit = false;
for (int i = 0; i < m_string.size(); ++i) {
if(m_string[i].isDigit()){
if(!lastCharWasDigit){
if(!currentSection.isEmpty()){
m_sections.append(Section(currentSection));
}
currentSection = "";
}
currentSection += m_string[i];
lastCharWasDigit = true;
}else if(m_string[i].isLetter()){
if(lastCharWasDigit){
if(!currentSection.isEmpty()){
m_sections.append(Section(currentSection));
}
currentSection = "";
}
currentSection += m_string[i];
lastCharWasDigit = false;
}
else if(m_string[i] == '-' || m_string[i] == '_'){
if(!currentSection.isEmpty()){
m_sections.append(Section(currentSection));
}
currentSection = "";
}
}
if (!currentSection.isEmpty()) {
m_sections.append(Section(currentSection));
}
}