Upload 2.0.2
[physicsfs] / lzma / CPP / Common / CommandLineParser.h
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