public List <GrepSearchResult> Search(string file, string searchPattern, SearchType searchType, GrepSearchOption searchOptions, Encoding encoding) { load(); SearchDelegates.DoSearch searchMethodMultiline = doTextSearchCaseSensitive; switch (searchType) { case SearchType.PlainText: case SearchType.XPath: if ((searchOptions & GrepSearchOption.CaseSensitive) == GrepSearchOption.CaseSensitive) { searchMethodMultiline = doTextSearchCaseSensitive; } else { searchMethodMultiline = doTextSearchCaseInsensitive; } break; case SearchType.Regex: searchMethodMultiline = doRegexSearch; break; case SearchType.Soundex: searchMethodMultiline = doFuzzySearchMultiline; break; } List <GrepSearchResult> result = searchMultiline(file, searchPattern, searchOptions, searchMethodMultiline); return(result); }
public List <GrepSearchResult> Search(Stream input, string fileName, string searchPattern, SearchType searchType, GrepSearchOption searchOptions, Encoding encoding) { SearchDelegates.DoSearch searchMethod = DoTextSearch; switch (searchType) { case SearchType.PlainText: searchMethod = DoTextSearch; break; case SearchType.Regex: searchMethod = DoRegexSearch; break; case SearchType.XPath: searchMethod = DoXPathSearch; break; case SearchType.Soundex: searchMethod = DoFuzzySearch; break; } if (searchOptions.HasFlag(GrepSearchOption.Multiline) || searchType == SearchType.XPath) { return(SearchMultiline(input, fileName, searchPattern, searchOptions, searchMethod, encoding)); } else { return(Search(input, fileName, searchPattern, searchOptions, searchMethod, encoding)); } }
public List <GrepSearchResult> Search(Stream input, string fileName, string searchPattern, SearchType searchType, GrepSearchOption searchOptions, Encoding encoding) { SearchDelegates.DoSearch searchMethod = doTextSearchCaseSensitive; switch (searchType) { case SearchType.PlainText: if ((searchOptions & GrepSearchOption.CaseSensitive) == GrepSearchOption.CaseSensitive) { searchMethod = doTextSearchCaseSensitive; } else { searchMethod = doTextSearchCaseInsensitive; } break; case SearchType.Regex: searchMethod = doRegexSearch; break; case SearchType.XPath: searchMethod = doXPathSearch; break; case SearchType.Soundex: searchMethod = doFuzzySearchMultiline; break; } if ((searchOptions & GrepSearchOption.Multiline) == GrepSearchOption.Multiline || searchType == SearchType.XPath) { return(searchMultiline(input, fileName, searchPattern, searchOptions, searchMethod, encoding)); } else { return(search(input, fileName, searchPattern, searchOptions, searchMethod, encoding)); } }
// the stream version will get called if the file is in an archive public List <GrepSearchResult> Search(Stream input, string fileName, string searchPattern, SearchType searchType, GrepSearchOption searchOptions, Encoding encoding) { SearchDelegates.DoSearch searchMethodMultiline = DoTextSearch; switch (searchType) { case SearchType.PlainText: case SearchType.XPath: searchMethodMultiline = DoTextSearch; break; case SearchType.Regex: searchMethodMultiline = DoRegexSearch; break; case SearchType.Soundex: searchMethodMultiline = DoFuzzySearch; break; } List <GrepSearchResult> result = SearchMultiline(input, fileName, searchPattern, searchOptions, searchMethodMultiline); return(result); }
private List <GrepSearchResult> searchMultiline(string file, string searchPattern, GrepSearchOption searchOptions, SearchDelegates.DoSearch searchMethod) { List <GrepSearchResult> searchResults = new List <GrepSearchResult>(); try { // Open a given Word document as readonly object wordDocument = openDocument(file, true); if (wordDocument != null) { // Get Selection Property wordSelection = wordApplication.GetType().InvokeMember("Selection", BindingFlags.GetProperty, null, wordApplication, null); // create range and find objects object range = getProperty(wordDocument, "Content"); // create text object text = getProperty(range, "Text"); var lines = searchMethod(-1, Utils.CleanLineBreaks(text.ToString()), searchPattern, searchOptions, true); if (lines.Count > 0) { GrepSearchResult result = new GrepSearchResult(file, searchPattern, lines, Encoding.Default); using (StringReader reader = new StringReader(text.ToString())) { result.SearchResults = Utils.GetLinesEx(reader, result.Matches, linesBefore, linesAfter); } result.ReadOnly = true; searchResults.Add(result); } closeDocument(wordDocument); } } catch (Exception ex) { logger.Log <Exception>(LogLevel.Error, "Failed to search inside Word file", ex); } finally { releaseSelection(); } return(searchResults); }
private void SearchExcel(Stream stream, string file, string searchPattern, GrepSearchOption searchOptions, SearchDelegates.DoSearch searchMethod, List <GrepSearchResult> searchResults) { try { var sheets = ExcelReader.ExtractExcelText(stream); foreach (var kvPair in sheets) { var lines = searchMethod(-1, 0, kvPair.Value, searchPattern, searchOptions, true); if (lines.Count > 0) { GrepSearchResult result = new GrepSearchResult(file, searchPattern, lines, Encoding.Default) { AdditionalInformation = " " + TranslationSource.Format(Resources.Main_ExcelSheetName, kvPair.Key) }; using (StringReader reader = new StringReader(kvPair.Value)) { result.SearchResults = Utils.GetLinesEx(reader, result.Matches, initParams.LinesBefore, initParams.LinesAfter); } result.ReadOnly = true; searchResults.Add(result); } } } catch (Exception ex) { logger.Error(ex, string.Format("Failed to search inside Excel file '{0}'", file)); } }
private List <GrepSearchResult> SearchMultiline(Stream input, string file, string searchPattern, GrepSearchOption searchOptions, SearchDelegates.DoSearch searchMethod) { List <GrepSearchResult> searchResults = new List <GrepSearchResult>(); string ext = Path.GetExtension(file); if (ext.StartsWith(".doc", StringComparison.OrdinalIgnoreCase)) { SearchWord(input, file, searchPattern, searchOptions, searchMethod, searchResults); } else if (ext.StartsWith(".xls", StringComparison.OrdinalIgnoreCase)) { SearchExcel(input, file, searchPattern, searchOptions, searchMethod, searchResults); } else if (ext.StartsWith(".ppt", StringComparison.OrdinalIgnoreCase)) { SearchPowerPoint(input, file, searchPattern, searchOptions, searchMethod, searchResults); } return(searchResults); }
private void SearchPowerPoint(Stream stream, string file, string searchPattern, GrepSearchOption searchOptions, SearchDelegates.DoSearch searchMethod, List <GrepSearchResult> searchResults) { try { var slides = PowerPointReader.ExtractPowerPointText(stream); foreach (var slide in slides) { var lines = searchMethod(-1, 0, slide.Item2, searchPattern, searchOptions, true); if (lines.Count > 0) { GrepSearchResult result = new GrepSearchResult(file, searchPattern, lines, Encoding.Default) { AdditionalInformation = " " + TranslationSource.Format(Resources.Main_PowerPointSlideNumber, slide.Item1) }; using (StringReader reader = new StringReader(slide.Item2)) { result.SearchResults = Utils.GetLinesEx(reader, result.Matches, initParams.LinesBefore, initParams.LinesAfter); } result.ReadOnly = true; searchResults.Add(result); } } } catch (Exception ex) { logger.Error(ex, string.Format("Failed to search inside PowerPoint file '{0}'", file)); } }
private void SearchWord(Stream stream, string file, string searchPattern, GrepSearchOption searchOptions, SearchDelegates.DoSearch searchMethod, List <GrepSearchResult> searchResults) { try { var text = WordReader.ExtractWordText(stream); var lines = searchMethod(-1, 0, text, searchPattern, searchOptions, true); if (lines.Count > 0) { GrepSearchResult result = new GrepSearchResult(file, searchPattern, lines, Encoding.Default); using (StringReader reader = new StringReader(text)) { result.SearchResults = Utils.GetLinesEx(reader, result.Matches, initParams.LinesBefore, initParams.LinesAfter); } result.ReadOnly = true; searchResults.Add(result); } } catch (Exception ex) { logger.Error(ex, string.Format("Failed to search inside Word file '{0}'", file)); } }
private List <GrepSearchResult> searchMultiline(Stream input, string fileName, string searchPattern, GrepSearchOption searchOptions, SearchDelegates.DoSearch searchMethod, Encoding encoding) { List <GrepSearchResult> searchResults = new List <GrepSearchResult>(); using (StreamReader readStream = new StreamReader(input, encoding)) { string fileBody = readStream.ReadToEnd(); var lines = searchMethod(fileBody, searchPattern, searchOptions, true); //Utils.CleanResults(ref lines); if (lines.Count > 0) { searchResults.Add(new GrepSearchResult(fileName, searchPattern, lines)); } } return(searchResults); }
private List <GrepSearchResult> search(Stream input, string fileName, string searchPattern, GrepSearchOption searchOptions, SearchDelegates.DoSearch searchMethod, Encoding encoding) { List <GrepSearchResult> searchResults = new List <GrepSearchResult>(); using (StreamReader readStream = new StreamReader(input, encoding)) { string line = null; int counter = 1; int charCounter = 0; List <GrepSearchResult.GrepMatch> matches = new List <GrepSearchResult.GrepMatch>(); while (readStream.Peek() >= 0) { line = readStream.ReadLine(true); if (Utils.CancelSearch) { return(searchResults); } List <GrepSearchResult.GrepMatch> results = searchMethod(line, searchPattern, searchOptions, false); if (results.Count > 0) { foreach (GrepSearchResult.GrepMatch m in results) { matches.Add(new GrepSearchResult.GrepMatch(0, m.StartLocation + charCounter, (int)m.Length)); } } charCounter += line.Length; counter++; } if (matches.Count > 0) { searchResults.Add(new GrepSearchResult(fileName, searchPattern, matches)); } } return(searchResults); }
private List <GrepSearchResult> SearchMultiline(string file, string searchPattern, GrepSearchOption searchOptions, SearchDelegates.DoSearch searchMethod) { List <GrepSearchResult> searchResults = new List <GrepSearchResult>(); try { // Open a given Word document as readonly object wordDocument = OpenDocument(file, true); if (wordDocument != null) { // create range and find objects object range = GetProperty(wordDocument, "Content"); // create text object text = GetProperty(range, "Text"); string docText = Utils.CleanLineBreaks(text.ToString()); var lines = searchMethod(-1, 0, docText, searchPattern, searchOptions, true); if (lines.Count > 0) { GrepSearchResult result = new GrepSearchResult(file, searchPattern, lines, Encoding.Default); using (StringReader reader = new StringReader(docText)) { result.SearchResults = Utils.GetLinesEx(reader, result.Matches, initParams.LinesBefore, initParams.LinesAfter); } result.ReadOnly = true; searchResults.Add(result); } CloseDocument(wordDocument); } } catch (Exception ex) { logger.Error(ex, "Failed to search inside Word file"); } return(searchResults); }
private List <GrepSearchResult> Search(Stream input, string fileName, string searchPattern, GrepSearchOption searchOptions, SearchDelegates.DoSearch searchMethod, Encoding encoding) { List <GrepSearchResult> searchResults = new List <GrepSearchResult>(); using (StreamReader baseReader = new StreamReader(input, encoding)) { using (EolReader readStream = new EolReader(baseReader)) { string line = null; int lineNumber = 1; int filePosition = 0; List <GrepMatch> matches = new List <GrepMatch>(); while (!readStream.EndOfStream) { line = readStream.ReadLine(); if (Utils.CancelSearch) { return(searchResults); } List <GrepMatch> results = searchMethod(lineNumber, filePosition, line, searchPattern, searchOptions, false); if (results.Count > 0) { foreach (GrepMatch m in results) { //matches.Add(new GrepMatch(lineNumber, m.StartLocation + filePosition, m.Length)); matches.Add(m); } } filePosition += line.Length; lineNumber++; } if (matches.Count > 0) { searchResults.Add(new GrepSearchResult(fileName, searchPattern, matches, encoding)); } } } return(searchResults); }
private List <GrepSearchResult> SearchMultiline(Stream input, string fileName, string searchPattern, GrepSearchOption searchOptions, SearchDelegates.DoSearch searchMethod, Encoding encoding) { List <GrepSearchResult> searchResults = new List <GrepSearchResult>(); using (StreamReader readStream = new StreamReader(input, encoding, false, 4096, true)) { string fileBody = readStream.ReadToEnd(); var matches = searchMethod(-1, 0, fileBody, searchPattern, searchOptions, true); if (matches.Count > 0) { searchResults.Add(new GrepSearchResult(fileName, searchPattern, matches, encoding)); } } return(searchResults); }