39 #ifndef __OPENFLUID_UTILS_COMMANDLINEPARSER_HPP__    40 #define __OPENFLUID_UTILS_COMMANDLINEPARSER_HPP__    57     std::string m_LongName;
    59     std::string m_ShortName;
    65     std::string m_HelpText;
    73       m_ValueRequired(false),m_Active(false)
    89                       const std::string& HelpText, 
bool ValueRequired = 
false):
    90       m_LongName(LongName),m_ShortName(ShortName), m_ValueRequired(ValueRequired), m_HelpText(HelpText),
   175       return m_ValueRequired; 
   191       if ((!m_ValueRequired) || (m_ValueRequired && !m_Value.empty()))
   228     std::string m_HelpText;
   230     std::map<std::string,CommandLineOption> m_Options;
   232     std::map<std::string,CommandLineOption*> m_ShortOptions;
   251       m_Name(Name), m_HelpText(HelpText)
   291     const std::map<std::string,CommandLineOption>& 
options()
   327       auto it = m_Options.find(LongName);
   329       if (it == m_Options.end())
   334       (*it).second.activate(Value);
   335       return (*it).second.isActive();
   350       auto it = m_ShortOptions.find(ShortName);
   352       if (it == m_ShortOptions.end())
   357       return (*it).second->getLongName();
   372       return (m_Options.find(LongName) != m_Options.end());
   387       auto it = m_Options.find(LongName);
   389       if (it == m_Options.end())
   394       return (*it).second.isValueRequired();
   409       auto it = m_Options.find(LongName);
   411       return (it != m_Options.end() && (*it).second.isActive());
   426       auto it = m_Options.find(LongName);
   428       if (it == m_Options.end())
   433       return ((*it).second.getValue());
   446       for (
auto& Opt : m_Options)
   473     std::string m_ProgramName;
   475     std::string m_HelpText;
   477     std::map<std::string,CommandLineCommand> m_Commands;
   479     std::string m_ActiveCommand;
   481     std::vector<std::string> m_ExtraArgs;
   483     std::string m_ParsingMessage;
   507       m_ProgramName(ProgramName), m_HelpText(HelpText), m_HelpAsked(false)
   551       return m_ProgramName; 
   565       return m_ParsingMessage; 
   579       return m_ActiveCommand; 
   594       return m_Commands.at(Name);
   608       m_Commands[Command.
getName()] = Command;
   622       m_Commands[
""].addOption(Option);
   635     bool parse(std::list<std::string> ArgValues)
   639       while (!ArgValues.empty())
   641         std::string Arg = ArgValues.front();
   642         ArgValues.pop_front();
   647           if (m_ActiveCommand.empty())
   649             m_ActiveCommand = Arg;
   653             m_ExtraArgs.push_back(Arg);
   661           auto it = m_Commands.find(m_ActiveCommand);
   662           if (it == m_Commands.end())
   664             m_ParsingMessage = 
"unknown \""+ m_ActiveCommand + 
"\" command";
   668           if (Arg == 
"-h" || Arg == 
"--help")
   672           else if (Arg.size() < 2)
   674             m_ParsingMessage = 
"wrong format for option \"" + Arg + 
"\"";
   679             std::string LongOptName;
   680             std::string OptValue;
   681             bool IsFromShort = 
false;
   687                 m_ParsingMessage = 
"wrong format for short option \"" + Arg + 
"\"";
   692               LongOptName = m_Commands[m_ActiveCommand].getOptionNameFromShortName(Arg.substr(1,1));
   698               std::string TmpName = Arg.substr(2,Arg.size()-2);
   700               std::string::size_type EqualPos = TmpName.find(
"=");
   702               if (EqualPos != std::string::npos)
   704                 LongOptName = TmpName.substr(0,EqualPos);
   705                 OptValue = TmpName.substr(EqualPos+1,TmpName.size()-EqualPos-1);
   709                 LongOptName = TmpName;
   713             if (!m_Commands[m_ActiveCommand].isOptionExists(LongOptName))
   716               m_ParsingMessage = 
"unknown option \"" + Arg + 
"\"";
   717               if (!m_ActiveCommand.empty())
   719                 m_ParsingMessage += 
" for command \"" + m_ActiveCommand + 
"\"";
   724             if (m_Commands[m_ActiveCommand].isOptionRequiresValue(LongOptName))
   726               if (IsFromShort && !ArgValues.empty())
   728                 OptValue = ArgValues.front();
   729                 ArgValues.pop_front();
   732               if (OptValue.empty())
   734                 m_ParsingMessage = 
"missing value for option \"" + Arg + 
"\"";
   739             if (!m_Commands[m_ActiveCommand].activateOption(LongOptName,OptValue))
   742               m_ParsingMessage = 
"unknown error for option \"" + Arg + 
"\"";
   764       std::list<std::string> ArgValues;
   766       for (
int i=1; i< ArgC; i++)
   768         ArgValues.push_back(std::string(ArgV[i]));
   771       return parse(ArgValues);
   784       m_ActiveCommand.clear();
   785       m_ParsingMessage.clear();
   788       for (
auto& Cmd : m_Commands)
   819       std::string m_CmdName = m_ActiveCommand;
   821       if (m_CmdName.empty())
   823         m_CmdName = 
"[<command>]";
   826       OutStm << 
"Usage : " << m_ProgramName << 
" " << m_CmdName << 
" [<options>] [<args>]\n";
   828       if (m_ActiveCommand.empty())
   830         OutStm << 
