goldendict-ng/src/parsecmdline.cc

43 lines
1 KiB
C++

#include "parsecmdline.hh"
QStringList parseCommandLine( QString const & commandLine )
{
// Parse arguments. Handle quotes correctly.
QStringList args;
bool openQuote = false;
bool possibleDoubleQuote = false;
bool startNew = true;
for ( QString::const_iterator c = commandLine.begin(), e = commandLine.end(); c != e; ) {
if ( *c == '"' && !possibleDoubleQuote ) {
++c;
if ( !openQuote ) {
openQuote = true;
if ( startNew ) {
args.push_back( QString() );
startNew = false;
}
}
else
possibleDoubleQuote = true;
}
else if ( possibleDoubleQuote && *c != '"' ) {
openQuote = false;
possibleDoubleQuote = false;
}
else if ( *c == ' ' && !openQuote ) {
++c;
startNew = true;
}
else {
if ( startNew ) {
args.push_back( QString() );
startNew = false;
}
args.last().push_back( *c++ );
possibleDoubleQuote = false;
}
}
return args;
}