Home | History | Annotate | Download | only in Common
      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 {
     15   enum EEnum
     16   {
     17     kSimple,
     18     kMinus,
     19     kString,
     20     kChar
     21   };
     22 }
     23 
     24 struct CSwitchForm
     25 {
     26   const char *Key;
     27   Byte Type;
     28   bool Multi;
     29   Byte MinLen;
     30   // int MaxLen;
     31   const char *PostCharSet;
     32 };
     33 
     34 struct CSwitchResult
     35 {
     36   bool ThereIs;
     37   bool WithMinus;
     38   int PostCharIndex;
     39   UStringVector PostStrings;
     40 
     41   CSwitchResult(): ThereIs(false) {};
     42 };
     43 
     44 class CParser
     45 {
     46   CSwitchResult *_switches;
     47 
     48   bool ParseString(const UString &s, const CSwitchForm *switchForms, unsigned numSwitches);
     49 public:
     50   UStringVector NonSwitchStrings;
     51   int StopSwitchIndex;  // NonSwitchStrings[StopSwitchIndex+] are after "--"
     52   AString ErrorMessage;
     53   UString ErrorLine;
     54 
     55   CParser();
     56   ~CParser();
     57   bool ParseStrings(const CSwitchForm *switchForms, unsigned numSwitches, const UStringVector &commandStrings);
     58   const CSwitchResult& operator[](unsigned index) const { return _switches[index]; }
     59 };
     60 
     61 }
     62 
     63 #endif
     64