summaryrefslogtreecommitdiff
path: root/libsieve
diff options
context:
space:
mode:
Diffstat (limited to 'libsieve')
-rw-r--r--libsieve/sieve.l21
1 files changed, 15 insertions, 6 deletions
diff --git a/libsieve/sieve.l b/libsieve/sieve.l
index b9d280350..6ec18bd5d 100644
--- a/libsieve/sieve.l
+++ b/libsieve/sieve.l
@@ -341,12 +341,14 @@ else return ELSE;
anyof return ANYOF;
allof return ALLOF;
not return NOT;
- /* Other tokens */
+ /* Identifiers */
{IDENT} { ident (yytext); return IDENT; }
:{IDENT} { ident (yytext + 1); return TAG; }
+ /* Numbers */
0[0-7]*{SIZESUF}* { return number (); }
0x[0-9a-fA-F][0-9a-fA-F]+{SIZESUF}* { return number (); }
[1-9][0-9]*{SIZESUF}* { return number (); }
+ /* Quoted strings */
\"[^\\"\n]*\" { return string (); }
\"[^\\"\n]*\\. { BEGIN(STR);
multiline_begin ();
@@ -356,12 +358,18 @@ not return NOT;
multiline_add (NULL);
multiline_finish ();
return STRING; }
-text:-?[ \t]*#.*\n { BEGIN(ML); multiline_begin (); }
-text:-?[ \t]*\n { BEGIN(ML); multiline_begin (); }
-text:-?\\?{IDENT}[ \t]*#.*\n { BEGIN(ML); multiline_begin (); }
-text:-?\\?{IDENT}[ \t]*\n { BEGIN(ML); multiline_begin (); }
+ /* Multiline strings */
+text:-?[ \t]*#.*\n { BEGIN(ML); multiline_begin (); sieve_line_num++; }
+text:-?[ \t]*\n { BEGIN(ML); multiline_begin (); sieve_line_num++; }
+text:-?\\?{IDENT}[ \t]*#.*\n { BEGIN(ML); multiline_begin ();
+ sieve_line_num++; }
+text:-?\\?{IDENT}[ \t]*\n { BEGIN(ML); multiline_begin ();
+ sieve_line_num++; }
<ML>#[ \t]*include.*\n { if (multiline_delimiter[0] == '\\')
- multiline_add (NULL);
+ {
+ sieve_line_num++;
+ multiline_add (NULL);
+ }
else
sieve_include (); }
<ML>.*\n { char *p = multiline_strip_tabs (yytext);
@@ -379,6 +387,7 @@ text:-?\\?{IDENT}[ \t]*\n { BEGIN(ML); multiline_begin (); }
}
multiline_add (NULL); }
{WS} ;
+ /* Other tokens */
\n { sieve_line_num++; }
. return yytext[0];

Return to:

Send suggestions and report system problems to the System administrator.