1using System;
2using System.Collections.Specialized;
3using System.Text.RegularExpressions;
4
5namespace CommandLine
6{
7 /// <summary>
8 /// Arguments class
9 /// </summary>
10 public class Arguments
11 {
12 // Variables
13 private StringDictionary Parameters;
14
15 // Constructor
16 public Arguments(string[] Args)
17 {
18 Parameters = new StringDictionary();
19 Regex Spliter = new Regex(@"^-{1,2}|^/|=|:", RegexOptions.IgnoreCase | RegexOptions.Compiled);
20 Regex Remover = new Regex(@"^['""]?(.*?)['""]?$", RegexOptions.IgnoreCase | RegexOptions.Compiled);
21 string Parameter = null;
22 string[] Parts;
23
24 // Valid parameters forms:
25 // {-,/,--}param{ ,=,:}((",')value(",'))
26 // Examples: -param1 value1 --param2 /param3:"Test-:-work" /param4=happy -param5 '--=nice=--'
27 foreach (string Txt in Args)
28 {
29 // Look for new parameters (-,/ or --) and a possible enclosed value (=,:)
30 Parts = Spliter.Split(Txt, 3);
31 switch (Parts.Length)
32 {
33 // Found a value (for the last parameter found (space separator))
34 case 1:
35 if (Parameter != null)
36 {
37 if (!Parameters.ContainsKey(Parameter))
38 {
39 Parts[0] = Remover.Replace(Parts[0], "$1");
40 Parameters.Add(Parameter, Parts[0]);
41 }
42 Parameter = null;
43 }
44 // else Error: no parameter waiting for a value (skipped)
45 break;
46 // Found just a parameter
47 case 2:
48 // The last parameter is still waiting. With no value, set it to true.
49 if (Parameter != null)
50 {
51 if (!Parameters.ContainsKey(Parameter)) Parameters.Add(Parameter, "true");
52 }
53 Parameter = Parts[1];
54 break;
55 // Parameter with enclosed value
56 case 3:
57 // The last parameter is still waiting. With no value, set it to true.
58 if (Parameter != null)
59 {
60 if (!Parameters.ContainsKey(Parameter)) Parameters.Add(Parameter, "true");
61 }
62 Parameter = Parts[1];
63 // Remove possible enclosing characters (",')
64 if (!Parameters.ContainsKey(Parameter))
65 {
66 Parts[2] = Remover.Replace(Parts[2], "$1");
67 Parameters.Add(Parameter, Parts[2]);
68 }
69 Parameter = null;
70 break;
71 }
72 }
73 // In case a parameter is still waiting
74 if (Parameter != null)
75 {
76 if (!Parameters.ContainsKey(Parameter)) Parameters.Add(Parameter, "true");
77 }
78 }
79
80 // Retrieve a parameter value if it exists
81 public string this[string Param]
82 {
83 get
84 {
85 return (Parameters[Param]);
86 }
87 }
88
89 }//end class
90}//end namespace