Example #1
0
        /// <inheritdoc/>
        public override bool MoveNext()
        {
            this.characters.EnsureHasStarted();
            this.hasStarted = true;

            if (this.HasCurrent())
            {
                this.tokenQueue.Dequeue();
            }

            if (this.characters.HasCurrent())
            {
                switch (this.characters.GetCurrent())
                {
                case '/':
                    this.tokenQueue.Enqueue(PkgdefToken.ForwardSlash(this.characters.GetCurrentIndex()));
                    this.characters.Next();
                    break;

                case '\\':
                    this.tokenQueue.Enqueue(PkgdefToken.Backslash(this.characters.GetCurrentIndex()));
                    this.characters.Next();
                    break;

                case '\"':
                    this.tokenQueue.Enqueue(PkgdefToken.DoubleQuote(this.characters.GetCurrentIndex()));
                    this.characters.Next();
                    break;

                case '@':
                    this.tokenQueue.Enqueue(PkgdefToken.AtSign(this.characters.GetCurrentIndex()));
                    this.characters.Next();
                    break;

                case '\n':
                    this.tokenQueue.Enqueue(PkgdefToken.NewLine(this.characters.GetCurrentIndex(), "\n"));
                    this.characters.Next();
                    break;

                case '=':
                    this.tokenQueue.Enqueue(PkgdefToken.EqualsSign(this.characters.GetCurrentIndex()));
                    this.characters.Next();
                    break;

                case '$':
                    this.tokenQueue.Enqueue(PkgdefToken.DollarSign(this.characters.GetCurrentIndex()));
                    this.characters.Next();
                    break;

                case '[':
                    this.tokenQueue.Enqueue(PkgdefToken.LeftSquareBracket(this.characters.GetCurrentIndex()));
                    this.characters.Next();
                    break;

                case ']':
                    this.tokenQueue.Enqueue(PkgdefToken.RightSquareBracket(this.characters.GetCurrentIndex()));
                    this.characters.Next();
                    break;

                case ':':
                    this.tokenQueue.Enqueue(PkgdefToken.Colon(this.characters.GetCurrentIndex()));
                    this.characters.Next();
                    break;

                case '{':
                    this.tokenQueue.Enqueue(PkgdefToken.LeftCurlyBracket(this.characters.GetCurrentIndex()));
                    this.characters.Next();
                    break;

                case '}':
                    this.tokenQueue.Enqueue(PkgdefToken.RightCurlyBracket(this.characters.GetCurrentIndex()));
                    this.characters.Next();
                    break;

                case '-':
                    this.tokenQueue.Enqueue(PkgdefToken.Dash(this.characters.GetCurrentIndex()));
                    this.characters.Next();
                    break;

                default:
                    if (PkgdefTokenizer.IsWhitespaceCharacter(this.characters.GetCurrent()))
                    {
                        this.ReadWhitespace();
                    }
                    else if (PkgdefTokenizer.IsLetter(this.characters.GetCurrent()))
                    {
                        this.ReadLetters();
                    }
                    else if (PkgdefTokenizer.IsDigit(this.characters.GetCurrent()))
                    {
                        this.ReadDigits();
                    }
                    else
                    {
                        this.tokenQueue.Enqueue(PkgdefToken.Unrecognized(characters.GetCurrentIndex(), characters.GetCurrent()));
                        this.characters.Next();
                    }
                    break;
                }
            }

            return(this.HasCurrent());
        }