コード例 #1
0
        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);
        }
コード例 #2
0
        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));
            }
        }
コード例 #3
0
ファイル: GrepEnginePlainText.cs プロジェクト: wfflzt/dnGrep
        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));
            }
        }
コード例 #4
0
ファイル: GrepEngineOpenXml.cs プロジェクト: dnGrep/dnGrep
        // 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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: GrepEngineOpenXml.cs プロジェクト: dnGrep/dnGrep
 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));
     }
 }
コード例 #7
0
ファイル: GrepEngineOpenXml.cs プロジェクト: dnGrep/dnGrep
        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);
        }
コード例 #8
0
ファイル: GrepEngineOpenXml.cs プロジェクト: dnGrep/dnGrep
        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));
            }
        }
コード例 #9
0
ファイル: GrepEngineOpenXml.cs プロジェクト: dnGrep/dnGrep
        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));
            }
        }
コード例 #10
0
ファイル: GrepEnginePlainText.cs プロジェクト: wfflzt/dnGrep
        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);
        }
コード例 #11
0
ファイル: GrepEnginePlainText.cs プロジェクト: wfflzt/dnGrep
        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);
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        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);
        }
コード例 #14
0
ファイル: GrepEnginePlainText.cs プロジェクト: dnGrep/dnGrep
        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);
        }