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

ScanXmlNcName() private method

private ScanXmlNcName ( SyntaxList precedingTrivia ) : SyntaxToken
precedingTrivia SyntaxList
return SyntaxToken
        private SyntaxToken ScanXmlNcName(SyntaxList<SyntaxNode> precedingTrivia)
        {
            int Here = 0;
            bool IsIllegalChar = false;
            bool isFirst = true;
            ERRID err = ERRID.ERR_None;
            int errUnicode = 0;
            string errChar = null;

            // TODO - Fix ScanXmlNCName to conform to XML spec instead of old loose scanning.
            while (CanGetCharAtOffset(Here))
            {
                char c = PeekAheadChar(Here);
                switch (c)
                {
                    case ':':
                    case ' ':
                    case UCH_TAB:
                    case UCH_LF:
                    case UCH_CR:
                    case '=':
                    case '\'':
                    case '"':
                    case '/':
                    case '>':
                    case '<':
                    case '(':
                    case ')':
                    case '?':
                    case ';':
                    case ',':
                    case '}':
                        goto CreateNCNameToken;
                    default:
                        var xmlCh = ScanXmlChar(Here);
                        if (xmlCh.Length == 0)
                        {
                            IsIllegalChar = true;
                            goto CreateNCNameToken;
                        }
                        else
                        {
                            if (err == ERRID.ERR_None)
                            {
                                if (xmlCh.Length == 1)
                                {
                                    // Non surrogate check
                                    if (isFirst)
                                    {
                                        err = !IsStartNameChar(xmlCh.Char1) ? ERRID.ERR_IllegalXmlStartNameChar : ERRID.ERR_None;
                                        isFirst = false;
                                    }
                                    else
                                    {
                                        err = !IsNameChar(xmlCh.Char1) ? ERRID.ERR_IllegalXmlNameChar : ERRID.ERR_None;
                                    }

                                    if (err != ERRID.ERR_None)
                                    {
                                        errChar = Convert.ToString(xmlCh.Char1);
                                        errUnicode = Convert.ToInt32(xmlCh.Char1);
                                    }
                                }
                                else
                                {
                                    var unicode = UTF16ToUnicode(xmlCh);
                                    if (!(unicode >= 0x10000 && unicode <= 0xEFFFF))
                                    {
                                        err = ERRID.ERR_IllegalXmlNameChar;
                                        errChar = new string(new[]
                                        {
                                            xmlCh.Char1,
                                            xmlCh.Char2
                                        });
                                        errUnicode = unicode;
                                    }
                                }
                            }

                            Here += xmlCh.Length;
                        }

                        break;
                }
            }

            CreateNCNameToken:
            if (Here != 0)
            {
                var name = XmlMakeXmlNCNameToken(precedingTrivia.Node, Here);
                if (err != ERRID.ERR_None)
                {
                    ////name = name.WithDiagnostics(ErrorFactory.ErrorInfo(
                    ////    err, errChar, string.Format("&H{0:X}", errUnicode)));
                }

                return name;
            }
            else if (IsIllegalChar)
            {
                return XmlMakeBadToken(precedingTrivia, 1, ERRID.ERR_IllegalChar);
            }

            return MakeMissingToken(precedingTrivia, SyntaxKind.XmlNameToken);
        }
Scanner