public Token(TokenTypeName t_name, object val) { type_name = t_name; value_object = val; }
public CsdlToken(string tokenText, string alternativeName) { if (string.IsNullOrWhiteSpace(tokenText)) { throw new ArgumentNullException(nameof(tokenText)); } TokenText = tokenText; var separatorIndex = tokenText.IndexOf(NAME_TYPE_SEPARATOR); if (separatorIndex >= 0) { Name = tokenText.Substring(0, separatorIndex); if (string.IsNullOrEmpty(Name) || Name.Equals(CONTEXTUAL_TOKEN.ToString(CultureInfo.InvariantCulture), StringComparison.OrdinalIgnoreCase)) { Name = alternativeName; } if (Name.EndsWith(CONTEXTUAL_TOKEN.ToString(CultureInfo.InvariantCulture))) { IsContextual = true; Name = Name.TrimEnd(CONTEXTUAL_TOKEN); } // Checks if the token has an initializator, that changes its instance properties. var tokenTypeInitializator = tokenText.Substring(separatorIndex + 1, tokenText.Length - separatorIndex - 1); var initializatorStartIndex = tokenTypeInitializator.IndexOf(INITIALIZATOR_START); if (initializatorStartIndex >= 0) { TokenTypeName = tokenTypeInitializator.Substring(0, initializatorStartIndex); TokenPropertiesDictionary = new Dictionary <string, string>(); var initializatorEndIndex = tokenTypeInitializator.LastIndexOf(INITIALIZATOR_END); var initializatorValues = tokenTypeInitializator.Substring(initializatorStartIndex + 1, initializatorEndIndex - initializatorStartIndex - 1).Trim(); // Check if the initialization content is a JSON if (initializatorValues.Length > 0 && initializatorValues[0] == JSON_TOKEN_TYPE_PROPERTY_START && initializatorValues[initializatorValues.Length - 1] == JSON_TOKEN_TYPE_PROPERTY_END) { var jobject = JObject.Parse(initializatorValues); foreach (var jtoken in jobject) { TokenPropertiesDictionary.Add(jtoken.Key, jtoken.Value.ToString()); } } else if (!string.IsNullOrWhiteSpace(initializatorValues)) { TokenPropertiesDictionary.Add(DEFAULT_TOKEN_TYPE_PROPERTY, initializatorValues.Trim(DEFAULT_TOKEN_TYPE_PROPERTY_DELIMITER)); } } else { TokenTypeName = tokenTypeInitializator; } if (TokenTypeName.EndsWith(OPTIONAL_TOKEN.ToString(CultureInfo.InvariantCulture))) { IsOptional = true; TokenTypeName = TokenTypeName.TrimEnd(OPTIONAL_TOKEN); } if (TokenTypeName.EndsWith(INVERT_PARSING_TOKEN.ToString(CultureInfo.InvariantCulture))) { InvertParsing = true; TokenTypeName = TokenTypeName.TrimEnd(INVERT_PARSING_TOKEN); } } else { throw new ArgumentException($"Could not find the name type separator on token '{tokenText}'"); } }