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 8namespace NCommandLineParser { 9 10bool SplitCommandLine(const UString &src, UString &dest1, UString &dest2); 11void SplitCommandLine(const UString &s, UStringVector &parts); 12 13namespace NSwitchType { 14 enum EEnum 15 { 16 kSimple, 17 kPostMinus, 18 kLimitedPostString, 19 kUnLimitedPostString, 20 kPostChar 21 }; 22} 23 24struct 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 34struct CSwitchResult 35{ 36 bool ThereIs; 37 bool WithMinus; 38 UStringVector PostStrings; 39 int PostCharIndex; 40 CSwitchResult(): ThereIs(false) {}; 41}; 42 43class CParser 44{ 45 int _numSwitches; 46 CSwitchResult *_switches; 47 bool ParseString(const UString &s, const CSwitchForm *switchForms); 48public: 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 60struct 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 67int ParseCommand(int numCommandForms, const CCommandForm *commandForms, 68 const UString &commandString, UString &postString); 69 70} 71 72#endif 73