HtmlLexicalAnalyzer.GetNextAtomToken C# (CSharp) Method

GetNextAtomToken() private method

Unconditionally returns an atomic value for an attribute Even if there is no appropriate token it returns Atom value Does not guarantee token reader advancing.
private GetNextAtomToken ( ) : void
return void
    internal void GetNextAtomToken()
    {
        Debug.Assert(_nextTokenType != HtmlTokenType.EOF);
        _nextToken.Length = 0;

        this.SkipWhiteSpace();

        _nextTokenType = HtmlTokenType.Atom;

        if ((this.NextCharacter == '\'' || this.NextCharacter == '"') && !this.IsNextCharacterEntity)
        {
            char startingQuote = this.NextCharacter;
            this.GetNextCharacter();

            // Consume all characters between quotes
            while (!(this.NextCharacter == startingQuote && !this.IsNextCharacterEntity) && !this.IsAtEndOfStream)
            {
                _nextToken.Append(this.NextCharacter);
                this.GetNextCharacter();
            }
            if (this.NextCharacter == startingQuote)
            {
                this.GetNextCharacter();
            }

            // complete the quoted value
            // NOTE: our recovery here is different from IE's
            // IE keeps reading until it finds a closing quote or end of file
            // if end of file, it treats current value as text
            // if it finds a closing quote at any point within the text, it eats everything between the quotes
            // TODO: Suggestion:
            // however, we could stop when we encounter end of file or an angle bracket of any kind
            // and assume there was a quote there
            // so the attribute value may be meaningless but it is never treated as text
        }
        else
        {
            while (!this.IsAtEndOfStream && !Char.IsWhiteSpace(this.NextCharacter) && this.NextCharacter != '>')
            {
                _nextToken.Append(this.NextCharacter);
                this.GetNextCharacter();
            }
        }
    }