// Common/CommandLineParser.h | |
#ifndef __COMMON_COMMAND_LINE_PARSER_H | |
#define __COMMON_COMMAND_LINE_PARSER_H | |
#include "MyString.h" | |
namespace NCommandLineParser { | |
bool SplitCommandLine(const UString &src, UString &dest1, UString &dest2); | |
void SplitCommandLine(const UString &s, UStringVector &parts); | |
namespace NSwitchType { | |
enum EEnum | |
{ | |
kSimple, | |
kPostMinus, | |
kLimitedPostString, | |
kUnLimitedPostString, | |
kPostChar | |
}; | |
} | |
struct CSwitchForm | |
{ | |
const wchar_t *IDString; | |
NSwitchType::EEnum Type; | |
bool Multi; | |
int MinLen; | |
int MaxLen; | |
const wchar_t *PostCharSet; | |
}; | |
struct CSwitchResult | |
{ | |
bool ThereIs; | |
bool WithMinus; | |
UStringVector PostStrings; | |
int PostCharIndex; | |
CSwitchResult(): ThereIs(false) {}; | |
}; | |
class CParser | |
{ | |
int _numSwitches; | |
CSwitchResult *_switches; | |
bool ParseString(const UString &s, const CSwitchForm *switchForms); | |
public: | |
UStringVector NonSwitchStrings; | |
CParser(int numSwitches); | |
~CParser(); | |
void ParseStrings(const CSwitchForm *switchForms, | |
const UStringVector &commandStrings); | |
const CSwitchResult& operator[](size_t index) const; | |
}; | |
///////////////////////////////// | |
// Command parsing procedures | |
struct CCommandForm | |
{ | |
const wchar_t *IDString; | |
bool PostStringMode; | |
}; | |
// Returns: Index of form and postString; -1, if there is no match | |
int ParseCommand(int numCommandForms, const CCommandForm *commandForms, | |
const UString &commandString, UString &postString); | |
} | |
#endif |