private static void Tokenize(List <Token> tokens, Type dataType, Type defaultCriterionType) { if (!typeof(FilterCriterion).IsAssignableFrom(defaultCriterionType)) { throw new DataGridInternalException("The default criterion type should be derived from the FilterCriterion class."); } List <int> parserPriorities = new List <int>(); FilterParser.FillParserPriorityList(parserPriorities); FilterParser.Tokenize(parserPriorities, tokens); if ((tokens.Count == 1) && (tokens[0] is ValueToken)) { if (defaultCriterionType == typeof(ContainsFilterCriterion)) { // ContainsFilterCriterion has no keyword associated; it won't be handled when // building the criterion. Initialize it with the Value already in it. FilterCriterionToken containsToken = new FilterCriterionToken(( FilterCriterion )Activator.CreateInstance(defaultCriterionType, (( ValueToken )tokens[0]).Value)); tokens.Clear(); tokens.Add(containsToken); } else { // Insert the default token previous to the value. FilterCriterionToken defaultToken = new FilterCriterionToken(( FilterCriterion )Activator.CreateInstance(defaultCriterionType)); tokens.Insert(0, defaultToken); } } }
private static List <Token> GetTokens(string expression, Type dataType) { List <Token> tokens = new List <Token>(); FilterParser.LastError = null; FilterParser.PrepareExpressionTokens(expression, tokens); FilterParser.Tokenize(tokens, dataType, FilterParser.GetDefaultCriterionType(dataType)); FilterParser.TrimTokens(tokens); return(tokens); }