Microsoft.Language.Xml.Scanner.ScanXmlCData C# (CSharp) Method

ScanXmlCData() private method

private ScanXmlCData ( ) : SyntaxToken
return SyntaxToken
        internal SyntaxToken ScanXmlCData()
        {
            SyntaxList<SyntaxNode> precedingTrivia = null;

            var scratch = GetScratch();
            var Here = 0;
            while (CanGetCharAtOffset(Here))
            {
                char c = PeekAheadChar(Here);
                switch (c)
                {
                    case UCH_CR:
                    case UCH_LF:
                        Here = SkipLineBreak(c, Here);
                        scratch.Append(UCH_LF);
                        return XmlMakeCDataToken(precedingTrivia, Here, scratch);
                    case ']':
                        if (CanGetCharAtOffset(Here + 2) && PeekAheadChar(Here + 1) == ']' && PeekAheadChar(Here + 2) == '>')
                        {
                            //// If valid characters found then return them.
                            if (Here != 0)
                            {
                                return XmlMakeCDataToken(precedingTrivia, Here, scratch);
                            }

                            return XmlMakeEndCDataToken(precedingTrivia);
                        }

                        goto ScanChars;

                    default:
                        ScanChars:
                        var xmlCh = ScanXmlChar(Here);
                        if (xmlCh.Length == 0)
                        {
                            // bad char
                            if (Here > 0)
                            {
                                return XmlMakeCDataToken(precedingTrivia, Here, scratch);
                            }
                            else
                            {
                                return XmlMakeBadToken(precedingTrivia, 1, ERRID.ERR_IllegalChar);
                            }
                        }

                        xmlCh.AppendTo(scratch);
                        Here += xmlCh.Length;
                        break;
                }
            }

            // no more chars
            if (Here > 0)
            {
                return XmlMakeCDataToken(precedingTrivia, Here, scratch);
            }
            else
            {
                return MakeEofToken(precedingTrivia);
            }
        }
Scanner