/* * SubSonic - http://subsonicproject.com * * The contents of this file are subject to the Mozilla Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. */ using System.Collections.Specialized; using System.Text.RegularExpressions; namespace SubSonic.SubCommander { /// /// Command Line Parsing Library. /// public class Arguments { private readonly StringDictionary parameters = new StringDictionary(); /// /// Initializes a new instance of the class. /// /// The command line. public Arguments(string commandLine) { const string pattern = @"/(?((?!/).)*?)(\s*""(?[^""]*)""|\s+(?(?!/).*?)([\s]|$)|(?\s+))"; Regex regex = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase); MatchCollection matches = regex.Matches(commandLine); foreach(Match match in matches) { string arg = match.Groups["arg"].Value; string value = match.Groups["value"].Value; parameters.Add(arg, value); } } /// /// Retrieve a parameter value if it exists (overriding C# indexer property) /// /// public string this[string Param] { get { return (parameters[Param]); } } } }