예제 #1
0
        private string ScanNCName()
        {
            Debug.Assert(xmlCharType.IsStartNCNameSingleChar(curChar)
#if XML10_FIFTH_EDITION
                         || xmlCharType.IsNCNameHighSurrogateChar(curChar)
#endif
                         );
            int start = curIndex;
            for (;;)
            {
                if (xmlCharType.IsNCNameSingleChar(curChar))
                {
                    NextChar();
                }
#if XML10_FIFTH_EDITION
                else if (xmlCharType.IsNCNameSurrogateChar(PeekNextChar(), curChar))
                {
                    NextChar();
                    NextChar();
                }
#endif
                else
                {
                    break;
                }
            }
            return(xpathExpr.Substring(start, curIndex - start));
        }
예제 #2
0
        private string ScanName()
        {
            Debug.Assert(xmlCharType.IsStartNCNameSingleChar(this.CurrentChar)
#if XML10_FIFTH_EDITION
                         || xmlCharType.IsNCNameHighSurrogateChar(this.CurerntChar)
#endif
                         );
            int start = xpathExprIndex - 1;
            int len   = 0;

            for (; ;)
            {
                if (xmlCharType.IsNCNameSingleChar(this.CurrentChar))
                {
                    NextChar();
                    len++;
                }
#if XML10_FIFTH_EDITION
                else if (xmlCharType.IsNCNameSurrogateChar(this.PeekNextChar(), this.CurerntChar))
                {
                    NextChar();
                    NextChar();
                    len += 2;
                }
#endif
                else
                {
                    break;
                }
            }
            return(this.xpathExpr.Substring(start, len));
        }
        //-----------------------------------------------
        // Nmtoken parsing
        //-----------------------------------------------
        /// <summary>
        /// Attempts to parse the input string as an Nmtoken (see the XML spec production [7] and XML Namespaces spec).
        /// Quits parsing when an invalid Nmtoken char is reached or the end of string is reached.
        /// Returns the number of valid Nmtoken chars that were parsed.
        /// </summary>
        internal static unsafe int ParseNmtoken(string s, int offset)
        {
            Debug.Assert(s != null && offset <= s.Length);

            // Keep parsing until the end of string or an invalid NCName character is reached
            int i = offset;

            while (i < s.Length)
            {
                if ((xmlCharType.charProperties[s[i]] & XmlCharType.fNCNameSC) != 0)   // if (xmlCharType.IsNCNameSingleChar(s[i])) {
                {
                    i++;
                }
#if XML10_FIFTH_EDITION
                else if (xmlCharType.IsNCNameSurrogateChar(s, i))
                {
                    i += 2;
                }
#endif
                else
                {
                    break;
                }
            }

            return(i - offset);
        }