private IToken TryGetDataType() { // Expect to either see a start of a Uri or QName char next = Peek(); if (next == '<') { // Uri specified DataType IToken temp = TryGetUri(); LastTokenType = Token.DATATYPE; return(new DataTypeToken("<" + temp.Value + ">", temp.StartLine, temp.StartPosition, temp.EndPosition)); } else if (Char.IsLetter(next) || UnicodeSpecsHelper.IsLetter(next) || next == '_') { // QName specified Data Type IToken temp = TryGetQName(); if (temp.TokenType == Token.QNAME) { LastTokenType = Token.DATATYPE; return(new DataTypeToken(temp.Value, temp.StartLine, temp.StartPosition, temp.EndPosition)); } else { throw Error("Unexpected Token '" + temp.GetType().ToString() + "' was produced when a QName for a Data Type was expected!"); } } else { // Invalid Start Character throw Error("Unexpected Character (Code " + (int)next + " " + next + "\nExpected a < to start a URI or a valid start character for a QName to specify Data Type"); } }
private bool IsValidVarName(String value) { if (_isValidVarName.IsMatch(value)) { return(true); } else { // Have to validate Character by Character char[] cs = value.ToCharArray(); char first = cs[0]; // First character must be an underscore or letter if (first == '_' || Char.IsLetter(first) || UnicodeSpecsHelper.IsLetter(first)) { // Remaining Characters must be underscores, letters, numbers or hyphens for (int i = 1; i < cs.Length; i++) { char c = cs[i]; if (c == '_' || c == '-' || Char.IsLetterOrDigit(c) || UnicodeSpecsHelper.IsLetterOrDigit(c)) { // OK } else { // Invalid Character return(false); } } // If we get here it's all fine return(true); } else { // Invalid Start Character return(false); } } }