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; } }
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); }