Beispiel #1
0
        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(')');
            }
        }
Beispiel #4
0
        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();
        }
Beispiel #5
0
        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;
        }
Beispiel #6
0
        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);
        }
Beispiel #8
0
 IFilter IFiltersFactory.CreateFilter(FilterAction type, string initialName, bool enabled, Search.Options searchOptions)
 {
     return(new Filter(type, initialName, enabled, searchOptions, this));
 }