misc/libphysfs/lzma/CPP/Common/CommandLineParser.h
branchui-scaling
changeset 15283 c4fd2813b127
parent 13390 0135e64c6c66
parent 15279 7ab5cf405686
child 15663 d92eeb468dad
equal deleted inserted replaced
13390:0135e64c6c66 15283:c4fd2813b127
     1 // Common/CommandLineParser.h
       
     2 
       
     3 #ifndef __COMMON_COMMANDLINEPARSER_H
       
     4 #define __COMMON_COMMANDLINEPARSER_H
       
     5 
       
     6 #include "MyString.h"
       
     7 
       
     8 namespace NCommandLineParser {
       
     9 
       
    10 void 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;
       
    40   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   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