Пример #1
0
        /// <summary>
        /// Parse an option
        /// </summary>
        /// <param name="args">All the arguments</param>
        /// <param name="optName">The char or string that the option was identified with</param>
        /// <param name="optDef">The option found</param>
        /// <param name="value">The value immediately following the option ([=:]value syntax)</param>
        /// <param name="index">The current index in the arguments which can be incremented
        /// by this function</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="foundDefinitions">The option definitions already found</param>
        /// <param name="wasUnknown">If the option was unknown and the handle type was not
        /// error, this will be true so that the "option" can be added to the arguments</param>
        private void ParseOption(string[] args, object optName,
                                 OptionDefinition optDef, string value,
                                 ref int index, DupOptHandleType dupOptHandleType,
                                 UnknownOptHandleType unknownOptHandleType, ArrayList foundDefinitions, out bool wasUnknown)
        {
            OptionResult result;

            // make sure the option is found
            if (optDef == null)
            {
                switch (unknownOptHandleType)
                {
                case UnknownOptHandleType.Error:
                    throw new ParseException(
                              string.Format("Option {0} is not recoginzed", optName));

                case UnknownOptHandleType.Warning:
                    if (OptionWarning != null)
                    {
                        OptionWarning(this, new OptionWarningEventArgs(
                                          string.Format("Option {0} is not recoginzed", optName)));
                    }
                    break;
                }

                wasUnknown = true;
                return;
            }
            else
            {
                wasUnknown = false;
            }

            // make sure value is not given went it should not be given
            CheckIfValueless(optDef, value);

            result = _resultsHandler[optDef];

            // make sure value is not duplicate when it should not be
            CheckIfDup(optDef, foundDefinitions, dupOptHandleType);
            foundDefinitions.Add(optDef);

            switch (optDef.Type)
            {
            case OptValType.Flag:
                if (result == null)
                {
                    result = new OptionResult(optDef);
                }

                result.NumDefinitions   = 1;
                result.Value            = true;
                _resultsHandler[optDef] = result;
                break;

            case OptValType.IncrementalFlag:
                if (result == null)
                {
                    result = new OptionResult(optDef);
                }

                result.NumDefinitions++;
                result.Value            = result.NumDefinitions;
                _resultsHandler[optDef] = result;
                break;

            case OptValType.MultValue:
                value = GetValue(args, value, ref index);

                if (value == null)
                {
                    throw new ParseException(
                              string.Format("Option {0} requires a value", optDef.ID));
                }

                if (result == null)
                {
                    result = new OptionResult(optDef);
                }

                result.NumDefinitions++;
                result.AddValue(optDef.ConvertValue(value));
                _resultsHandler[optDef] = result;
                break;

            case OptValType.ValueOpt:
                value = GetValue(args, value, ref index);

                if (result == null)
                {
                    result = new OptionResult(optDef);
                }

                result.NumDefinitions   = 1;
                result.Value            = optDef.ConvertValue(value);
                _resultsHandler[optDef] = result;
                break;

            case OptValType.ValueReq:
                value = GetValue(args, value, ref index);

                if (value == null)
                {
                    throw new ParseException(
                              string.Format("Option {0} requires a value", optDef.ID));
                }

                if (result == null)
                {
                    result = new OptionResult(optDef);
                }

                result.NumDefinitions   = 1;
                result.Value            = optDef.ConvertValue(value);
                _resultsHandler[optDef] = result;
                break;
            }
        }
Пример #2
0
		/// <summary>
		/// Parse an option
		/// </summary>
		/// <param name="args">All the arguments</param>
		/// <param name="optName">The char or string that the option was identified with</param>
		/// <param name="optDef">The option found</param>
		/// <param name="value">The value immediately following the option ([=:]value syntax)</param>
		/// <param name="index">The current index in the arguments which can be incremented
		/// by this function</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="foundDefinitions">The option definitions already found</param>
		/// <param name="wasUnknown">If the option was unknown and the handle type was not
		/// error, this will be true so that the "option" can be added to the arguments</param>
		private void ParseOption(string[] args, object optName,
			OptionDefinition optDef, string value, 
			ref int index, DupOptHandleType dupOptHandleType, 
			UnknownOptHandleType unknownOptHandleType, ArrayList foundDefinitions, out bool wasUnknown)
		{
			OptionResult result;

			// make sure the option is found
			if (optDef == null)
			{
				switch (unknownOptHandleType)
				{
					case UnknownOptHandleType.Error:
						throw new ParseException(
							string.Format("Option {0} is not recoginzed", optName));
					case UnknownOptHandleType.Warning:
						if (OptionWarning != null)
							OptionWarning(this, new OptionWarningEventArgs(
								string.Format("Option {0} is not recoginzed", optName)));
						break;
				}

				wasUnknown = true;
				return;
			}
			else
				wasUnknown = false;

			// make sure value is not given went it should not be given
			CheckIfValueless(optDef, value);

			result = _resultsHandler[optDef];

			// make sure value is not duplicate when it should not be
			CheckIfDup(optDef, foundDefinitions, dupOptHandleType);
			foundDefinitions.Add(optDef);

			switch (optDef.Type)
			{
				case OptValType.Flag:
					if (result == null)
						result = new OptionResult(optDef);

					result.NumDefinitions = 1;
					result.Value = true;
					_resultsHandler[optDef] = result;
					break;

				case OptValType.IncrementalFlag:
					if (result == null)
						result = new OptionResult(optDef);

					result.NumDefinitions++;
					result.Value = result.NumDefinitions;
					_resultsHandler[optDef] = result;
					break;

				case OptValType.MultValue:
					value = GetValue(args, value, ref index);

					if (value == null)
						throw new ParseException(
							string.Format("Option {0} requires a value", optDef.ID));

					if (result == null)
						result = new OptionResult(optDef);

					result.NumDefinitions++;
					result.AddValue(optDef.ConvertValue(value));
					_resultsHandler[optDef] = result;
					break;

				case OptValType.ValueOpt:
					value = GetValue(args, value, ref index);

					if (result == null)
						result = new OptionResult(optDef);

					result.NumDefinitions = 1;
					result.Value = optDef.ConvertValue(value);
					_resultsHandler[optDef] = result;
					break;

				case OptValType.ValueReq:
					value = GetValue(args, value, ref index);

					if (value == null)
						throw new ParseException(
							string.Format("Option {0} requires a value", optDef.ID));
					
					if (result == null)
						result = new OptionResult(optDef);

					result.NumDefinitions = 1;
					result.Value = optDef.ConvertValue(value);
					_resultsHandler[optDef] = result;
					break;
			}
		}