Example #1
0
        public HighlightMarker(string fullText, string searchText, IHighlightProcessor highlightProcessor = null, char[] searchTextDelimiters = null)
        {
            this.index = new List <Range>();
            this.highlightProcessor = highlightProcessor;

            this.FullText   = fullText;
            this.SearchText = searchText;

            if (searchTextDelimiters != null && searchTextDelimiters.Any())
            {
                this.SearchTextDelimiters = searchTextDelimiters;
            }
        }
Example #2
0
        private static IList <Range> CreateIndex(string fulltext, string searchtext, IHighlightProcessor processor, char[] delimiters)
        {
            if (string.IsNullOrEmpty(searchtext))
            {
                return(Enumerable.Empty <Range>().ToList());
            }

            var index         = new List <Range>();
            var searchStrings = searchtext.Trim().Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
            var fullTextItems = new List <string>();

            // Process fulltext using the configured highlight processor(s)
            if (processor == null)
            {
                fullTextItems.Add(fulltext);
            }
            else
            {
                var processedStrings = processor.GetFulltextItems(fulltext);
                if (processedStrings != null && processedStrings.Length > 0)
                {
                    fullTextItems.AddRange(processedStrings);
                }
            }

            // Build highlighting index
            foreach (string searchString in searchStrings)
            {
                int length = searchString.Length;

                foreach (var fullTextItem in fullTextItems.Distinct())
                {
                    int searchStringIndex = fullTextItem.IndexOf(searchString, 0, StringComparison.CurrentCultureIgnoreCase);

                    while (searchStringIndex >= 0)
                    {
                        index.Add(new Range(searchStringIndex, searchStringIndex + length));

                        int lastIndex = searchStringIndex + length;
                        searchStringIndex = fullTextItem.IndexOf(searchString, lastIndex, StringComparison.CurrentCultureIgnoreCase);
                    }
                }
            }

            return(index);
        }
 public static void SetHighlightProcessor(DependencyObject d, IHighlightProcessor value)
 {
     d.SetValue(HighlightProcessorProperty, value);
 }