Antmicro.OptionsParser.Tokenizer.ResetPosition C# (CSharp) Method

ResetPosition() public method

public ResetPosition ( ) : void
return void
        public void ResetPosition()
        {
            position = markedPosition;
            stringPosition = markedStringPosition;
        }

Usage Example

        private void InnerParse(string[] args)
        {
            parsedArgs = args;

            var tokenizer = new Tokenizer(args);

            while (!tokenizer.Finished)
            {
                var token = tokenizer.ReadNextToken();
                if (token is PositionalArgumentToken)
                {
                    if (currentValuesCount < values.Count())
                    {
                        values[currentValuesCount].Descriptor = token.Descriptor;
                        values[currentValuesCount++].Value    = ((PositionalArgumentToken)token).Value;
                    }
                    else
                    {
                        unexpectedArguments.Add(new UnexpectedArgument(((PositionalArgumentToken)token).Value));
                    }
                }
                else if (token is LongNameToken)
                {
                    var foundOption = options.SingleOrDefault(x => x.LongName == ((LongNameToken)token).Name);
                    if (foundOption != null)
                    {
                        var parsedOption = new CommandLineOption(foundOption);

                        int additionalLength = 0;
                        var isSeparated      = true;
                        if (foundOption.AcceptsArgument)
                        {
                            tokenizer.MarkPosition();
                            var argumentString = tokenizer.ReadUntilTheEndOfString();
                            if (((LongNameToken)token).HasAssignment)
                            {
                                additionalLength = argumentString.Length + 1; // argument length + '='
                                isSeparated      = false;
                            }
                            if (parsedOption.ParseArgument(argumentString, isSeparated))
                            {
                                tokenizer.MoveToTheNextString();
                            }
                            else
                            {
                                tokenizer.ResetPosition();
                            }
                        }

                        parsedOption.Descriptor = token.Descriptor.WithLengthChangedBy(2 + additionalLength); // -- prefix
                        if (foundOption.OptionType == typeof(bool))
                        {
                            parsedOption.Value = true;
                        }
                        parsedOptions.Add(parsedOption);
                    }
                    else
                    {
                        unexpectedArguments.Add(new UnexpectedArgument(((LongNameToken)token).Name));
                    }
                }
                else if (token is ShortNameToken)
                {
                    var foundOption = options.SingleOrDefault(x => x.ShortName == ((ShortNameToken)token).Name);
                    if (foundOption != null)
                    {
                        var parsedOption = new CommandLineOption(foundOption);

                        int additionalLength = 0;
                        var isSeparated      = false;
                        if (foundOption.AcceptsArgument)
                        {
                            tokenizer.MarkPosition();
                            var argumentString = tokenizer.ReadUntilTheEndOfString();
                            if (argumentString == string.Empty)
                            {
                                // it means that the value is separated by a whitespace
                                tokenizer.MoveToTheNextString();
                                argumentString = tokenizer.ReadUntilTheEndOfString();
                                isSeparated    = true;
                            }
                            if (argumentString != null)
                            {
                                additionalLength = isSeparated ? 0 : argumentString.Length;
                                if (!parsedOption.ParseArgument(argumentString, isSeparated))
                                {
                                    tokenizer.ResetPosition();
                                }
                            }
                        }
                        parsedOption.Descriptor = token.Descriptor.WithLengthChangedBy(additionalLength);
                        if (foundOption.OptionType == typeof(bool))
                        {
                            parsedOption.Value = true;
                        }
                        parsedOptions.Add(parsedOption);
                    }
                    else
                    {
                        unexpectedArguments.Add(new UnexpectedArgument(((ShortNameToken)token).Name.ToString()));
                    }
                }
            }
        }