1 // Common/CommandLineParser.h 2 3 #ifndef __COMMON_COMMAND_LINE_PARSER_H 4 #define __COMMON_COMMAND_LINE_PARSER_H 5 6 #include "MyString.h" 7 8 namespace NCommandLineParser { 9 10 bool SplitCommandLine(const UString &src, UString &dest1, UString &dest2); 11 void SplitCommandLine(const UString &s, UStringVector &parts); 12 13 namespace NSwitchType { 14 enum EEnum 15 { 16 kSimple, 17 kPostMinus, 18 kLimitedPostString, 19 kUnLimitedPostString, 20 kPostChar 21 }; 22 } 23 24 struct CSwitchForm 25 { 26 const wchar_t *IDString; 27 NSwitchType::EEnum Type; 28 bool Multi; 29 int MinLen; 30 int MaxLen; 31 const wchar_t *PostCharSet; 32 }; 33 34 struct CSwitchResult 35 { 36 bool ThereIs; 37 bool WithMinus; 38 UStringVector PostStrings; 39 int PostCharIndex; CSwitchResultCSwitchResult40 CSwitchResult(): ThereIs(false) {}; 41 }; 42 43 class CParser 44 { 45 int _numSwitches; 46 CSwitchResult *_switches; 47 bool ParseString(const UString &s, const CSwitchForm *switchForms); 48 public: 49 UStringVector NonSwitchStrings; 50 CParser(int numSwitches); 51 ~CParser(); 52 void ParseStrings(const CSwitchForm *switchForms, 53 const UStringVector &commandStrings); 54 const CSwitchResult& operator[](size_t index) const; 55 }; 56 57 ///////////////////////////////// 58 // Command parsing procedures 59 60 struct CCommandForm 61 { 62 const wchar_t *IDString; 63 bool PostStringMode; 64 }; 65 66 // Returns: Index of form and postString; -1, if there is no match 67 int ParseCommand(int numCommandForms, const CCommandForm *commandForms, 68 const UString &commandString, UString &postString); 69 70 } 71 72 #endif 73