コード例 #1
0
        public Argument <T> DefineOption <T>(string name, T defaultValue, Func <string, T> valueConverter, bool isRequired)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentException(Strings.NameMissing, "name");
            }

            if (DefinedParameters.Any())
            {
                throw new InvalidOperationException(Strings.OptionsMustBeDefinedBeforeParameters);
            }

            var names  = ParseOptionNameList(name);
            var option = new Argument <T>(_definedCommand, names, defaultValue, isRequired);

            _options.Add(option);

            if (_activeCommand != _definedCommand)
            {
                return(option);
            }

            try
            {
                if (Parser.TryParseOption(option.GetDisplayName(), option.Names, valueConverter, isRequired, out T value, out bool specified))
                {
                    option.SetValue(value);
                }
                else if (specified)
                {
                    // No value was provided, but the option was specified and a value wasn't required
                    option.MarkSpecified();
                }
            }
コード例 #2
0
        private static string GetParameterSyntax(Argument parameter)
        {
            var sb = new StringBuilder();

            sb.Append(parameter.GetDisplayName());
            if (parameter.IsList)
            {
                sb.Append(@"...");
            }

            return(sb.ToString());
        }
コード例 #3
0
        public Argument <T> DefineParameter <T>(string name, T defaultValue, Func <string, T> valueConverter)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentException(Strings.NameMissing, "name");
            }

            if (!IsValidName(name))
            {
                var message = string.Format(Strings.ParameterNameIsNotValidFmt, name);
                throw new ArgumentException(message, "name");
            }

            if (DefinedParameters.Any(p => p.IsList))
            {
                throw new InvalidOperationException(Strings.ParametersCannotBeDefinedAfterLists);
            }

            if (DefinedParameters.Any(p => string.Equals(name, p.Name, StringComparison.OrdinalIgnoreCase)))
            {
                var message = string.Format(Strings.ParameterAlreadyDefinedFmt, name);
                throw new InvalidOperationException(message);
            }

            var parameter = new Argument <T>(_definedCommand, name, defaultValue);

            _parameters.Add(parameter);

            if (_activeCommand != _definedCommand)
            {
                return(parameter);
            }

            try
            {
                T value;
                if (Parser.TryParseParameter(parameter.GetDisplayName(), valueConverter, out value))
                {
                    parameter.SetValue(value);
                }
            }
            catch (ArgumentSyntaxException ex)
            {
                ReportError(ex.Message);
            }

            return(parameter);
        }
コード例 #4
0
        private static string GetOptionSyntax(Argument option)
        {
            var sb = new StringBuilder();

            sb.Append(@"[");
            sb.Append(option.GetDisplayName());

            if (!option.IsFlag)
            {
                sb.Append(@" <arg>");
            }

            if (option.IsList)
            {
                sb.Append(@"...");
            }

            sb.Append(@"]");

            return(sb.ToString());
        }
コード例 #5
0
        public Argument <T> DefineOption <T>(string name, T defaultValue, Func <string, T> valueConverter)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentException(Strings.NameMissing, "name");
            }

            if (DefinedParameters.Any())
            {
                throw new InvalidOperationException(Strings.OptionsMustBeDefinedBeforeParameters);
            }

            var names  = ParseOptionNameList(name);
            var option = new Argument <T>(_definedCommand, names, defaultValue);

            _options.Add(option);

            if (_activeCommand != _definedCommand)
            {
                return(option);
            }

            try
            {
                T value;
                if (Parser.TryParseOption(option.GetDisplayName(), option.Names, valueConverter, out value))
                {
                    option.SetValue(value);
                }
            }
            catch (ArgumentSyntaxException ex)
            {
                ReportError(ex.Message);
            }

            return(option);
        }
コード例 #6
0
        private static string GetParameterSyntax(Argument parameter)
        {
            var sb = new StringBuilder();

            sb.Append(parameter.GetDisplayName());
            if (parameter.IsList)
                sb.Append(@"...");

            return sb.ToString();
        }
コード例 #7
0
        private static string GetOptionSyntax(Argument option)
        {
            var sb = new StringBuilder();

            sb.Append(@"[");
            sb.Append(option.GetDisplayName());

            if (!option.IsFlag)
                sb.Append(@" <arg>");

            if (option.IsList)
                sb.Append(@"...");

            sb.Append(@"]");

            return sb.ToString();
        }