mirror of
https://github.com/fergalmoran/flameshot.git
synced 2025-12-30 13:49:48 +00:00
closes: #1374 . Use SPDX short-form identifiers instead of lengthy copyright header to document per-file license and copyright. This commit updates all files under src/ directory where applicable as well as org.flameshot.Flameshot.metainfo.xml.
80 lines
2.5 KiB
C++
80 lines
2.5 KiB
C++
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors
|
|
|
|
#pragma once
|
|
|
|
#include "src/cli/commandargument.h"
|
|
#include "src/cli/commandoption.h"
|
|
#include <QMap>
|
|
|
|
class CommandLineParser
|
|
{
|
|
public:
|
|
CommandLineParser();
|
|
|
|
bool parse(const QStringList& args);
|
|
|
|
CommandArgument rootArgument() const { return CommandArgument(); }
|
|
|
|
CommandOption addVersionOption();
|
|
CommandOption addHelpOption();
|
|
|
|
bool AddArgument(const CommandArgument& arg,
|
|
const CommandArgument& parent = CommandArgument());
|
|
|
|
bool AddOption(const CommandOption& option,
|
|
const CommandArgument& parent = CommandArgument());
|
|
|
|
bool AddOptions(const QList<CommandOption>& options,
|
|
const CommandArgument& parent = CommandArgument());
|
|
|
|
void setGeneralErrorMessage(const QString& msg);
|
|
void setDescription(const QString& description);
|
|
|
|
bool isSet(const CommandArgument& arg) const;
|
|
bool isSet(const CommandOption& option) const;
|
|
QString value(const CommandOption& option) const;
|
|
|
|
private:
|
|
bool m_withHelp = false;
|
|
bool m_withVersion = false;
|
|
QString m_description;
|
|
QString m_generalErrorMessage;
|
|
|
|
struct Node
|
|
{
|
|
explicit Node(const CommandArgument& arg)
|
|
: argument(arg)
|
|
{}
|
|
Node() {}
|
|
bool operator==(const Node& n) const
|
|
{
|
|
return argument == n.argument && options == n.options &&
|
|
subNodes == n.subNodes;
|
|
}
|
|
CommandArgument argument;
|
|
QList<CommandOption> options;
|
|
QList<Node> subNodes;
|
|
};
|
|
|
|
Node m_parseTree;
|
|
QList<CommandOption> m_foundOptions;
|
|
QList<CommandArgument> m_foundArgs;
|
|
|
|
// helper functions
|
|
void printVersion();
|
|
void printHelp(QStringList args, const Node* node);
|
|
Node* findParent(const CommandArgument& parent);
|
|
Node* recursiveParentSearch(const CommandArgument& parent,
|
|
Node& node) const;
|
|
bool processIfOptionIsHelp(const QStringList& args,
|
|
QStringList::const_iterator& actualIt,
|
|
Node*& actualNode);
|
|
bool processArgs(const QStringList& args,
|
|
QStringList::const_iterator& actualIt,
|
|
Node*& actualNode);
|
|
bool processOptions(const QStringList& args,
|
|
QStringList::const_iterator& actualIt,
|
|
Node* const actualNode);
|
|
};
|