Exemplo n.º 1
0
        private ParserRunner GetMultiTypesParser(string[] args, ParserRegistration registration)
        {
            Debug.Assert(args.Any());

            var verb = args[0];

            // if the first arg is not a verb - throw
            //
            if (verb.StartsWith(ParserRunner.ArgumentPrefixes))
            {
                throw new MissingVerbException();
            }

            if (!verb.Contains(s_delimiters))
            {
                throw new MultiParserMissingClassNameException();
            }

            var parts = verb.Split(s_delimiters, StringSplitOptions.RemoveEmptyEntries);

            if (parts.Length != 2)
            {
                throw new InvalidVerbException();
            }

            var typeNameOrAlias = parts[0];

            args[0] = args[0].Substring(typeNameOrAlias.Length + 1);

            var matchingType = registration.GetTargetType(typeNameOrAlias);

            if (matchingType == null)
            {
                throw new UnknownParserTypeException(typeNameOrAlias);
            }

            return(new ParserRunner(matchingType, registration, HelpGenerator));
        }