summaryrefslogtreecommitdiff
path: root/getopt/GetOpt.cs
diff options
context:
space:
mode:
authorfcolin2007-02-15 14:28:12 +0000
committerfcolin2007-02-15 14:28:12 +0000
commit9d8c527211edd2bc74fa548f30f69f8d21868fef (patch)
tree01c03a0c7700ed5fce9b63771f1dbfe8bebaf1b3 /getopt/GetOpt.cs
parent9faf3708bd1188de84ccf33c400bfdceefc7fd1b (diff)
downloadivy-csharp-9d8c527211edd2bc74fa548f30f69f8d21868fef.zip
ivy-csharp-9d8c527211edd2bc74fa548f30f69f8d21868fef.tar.gz
ivy-csharp-9d8c527211edd2bc74fa548f30f69f8d21868fef.tar.bz2
ivy-csharp-9d8c527211edd2bc74fa548f30f69f8d21868fef.tar.xz
Parsing des argument ligne de commandes
Diffstat (limited to 'getopt/GetOpt.cs')
-rw-r--r--getopt/GetOpt.cs98
1 files changed, 98 insertions, 0 deletions
diff --git a/getopt/GetOpt.cs b/getopt/GetOpt.cs
new file mode 100644
index 0000000..a158073
--- /dev/null
+++ b/getopt/GetOpt.cs
@@ -0,0 +1,98 @@
+using System;
+using System.Collections.Specialized;
+using System.Collections.Generic;
+
+namespace Gnu
+{
+ /// <summary>
+ /// An implementation of the getopt standard, as used by Gnu GetOpt
+ /// </summary>
+ public class GetOpt
+ {
+ StringCollection m_params = new StringCollection();
+ StringCollection m_extras = new StringCollection();
+ List<Arg> m_args = new List<Arg>();
+
+ public GetOpt(string[] CommandLineArgs, string ParametersDescription)
+ {
+ // Import the string array into the collection
+ foreach(string s in CommandLineArgs)
+ {
+ m_params.Add(s);
+ }
+
+ // Parse the params description
+ for(int i = 0; i < ParametersDescription.Length; i++)
+ {
+ Arg a = new Arg();
+ a.Flag = ParametersDescription[i];
+ if((ParametersDescription.Length > i + 1) && (ParametersDescription[i + 1] == ':'))
+ {
+ a.TakesParameter = true;
+ i++;
+ }
+
+ m_args.Add(a);
+ }
+ }
+
+ public Arg NextArg()
+ {
+ SnarfExtras();
+
+ if(m_params.Count == 0)
+ return null;
+
+ foreach(Arg a in m_args)
+ {
+ if(a.Flag == m_params[0][1] && m_params[0][0] == '-' )
+ {
+ Arg matched = a;
+ try
+ {
+ if(a.TakesParameter)
+ {
+ matched.Parameter = m_params[1];
+ m_params.RemoveAt(1);
+ }
+ }
+ catch(Exception)
+ {
+ }
+
+ m_params.RemoveAt(0);
+ return matched;
+ }
+ }
+
+ if(m_params[0][0] == '-')
+ {
+ Arg tempa = new Arg();
+ tempa.Flag = m_params[0][1];
+ tempa.TakesParameter = false;
+ return tempa;
+ }
+ return null;
+ }
+
+ public StringCollection Extras
+ {
+ get
+ {
+ SnarfExtras();
+
+ return m_extras;
+ }
+ }
+
+ private void SnarfExtras()
+ {
+ // Parameters must start with a hyphen
+ while((m_params.Count > 0) && (m_params[0][0] != '-'))
+ {
+ m_extras.Add(m_params[0]);
+ m_params.RemoveAt(0);
+ }
+ }
+ }
+}