sync with 0.9.10claws57 HEAD
[claws.git] / src / quote_fmt_lex.l
1 %{
2 #include "quote_fmt_lex.h"
3 #include "quote_fmt_parse.h"
4
5 #define YY_NO_UNPUT 1
6 %}
7
8 %option prefix="quote_fmt"
9 %option outfile="lex.yy.c"
10
11 %s S_NORMAL S_DATE
12
13 %{
14 /*
15  * see notes below.
16  */
17 static int firsttime = 1;
18 %}
19
20 %%
21
22 %{
23 /*
24  * NOTES:
25  * this lex script used to use characters also in use
26  * by strftime() (which we want to use for custom
27  * time formats in replies and templates). to circumvent
28  * this we have to play a little bit with states.
29  *
30  * these are the characters we also want to use in the
31  * %D time customizer:
32  *
33  * %a %A %b %B %c %C %d %H %I %j %m %M %p %S %w %x %y %Y %Z
34  *
35  * you can use these characters too, but don't forget to
36  * prepend them with the <S_NORMAL> state.
37  *
38  * also there is also work around for resetting the state
39  * (firsttime variable). this assumes that yylex() will
40  * always return to S_NORMAL after quote fmt parsing is
41  * done.
42  */
43 %} 
44
45 %{
46         if (firsttime) {
47                 BEGIN S_NORMAL;
48                 firsttime = 0;
49         }       
50 %}
51
52 <S_NORMAL>"%X" /* cursor pos */ return SET_CURSOR_POS;
53 <S_NORMAL>"%c" /* cc */ return SHOW_CC;
54 <S_NORMAL>"%d" /* date */ return SHOW_DATE;
55 <S_NORMAL>"%D" /* date */ { BEGIN S_DATE; return SHOW_DATE_EXPR; }
56 <S_NORMAL>"%f" /* from */ return SHOW_FROM;
57 <S_NORMAL>"%F" /* first name */ return SHOW_FIRST_NAME;
58 <S_NORMAL>"%i" /* message-id */ return SHOW_MESSAGEID;
59 <S_NORMAL>"%I" /* initial of sender */ return SHOW_SENDER_INITIAL;
60 <S_NORMAL>"%m" /* message with no signature */ return SHOW_MESSAGE_NO_SIGNATURE;
61 <S_NORMAL>"%M" /* message */ return SHOW_MESSAGE;
62 <S_NORMAL>"%n" /* newsgroups */ return SHOW_NEWSGROUPS;
63 <S_NORMAL>"%N" /* full name */ return SHOW_FULLNAME;
64 <S_NORMAL>"%L" /* last name */ return SHOW_LAST_NAME;
65 <S_NORMAL>"%r" /* references */ return SHOW_REFERENCES;
66 <S_NORMAL>"%s" /* subject */ return SHOW_SUBJECT;
67 <S_NORMAL>"%t" /* to */ return SHOW_TO;
68 <S_NORMAL>"%Q" /* quoted message */ return SHOW_QUOTED_MESSAGE;
69 <S_NORMAL>"%q" /* quoted message with no signature */ return SHOW_QUOTED_MESSAGE_NO_SIGNATURE;
70 "\\\%" /* % */ return SHOW_PERCENT;
71 "\\\\" /* \ */ return SHOW_BACKSLASH;
72 "\\t"|"\t" /* tab */ return SHOW_TAB;
73 "\\n"|"\n" /* return */ return SHOW_EOL;
74 "\\?" /* ? */ return SHOW_QUESTION_MARK;
75 "\\|" return SHOW_PIPE;
76 "\\{" return SHOW_OPARENT;
77 "\\}" return SHOW_CPARENT;
78 "?d" /* query date */ return QUERY_DATE;
79 "?f" /* query from */ return QUERY_FROM;
80 "?N"|"?F"|"?I" /* query from name */ return QUERY_FULLNAME;
81 "?s" /* query subject */ return QUERY_SUBJECT;
82 "?t" /* query to */ return QUERY_TO;
83 "?c" /* query cc */ return QUERY_CC;
84 "?n" /* query newsgroups */ return QUERY_NEWSGROUPS;
85 "?i" /* query message-id */ return QUERY_MESSAGEID;
86 "?r" /* query references */ return QUERY_REFERENCES;
87 "|f" /* insert file */ return INSERT_FILE;
88 "|p" /* insert program output */ return INSERT_PROGRAMOUTPUT;
89 <S_DATE>"{" return OPARENT;
90 <S_DATE>"}" { BEGIN S_NORMAL; return CPARENT; }
91 <S_NORMAL>"{" return OPARENT;
92 <S_NORMAL>"}" return CPARENT;
93 . { yylval.chr = yytext[0]; return CHARACTER; }
94
95 %%