private static IHighlightingHandler MakeSelectionInplaceHighlightingHander( SelectionInfo selection, MessageTextGetter displayTextGetter, IWordSelection wordSelection, int cacheSize) { IHighlightingHandler newHandler = null; if (selection?.IsSingleLine == true) { var normSelection = selection.Normalize(); var text = displayTextGetter(normSelection.First.Message); var line = text.GetNthTextLine(normSelection.First.TextLineIndex); int beginIdx = normSelection.First.LineCharIndex; int endIdx = normSelection.Last.LineCharIndex; var selectedPart = line.SubString(beginIdx, endIdx - beginIdx); if (selectedPart.Any(c => !char.IsWhiteSpace(c))) { var options = new Search.Options() { Template = selectedPart, MessageTextGetter = displayTextGetter, }; var optionsPreprocessed = options.BeginSearch(); newHandler = new CachingHighlightingHandler(msg => GetSelectionHighlightingRanges(msg, optionsPreprocessed, wordSelection, (normSelection.First.Message, beginIdx + line.StartIndex - text.Text.StartIndex)), cacheSize); } } return(newHandler); }
public SearchHistoryEntry(Search.Options searchOptions) { Template = searchOptions.Template ?? ""; WholeWord = searchOptions.WholeWord; Regexp = searchOptions.Regexp; MatchCase = searchOptions.MatchCase; TypesToLookFor = searchOptions.ContentTypes; this.normalizedTemplate = !MatchCase?Template.ToLower() : Template; }
public static void GetUserFriendlySearchOptionsDescription(Search.Options so, StringBuilder stringBuilder) { if (!string.IsNullOrEmpty(so.Template)) { stringBuilder.Append(so.Template); } int flagIdx = 0; var types = so.ContentTypes; if (types != MessageFlag.ContentTypeMask) { if ((types & MessageFlag.Info) != 0) { AppendFlag(stringBuilder, "infos", ref flagIdx); } if ((types & MessageFlag.Warning) != 0) { AppendFlag(stringBuilder, "warnings", ref flagIdx); } if ((types & MessageFlag.Error) != 0) { AppendFlag(stringBuilder, "errors", ref flagIdx); } } if (so.Regexp) { AppendFlag(stringBuilder, "regexp", ref flagIdx); } if (so.WholeWord) { AppendFlag(stringBuilder, "whole word", ref flagIdx); } if (so.MatchCase) { AppendFlag(stringBuilder, "match case", ref flagIdx); } if (so.ReverseSearch) { AppendFlag(stringBuilder, "search up", ref flagIdx); } if (flagIdx > 0) { stringBuilder.Append(')'); } }
public Filter(FilterAction action, string initialName, bool enabled, Search.Options options, IFiltersFactory factory) { this.factory = factory; if (initialName == null) { throw new ArgumentNullException(nameof(initialName)); } this.initialName = initialName; this.enabled = enabled; this.action = action; this.options = options; // Filters ignores following flags passed. // Actually used values are provided later when filters are appied. this.options.ReverseSearch = false; InvalidateName(); }
void UpdateSelectionInplaceHighlightingFields() { Func <IMessage, IEnumerable <Tuple <int, int> > > newHandler = null; if (selection.IsSingleLine) { var normSelection = selection.Normalize(); var line = GetTextToDisplay(normSelection.First.Message).GetNthTextLine(normSelection.First.TextLineIndex); int beginIdx = normSelection.First.LineCharIndex; int endIdx = normSelection.Last.LineCharIndex; if (wordSelection.IsWordBoundary(line, beginIdx, endIdx)) { var selectedPart = line.SubString(beginIdx, endIdx - beginIdx); if (wordSelection.IsWord(selectedPart)) { var options = new Search.Options() { Template = selectedPart, SearchInRawText = presentationDataAccess.ShowRawMessages, }; var optionsPreprocessed = options.BeginSearch(); newHandler = msg => FindAllHightlighRanges(msg, optionsPreprocessed, options.ReverseSearch, wordSelection); } } } if ((selectionInplaceHighlightingHandler != null) != (newHandler != null)) { view.Invalidate(); } else if (newHandler != null) { view.Invalidate(); } selectionInplaceHighlightingHandler = newHandler; }
void TestCore(string text, string template, Search.MatchedTextRange?expectation, int?startPosition = null, bool re = false, bool wholeWord = false, bool reverse = false) { Search.Options opts = new Search.Options() { Template = template, Regexp = re, WholeWord = wholeWord, ReverseSearch = reverse }; var actual = opts.BeginSearch().SearchInText(new StringSlice(text), startPosition); if (expectation != null) { Assert.IsTrue(actual != null); Assert.AreEqual(expectation.Value.MatchBegin, actual.Value.MatchBegin); Assert.AreEqual(expectation.Value.MatchEnd, actual.Value.MatchEnd); Assert.AreEqual(expectation.Value.WholeTextMatched, actual.Value.WholeTextMatched); } else { Assert.IsTrue(actual == null); } }
async void DoSearch(bool reverseDirection) { var controlsState = view.GetCheckableControlsState(); var uds = quickSearchPresenter.CurrentSuggestion?.Data as IUserDefinedSearch; if (uds == null) { uds = (quickSearchPresenter.CurrentSuggestion?.Data as IUserDefinedSearchHistoryEntry)?.UDS; } Search.Options coreOptions = new Search.Options(); coreOptions.Template = quickSearchPresenter.Text; coreOptions.WholeWord = (controlsState & ViewCheckableControl.WholeWord) != 0; coreOptions.ReverseSearch = (controlsState & ViewCheckableControl.SearchUp) != 0; if (reverseDirection) { coreOptions.ReverseSearch = !coreOptions.ReverseSearch; } coreOptions.Regexp = (controlsState & ViewCheckableControl.RegExp) != 0; coreOptions.SearchInRawText = loadedMessagesPresenter.LogViewerPresenter.ShowRawMessages; if (loadedMessagesPresenter.LogViewerPresenter.FocusedMessage != null) { var focusedMsg = loadedMessagesPresenter.LogViewerPresenter.FocusedMessage; var targetSources = new List <ILogSource>(); var targetThreads = new List <IThread>(); if ((controlsState & ViewCheckableControl.SearchWithinThisThread) != 0) { targetThreads.Add(focusedMsg.Thread); } else if ((controlsState & ViewCheckableControl.SearchWithinCurrentLog) != 0) { targetSources.Add(focusedMsg.LogSource); } if (targetSources.Count != 0 || targetThreads.Count != 0) { coreOptions.Scope = filtersFactory.CreateScope(targetSources, targetThreads); } } coreOptions.MatchCase = (controlsState & ViewCheckableControl.MatchCase) != 0; coreOptions.ContentTypes = checkListBoxAndFlags .Where(i => (controlsState & i.Key) != 0) .Aggregate(MessageFlag.None, (contentTypes, i) => contentTypes |= i.Value); IFiltersList filters; if (uds != null) { filters = uds.Filters; filters = filters.Clone(); // clone to prevent filters from changing during ongoing search if (coreOptions.Scope != FiltersFactory.DefaultScope) { foreach (var f in filters.Items) { var tmp = f.Options; tmp.Scope = coreOptions.Scope; f.Options = tmp; } } } else { filters = filtersFactory.CreateFiltersList(FilterAction.Exclude, FiltersListPurpose.Search); filters.Insert(0, filtersFactory.CreateFilter(FilterAction.Include, "", true, coreOptions)); } var searchHistoryEntry = uds != null ? (ISearchHistoryEntry) new UserDefinedSearchHistoryEntry(uds) : new SearchHistoryEntry(coreOptions); if ((controlsState & ViewCheckableControl.SearchAllOccurences) != 0) { var searchOptions = new SearchAllOptions() { SearchInRawText = loadedMessagesPresenter.LogViewerPresenter.ShowRawMessages, Filters = filters }; if (uds != null) { searchOptions.SearchName = uds.Name; } if ((controlsState & ViewCheckableControl.SearchFromCurrentPosition) != 0) { searchOptions.StartPositions = await loadedMessagesPresenter.GetCurrentLogPositions( CancellationToken.None); } searchManager.SubmitSearch(searchOptions); ShowSearchResultPanel(true); } else if ((controlsState & ViewCheckableControl.QuickSearch) != 0) { var so = new LogViewer.SearchOptions() { Filters = filters, HighlightResult = true, SearchOnlyWithinFocusedMessage = false, ReverseSearch = coreOptions.ReverseSearch }; IMessage sr; try { if ((controlsState & ViewCheckableControl.SearchInSearchResult) != 0) { sr = await searchResultPresenter.Search(so); } else { sr = await loadedMessagesPresenter.LogViewerPresenter.Search(so); } } catch (Search.TemplateException) { alerts.ShowPopup("Error", "Error in search template", AlertFlags.Ok | AlertFlags.WarningIcon); return; } catch (OperationCanceledException) { return; } if (sr == null) { if (statusReportFactory != null) { statusReportFactory.CreateNewStatusReport().ShowStatusPopup("Search", GetUnseccessfulSearchMessage(searchHistoryEntry), true); } } } searchHistory.Add(searchHistoryEntry); }
IFilter IFiltersFactory.CreateFilter(FilterAction type, string initialName, bool enabled, Search.Options searchOptions) { return(new Filter(type, initialName, enabled, searchOptions, this)); }