| // 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 |