/*** Olive - Non-Linear Video Editor Copyright (C) 2019 Olive Team This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ***/ #include "commandlineparser.h" #include #include CommandLineParser::~CommandLineParser() { foreach (const KnownOption& o, options_) { delete o.option; } foreach (const KnownPositionalArgument& a, positional_args_) { delete a.option; } } const CommandLineParser::Option *CommandLineParser::AddOption(const QStringList &strings, const QString &description) { Option* o = new Option(); options_.append({strings, description, o}); return o; } const CommandLineParser::PositionalArgument *CommandLineParser::AddPositionalArgument(const QString &name, const QString &description, bool required) { PositionalArgument* a = new PositionalArgument(); positional_args_.append({name, description, a, required}); return a; } void CommandLineParser::Process(int argc, char **argv) { int positional_index = 0; for (int i=1; iSet(); matched_known = true; goto found_flag; } } } found_flag: if (!matched_known) { qWarning() << "Unknown parameter:" << argv[i]; } } else { // Must be a positional flag if (positional_index < positional_args_.size()) { positional_args_[positional_index].option->SetSetting(argv[i]); positional_index++; } else { qWarning() << "Unknown parameter:" << argv[i]; } } } } void CommandLineParser::PrintHelp(const char* filename) { printf("%s %s\n", QCoreApplication::applicationName().toUtf8().constData(), QCoreApplication::applicationVersion().toUtf8().constData()); printf("Copyright (C) 2018-2020 Olive Team\n"); QString positional_args; for (int i=0; i 0) { positional_args.append(' '); } positional_args.append('['); positional_args.append(positional_args_.at(i).name); positional_args.append(']'); } const char* basename; #ifdef Q_OS_WINDOWS basename = strrchr(filename, '\\'); if (!basename) { basename = strrchr(filename, '/'); } #else basename = strrchr(filename, '/'); #endif printf("Usage: %s [options] %s\n\n", basename + 1, positional_args.toUtf8().constData()); foreach (const KnownOption& o, options_) { QString all_args; for (int i=0; i 0) { all_args.append(QStringLiteral(", ")); } const QString& this_arg = o.args.at(i); all_args.append('-'); all_args.append(this_arg); } printf(" %s\n", all_args.toUtf8().constData()); printf(" %s\n\n", o.description.toUtf8().constData()); } printf("\n"); }