%option nounput never-interactive %{ /* * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client * Copyright (c) 1999-2007 by Hiroyuki Yamamoto & The Claws Mail Team * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "quote_fmt_lex.h" #include "quote_fmt_parse.h" %} %option prefix="quote_fmt" %option outfile="lex.yy.c" %s S_NORMAL S_DATE %{ /* * see notes below. */ int quote_fmt_firsttime = 1; %} %% %{ /* * NOTES: * this lex script used to use characters also in use * by strftime() (which we want to use for custom * time formats in replies and templates). to circumvent * this we have to play a little bit with states. * * these are the characters we also want to use in the * %D time customizer: * * %a %A %b %B %c %C %d %H %I %j %m %M %p %S %w %x %y %Y %Z * * you can use these characters too, but don't forget to * prepend them with the state. * * also there is also work around for resetting the state * (firsttime variable). this assumes that yylex() will * always return to S_NORMAL after quote fmt parsing is * done. */ %} %{ if (quote_fmt_firsttime) { BEGIN S_NORMAL; quote_fmt_firsttime = 0; } %} "%X" /* cursor pos */ return SET_CURSOR_POS; "%A" /* email address */ return SHOW_MAIL_ADDRESS; "%c" /* cc */ return SHOW_CC; "%d" /* date */ return SHOW_DATE; "%D" /* date */ { BEGIN S_DATE; return SHOW_DATE_EXPR; } "%f" /* from */ return SHOW_FROM; "%F" /* first name */ return SHOW_FIRST_NAME; "%i" /* message-id */ return SHOW_MESSAGEID; "%I" /* initial of sender */ return SHOW_SENDER_INITIAL; "%m" /* message with no signature */ return SHOW_MESSAGE_NO_SIGNATURE; "%M" /* message */ return SHOW_MESSAGE; "%n" /* newsgroups */ return SHOW_NEWSGROUPS; "%N" /* full name */ return SHOW_FULLNAME; "%L" /* last name */ return SHOW_LAST_NAME; "%r" /* references */ return SHOW_REFERENCES; "%s" /* subject */ return SHOW_SUBJECT; "%t" /* to */ return SHOW_TO; "%Q" /* quoted message */ return SHOW_QUOTED_MESSAGE; "%q" /* quoted message with no signature */ return SHOW_QUOTED_MESSAGE_NO_SIGNATURE; "%af" /* full name in compose account */ return SHOW_ACCOUNT_FULL_NAME; "%am" /* mail address in compose account */ return SHOW_ACCOUNT_MAIL_ADDRESS; "%an" /* compose account name itself */ return SHOW_ACCOUNT_NAME; "%ao" /* organization in compose account */ return SHOW_ACCOUNT_ORGANIZATION; "\\\%" /* % */ return SHOW_PERCENT; "\\\\" /* \ */ return SHOW_BACKSLASH; "\\t"|"\t" /* tab */ return SHOW_TAB; "\\n"|"\n" /* return */ return SHOW_EOL; "\\?" /* ? */ return SHOW_QUESTION_MARK; "\\!" return SHOW_EXCLAMATION_MARK; "\\|" return SHOW_PIPE; "\\{" return SHOW_OPARENT; "\\}" return SHOW_CPARENT; "?d" /* query date */ return QUERY_DATE; "?f" /* query from */ return QUERY_FROM; "?N"|"?F"|"?L"|"?I" /* query from name */ return QUERY_FULLNAME; "?s" /* query subject */ return QUERY_SUBJECT; "?t" /* query to */ return QUERY_TO; "?c" /* query cc */ return QUERY_CC; "?n" /* query newsgroups */ return QUERY_NEWSGROUPS; "?i" /* query message-id */ return QUERY_MESSAGEID; "?r" /* query references */ return QUERY_REFERENCES; "?af" /* query full name in compose account */ return QUERY_ACCOUNT_FULL_NAME; "?ao" /* query organization in compose account */ return QUERY_ACCOUNT_ORGANIZATION; "|f" /* insert file */ return INSERT_FILE; "|p" /* insert program output */ return INSERT_PROGRAMOUTPUT; "|i" /* insert user input */ return INSERT_USERINPUT; "!d" /* query date */ return QUERY_NOT_DATE; "!f" /* query from */ return QUERY_NOT_FROM; "!N"|"!F"|"!L"|"!I" /* query not(from name) */ return QUERY_NOT_FULLNAME; "!s" /* query not(subject) */ return QUERY_NOT_SUBJECT; "!t" /* query not(to) */ return QUERY_NOT_TO; "!c" /* query not(cc) */ return QUERY_NOT_CC; "!n" /* query not(newsgroups) */ return QUERY_NOT_NEWSGROUPS; "!i" /* query not(message-id) */ return QUERY_NOT_MESSAGEID; "!r" /* query not(references) */ return QUERY_NOT_REFERENCES; "!af" /* query not(full name in compose account) */ return QUERY_NOT_ACCOUNT_FULL_NAME; "!ao" /* query not(organization in compose account) */ return QUERY_NOT_ACCOUNT_ORGANIZATION; "{" return OPARENT; "}" { BEGIN S_NORMAL; return CPARENT; } "{" return OPARENT; "}" return CPARENT; . { yylval.chr = yytext[0]; return CHARACTER; } %%