Annotation of elwix/tools/oldlzma/SRC/Common/CommandLineParser.h, revision 1.1.1.1
1.1 misho 1: // Common/CommandLineParser.h
2:
3: #ifndef __COMMON_COMMANDLINEPARSER_H
4: #define __COMMON_COMMANDLINEPARSER_H
5:
6: #include "Common/String.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: struct CCommandSubCharsSet
71: {
72: wchar_t *Chars;
73: bool EmptyAllowed;
74: };
75:
76: // Returns: indices of finded chars; -1 if there is no match
77: bool ParseSubCharsCommand(int numForms, const CCommandSubCharsSet *forms,
78: const UString &commandString, CIntVector &indices);
79:
80: }
81:
82: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>