Esempio n. 1
0
        private Regex BuildRegEx(OptStyle optStyle, UnixShortOption unixShortOption)
        {
            if (optStyle == OptStyle.Unix)
            {
                return(new Regex(@"^
					(?:
						--(?<longname>[^\s=]+)
						(?<longvalue>=.+)?
						|
						-(?<shortname>\S)
						(?<shortvalue>.+)?
					)$"                    , RegexOptions.IgnorePatternWhitespace));
            }
            else
            {
                return(new Regex(@"^/(?<longname>[^\s:]+)(?<longvalue>:.+)?$"));
            }
        }
Esempio n. 2
0
		private Regex BuildRegEx(OptStyle optStyle, UnixShortOption unixShortOption)
		{
			if (optStyle == OptStyle.Unix)
				return new Regex(@"^
					(?:
						--(?<longname>[^\s=]+)
						(?<longvalue>=.+)?
						|
						-(?<shortname>\S)
						(?<shortvalue>.+)?
					)$", RegexOptions.IgnorePatternWhitespace);
			else
				return new Regex(@"^/(?<longname>[^\s:]+)(?<longvalue>:.+)?$");
		}
Esempio n. 3
0
        /// <summary>
        /// Parse the arguments for options using the given settings
        /// </summary>
        /// <param name="optStyle">What type of options to parse</param>
        /// <param name="unixShortOption">How to parse unix short options (ignored
        /// if not unix style parsing)</param>
        /// <param name="dupOptHandleType">How to handle un-expected duplicate option
        /// definitions</param>
        /// <param name="unknownOptHandleType">How to handle options that were not
        /// defined</param>
        /// <param name="caseSesitive">If the parsing of options
        /// should consider the case of the options</param>
        /// <param name="args">The command-line arguments to parse</param>
        /// <returns>Arguments from the command-line that were not options</returns>
        public string[] Parse(OptStyle optStyle, UnixShortOption unixShortOption,
                              DupOptHandleType dupOptHandleType, UnknownOptHandleType unknownOptHandleType,
                              bool caseSesitive, string[] args)
        {
            ArrayList        foundDefinitions = new ArrayList();
            Group            grp;
            Match            m;
            Regex            re;
            StringCollection arguments;
            bool             isShort;
            bool             unknown;
            string           name;
            string           value;

            string[] results;

            if (args == null || args.Length == 0)
            {
                if (this.SearchEnvironment)
                {
                    ParseEnvironment(foundDefinitions, caseSesitive);
                }
                return(new string[0]);
            }

            arguments = new StringCollection();

            re = BuildRegEx(optStyle, unixShortOption);

            for (int i = 0; i < args.Length; i++)
            {
                m = re.Match(args[i]);

                if (m.Success)
                {
                    // see if there is a value
                    grp = m.Groups["shortname"];

                    if (grp != null && grp.Value != string.Empty)
                    {
                        isShort = true;
                        name    = grp.Value;
                        value   = m.Groups["shortvalue"].Value;
                    }
                    else
                    {
                        isShort = false;
                        name    = m.Groups["longname"].Value;
                        value   = m.Groups["longvalue"].Value;

                        // remove the '=' or ':' at the beginning of the value
                        if (value != null && value.Length > 0)
                        {
                            value = value.Substring(1);
                        }
                    }

                    if (optStyle == OptStyle.Unix)
                    {
                        if (isShort == false)
                        {
                            ParseLongOption(args, name, value, caseSesitive,
                                            ref i, dupOptHandleType, unknownOptHandleType, foundDefinitions,
                                            out unknown);
                        }
                        // see if the value is just concatinated short options
                        else if (unixShortOption == UnixShortOption.CollapseShort)
                        {
                            // name is the first option
                            ParseShortOption(args, name[0], null, caseSesitive,
                                             ref i, dupOptHandleType, unknownOptHandleType, foundDefinitions,
                                             out unknown);

                            // parse the rest of the options that lie in the 'value' variable
                            if (value != null)
                            {
                                char[] unknownOptions;

                                ParseShortOptions(args, value.ToLower().ToCharArray(),
                                                  caseSesitive, ref i, dupOptHandleType, unknownOptHandleType,
                                                  foundDefinitions, out unknownOptions);

                                // don't do anything with unknown concatinated short options,
                                // they should not be considered options or arguments
                            }
                        }
                        else
                        {
                            // name is the first option
                            ParseShortOption(args, name[0], value, caseSesitive,
                                             ref i, dupOptHandleType, unknownOptHandleType, foundDefinitions,
                                             out unknown);
                        }
                    }
                    else
                    {
                        if (name.Length == 1)
                        {
                            ParseShortOption(args, name[0], value, caseSesitive,
                                             ref i, dupOptHandleType, unknownOptHandleType, foundDefinitions,
                                             out unknown);
                        }
                        else
                        {
                            ParseLongOption(args, name, value, caseSesitive, ref i,
                                            dupOptHandleType, unknownOptHandleType, foundDefinitions,
                                            out unknown);
                        }
                    }

                    // consider unknown options to be arguments
                    if (unknown)
                    {
                        arguments.Add(args[i]);
                    }
                }
                else
                {
                    arguments.Add(args[i]);
                }
            }


            // parse the environment
            if (this.SearchEnvironment)
            {
                ParseEnvironment(foundDefinitions, caseSesitive);
            }

            results = new string[arguments.Count];
            arguments.CopyTo(results, 0);
            return(results);
        }
Esempio n. 4
0
		/// <summary>
		/// Parse the arguments for options using the given settings
		/// </summary>
		/// <param name="optStyle">What type of options to parse</param>
		/// <param name="unixShortOption">How to parse unix short options (ignored
		/// if not unix style parsing)</param>
		/// <param name="dupOptHandleType">How to handle un-expected duplicate option
		/// definitions</param>
		/// <param name="unknownOptHandleType">How to handle options that were not
		/// defined</param>
		/// <param name="caseSesitive">If the parsing of options 
		/// should consider the case of the options</param>
		/// <param name="args">The command-line arguments to parse</param>
		/// <returns>Arguments from the command-line that were not options</returns>
		public string[] Parse(OptStyle optStyle, UnixShortOption unixShortOption, 
			DupOptHandleType dupOptHandleType, UnknownOptHandleType unknownOptHandleType,
			bool caseSesitive, string[] args)
		{
			ArrayList        foundDefinitions = new ArrayList();
			Group            grp;
			Match            m;
			Regex            re;
			StringCollection arguments;
			bool             isShort;
			bool             unknown;
			string           name;
			string           value;
			string[]         results;

			if (args == null || args.Length == 0)
			{
				if (this.SearchEnvironment)
					ParseEnvironment(foundDefinitions, caseSesitive);
				return new string[0];
			}

			arguments = new StringCollection();
			
			re = BuildRegEx(optStyle, unixShortOption);

			for (int i = 0; i < args.Length; i++)
			{
				m = re.Match(args[i]);

				if (m.Success)
				{
					// see if there is a value
					grp = m.Groups["shortname"];

					if (grp != null && grp.Value != string.Empty)
					{
						isShort = true;
						name = grp.Value;
						value = m.Groups["shortvalue"].Value;
					}
					else
					{
						isShort = false;
						name = m.Groups["longname"].Value;
						value = m.Groups["longvalue"].Value;

						// remove the '=' or ':' at the beginning of the value
						if (value != null && value.Length > 0)
							value = value.Substring(1);
					}

					if (optStyle == OptStyle.Unix)
					{
						if (isShort == false)
							ParseLongOption(args, name, value, caseSesitive, 
								ref i, dupOptHandleType, unknownOptHandleType, foundDefinitions,
								out unknown);
						// see if the value is just concatinated short options
						else if (unixShortOption == UnixShortOption.CollapseShort)
						{
							// name is the first option
							ParseShortOption(args, name[0], null, caseSesitive, 
								ref i, dupOptHandleType, unknownOptHandleType, foundDefinitions,
								out unknown);

							// parse the rest of the options that lie in the 'value' variable
							if (value != null)
							{
								char[] unknownOptions;

								ParseShortOptions(args, value.ToLower().ToCharArray(), 
									caseSesitive, ref i, dupOptHandleType, unknownOptHandleType,
									foundDefinitions, out unknownOptions);

								// don't do anything with unknown concatinated short options,
								// they should not be considered options or arguments
							}
						}
						else
							// name is the first option
							ParseShortOption(args, name[0], value, caseSesitive,
								ref i, dupOptHandleType, unknownOptHandleType, foundDefinitions,
								out unknown);
					}
					else
					{
						if (name.Length == 1)
							ParseShortOption(args, name[0], value, caseSesitive,
								ref i, dupOptHandleType, unknownOptHandleType, foundDefinitions,
								out unknown);
						else
							ParseLongOption(args, name, value, caseSesitive, ref i, 
								dupOptHandleType, unknownOptHandleType, foundDefinitions,
								out unknown);
					}

					// consider unknown options to be arguments
					if (unknown)
						arguments.Add(args[i]);
				}
				else
					arguments.Add(args[i]);
			}

			
			// parse the environment
			if (this.SearchEnvironment)
				ParseEnvironment(foundDefinitions, caseSesitive);

			results = new string[arguments.Count];
			arguments.CopyTo(results, 0);
			return results;
		}