bool QDesigner::parseCommandLineArgs(QStringList &fileNames, QString &resourceDir) { const QStringList args = arguments(); const QStringList::const_iterator acend = args.constEnd(); QStringList::const_iterator it = args.constBegin(); for (++it; it != acend; ++it) { const QString &argument = *it; do { // Arguments if (!argument.startsWith(QLatin1Char('-'))) { if (!fileNames.contains(argument)) fileNames.append(argument); break; } // Options if (argument == QStringLiteral("-server")) { m_server = new QDesignerServer(); printf("%d\n", m_server->serverPort()); fflush(stdout); break; } if (argument == QStringLiteral("-client")) { bool ok = true; if (++it == acend) { qWarning("** WARNING The option -client requires an argument"); return false; } const quint16 port = it->toUShort(&ok); if (ok) { m_client = new QDesignerClient(port, this); } else { qWarning("** WARNING Non-numeric argument specified for -client"); return false; } break; } if (argument == QStringLiteral("-resourcedir")) { if (++it == acend) { qWarning("** WARNING The option -resourcedir requires an argument"); return false; } resourceDir = QFile::decodeName(it->toLocal8Bit()); break; } if (argument == QStringLiteral("-enableinternaldynamicproperties")) { QDesignerPropertySheet::setInternalDynamicPropertiesEnabled(true); break; } const QString msg = QString::fromUtf8("** WARNING Unknown option %1").arg(argument); qWarning("%s", qPrintable(msg)); } while (false); } return true; }
static std::ostream& operator<<( std::ostream& stream, const QStringList& list ) { stream << "QStringList("; for( QStringList::const_iterator it = list.begin(); it != list.end(); ++it ) { stream << " " << it->toLocal8Bit().data(); if( it + 1 != list.end() ) stream << ","; } stream << " )"; return stream; }
bool CliParser::init(const QStringList &args) { argsRaw = args; QStringList::const_iterator currentArg; for (currentArg = argsRaw.constBegin(); currentArg != argsRaw.constEnd(); ++currentArg) { if(currentArg->startsWith("--")) { // long QString name; if(currentArg->contains("=")) { // option QStringList tmp = currentArg->mid(2).split("="); name = tmp.at(0); QString value; // this is needed to allow --option="" if(tmp.at(1).isNull()) value = QString(""); else value = tmp.at(1); if(!addLongArg(CliParserArg::CliArgOption, name, value)) return false; } else { // switch name = currentArg->mid(2); if(!addLongArg(CliParserArg::CliArgSwitch, name)) return false; } } else if(currentArg->startsWith("-")) { // short char name; QStringList::const_iterator nextArg = currentArg+1; // if next arg is a short/long option/switch the current arg is one too if(nextArg == argsRaw.constEnd() || nextArg->startsWith("-")) { // switch for (int i = 0; i < currentArg->mid(1).toAscii().size(); i++) { name = currentArg->mid(1).toAscii().at(i); if(!addShortArg(CliParserArg::CliArgSwitch, name)) return false; } } // if next arg is is no option/switch it's an argument to a shortoption else { // option // short options are not freely mixable with other shortargs if(currentArg->mid(1).toAscii().size() > 1) { qWarning() << "Warning: Shortoptions may not be combined with other shortoptions or switches"; return false; } QString value; bool skipNext = false; if(nextArg != argsRaw.constEnd()) { value = nextArg->toLocal8Bit(); skipNext = true; } else value = currentArg->toLocal8Bit(); name = currentArg->mid(1).toAscii().at(0); // we took one argument as argument to an option so skip it next time if(skipNext) currentArg++; if(!addShortArg(CliParserArg::CliArgOption, name, value)) return false; } } else { // we don't support plain arguments without -/-- if(currentArg->toLatin1() != argsRaw.at(0)) return false; } } return true; }