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)); }
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); }