5 #include "matcher_parser_lex.h"
6 #include "matcher_parser_parse.h"
8 #define MAX_STR_CONST 512
11 char string_buf[MAX_STR_CONST];
12 char * string_buf_ptr;
14 static void add_char(char ch)
16 if (string_buf_ptr - string_buf < sizeof(string_buf))
17 *string_buf_ptr++ = ch;
21 /* this function will reinitializes the parser */
23 void matcher_parser_init(void)
29 %option prefix="matcher_parser"
30 %option outfile="lex.yy.c"
38 "all" return MATCHER_ALL;
39 "unread" return MATCHER_UNREAD;
40 "~unread" return MATCHER_NOT_UNREAD;
41 "new" return MATCHER_NEW;
42 "~new" return MATCHER_NOT_NEW;
43 "marked" return MATCHER_MARKED;
44 "~marked" return MATCHER_NOT_MARKED;
45 "deleted" return MATCHER_DELETED;
46 "~deleted" return MATCHER_NOT_DELETED;
47 "replied" return MATCHER_REPLIED;
48 "~replied" return MATCHER_NOT_REPLIED;
49 "forwarded" return MATCHER_FORWARDED;
50 "~forwarded" return MATCHER_NOT_FORWARDED;
51 "subject" return MATCHER_SUBJECT;
52 "~subject" return MATCHER_NOT_SUBJECT;
53 "from" return MATCHER_FROM;
54 "~from" return MATCHER_NOT_FROM;
55 "to" return MATCHER_TO;
56 "~to" return MATCHER_NOT_TO;
57 "cc" return MATCHER_CC;
58 "~cc" return MATCHER_NOT_CC;
59 "to_or_cc" return MATCHER_TO_OR_CC;
60 "~to_or_cc" return MATCHER_NOT_TO_AND_NOT_CC;
61 "age_greater" return MATCHER_AGE_GREATER;
62 "age_lower" return MATCHER_AGE_LOWER;
63 "newsgroups" return MATCHER_NEWSGROUPS;
64 "~newsgroups" return MATCHER_NOT_NEWSGROUPS;
65 "inreplyto" return MATCHER_INREPLYTO;
66 "~inreplyto" return MATCHER_NOT_INREPLYTO;
67 "references" return MATCHER_REFERENCES;
68 "~references" return MATCHER_NOT_REFERENCES;
69 "score_greater" return MATCHER_SCORE_GREATER;
70 "score_lower" return MATCHER_SCORE_LOWER;
71 "score_equal" return MATCHER_SCORE_EQUAL;
72 "size_greater" return MATCHER_SIZE_GREATER;
73 "size_smaller" return MATCHER_SIZE_SMALLER;
74 "size_equal" return MATCHER_SIZE_EQUAL;
75 "header" return MATCHER_HEADER;
76 "~header" return MATCHER_NOT_HEADER;
77 "headers_part" return MATCHER_HEADERS_PART;
78 "~headers_part" return MATCHER_NOT_HEADERS_PART;
79 "message" return MATCHER_MESSAGE;
80 "~message" return MATCHER_NOT_MESSAGE;
81 "body_part" return MATCHER_BODY_PART;
82 "~body_part" return MATCHER_NOT_BODY_PART;
83 "execute" return MATCHER_EXECUTE;
84 "~execute" return MATCHER_NOT_EXECUTE;
85 "matchcase" return MATCHER_MATCHCASE;
86 "match" return MATCHER_MATCH;
87 "regexpcase" return MATCHER_REGEXPCASE;
88 "regexp" return MATCHER_REGEXP;
89 "score" return MATCHER_SCORE;
90 "move" return MATCHER_MOVE;
91 "copy" return MATCHER_COPY;
92 "delete" return MATCHER_DELETE;
93 "mark" return MATCHER_MARK;
94 "unmark" return MATCHER_UNMARK;
95 "mark_as_read" return MATCHER_MARK_AS_READ;
96 "mark_as_unread" return MATCHER_MARK_AS_UNREAD;
97 "forward" return MATCHER_FORWARD;
98 "forward_as_attachment" return MATCHER_FORWARD_AS_ATTACHMENT;
99 "color" return MATCHER_COLOR;
100 "redirect" return MATCHER_REDIRECT;
101 "delete_on_server" return MATCHER_DELETE_ON_SERVER;
103 "\n" return MATCHER_EOL;
104 "&" return MATCHER_AND;
105 "|" return MATCHER_OR;
108 string_buf_ptr = string_buf;
110 /* alfons - OK, the new attempt is to just swallow
111 * *EVERYTHING* and make sure everything is escaped
112 * when actually performing things. */
114 /* take care of escaped \" because this means the
115 * quote char should be skipped */
120 /* get out of the state: string ends. */
122 *string_buf_ptr = '\0';
123 yylval.str = string_buf;
124 return MATCHER_STRING;
126 /* put everything else in the output. */
132 yylval.str = yytext + 1;
133 yytext[strlen(yytext) - 1] = '\0';
134 return MATCHER_SECTION;
138 return MATCHER_INTEGER;