OSDN Git Service

Merge branch 'master' of https://github.com/winmerge/winmerge into jp
[winmerge-jp/winmerge-jp.git] / Src / FileFilter.h
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /** 
3  * @file  FileFilter.h
4  *
5  * @brief Declaration file for FileFilter
6  */
7 #pragma once
8
9 #include <vector>
10 #include <memory>
11 #define POCO_NO_UNWINDOWS 1
12 #include <Poco/RegularExpression.h>
13 #include "UnicodeString.h"
14
15 /**
16  * @brief FileFilter rule.
17  *
18  * Contains one filtering element definition (rule). In addition to
19  * regular expression there is boolean value for defining if rule
20  * is inclusive or exclusive. File filters have global inclusive/exclusive
21  * selection but this per-rule setting overwrites it.
22  *
23  * We are using PCRE for regular expressions and pRegExp points to compiled
24  * regular expression. pRegExpExtra contains additional information about
25  * the expression used to optimize matching.
26  */
27 struct FileFilterElement
28 {
29         Poco::RegularExpression regexp; /**< Compiled regular expression */
30         std::string _regex; /**< Regular expression string to set to Poco::RegularExpression */
31         int _reOpts; /**< Options to set to Poco::RegularExpression */
32         FileFilterElement(const std::string& regex, int reOpts) : regexp(regex, reOpts), _regex(regex), _reOpts(reOpts)
33         {
34         }
35         FileFilterElement(const FileFilterElement* element) : regexp(element->_regex, element->_reOpts), _regex(element->_regex), _reOpts(element->_reOpts)
36         {
37         }
38 };
39
40 typedef std::shared_ptr<FileFilterElement> FileFilterElementPtr;
41
42 /**
43  * @brief One actual filter.
44  *
45  * For example, this might be a GNU C filter, excluding *.o files and CVS
46  * directories. That is to say, a filter is a set of file masks and
47  * directory masks. Usually FileFilter contains rules from one filter
48  * definition file. So it can be thought as filter file contents.
49  * @sa FileFilterList
50  */
51 struct FileFilter
52 {
53         bool default_include;   /**< If true, filter rules are inclusive by default */
54         String name;                    /**< Filter name (shown in UI) */
55         String description;     /**< Filter description text */
56         String fullpath;                /**< Full path to filter file */
57         std::vector<FileFilterElementPtr> filefilters; /**< List of rules for files */
58         std::vector<FileFilterElementPtr> filefiltersExclude; /**< List of rules for files (exclude) */
59         std::vector<FileFilterElementPtr> dirfilters;  /**< List of rules for directories */
60         std::vector<FileFilterElementPtr> dirfiltersExclude;  /**< List of rules for directories (exclude) */
61         FileFilter() : default_include(true) { }
62         ~FileFilter();
63         
64         static void EmptyFilterList(std::vector<FileFilterElementPtr> *filterList);
65         void CloneFrom(const FileFilter* filter);
66 };
67
68 typedef std::shared_ptr<FileFilter> FileFilterPtr;