1 // SPDX-License-Identifier: GPL-2.0-or-later
5 * @brief Declaration file for FileFilter
11 #define POCO_NO_UNWINDOWS 1
12 #include <Poco/RegularExpression.h>
13 #include "UnicodeString.h"
16 * @brief FileFilter rule.
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.
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.
27 struct FileFilterElement
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)
35 FileFilterElement(const FileFilterElement* element) : regexp(element->_regex, element->_reOpts), _regex(element->_regex), _reOpts(element->_reOpts)
40 typedef std::shared_ptr<FileFilterElement> FileFilterElementPtr;
43 * @brief One actual filter.
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.
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) { }
64 static void EmptyFilterList(std::vector<FileFilterElementPtr> *filterList);
65 void CloneFrom(const FileFilter* filter);
68 typedef std::shared_ptr<FileFilter> FileFilterPtr;