wibble 1.1
parser.h
Go to the documentation of this file.
1#ifndef WIBBLE_COMMANDLINE_PARSER_H
2#define WIBBLE_COMMANDLINE_PARSER_H
3
5#include <iosfwd>
6
7namespace wibble {
8namespace commandline {
9
13class Parser : public Engine
14{
15protected:
17
19
20public:
21 Parser(const std::string& name,
22 const std::string& usage = std::string(),
23 const std::string& description = std::string(),
24 const std::string& longDescription = std::string())
26
33 bool parse(int argc, const char* argv[])
34 {
35 m_args.clear();
36 for (int i = 1; i < argc; i++)
37 m_args.push_back(argv[i]);
39 return false;
40 }
41
42 bool hasNext() const { return !m_args.empty(); }
43
44 std::string next()
45 {
46 if (m_args.empty())
47 return std::string();
48 std::string res(*m_args.begin());
49 m_args.erase(m_args.begin());
50 return res;
51 }
52};
53
57class StandardParser : public Parser
58{
59protected:
60 std::string m_version;
61
62public:
63 StandardParser(const std::string& appname, const std::string& version) :
65 {
66 helpGroup = addGroup("Help options");
67 help = helpGroup->add<BoolOption>("help", 'h', "help", "",
68 "print commandline help and exit");
69 help->addAlias('?');
70 this->version = helpGroup->add<BoolOption>("version", 0, "version", "",
71 "print the program version and exit");
72 }
73
74 void outputHelp(std::ostream& out);
75
76 bool parse(int argc, const char* argv[]);
77
81};
82
88{
89protected:
91 std::string m_author;
92
93public:
95 const std::string& appname,
96 const std::string& version,
97 int section,
98 const std::string& author) :
100 m_section(section), m_author(author)
101 {
102 manpage = helpGroup->add<StringOption>("manpage", 0, "manpage", "[hooks]",
103 "output the " + name() + " manpage and exit");
104 }
105
106 bool parse(int argc, const char* argv[]);
107
109};
110
116{
117public:
119 const std::string& appname,
120 const std::string& version,
121 int section,
122 const std::string& author) :
124 {
125 helpCommand = addEngine("help", "[command]", "print help information",
126 "With no arguments, print a summary of available commands. "
127 "If given a command name as argument, print detailed informations "
128 "about that command.");
129 }
130
131 bool parse(int argc, const char* argv[]);
132
134};
135
136}
137}
138
139// vim:set ts=4 sw=4:
140#endif
Definition core.h:30
Boolean option.
Definition options.h:135
Parse commandline options.
Definition engine.h:39
Engine * addEngine(const std::string &name, const std::string &usage=std::string(), const std::string &description=std::string(), const std::string &longDescription=std::string())
Create a Engine and add it to this engine as a command.
Definition engine.h:182
ArgList::iterator parseList(ArgList &list)
Parse the list of arguments, starting at the beginning and removing the arguments it successfully par...
Definition engine.h:89
std::string description
Definition engine.h:223
OptionGroup * addGroup(const std::string &description)
Create an OptionGroup and add it to this engine.
Definition engine.h:161
const std::string & name() const
Definition engine.h:107
std::string longDescription
Definition engine.h:224
std::string usage
Definition engine.h:222
Keep track of various wibble::commandline components, and deallocate them at object destruction.
Definition core.h:63
Group related commandline options.
Definition options.h:360
Option * add(Option *o)
Definition options.h:368
void addAlias(char c)
Definition options.h:113
Generic parser for commandline arguments.
Definition parser.h:14
ArgList m_args
Definition parser.h:16
MemoryManager m_manager
Definition parser.h:18
bool hasNext() const
Definition parser.h:42
Parser(const std::string &name, const std::string &usage=std::string(), const std::string &description=std::string(), const std::string &longDescription=std::string())
Definition parser.h:21
bool parse(int argc, const char *argv[])
Parse the commandline.
Definition parser.h:33
std::string next()
Definition parser.h:44
Parser for commandline arguments, with builting help functions and manpage generation,...
Definition parser.h:116
StandardParserWithMandatoryCommand(const std::string &appname, const std::string &version, int section, const std::string &author)
Definition parser.h:118
bool parse(int argc, const char *argv[])
Definition parser.cpp:61
Parser for commandline arguments, with builting help functions and manpage generation.
Definition parser.h:88
bool parse(int argc, const char *argv[])
Definition parser.cpp:44
std::string m_author
Definition parser.h:91
StandardParserWithManpage(const std::string &appname, const std::string &version, int section, const std::string &author)
Definition parser.h:94
StringOption * manpage
Definition parser.h:108
Parser for commandline arguments, with builting help functions.
Definition parser.h:58
StandardParser(const std::string &appname, const std::string &version)
Definition parser.h:63
void outputHelp(std::ostream &out)
Definition parser.cpp:10
OptionGroup * helpGroup
Definition parser.h:78
bool parse(int argc, const char *argv[])
Definition parser.cpp:23
BoolOption * help
Definition parser.h:79
BoolOption * version
Definition parser.h:80
std::string m_version
Definition parser.h:60
Definition amorph.h:17
Definition amorph.h:30