chore: make all the regexes static const (#3647)

This commit is contained in:
Alexandru Ionut Tripon 2025-04-29 00:33:49 +03:00 committed by GitHub
commit a6006c3a33
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
37 changed files with 87 additions and 84 deletions

View File

@ -42,7 +42,6 @@
#include <QFileInfo>
#include <QJsonDocument>
#include <QJsonObject>
#include <QRegularExpression>
#include "settings/INISettingsObject.h"
#include "settings/OverrideSetting.h"

View File

@ -378,8 +378,8 @@ void InstanceImportTask::processModrinth()
} else {
QString pack_id;
if (!m_sourceUrl.isEmpty()) {
QRegularExpression regex(R"(data\/([^\/]*)\/versions)");
pack_id = regex.match(m_sourceUrl.toString()).captured(1);
static const QRegularExpression s_regex(R"(data\/([^\/]*)\/versions)");
pack_id = s_regex.match(m_sourceUrl.toString()).captured(1);
}
// FIXME: Find a way to get the ID in directly imported ZIPs

View File

@ -41,7 +41,9 @@
bool JavaCommon::checkJVMArgs(QString jvmargs, QWidget* parent)
{
if (jvmargs.contains("-XX:PermSize=") || jvmargs.contains(QRegularExpression("-Xm[sx]")) || jvmargs.contains("-XX-MaxHeapSize") ||
static const QRegularExpression s_memRegex("-Xm[sx]");
static const QRegularExpression s_versionRegex("-version:.*");
if (jvmargs.contains("-XX:PermSize=") || jvmargs.contains(s_memRegex) || jvmargs.contains("-XX-MaxHeapSize") ||
jvmargs.contains("-XX:InitialHeapSize")) {
auto warnStr = QObject::tr(
"You tried to manually set a JVM memory option (using \"-XX:PermSize\", \"-XX-MaxHeapSize\", \"-XX:InitialHeapSize\", \"-Xmx\" "
@ -52,7 +54,7 @@ bool JavaCommon::checkJVMArgs(QString jvmargs, QWidget* parent)
return false;
}
// block lunacy with passing required version to the JVM
if (jvmargs.contains(QRegularExpression("-version:.*"))) {
if (jvmargs.contains(s_versionRegex)) {
auto warnStr = QObject::tr(
"You tried to pass required Java version argument to the JVM (using \"-version:xxx\"). This is not safe and will not be "
"allowed.\n"

View File

@ -182,7 +182,8 @@ void LaunchController::login()
auto name = askOfflineName("Player", m_demo, ok);
if (ok) {
m_session = std::make_shared<AuthSession>();
m_session->MakeDemo(name, MinecraftAccount::uuidFromUsername(name).toString().remove(QRegularExpression("[{}-]")));
static const QRegularExpression s_removeChars("[{}-]");
m_session->MakeDemo(name, MinecraftAccount::uuidFromUsername(name).toString().remove(s_removeChars));
launchInstance();
return;
}

View File

@ -1,7 +1,6 @@
#include "RecursiveFileSystemWatcher.h"
#include <QDebug>
#include <QRegularExpression>
RecursiveFileSystemWatcher::RecursiveFileSystemWatcher(QObject* parent) : QObject(parent), m_watcher(new QFileSystemWatcher(this))
{

View File

@ -213,11 +213,10 @@ QPair<QString, QString> StringUtils::splitFirst(const QString& s, const QRegular
return qMakePair(left, right);
}
static const QRegularExpression ulMatcher("<\\s*/\\s*ul\\s*>");
QString StringUtils::htmlListPatch(QString htmlStr)
{
int pos = htmlStr.indexOf(ulMatcher);
static const QRegularExpression s_ulMatcher("<\\s*/\\s*ul\\s*>");
int pos = htmlStr.indexOf(s_ulMatcher);
int imgPos;
while (pos != -1) {
pos = htmlStr.indexOf(">", pos) + 1; // Get the size of the </ul> tag. Add one for zeroeth index
@ -230,7 +229,7 @@ QString StringUtils::htmlListPatch(QString htmlStr)
if (textBetween.isEmpty())
htmlStr.insert(pos, "<br>");
pos = htmlStr.indexOf(ulMatcher, pos);
pos = htmlStr.indexOf(s_ulMatcher, pos);
}
return htmlStr;
}

View File

@ -1,7 +1,6 @@
#include "Version.h"
#include <QDebug>
#include <QRegularExpression>
#include <QRegularExpressionMatch>
#include <QUrl>

View File

@ -19,9 +19,13 @@ JavaVersion& JavaVersion::operator=(const QString& javaVersionString)
QRegularExpression pattern;
if (javaVersionString.startsWith("1.")) {
pattern = QRegularExpression("1[.](?<major>[0-9]+)([.](?<minor>[0-9]+))?(_(?<security>[0-9]+)?)?(-(?<prerelease>[a-zA-Z0-9]+))?");
static const QRegularExpression s_withOne(
"1[.](?<major>[0-9]+)([.](?<minor>[0-9]+))?(_(?<security>[0-9]+)?)?(-(?<prerelease>[a-zA-Z0-9]+))?");
pattern = s_withOne;
} else {
pattern = QRegularExpression("(?<major>[0-9]+)([.](?<minor>[0-9]+))?([.](?<security>[0-9]+))?(-(?<prerelease>[a-zA-Z0-9]+))?");
static const QRegularExpression s_withoutOne(
"(?<major>[0-9]+)([.](?<minor>[0-9]+))?([.](?<security>[0-9]+))?(-(?<prerelease>[a-zA-Z0-9]+))?");
pattern = s_withoutOne;
}
auto match = pattern.match(m_string);

View File

@ -41,7 +41,6 @@
#include <QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QRegularExpression>
#include <QStandardPaths>
#include <variant>
#include "MessageLevel.h"

View File

@ -54,11 +54,11 @@ struct GradleSpecifier {
4 "jdk15"
5 "jar"
*/
QRegularExpression matcher(
static const QRegularExpression s_matcher(
QRegularExpression::anchoredPattern("([^:@]+):([^:@]+):([^:@]+)"
"(?::([^:@]+))?"
"(?:@([^:@]+))?"));
QRegularExpressionMatch match = matcher.match(value);
QRegularExpressionMatch match = s_matcher.match(value);
m_valid = match.hasMatch();
if (!m_valid) {
m_invalidValue = value;

View File

@ -53,7 +53,6 @@
#include "MMCTime.h"
#include "java/JavaVersion.h"
#include "pathmatcher/MultiMatcher.h"
#include "pathmatcher/RegexpMatcher.h"
#include "launch/LaunchTask.h"
#include "launch/TaskStepWrapper.h"
@ -689,9 +688,9 @@ static QString replaceTokensIn(QString text, QMap<QString, QString> with)
{
// TODO: does this still work??
QString result;
QRegularExpression token_regexp("\\$\\{(.+)\\}", QRegularExpression::InvertedGreedinessOption);
static const QRegularExpression s_token_regexp("\\$\\{(.+)\\}", QRegularExpression::InvertedGreedinessOption);
QStringList list;
QRegularExpressionMatchIterator i = token_regexp.globalMatch(text);
QRegularExpressionMatchIterator i = s_token_regexp.globalMatch(text);
int lastCapturedEnd = 0;
while (i.hasNext()) {
QRegularExpressionMatch match = i.next();

View File

@ -114,9 +114,9 @@ VersionFilePtr OneSixVersionFormat::versionFileFromJson(const QJsonDocument& doc
out->uid = root.value("fileId").toString();
}
const QRegularExpression valid_uid_regex{ QRegularExpression::anchoredPattern(
static const QRegularExpression s_validUidRegex{ QRegularExpression::anchoredPattern(
QStringLiteral(R"([a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]+)*)")) };
if (!valid_uid_regex.match(out->uid).hasMatch()) {
if (!s_validUidRegex.match(out->uid).hasMatch()) {
qCritical() << "The component's 'uid' contains illegal characters! UID:" << out->uid;
out->addProblem(ProblemSeverity::Error,
QObject::tr("The component's 'uid' contains illegal characters! This can cause security issues."));

View File

@ -41,7 +41,6 @@
#include <QJsonArray>
#include <QJsonDocument>
#include <QRegularExpression>
#include <QSaveFile>
namespace ProfileUtils {

View File

@ -38,7 +38,6 @@
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QRegularExpression>
#include <QUuid>
namespace {

View File

@ -55,7 +55,8 @@
MinecraftAccount::MinecraftAccount(QObject* parent) : QObject(parent)
{
data.internalId = QUuid::createUuid().toString().remove(QRegularExpression("[{}-]"));
static const QRegularExpression s_removeChars("[{}-]");
data.internalId = QUuid::createUuid().toString().remove(s_removeChars);
}
MinecraftAccountPtr MinecraftAccount::loadFromJsonV3(const QJsonObject& json)
@ -76,14 +77,15 @@ MinecraftAccountPtr MinecraftAccount::createBlankMSA()
MinecraftAccountPtr MinecraftAccount::createOffline(const QString& username)
{
static const QRegularExpression s_removeChars("[{}-]");
auto account = makeShared<MinecraftAccount>();
account->data.type = AccountType::Offline;
account->data.yggdrasilToken.token = "0";
account->data.yggdrasilToken.validity = Validity::Certain;
account->data.yggdrasilToken.issueInstant = QDateTime::currentDateTimeUtc();
account->data.yggdrasilToken.extra["userName"] = username;
account->data.yggdrasilToken.extra["clientToken"] = QUuid::createUuid().toString().remove(QRegularExpression("[{}-]"));
account->data.minecraftProfile.id = uuidFromUsername(username).toString().remove(QRegularExpression("[{}-]"));
account->data.yggdrasilToken.extra["clientToken"] = QUuid::createUuid().toString().remove(s_removeChars);
account->data.minecraftProfile.id = uuidFromUsername(username).toString().remove(s_removeChars);
account->data.minecraftProfile.name = username;
account->data.minecraftProfile.validity = Validity::Certain;
return account;
@ -231,6 +233,7 @@ bool MinecraftAccount::shouldRefresh() const
void MinecraftAccount::fillSession(AuthSessionPtr session)
{
static const QRegularExpression s_removeChars("[{}-]");
if (ownsMinecraft() && !hasProfile()) {
session->status = AuthSession::RequiresProfileSetup;
} else {
@ -248,7 +251,7 @@ void MinecraftAccount::fillSession(AuthSessionPtr session)
// profile ID
session->uuid = data.profileId();
if (session->uuid.isEmpty())
session->uuid = uuidFromUsername(session->player_name).toString().remove(QRegularExpression("[{}-]"));
session->uuid = uuidFromUsername(session->player_name).toString().remove(s_removeChars);
// 'legacy' or 'mojang', depending on account type
session->user_type = typeString();
if (!session->access_token.isEmpty()) {

View File

@ -53,15 +53,16 @@ LauncherPartLaunch::LauncherPartLaunch(LaunchTask* parent)
, m_process(parent->instance()->getJavaVersion().defaultsToUtf8() ? QTextCodec::codecForName("UTF-8") : QTextCodec::codecForLocale())
{
if (parent->instance()->settings()->get("CloseAfterLaunch").toBool()) {
static const QRegularExpression s_settingUser(".*Setting user.+", QRegularExpression::CaseInsensitiveOption);
std::shared_ptr<QMetaObject::Connection> connection{ new QMetaObject::Connection };
*connection = connect(
&m_process, &LoggedProcess::log, this, [connection](const QStringList& lines, [[maybe_unused]] MessageLevel::Enum level) {
qDebug() << lines;
if (lines.filter(QRegularExpression(".*Setting user.+", QRegularExpression::CaseInsensitiveOption)).length() != 0) {
APPLICATION->closeAllWindows();
disconnect(*connection);
}
});
*connection = connect(&m_process, &LoggedProcess::log, this,
[connection](const QStringList& lines, [[maybe_unused]] MessageLevel::Enum level) {
qDebug() << lines;
if (lines.filter(s_settingUser).length() != 0) {
APPLICATION->closeAllWindows();
disconnect(*connection);
}
});
}
connect(&m_process, &LoggedProcess::log, this, &LauncherPartLaunch::logLines);

View File

@ -82,8 +82,8 @@ auto Resource::name() const -> QString
static void removeThePrefix(QString& string)
{
QRegularExpression regex(QStringLiteral("^(?:the|teh) +"), QRegularExpression::CaseInsensitiveOption);
string.remove(regex);
static const QRegularExpression s_regex(QStringLiteral("^(?:the|teh) +"), QRegularExpression::CaseInsensitiveOption);
string.remove(s_regex);
string = string.trimmed();
}

View File

@ -3,8 +3,6 @@
#include <QCoreApplication>
#include <QDebug>
#include <QMap>
#include <QRegularExpression>
#include "MTPixmapCache.h"
#include "Version.h"

View File

@ -22,8 +22,6 @@
#include "ShaderPack.h"
#include <QRegularExpression>
void ShaderPack::setPackFormat(ShaderPackFormat new_format)
{
QMutexLocker locker(&m_data_lock);

View File

@ -21,8 +21,6 @@
#include <QDebug>
#include <QMap>
#include <QRegularExpression>
#include "MTPixmapCache.h"
#include "minecraft/mod/tasks/LocalTexturePackParseTask.h"

View File

@ -16,7 +16,7 @@
#include "minecraft/mod/ModDetails.h"
#include "settings/INIFile.h"
static QRegularExpression newlineRegex("\r\n|\n|\r");
static const QRegularExpression s_newlineRegex("\r\n|\n|\r");
namespace ModUtils {
@ -494,7 +494,7 @@ bool processZIP(Mod& mod, [[maybe_unused]] ProcessingLevel level)
}
// quick and dirty line-by-line parser
auto manifestLines = QString(file.readAll()).split(newlineRegex);
auto manifestLines = QString(file.readAll()).split(s_newlineRegex);
QString manifestVersion = "";
for (auto& line : manifestLines) {
if (line.startsWith("Implementation-Version: ", Qt::CaseInsensitive)) {

View File

@ -43,5 +43,6 @@ void ATLauncher::loadIndexedPack(ATLauncher::IndexedPack& m, QJsonObject& obj)
m.system = Json::ensureBoolean(obj, QString("system"), false);
m.description = Json::ensureString(obj, "description", "");
m.safeName = Json::requireString(obj, "name").replace(QRegularExpression("[^A-Za-z0-9]"), "").toLower() + ".png";
static const QRegularExpression s_regex("[^A-Za-z0-9]");
m.safeName = Json::requireString(obj, "name").replace(s_regex, "").toLower() + ".png";
}

View File

@ -69,7 +69,8 @@ PackInstallTask::PackInstallTask(UserInteractionSupport* support, QString packNa
{
m_support = support;
m_pack_name = packName;
m_pack_safe_name = packName.replace(QRegularExpression("[^A-Za-z0-9]"), "");
static const QRegularExpression s_regex("[^A-Za-z0-9]");
m_pack_safe_name = packName.replace(s_regex, "");
m_version_name = version;
m_install_mode = installMode;
}
@ -938,7 +939,8 @@ bool PackInstallTask::extractMods(const QMap<QString, VersionMod>& toExtract,
QString folderToExtract = "";
if (mod.type == ModType::Extract) {
folderToExtract = mod.extractFolder;
folderToExtract.remove(QRegularExpression("^/"));
static const QRegularExpression s_regex("^/");
folderToExtract.remove(s_regex);
}
qDebug() << "Extracting " + mod.file + " to " + extractToDir;

View File

@ -391,7 +391,8 @@ bool FlameCreationTask::createInstance()
// Hack to correct some 'special sauce'...
if (mcVersion.endsWith('.')) {
mcVersion.remove(QRegularExpression("[.]+$"));
static const QRegularExpression s_regex("[.]+$");
mcVersion.remove(s_regex);
logWarning(tr("Mysterious trailing dots removed from Minecraft version while importing pack."));
}

View File

@ -98,8 +98,8 @@ Task::State MetaCacheSink::finalizeCache(QNetworkReply& reply)
auto cache_control_header = reply.rawHeader("Cache-Control");
qCDebug(taskMetaCacheLogC) << "Parsing 'Cache-Control' header with" << cache_control_header;
QRegularExpression max_age_expr("max-age=([0-9]+)");
qint64 max_age = max_age_expr.match(cache_control_header).captured(1).toLongLong();
static const QRegularExpression s_maxAgeExpr("max-age=([0-9]+)");
qint64 max_age = s_maxAgeExpr.match(cache_control_header).captured(1).toLongLong();
m_entry->setMaximumAge(max_age);
} else if (reply.hasRawHeader("Expires")) {

View File

@ -1,7 +1,6 @@
#pragma once
#include <SeparatorPrefixTree.h>
#include <QRegularExpression>
#include "IPathMatcher.h"
class FSTreeMatcher : public IPathMatcher {

View File

@ -1,7 +1,6 @@
#pragma once
#include <SeparatorPrefixTree.h>
#include <QRegularExpression>
#include "IPathMatcher.h"
class MultiMatcher : public IPathMatcher {

View File

@ -12,6 +12,8 @@ class RegexpMatcher : public IPathMatcher {
m_onlyFilenamePart = !regexp.contains('/');
}
RegexpMatcher(const QRegularExpression& regex) : m_regexp(regex) { m_onlyFilenamePart = !regex.pattern().contains('/'); }
RegexpMatcher& caseSensitive(bool cs = true)
{
if (cs) {

View File

@ -2,7 +2,6 @@
//
// SPDX-License-Identifier: GPL-3.0-only
#include <QRegularExpression>
#include "IPathMatcher.h"
class SimplePrefixMatcher : public IPathMatcher {

View File

@ -83,7 +83,8 @@ NewComponentDialog::~NewComponentDialog()
void NewComponentDialog::updateDialogState()
{
auto protoUid = ui->nameTextBox->text().toLower();
protoUid.remove(QRegularExpression("[^a-z]"));
static const QRegularExpression s_removeChars("[^a-z]");
protoUid.remove(s_removeChars);
if (protoUid.isEmpty()) {
ui->uidTextBox->setPlaceholderText(originalPlaceholderText);
} else {

View File

@ -59,9 +59,9 @@ ProfileSetupDialog::ProfileSetupDialog(MinecraftAccountPtr accountToSetup, QWidg
yellowIcon = APPLICATION->getThemedIcon("status-yellow");
badIcon = APPLICATION->getThemedIcon("status-bad");
QRegularExpression permittedNames("[a-zA-Z0-9_]{3,16}");
static const QRegularExpression s_permittedNames("[a-zA-Z0-9_]{3,16}");
auto nameEdit = ui->nameEdit;
nameEdit->setValidator(new QRegularExpressionValidator(permittedNames));
nameEdit->setValidator(new QRegularExpressionValidator(s_permittedNames));
nameEdit->setClearButtonEnabled(true);
validityAction = nameEdit->addAction(yellowIcon, QLineEdit::LeadingPosition);
connect(nameEdit, &QLineEdit::textEdited, this, &ProfileSetupDialog::nameEdited);
@ -268,7 +268,6 @@ void ProfileSetupDialog::setupProfileFinished()
QString errorMessage =
tr("Network Error: %1\nHTTP Status: %2").arg(m_profile_task->errorString(), QString::number(m_profile_task->replyStatusCode()));
if (parsedError.fullyParsed) {
errorMessage += "Path: " + parsedError.path + "\n";
errorMessage += "Error: " + parsedError.error + "\n";

View File

@ -59,10 +59,10 @@ APIPage::APIPage(QWidget* parent) : QWidget(parent), ui(new Ui::APIPage)
int comboBoxEntries[] = { PasteUpload::PasteType::Mclogs, PasteUpload::PasteType::NullPointer, PasteUpload::PasteType::PasteGG,
PasteUpload::PasteType::Hastebin };
static QRegularExpression validUrlRegExp("https?://.+");
static QRegularExpression validMSAClientID(
static const QRegularExpression s_validUrlRegExp("https?://.+");
static const QRegularExpression s_validMSAClientID(
QRegularExpression::anchoredPattern("[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}"));
static QRegularExpression validFlameKey(QRegularExpression::anchoredPattern("\\$2[ayb]\\$.{56}"));
static const QRegularExpression s_validFlameKey(QRegularExpression::anchoredPattern("\\$2[ayb]\\$.{56}"));
ui->setupUi(this);
@ -75,10 +75,10 @@ APIPage::APIPage(QWidget* parent) : QWidget(parent), ui(new Ui::APIPage)
// This function needs to be called even when the ComboBox's index is still in its default state.
updateBaseURLPlaceholder(ui->pasteTypeComboBox->currentIndex());
// NOTE: this allows http://, but we replace that with https later anyway
ui->metaURL->setValidator(new QRegularExpressionValidator(validUrlRegExp, ui->metaURL));
ui->baseURLEntry->setValidator(new QRegularExpressionValidator(validUrlRegExp, ui->baseURLEntry));
ui->msaClientID->setValidator(new QRegularExpressionValidator(validMSAClientID, ui->msaClientID));
ui->flameKey->setValidator(new QRegularExpressionValidator(validFlameKey, ui->flameKey));
ui->metaURL->setValidator(new QRegularExpressionValidator(s_validUrlRegExp, ui->metaURL));
ui->baseURLEntry->setValidator(new QRegularExpressionValidator(s_validUrlRegExp, ui->baseURLEntry));
ui->msaClientID->setValidator(new QRegularExpressionValidator(s_validMSAClientID, ui->msaClientID));
ui->flameKey->setValidator(new QRegularExpressionValidator(s_validFlameKey, ui->flameKey));
ui->metaURL->setPlaceholderText(BuildConfig.META_URL);
ui->userAgentLineEdit->setPlaceholderText(BuildConfig.USER_AGENT);

View File

@ -150,7 +150,8 @@ class FilterModel : public QIdentityProxyModel {
return QVariant();
if (role == Qt::DisplayRole || role == Qt::EditRole) {
QVariant result = sourceModel()->data(mapToSource(proxyIndex), role);
return result.toString().remove(QRegularExpression("\\.png$"));
static const QRegularExpression s_removeChars("\\.png$");
return result.toString().remove(s_removeChars);
}
if (role == Qt::DecorationRole) {
QVariant result = sourceModel()->data(mapToSource(proxyIndex), QFileSystemModel::FilePathRole);

View File

@ -721,8 +721,8 @@ QList<GitHubReleaseAsset> PrismUpdaterApp::validReleaseArtifacts(const GitHubRel
for_platform = false;
}
auto qt_pattern = QRegularExpression("-qt(\\d+)");
auto qt_match = qt_pattern.match(asset_name);
static const QRegularExpression s_qtPattern("-qt(\\d+)");
auto qt_match = s_qtPattern.match(asset_name);
if (for_platform && qt_match.hasMatch()) {
if (platform_qt_ver.isEmpty() || platform_qt_ver.toInt() != qt_match.captured(1).toInt()) {
qDebug() << "Rejecting" << asset.name << "because it is not for the correct qt version" << platform_qt_ver.toInt() << "vs"
@ -1018,12 +1018,11 @@ void PrismUpdaterApp::backupAppDir()
logUpdate("manifest.txt empty or missing. making best guess at files to back up.");
}
logUpdate(tr("Backing up:\n %1").arg(file_list.join(",\n ")));
static const QRegularExpression s_replaceRegex("[" + QRegularExpression::escape("\\/:*?\"<>|") + "]");
auto app_dir = QDir(m_rootPath);
auto backup_dir = FS::PathCombine(
app_dir.absolutePath(),
QStringLiteral("backup_") +
QString(m_prismVersion).replace(QRegularExpression("[" + QRegularExpression::escape("\\/:*?\"<>|") + "]"), QString("_")) + "-" +
m_prismGitCommit);
auto backup_dir =
FS::PathCombine(app_dir.absolutePath(),
QStringLiteral("backup_") + QString(m_prismVersion).replace(s_replaceRegex, QString("_")) + "-" + m_prismGitCommit);
FS::ensureFolderPathExists(backup_dir);
auto backup_marker_path = FS::PathCombine(m_dataPath, ".prism_launcher_update_backup_path.txt");
FS::write(backup_marker_path, backup_dir.toUtf8());

View File

@ -72,7 +72,8 @@ ApplicationId ApplicationId::fromTraditionalApp()
protoId = protoId.toLower();
#endif
auto prefix = protoId.section(QLatin1Char('/'), -1);
prefix.remove(QRegularExpression("[^a-zA-Z]"));
static const QRegularExpression s_removeChars("[^a-zA-Z]");
prefix.remove(s_removeChars);
prefix.truncate(6);
QByteArray idc = protoId.toUtf8();
quint16 idNum = qChecksum(idc);

View File

@ -8,19 +8,19 @@
#include <QRegularExpressionMatch>
#include <QRegularExpressionMatchIterator>
QRegularExpression ruleset_re = QRegularExpression(R"([#.]?(@?\w+?)\s*\{(.*?)\})", QRegularExpression::DotMatchesEverythingOption);
QRegularExpression rule_re = QRegularExpression(R"((\S+?)\s*:\s*(?:\"(.*?)(?<!\\)\"|'(.*?)(?<!\\)'|(\S+?))\s*(?:;|$))");
static const QRegularExpression s_rulesetRe(R"([#.]?(@?\w+?)\s*\{(.*?)\})", QRegularExpression::DotMatchesEverythingOption);
static const QRegularExpression s_ruleRe(R"((\S+?)\s*:\s*(?:\"(.*?)(?<!\\)\"|'(.*?)(?<!\\)'|(\S+?))\s*(?:;|$))");
QDCSS::QDCSS(QString s)
{
// not much error handling over here...
// the original java code used indeces returned by the matcher for them, but QRE does not expose those
QRegularExpressionMatchIterator ruleset_i = ruleset_re.globalMatch(s);
QRegularExpressionMatchIterator ruleset_i = s_rulesetRe.globalMatch(s);
while (ruleset_i.hasNext()) {
QRegularExpressionMatch ruleset = ruleset_i.next();
QString selector = ruleset.captured(1);
QString rules = ruleset.captured(2);
QRegularExpressionMatchIterator rule_i = rule_re.globalMatch(rules);
QRegularExpressionMatchIterator rule_i = s_ruleRe.globalMatch(rules);
while (rule_i.hasNext()) {
QRegularExpressionMatch rule = rule_i.next();
QString property = rule.captured(1);

View File

@ -40,6 +40,8 @@ SOFTWARE.
#include <functional>
static const QRegularExpression s_distoSplitRegex("\\s+");
Sys::DistributionInfo Sys::read_os_release()
{
Sys::DistributionInfo out;
@ -145,7 +147,7 @@ void Sys::lsb_postprocess(Sys::LsbInfo& lsb, Sys::DistributionInfo& out)
vers = lsb.codename;
} else {
// ubuntu, debian, gentoo, scientific, slackware, ... ?
auto parts = dist.split(QRegularExpression("\\s+"), Qt::SkipEmptyParts);
auto parts = dist.split(s_distoSplitRegex, Qt::SkipEmptyParts);
if (parts.size()) {
dist = parts[0];
}
@ -178,7 +180,7 @@ QString Sys::_extract_distribution(const QString& x)
if (release.startsWith("suse linux enterprise")) {
return "sles";
}
QStringList list = release.split(QRegularExpression("\\s+"), Qt::SkipEmptyParts);
QStringList list = release.split(s_distoSplitRegex, Qt::SkipEmptyParts);
if (list.size()) {
return list[0];
}
@ -187,11 +189,11 @@ QString Sys::_extract_distribution(const QString& x)
QString Sys::_extract_version(const QString& x)
{
QRegularExpression versionish_string(QRegularExpression::anchoredPattern("\\d+(?:\\.\\d+)*$"));
QStringList list = x.split(QRegularExpression("\\s+"), Qt::SkipEmptyParts);
static const QRegularExpression s_versionishString(QRegularExpression::anchoredPattern("\\d+(?:\\.\\d+)*$"));
QStringList list = x.split(s_distoSplitRegex, Qt::SkipEmptyParts);
for (int i = list.size() - 1; i >= 0; --i) {
QString chunk = list[i];
if (versionish_string.match(chunk).hasMatch()) {
if (s_versionishString.match(chunk).hasMatch()) {
return chunk;
}
}