public bool NextLexeme() { switch (_currChar) { case '\0': _kind = LexKind.Eof; return(false); case '(': case ')': case '=': case '/': _kind = (LexKind)Convert.ToInt32(_currChar); NextChar(); break; case '^': NextChar(); if (_currChar == '^' || _currChar == '(' || _currChar == ')') { _kind = LexKind.EscapedData; NextChar(); } else { throw new XPointerSyntaxException(Resources.CircumflexCharMustBeEscaped); } break; default: if (Char.IsDigit(_currChar)) { _kind = LexKind.Number; var start = _ptrIndex - 1; var len = 0; while (Char.IsDigit(_currChar)) { NextChar(); len++; } Number = XmlConvert.ToInt32(_ptr.Substring(start, len)); break; } if (LexUtils.IsStartNameChar(_currChar)) { _kind = LexKind.NcName; Prefix = String.Empty; NcName = ParseName(); if (_currChar == ':') { //QName? NextChar(); Prefix = NcName; _kind = LexKind.QName; if (LexUtils.IsStartNcNameChar(_currChar)) { NcName = ParseName(); } else { throw new XPointerSyntaxException(String.Format(CultureInfo.CurrentCulture, Resources.InvalidNameToken, Prefix, _currChar)); } } CanBeSchemaName = _currChar == '('; break; } if (LexUtils.IsWhitespace(_currChar)) { _kind = LexKind.Space; while (LexUtils.IsWhitespace(_currChar)) { NextChar(); } break; } _kind = LexKind.EscapedData; break; } return(true); }