private string GetNCName() { if (!XPathCharTypes.IsNCNameStart(this.PeekChar())) { return(null); } this.AdvanceChar(); while (XPathCharTypes.IsNCName(this.PeekChar())) { this.AdvanceChar(); } string str = this.CurrentSubstring(); this.ConsumeToken(); return(str); }
private string GetNCName() { // Make sure we're starting an NCName if (XPathCharTypes.IsNCNameStart(PeekChar())) { AdvanceChar(); // Read all the NCName characters for (; XPathCharTypes.IsNCName(PeekChar()); AdvanceChar()) { ; } // Extract, consume, and return the NCName string name = CurrentSubstring(); ConsumeToken(); return(name); } else { return(null); } }
private void TokenizeQName() { while (XPathCharTypes.IsNCName(this.PeekChar())) { this.AdvanceChar(); } string prefix = this.CurrentSubstring(); XPathTokenID unknown = XPathTokenID.Unknown; XPathParser.QName qname = new XPathParser.QName("", ""); if ((this.PeekChar() == ':') && (this.PeekChar(2) != ':')) { this.AdvanceChar(); this.ConsumeToken(); this.AdvanceChar(); if (XPathCharTypes.IsNCNameStart(this.ch)) { while (XPathCharTypes.IsNCName(this.PeekChar())) { this.AdvanceChar(); } unknown = XPathTokenID.NameTest; qname = new XPathParser.QName(prefix, this.CurrentSubstring()); } else if (this.ch == '*') { unknown = XPathTokenID.NameWildcard; qname = new XPathParser.QName(prefix, QueryDataModel.Wildcard); } else { this.ThrowError(QueryCompileError.InvalidNCName, (this.ch == '\0') ? "" : this.CurrentSubstring()); } } else { unknown = XPathTokenID.NameTest; qname = new XPathParser.QName(string.Empty, prefix); } this.ConsumeWhitespace(); if (this.IsSpecialPrev()) { this.token.Set(this.GetNamedOperator(qname)); } else if (qname.Prefix.Length == 0) { if (this.PeekChar() == '(') { unknown = this.GetNodeTypeOrFunction(qname); if (unknown != XPathTokenID.Function) { this.token.Set(unknown); } else { this.token.Set(unknown, qname); } } else if ((this.PeekChar() == ':') && (this.PeekChar(2) == ':')) { this.token.Set(this.GetAxisName(qname)); } else { this.token.Set(unknown, qname); } } else { if (this.PeekChar() == '(') { unknown = XPathTokenID.Function; } this.token.Set(unknown, qname); } }
private void TokenizeQName() { for (; XPathCharTypes.IsNCName(PeekChar()); AdvanceChar()) { ; } string name1 = this.CurrentSubstring(); XPathTokenID id = XPathTokenID.Unknown; XPathParser.QName qname = new XPathParser.QName("", ""); if (PeekChar() == ':' && PeekChar(2) != ':') { AdvanceChar(); ConsumeToken(); AdvanceChar(); if (XPathCharTypes.IsNCNameStart(this.ch)) { // It's a full QName for (; XPathCharTypes.IsNCName(PeekChar()); AdvanceChar()) { ; } id = XPathTokenID.NameTest; qname = new XPathParser.QName(name1, this.CurrentSubstring()); } else if (this.ch == '*') { // We've got a wildcard id = XPathTokenID.NameWildcard; qname = new XPathParser.QName(name1, QueryDataModel.Wildcard); } else { ThrowError(QueryCompileError.InvalidNCName, this.ch == char.MinValue ? "" : CurrentSubstring()); } } else { // It's a name test without a prefix id = XPathTokenID.NameTest; qname = new XPathParser.QName(string.Empty, name1); } // Handle special cases ConsumeWhitespace(); if (IsSpecialPrev()) { // If we're in the the first special case of the lexer, a qname MUST // be a NamedOperator token.Set(GetNamedOperator(qname)); return; } else if (qname.Prefix.Length == 0) { if (this.PeekChar() == '(') { // An NCName followed by a '(' MUST be eiter a node type or function name id = GetNodeTypeOrFunction(qname); if (id != XPathTokenID.Function) { token.Set(id); } else { token.Set(id, qname); } } else if (this.PeekChar() == ':' && this.PeekChar(2) == ':') { // An NCName followed by a '::' MUST be an axis token.Set(GetAxisName(qname)); } else { token.Set(id, qname); } } else { if (this.PeekChar() == '(') { id = XPathTokenID.Function; } token.Set(id, qname); } }