13ac3fab19145304049d02e72132bf24e81b39ba
[claws.git] / src / quote_fmt_lex.l
1 %option nounput never-interactive
2
3 %{
4 /*
5  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
6  * Copyright (c) 1999-2007 by Hiroyuki Yamamoto & The Claws Mail Team
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  */
22
23 #include "quote_fmt_lex.h"
24 #include "quote_fmt_parse.h"
25
26 %}
27
28 %option prefix="quote_fmt"
29 %option outfile="lex.yy.c"
30
31 %s S_NORMAL S_DATE
32
33 %{
34 /*
35  * see notes below.
36  */
37 int quote_fmt_firsttime = 1;
38 int line = -1;
39 %}
40
41 %%
42
43 %{
44 /*
45  * NOTES:
46  * this lex script used to use characters also in use
47  * by strftime() (which we want to use for custom
48  * time formats in replies and templates). to circumvent
49  * this we have to play a little bit with states.
50  *
51  * these are the characters we also want to use in the
52  * %D time customizer:
53  *
54  * %a %A %b %B %c %C %d %H %I %j %m %M %p %S %w %x %y %Y %Z
55  *
56  * you can use these characters too, but don't forget to
57  * prepend them with the <S_NORMAL> state.
58  *
59  * also there is also work around for resetting the state
60  * (firsttime variable). this assumes that yylex() will
61  * always return to S_NORMAL after quote fmt parsing is
62  * done.
63  */
64 %} 
65
66 %{
67         if (quote_fmt_firsttime) {
68                 BEGIN S_NORMAL;
69                 quote_fmt_firsttime = 0;
70         }       
71 %}
72
73 <S_NORMAL>"%X" /* cursor pos */ return SET_CURSOR_POS;
74 <S_NORMAL>"%A" /* email address */ return SHOW_MAIL_ADDRESS;
75 <S_NORMAL>"%c" /* cc */ return SHOW_CC;
76 <S_NORMAL>"%d" /* date */ return SHOW_DATE;
77 <S_NORMAL>"%D" /* date */ { BEGIN S_DATE; return SHOW_DATE_EXPR; }
78 <S_NORMAL>"%f" /* from */ return SHOW_FROM;
79 <S_NORMAL>"%F" /* first name */ return SHOW_FIRST_NAME;
80 <S_NORMAL>"%i" /* message-id */ return SHOW_MESSAGEID;
81 <S_NORMAL>"%I" /* initial of sender */ return SHOW_SENDER_INITIAL;
82 <S_NORMAL>"%m" /* message with no signature */ return SHOW_MESSAGE_NO_SIGNATURE;
83 <S_NORMAL>"%M" /* message */ return SHOW_MESSAGE;
84 <S_NORMAL>"%n" /* newsgroups */ return SHOW_NEWSGROUPS;
85 <S_NORMAL>"%N" /* full name */ return SHOW_FULLNAME;
86 <S_NORMAL>"%L" /* last name */ return SHOW_LAST_NAME;
87 <S_NORMAL>"%r" /* references */ return SHOW_REFERENCES;
88 <S_NORMAL>"%s" /* subject */ return SHOW_SUBJECT;
89 <S_NORMAL>"%t" /* to */ return SHOW_TO;
90 <S_NORMAL>"%T" /* current dictionary */ return SHOW_DICT;
91 <S_NORMAL>"%Q" /* quoted message */ return SHOW_QUOTED_MESSAGE;
92 <S_NORMAL>"%q" /* quoted message with no signature */ return SHOW_QUOTED_MESSAGE_NO_SIGNATURE;
93 <S_NORMAL>"%af" /* full name in compose account */ return SHOW_ACCOUNT_FULL_NAME;
94 <S_NORMAL>"%am" /* mail address in compose account */ return SHOW_ACCOUNT_MAIL_ADDRESS;
95 <S_NORMAL>"%an" /* compose account name itself */ return SHOW_ACCOUNT_NAME;
96 <S_NORMAL>"%ao" /* organization in compose account */ return SHOW_ACCOUNT_ORGANIZATION;
97 <S_NORMAL>"%aT" /* main dict (if enabled) in compose account */ return SHOW_ACCOUNT_DICT;
98 <S_NORMAL>"%ABc" /* completion of 'Cc' from the address book */ return SHOW_ADDRESSBOOK_COMPLETION_FOR_CC;
99 <S_NORMAL>"%ABf" /* completion of 'From' from the address book */ return SHOW_ADDRESSBOOK_COMPLETION_FOR_FROM;
100 <S_NORMAL>"%ABt" /* completion of 'To' from the address book */ return SHOW_ADDRESSBOOK_COMPLETION_FOR_TO;
101 "\\\%" /* % */ return SHOW_PERCENT;
102 "\\\\" /* \ */ return SHOW_BACKSLASH;
103 "\\t"|"\t" /* tab */ return SHOW_TAB;
104 "\\n"|"\n" /* return */ { if (yytext[0] == '\n') line++; return SHOW_EOL; }
105 "\\?" /* ? */ return SHOW_QUESTION_MARK;
106 "\\!" return SHOW_EXCLAMATION_MARK;
107 "\\|" return SHOW_PIPE;
108 "\\{" return SHOW_OPARENT;
109 "\\}" return SHOW_CPARENT;
110 "?d" /* query date */ return QUERY_DATE;
111 "?f" /* query from */ return QUERY_FROM;
112 "?N"|"?F"|"?L"|"?I" /* query from name */ return QUERY_FULLNAME;
113 "?s" /* query subject */ return QUERY_SUBJECT;
114 "?t" /* query to */ return QUERY_TO;
115 "?T" /* query current dictionary set and enabled */ return QUERY_DICT;
116 "?c" /* query cc */ return QUERY_CC;
117 "?n" /* query newsgroups */ return QUERY_NEWSGROUPS;
118 "?i" /* query message-id */ return QUERY_MESSAGEID;
119 "?r" /* query references */ return QUERY_REFERENCES;
120 "?af" /* query full name in compose account */ return QUERY_ACCOUNT_FULL_NAME;
121 "?ao" /* query organization in compose account */ return QUERY_ACCOUNT_ORGANIZATION;
122 "?aT" /* query account main dict enabled */ return QUERY_ACCOUNT_DICT;
123 "?ABc" /* query completion for 'Cc' in address book */ return QUERY_CC_FOUND_IN_ADDRESSBOOK;
124 "?ABf" /* query completion for 'From' in address book */ return QUERY_FROM_FOUND_IN_ADDRESSBOOK;
125 "?ABt" /* query completion for 'To' in address book */ return QUERY_TO_FOUND_IN_ADDRESSBOOK;
126 "|f" /* insert file */ return INSERT_FILE;
127 "|p" /* insert program output */ return INSERT_PROGRAMOUTPUT;
128 "|i" /* insert user input */ return INSERT_USERINPUT;
129 "!d" /* query date */ return QUERY_NOT_DATE;
130 "!f" /* query from */ return QUERY_NOT_FROM;
131 "!N"|"!F"|"!L"|"!I" /* query not(from name) */ return QUERY_NOT_FULLNAME;
132 "!s" /* query not(subject) */ return QUERY_NOT_SUBJECT;
133 "!t" /* query not(to) */ return QUERY_NOT_TO;
134 "!T" /* query not(current dictionary set and enabled) */ return QUERY_NOT_DICT;
135 "!c" /* query not(cc) */ return QUERY_NOT_CC;
136 "!n" /* query not(newsgroups) */ return QUERY_NOT_NEWSGROUPS;
137 "!i" /* query not(message-id) */ return QUERY_NOT_MESSAGEID;
138 "!r" /* query not(references) */ return QUERY_NOT_REFERENCES;
139 "!af" /* query not(full name in compose account) */ return QUERY_NOT_ACCOUNT_FULL_NAME;
140 "!ao" /* query not(organization in compose account) */ return QUERY_NOT_ACCOUNT_ORGANIZATION;
141 "!aT" /* query not(account main dict enabled and set) */ return QUERY_NOT_ACCOUNT_DICT;
142 "!ABc" /* query not(completion for 'Cc' in address book) */ return QUERY_NOT_CC_FOUND_IN_ADDRESSBOOK;
143 "!ABf" /* query not(completion for 'From' in address book) */ return QUERY_NOT_FROM_FOUND_IN_ADDRESSBOOK;
144 "!ABt" /* query not(completion for 'To' in address book) */ return QUERY_NOT_TO_FOUND_IN_ADDRESSBOOK;
145 <S_DATE>"{" return OPARENT;
146 <S_DATE>"}" { BEGIN S_NORMAL; return CPARENT; }
147 <S_NORMAL>"{" return OPARENT;
148 <S_NORMAL>"}" return CPARENT;
149 . { yylval.chr = yytext[0]; return CHARACTER; }
150
151 %%