From cfe9ee3ca1582c39492e8016253c2f19b0c29f5f Mon Sep 17 00:00:00 2001 From: Alfons Hoogervorst Date: Fri, 27 Dec 2002 16:19:46 +0000 Subject: [PATCH] re-organize matcher part 1 * src/matcher.h map yacc generated constants to sylpheed matcher constants * src/matcher.c add function to find a matcher constant from a string --- ChangeLog.claws | 9 ++++ configure.in | 2 +- src/matcher.c | 14 ++++++ src/matcher.h | 125 ++++++++++++++++++++++++++++-------------------- 4 files changed, 97 insertions(+), 53 deletions(-) diff --git a/ChangeLog.claws b/ChangeLog.claws index cf2712d4d..19f79b906 100644 --- a/ChangeLog.claws +++ b/ChangeLog.claws @@ -1,3 +1,12 @@ +2002-12-27 [alfons] 0.8.8claws12 + + re-organize matcher part 1 + + * src/matcher.h + map yacc generated constants to sylpheed matcher constants + * src/matcher.c + add function to find a matcher constant from a string + 2002-12-27 [christoph] 0.8.8claws11 * src/compose.c diff --git a/configure.in b/configure.in index 19d08fd9d..6ca120a19 100644 --- a/configure.in +++ b/configure.in @@ -11,7 +11,7 @@ MINOR_VERSION=8 MICRO_VERSION=8 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=claws11 +EXTRA_VERSION=claws12 VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION dnl set $target diff --git a/src/matcher.c b/src/matcher.c index c677fbfa4..ec4d27437 100644 --- a/src/matcher.c +++ b/src/matcher.c @@ -132,6 +132,20 @@ gchar * get_matchparser_tab_str(gint id) return NULL; } +gint get_matchparser_tab_id(const gchar *str) +{ + gint i; + + /* + * begs for a hash table + */ + for (i = 0; i < sizeof matchparser_tab / sizeof matchparser_tab[0]; i++) { + if (g_strcasecmp(matchparser_tab[i].str, str) == 0) + return matchparser_tab[i].id; + } + return -1; +} + /* matcher_escape_str() - escapes a string returns newly allocated escaped string */ gchar *matcher_escape_str(const gchar *str) { diff --git a/src/matcher.h b/src/matcher.h index 9b3488c1a..547878a72 100644 --- a/src/matcher.h +++ b/src/matcher.h @@ -26,13 +26,18 @@ #include #include "procmsg.h" +/* constants generated by yacc */ +#if !defined(YYBISON) && !defined(MATCHER_ALL) +# include "matcher_parser_parse.h" +#endif + struct _MatcherProp { int matchtype; int criteria; - gchar * header; - gchar * expr; + gchar *header; + gchar *expr; int value; - regex_t * preg; + regex_t *preg; int error; gboolean result; }; @@ -40,66 +45,82 @@ struct _MatcherProp { typedef struct _MatcherProp MatcherProp; struct _MatcherList { - GSList * matchers; + GSList *matchers; gboolean bool_and; }; typedef struct _MatcherList MatcherList; +/* map MATCHCRITERIA_ to yacc's MATCHER_ */ +#define MC_(name) \ + MATCHCRITERIA_ ## name = MATCHER_ ## name + +/* map MATCHTYPE_ to yacc's MATCHER_ */ +#define MT_(name) \ + MATCHTYPE_ ## name = MATCHER_ ## name + +/* map MATCHACTION_ to yacc's MATCHER_ */ +#define MA_(name) \ + MATCHACTION_ ## name = MATCHER_ ## name + +/* map MATCHBOOL_ to yacc's MATCHER_ */ +#define MB_(name) \ + MATCHERBOOL_ ## name = MATCHER_ ## name + enum { /* match */ - MATCHCRITERIA_ALL, - MATCHCRITERIA_UNREAD, MATCHCRITERIA_NOT_UNREAD, - MATCHCRITERIA_NEW, MATCHCRITERIA_NOT_NEW, - MATCHCRITERIA_MARKED, MATCHCRITERIA_NOT_MARKED, - MATCHCRITERIA_DELETED, MATCHCRITERIA_NOT_DELETED, - MATCHCRITERIA_REPLIED, MATCHCRITERIA_NOT_REPLIED, - MATCHCRITERIA_FORWARDED, MATCHCRITERIA_NOT_FORWARDED, - MATCHCRITERIA_LOCKED, MATCHCRITERIA_NOT_LOCKED, - MATCHCRITERIA_COLORLABEL, MATCHCRITERIA_NOT_COLORLABEL, - MATCHCRITERIA_SUBJECT, MATCHCRITERIA_NOT_SUBJECT, - MATCHCRITERIA_FROM, MATCHCRITERIA_NOT_FROM, - MATCHCRITERIA_TO, MATCHCRITERIA_NOT_TO, - MATCHCRITERIA_CC, MATCHCRITERIA_NOT_CC, - MATCHCRITERIA_TO_OR_CC, MATCHCRITERIA_NOT_TO_AND_NOT_CC, - MATCHCRITERIA_AGE_GREATER, MATCHCRITERIA_AGE_LOWER, - MATCHCRITERIA_NEWSGROUPS, MATCHCRITERIA_NOT_NEWSGROUPS, - MATCHCRITERIA_INREPLYTO, MATCHCRITERIA_NOT_INREPLYTO, - MATCHCRITERIA_REFERENCES, MATCHCRITERIA_NOT_REFERENCES, - MATCHCRITERIA_SCORE_GREATER, MATCHCRITERIA_SCORE_LOWER, - MATCHCRITERIA_HEADER, MATCHCRITERIA_NOT_HEADER, - MATCHCRITERIA_HEADERS_PART, MATCHCRITERIA_NOT_HEADERS_PART, - MATCHCRITERIA_MESSAGE, MATCHCRITERIA_NOT_MESSAGE, - MATCHCRITERIA_BODY_PART, MATCHCRITERIA_NOT_BODY_PART, - MATCHCRITERIA_EXECUTE, MATCHCRITERIA_NOT_EXECUTE, - MATCHCRITERIA_SCORE_EQUAL, - MATCHCRITERIA_SIZE_GREATER, - MATCHCRITERIA_SIZE_SMALLER, - MATCHCRITERIA_SIZE_EQUAL, + MC_(ALL), + MC_(UNREAD), MC_(NOT_UNREAD), + MC_(NEW), MC_(NOT_NEW), + MC_(MARKED), MC_(NOT_MARKED), + MC_(DELETED), MC_(NOT_DELETED), + MC_(REPLIED), MC_(NOT_REPLIED), + MC_(FORWARDED), MC_(NOT_FORWARDED), + MC_(LOCKED), MC_(NOT_LOCKED), + MC_(COLORLABEL), MC_(NOT_COLORLABEL), + MC_(SUBJECT), MC_(NOT_SUBJECT), + MC_(FROM), MC_(NOT_FROM), + MC_(TO), MC_(NOT_TO), + MC_(CC), MC_(NOT_CC), + MC_(TO_OR_CC), MC_(NOT_TO_AND_NOT_CC), + MC_(AGE_GREATER), MC_(AGE_LOWER), + MC_(NEWSGROUPS), MC_(NOT_NEWSGROUPS), + MC_(INREPLYTO), MC_(NOT_INREPLYTO), + MC_(REFERENCES), MC_(NOT_REFERENCES), + MC_(SCORE_GREATER), MC_(SCORE_LOWER), + MC_(HEADER), MC_(NOT_HEADER), + MC_(HEADERS_PART), MC_(NOT_HEADERS_PART), + MC_(MESSAGE), MC_(NOT_MESSAGE), + MC_(BODY_PART), MC_(NOT_BODY_PART), + MC_(EXECUTE), MC_(NOT_EXECUTE), + MC_(SCORE_EQUAL), + MC_(SIZE_GREATER), + MC_(SIZE_SMALLER), + MC_(SIZE_EQUAL), /* match type */ - MATCHTYPE_MATCHCASE, - MATCHTYPE_MATCH, - MATCHTYPE_REGEXPCASE, - MATCHTYPE_REGEXP, + MT_(MATCHCASE), + MT_(MATCH), + MT_(REGEXPCASE), + MT_(REGEXP), /* actions */ - MATCHACTION_SCORE, - MATCHACTION_EXECUTE, - MATCHACTION_MOVE, - MATCHACTION_COPY, - MATCHACTION_DELETE, - MATCHACTION_MARK, - MATCHACTION_UNMARK, - MATCHACTION_MARK_AS_READ, - MATCHACTION_MARK_AS_UNREAD, - MATCHACTION_FORWARD, - MATCHACTION_FORWARD_AS_ATTACHMENT, - MATCHACTION_COLOR, - MATCHACTION_REDIRECT, - MATCHACTION_DELETE_ON_SERVER, + MA_(SCORE), + MA_(EXECUTE), + MA_(MOVE), + MA_(COPY), + MA_(DELETE), + MA_(MARK), + MA_(UNMARK), + MA_(MARK_AS_READ), + MA_(MARK_AS_UNREAD), + MA_(FORWARD), + MA_(FORWARD_AS_ATTACHMENT), + MA_(COLOR), + MA_(REDIRECT), + MA_(DELETE_ON_SERVER), /* boolean operations */ - MATCHERBOOL_OR, - MATCHERBOOL_AND, + MB_(OR), + MB_(AND) }; gchar * get_matchparser_tab_str(gint id);