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