private int GetPresetArgumentLength(string expressionString, ISearchExpressionContext context, out IPresetItem validItem) { var presetItems = GetPresetItems(context); var presetArgumentLength = -1; validItem = null; foreach (var item in presetItems) { var itemValue = context.IsInvariantCulture ? item.Id : item.DisplayValue; if (itemValue == null) { continue; } if (expressionString.StartsWith(itemValue, StringComparison.InvariantCultureIgnoreCase) && itemValue.Length > presetArgumentLength) { if (expressionString.Length == itemValue.Length) { presetArgumentLength = itemValue.Length; validItem = item; } else { foreach (var validTail in ValidNexts.OfType <IKeywordToken>()) { var keywordAlias = context.IsInvariantCulture ? validTail.SerializationAlias : validTail.Alias; var validTailIndex = expressionString.IndexOf(keywordAlias, itemValue.Length, StringComparison.InvariantCultureIgnoreCase); if (validTailIndex == itemValue.Length) { presetArgumentLength = itemValue.Length; validItem = item; break; } } if (presetArgumentLength == -1) { presetArgumentLength = itemValue.Length; validItem = item; } } } } return(presetArgumentLength); }
private int GetArgumentLegth(string expressionString, bool allowCustomValues) { var argumentLength = expressionString.Length; var validArgumentEndSymbols = allowCustomValues ? ValidNexts.OfType <IKeywordToken>().Select(x => x.Alias) : ValidNexts.OfType <IKeywordToken>().Select(x => x.Alias).Where(x => !string.IsNullOrWhiteSpace(x)); foreach (var endSymbol in validArgumentEndSymbols) { var length = expressionString.IndexOf(endSymbol, StringComparison.InvariantCultureIgnoreCase); if (length != -1 && length < argumentLength) { argumentLength = length; } } return(argumentLength); }