| // Common/CommandLineParser.h |
| |
| #ifndef ZIP7_INC_COMMON_COMMAND_LINE_PARSER_H |
| #define ZIP7_INC_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, |
| kMinus, |
| kString, |
| kChar |
| }; |
| } |
| |
| struct CSwitchForm |
| { |
| const char *Key; |
| Byte Type; |
| bool Multi; |
| Byte MinLen; |
| // int MaxLen; |
| const char *PostCharSet; |
| }; |
| |
| struct CSwitchResult |
| { |
| bool ThereIs; |
| bool WithMinus; |
| int PostCharIndex; |
| UStringVector PostStrings; |
| |
| CSwitchResult(): ThereIs(false) {} |
| }; |
| |
| class CParser |
| { |
| CSwitchResult *_switches; |
| |
| bool ParseString(const UString &s, const CSwitchForm *switchForms, unsigned numSwitches); |
| public: |
| UStringVector NonSwitchStrings; |
| int StopSwitchIndex; // NonSwitchStrings[StopSwitchIndex+] are after "--" |
| AString ErrorMessage; |
| UString ErrorLine; |
| |
| CParser(); |
| ~CParser(); |
| bool ParseStrings(const CSwitchForm *switchForms, unsigned numSwitches, const UStringVector &commandStrings); |
| const CSwitchResult& operator[](unsigned index) const { return _switches[index]; } |
| }; |
| |
| } |
| |
| #endif |