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 bool _fileNameOnly; /**< If true, indicates that the filter matches only filenames */
33 FileFilterElement(const std::string& regex, int reOpts, bool fileFilter) :
34 regexp(regex, reOpts), _regex(regex), _reOpts(reOpts), _fileNameOnly(fileFilter && regex.find("\\\\", 0) == String::npos && regex.find_first_of(":/") == String::npos)
37 FileFilterElement(const FileFilterElement* element) :
38 regexp(element->_regex, element->_reOpts), _regex(element->_regex), _reOpts(element->_reOpts), _fileNameOnly(element->_fileNameOnly)
43 typedef std::shared_ptr<FileFilterElement> FileFilterElementPtr;
46 * @brief One actual filter.
48 * For example, this might be a GNU C filter, excluding *.o files and CVS
49 * directories. That is to say, a filter is a set of file masks and
50 * directory masks. Usually FileFilter contains rules from one filter
51 * definition file. So it can be thought as filter file contents.
56 bool default_include; /**< If true, filter rules are inclusive by default */
57 String name; /**< Filter name (shown in UI) */
58 String description; /**< Filter description text */
59 String fullpath; /**< Full path to filter file */
60 std::vector<FileFilterElementPtr> filefilters; /**< List of rules for files */
61 std::vector<FileFilterElementPtr> filefiltersExclude; /**< List of rules for files (exclude) */
62 std::vector<FileFilterElementPtr> dirfilters; /**< List of rules for directories */
63 std::vector<FileFilterElementPtr> dirfiltersExclude; /**< List of rules for directories (exclude) */
64 FileFilter() : default_include(true) { }
67 static void EmptyFilterList(std::vector<FileFilterElementPtr> *filterList);
68 void CloneFrom(const FileFilter* filter);
71 typedef std::shared_ptr<FileFilter> FileFilterPtr;