"\nAvailable commands:\n";
   832         for (
auto& Cmd : m_Commands)
   834           if (!Cmd.first.empty())
   836             OutStm << 
"  " << Cmd.first << 
" : " << Cmd.second.getHelpText() << 
"\n";
   841       if (!m_Commands[m_ActiveCommand].
getHelpText().empty())
   843         OutStm << 
"\n" << m_Commands[m_ActiveCommand].getHelpText() << 
"\n";
   846       OutStm << 
"\nAvailable options:\n";
   847       OutStm << 
"  --help,-h : display this help message\n";
   849       for (
auto& Opt : m_Commands[m_ActiveCommand].options())
   851         OutStm << 
"  --" << Opt.second.getLongName();
   852         if (Opt.second.isValueRequired())
   857         if (!Opt.second.getShortName().empty())
   859           OutStm << 
", -" << Opt.second.getShortName();
   860           if (Opt.second.isValueRequired())
   866         OutStm << 
" : " << Opt.second.getHelpText() << 
"\n";
   881       for (
auto& Cmd : m_Commands)
   883         if (!Cmd.first.empty())
   885           if (Cmd.first == m_ActiveCommand)
   894           OutStm << 
" " << Cmd.first << 
" : " << Cmd.second.getHelpText() << 
"\n";
   896           for (
auto& Opt : Cmd.second.options())
   900             if (Opt.second.isActive())
   908             OutStm << 
" " << Opt.first;
   910             if (!Opt.second.getShortName().empty())
   912               OutStm << 
"," << Opt.second.getShortName();
   915             if (Opt.second.isValueRequired())
   917               OutStm << 
"[" << Opt.second.getValue() << 
"]";
   920             OutStm << 
" : " << Opt.second.getHelpText() << 
"\n";
   926       if (!m_ExtraArgs.empty())
   928         OutStm << 
"Extra arguments :";
   930         for (
auto& Arg : m_ExtraArgs)
   932           OutStm << 
" " << Arg;
 std::string getActiveCommand() const
Definition: CommandLineParser.hpp:577
bool isOptionRequiresValue(const std::string &LongName) const
Definition: CommandLineParser.hpp:385
void addCommand(const CommandLineCommand &Command)
Definition: CommandLineParser.hpp:606
bool parse(std::list< std::string > ArgValues)
Definition: CommandLineParser.hpp:635
void reset()
Definition: CommandLineParser.hpp:444
void printState(std::ostream &OutStm)
Definition: CommandLineParser.hpp:879
const CommandLineCommand & command(const std::string &Name) const
Definition: CommandLineParser.hpp:592
void printHelp(std::ostream &OutStm)
Definition: CommandLineParser.hpp:817
Definition: CommandLineParser.hpp:53
std::string getShortName() const
Definition: CommandLineParser.hpp:131
Class for management of command line arguments. 
Definition: CommandLineParser.hpp:469
void activate(const std::string &Value="")
Definition: CommandLineParser.hpp:187
std::string getOptionValue(const std::string &LongName) const
Definition: CommandLineParser.hpp:424
bool isOptionExists(const std::string &LongName) const
Definition: CommandLineParser.hpp:370
void reset()
Definition: CommandLineParser.hpp:782
void reset()
Definition: CommandLineParser.hpp:209
bool activateOption(const std::string &LongName, const std::string &Value="")
Definition: CommandLineParser.hpp:325
const std::map< std::string, CommandLineOption > & options()
Definition: CommandLineParser.hpp:291
bool isOptionActive(const std::string &LongName) const
Definition: CommandLineParser.hpp:407
const std::vector< std::string > & extraArgs() const
Definition: CommandLineParser.hpp:521
CommandLineOption(const std::string &LongName, const std::string &ShortName, const std::string &HelpText, bool ValueRequired=false)
Definition: CommandLineParser.hpp:88
CommandLineCommand(const std::string &Name, const std::string &HelpText)
Definition: CommandLineParser.hpp:250
Definition: ApplicationException.hpp:47
std::string getHelpText() const
Definition: CommandLineParser.hpp:535
std::string getHelpText() const
Definition: CommandLineParser.hpp:103
CommandLineParser()
Definition: CommandLineParser.hpp:490
CommandLineParser(const std::string &ProgramName, const std::string &HelpText)
Definition: CommandLineParser.hpp:506
CommandLineCommand()
Definition: CommandLineParser.hpp:237
void addOption(const CommandLineOption &Option)
Definition: CommandLineParser.hpp:620
std::string getValue() const
Definition: CommandLineParser.hpp:145
std::string getName() const
Definition: CommandLineParser.hpp:277
std::string getLongName() const
Definition: CommandLineParser.hpp:117
std::string getOptionNameFromShortName(const std::string &ShortName) const
Definition: CommandLineParser.hpp:348
Definition: CommandLineParser.hpp:222
bool parse(int ArgC, char **ArgV)
Definition: CommandLineParser.hpp:762
bool isHelpAsked()
Definition: CommandLineParser.hpp:803
CommandLineOption()
Definition: CommandLineParser.hpp:72
bool isValueRequired() const
Definition: CommandLineParser.hpp:173
std::string getParsingMessage() const
Definition: CommandLineParser.hpp:563
bool isActive() const
Definition: CommandLineParser.hpp:159
void addOption(const CommandLineOption &Option)
Definition: CommandLineParser.hpp:305
std::string getHelpText() const
Definition: CommandLineParser.hpp:263
std::string getProgramName() const
Definition: CommandLineParser.hpp:549