85c77617b86724e92cc72addaaed260855760628
[claws.git] / src / matcher.h
1 #ifndef MATCHER_H
2
3 #define MATCHER_H
4
5 #include <sys/types.h>
6 #include <regex.h>
7 #include <glib.h>
8 #include "procmsg.h"
9
10 enum {
11         MATCHING_ALL,
12         MATCHING_SUBJECT,
13         MATCHING_NOT_SUBJECT,
14         MATCHING_FROM,
15         MATCHING_NOT_FROM,
16         MATCHING_TO,
17         MATCHING_NOT_TO,
18         MATCHING_CC,
19         MATCHING_NOT_CC,
20         MATCHING_TO_OR_CC,
21         MATCHING_NOT_TO_AND_NOT_CC,
22         MATCHING_AGE_GREATER,
23         MATCHING_AGE_LOWER,
24         MATCHING_NEWSGROUPS,
25         MATCHING_NOT_NEWSGROUPS,
26         MATCHING_HEADER,
27         MATCHING_NOT_HEADER,
28         MATCHING_MESSAGE,
29         MATCHING_NOT_MESSAGE,
30         MATCHING_HEADERS_PART,
31         MATCHING_NOT_HEADERS_PART,
32         MATCHING_BODY_PART,
33         MATCHING_NOT_BODY_PART,
34         MATCHING_SCORE,
35         MATCHING_MATCH,
36         MATCHING_REGEXP,
37         MATCHING_MATCHCASE,
38         MATCHING_REGEXPCASE
39 };
40
41 struct _MatcherProp {
42         int matchtype;
43         int criteria;
44         gchar * header;
45         gchar * expr;
46         int age;
47         regex_t * preg;
48         int error;
49 };
50
51 typedef struct _MatcherProp MatcherProp;
52
53 struct _MatcherList {
54         GSList * matchers;
55         gboolean bool_and;
56 };
57
58 typedef struct _MatcherList MatcherList;
59
60 MatcherProp * matcherprop_new(gint criteria, gchar * header,
61                               gint matchtype, gchar * expr,
62                               int age);
63 void matcherprop_free(MatcherProp * prop);
64 MatcherProp * matcherprop_parse(gchar ** str);
65
66 gboolean matcherprop_match(MatcherProp * prop, MsgInfo * info);
67
68 MatcherList * matcherlist_new(GSList * matchers, gboolean bool_and);
69 void matcherlist_free(MatcherList * cond);
70 MatcherList * matcherlist_parse(gchar ** str);
71
72 gboolean matcherlist_match(MatcherList * cond, MsgInfo * info);
73
74 gint matcher_parse_keyword(gchar ** str);
75 gint matcher_parse_number(gchar ** str);
76 gboolean matcher_parse_boolean_op(gchar ** str);
77 gchar * matcher_parse_regexp(gchar ** str);
78 gchar * matcher_parse_str(gchar ** str);
79 gchar * matcherprop_to_string(MatcherProp * matcher);
80 gchar * matcherlist_to_string(MatcherList * matchers);
81
82 #endif