/// <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; } }
/// <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; } }