From 5b6afeafbc249ba88dcc20d1fbc98ce12418b21b Mon Sep 17 00:00:00 2001 From: gareth Date: Tue, 8 May 2007 00:10:04 +0000 Subject: Brought in TestClient code for teh fork --- ExportBot/Arguments.cs | 111 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 ExportBot/Arguments.cs (limited to 'ExportBot/Arguments.cs') diff --git a/ExportBot/Arguments.cs b/ExportBot/Arguments.cs new file mode 100644 index 0000000..01d852d --- /dev/null +++ b/ExportBot/Arguments.cs @@ -0,0 +1,111 @@ +using System; +using System.Collections.Specialized; +using System.Text.RegularExpressions; + +namespace CommandLine.Utility +{ + /// + /// Arguments class + /// + public class Arguments + { + // Variables + private StringDictionary Parameters; + + // Constructor + public Arguments(string[] Args) + { + Parameters = new StringDictionary(); + Regex Splitter = new Regex(@"^-{1,2}|=|:", + RegexOptions.IgnoreCase | RegexOptions.Compiled); + + Regex Remover = new Regex(@"^['""]?(.*?)['""]?$", + RegexOptions.IgnoreCase | RegexOptions.Compiled); + + string Parameter = null; + string[] Parts; + + // Valid parameters forms: + // {-,/,--}param{ ,=,:}((",')value(",')) + // Examples: + // -param1 value1 --param2 /param3:"Test-:-work" + // /param4=happy -param5 '--=nice=--' + foreach (string Txt in Args) + { + // Look for new parameters (-,/ or --) and a + // possible enclosed value (=,:) + Parts = Splitter.Split(Txt, 3); + + switch (Parts.Length) + { + // Found a value (for the last parameter + // found (space separator)) + case 1: + if (Parameter != null) + { + if (!Parameters.ContainsKey(Parameter)) + { + Parts[0] = + Remover.Replace(Parts[0], "$1"); + + Parameters.Add(Parameter, Parts[0]); + } + Parameter = null; + } + // else Error: no parameter waiting for a value (skipped) + break; + + // Found just a parameter + case 2: + // The last parameter is still waiting. + // With no value, set it to true. + if (Parameter != null) + { + if (!Parameters.ContainsKey(Parameter)) + Parameters.Add(Parameter, "true"); + } + Parameter = Parts[1]; + break; + + // Parameter with enclosed value + case 3: + // The last parameter is still waiting. + // With no value, set it to true. + if (Parameter != null) + { + if (!Parameters.ContainsKey(Parameter)) + Parameters.Add(Parameter, "true"); + } + + Parameter = Parts[1]; + + // Remove possible enclosing characters (",') + if (!Parameters.ContainsKey(Parameter)) + { + Parts[2] = Remover.Replace(Parts[2], "$1"); + Parameters.Add(Parameter, Parts[2]); + } + + Parameter = null; + break; + } + } + // In case a parameter is still waiting + if (Parameter != null) + { + if (!Parameters.ContainsKey(Parameter)) + Parameters.Add(Parameter, "true"); + } + } + + // Retrieve a parameter value if it exists + // (overriding C# indexer property) + public string this[string Param] + { + get + { + return (Parameters[Param]); + } + } + } +} -- cgit v1.1