From bfd30713b8ea6cfc7b7f44e8e71fa49fc29eb828 Mon Sep 17 00:00:00 2001 From: Martin Piatka Date: Mon, 8 Mar 2021 13:19:23 +0100 Subject: [PATCH] GUI: Allow escaping of spaces with quotes in argument string --- gui/QT/window/ultragrid_window.cpp | 36 +++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/gui/QT/window/ultragrid_window.cpp b/gui/QT/window/ultragrid_window.cpp index 3a4d87dd8..b9a9bbf47 100644 --- a/gui/QT/window/ultragrid_window.cpp +++ b/gui/QT/window/ultragrid_window.cpp @@ -19,20 +19,36 @@ QString argListToString(const QStringList& argList){ } QStringList argStringToList(const QString& argString){ -#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) - return argString.split(" ", QString::SkipEmptyParts); -#else - return argString.split(" ", Qt::SkipEmptyParts); -#endif + QStringList res; + + QString arg; + bool escaped = false; + for(int i = 0; i < argString.size(); i++){ + if(argString[i] == '"'){ + escaped = !escaped; + continue; + } + if(argString[i] == ' ' && !escaped){ + if(!arg.isEmpty()){ + res.append(std::move(arg)); + arg = ""; + } + } else { + arg.append(argString[i]); + } + } + + if(!arg.isEmpty()){ + res.append(std::move(arg)); + } + + return res; } QStringList argStringToList(const std::string& argString){ -#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) - return QString::fromStdString(argString).split(" ", QString::SkipEmptyParts); -#else - return QString::fromStdString(argString).split(" ", Qt::SkipEmptyParts); -#endif + return argStringToList(QString::fromStdString(argString)); } + } //anonymous namespace UltragridWindow::UltragridWindow(QWidget *parent): QMainWindow(parent){