Ejemplo n.º 1
0
        private ArgumentsSectionSyntax ScanArgumentsSection(
            ElementsCursor <SyntaxToken> cursor, List <SyntaxError> errors, CancellationToken cancellation,
            IReadOnlyList <string> commandName)
        {
            var  arguments    = new List <ArgumentSyntax>();
            bool operandsOnly = false;
            int  operandIndex = 0;

            while (HasMoreTokens(cursor) && !cancellation.IsCancellationRequested)
            {
                var token = cursor.Peek();

                if (!operandsOnly && IsEndOfOptions(token, cursor.Peek(1)))
                {
                    cursor.MoveNext();
                    var endOfOptions = new EndOfOptionsSyntax(token);
                    arguments.Add(endOfOptions);
                    operandsOnly = true;
                }
                else if (!operandsOnly && IsOptionName(token, cursor.Peek(1)))
                {
                    var nameMarker = token;
                    var name       = cursor.Peek(1);
                    cursor.MoveNext(2);
                    if (IsStackedOption(nameMarker, name))
                    {
                        ScanStackedOptions(cursor, errors, nameMarker, name, commandName, arguments);
                    }
                    else
                    {
                        var option = ScanOption(cursor, errors, nameMarker, name, commandName);
                        arguments.Add(option);
                    }
                }
                else
                {
                    var operand = ScanOperand(cursor, errors, operandIndex);
                    arguments.Add(operand);
                    operandIndex++;
                }
            }

            cancellation.ThrowIfCancellationRequested();
            if (arguments.Count == 0)
            {
                return(null);
            }
            return(new ArgumentsSectionSyntax(arguments));
        }
 public bool VisitEndOfOptions(EndOfOptionsSyntax endOfOptions, CommandLineHighlightingVisitorParams <TStyle> param)
 {
     AddSpans(param.Spans, endOfOptions.Token, CommandLineStyleName.EndOfOptions, param.Palette);
     return(false);
 }