OSDN Git Service

Avoid an assertion failure when loading settings from winmerge.ini
[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         FileFilterElement(const std::string &regex, int reOpts) : regexp(regex, reOpts)
31         {
32         }
33 };
34
35 typedef std::shared_ptr<FileFilterElement> FileFilterElementPtr;
36
37 /**
38  * @brief One actual filter.
39  *
40  * For example, this might be a GNU C filter, excluding *.o files and CVS
41  * directories. That is to say, a filter is a set of file masks and
42  * directory masks. Usually FileFilter contains rules from one filter
43  * definition file. So it can be thought as filter file contents.
44  * @sa FileFilterList
45  */
46 struct FileFilter
47 {
48         bool default_include;   /**< If true, filter rules are inclusive by default */
49         String name;                    /**< Filter name (shown in UI) */
50         String description;     /**< Filter description text */
51         String fullpath;                /**< Full path to filter file */
52         std::vector<FileFilterElementPtr> filefilters; /**< List of rules for files */
53         std::vector<FileFilterElementPtr> dirfilters;  /**< List of rules for directories */
54         FileFilter() : default_include(true) { }
55         ~FileFilter();
56         
57         static void EmptyFilterList(std::vector<FileFilterElementPtr> *filterList);
58 };
59
60 typedef std::shared_ptr<FileFilter> FileFilterPtr;