Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/pygments/lexers/sieve.py: 100%
8 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:16 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:16 +0000
1"""
2 pygments.lexers.sieve
3 ~~~~~~~~~~~~~~~~~~~~~
5 Lexer for Sieve file format.
7 https://tools.ietf.org/html/rfc5228
8 https://tools.ietf.org/html/rfc5173
9 https://tools.ietf.org/html/rfc5229
10 https://tools.ietf.org/html/rfc5230
11 https://tools.ietf.org/html/rfc5232
12 https://tools.ietf.org/html/rfc5235
13 https://tools.ietf.org/html/rfc5429
14 https://tools.ietf.org/html/rfc8580
16 :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
17 :license: BSD, see LICENSE for details.
18"""
20from pygments.lexer import RegexLexer, bygroups
21from pygments.token import Comment, Name, Literal, String, Text, Punctuation, \
22 Keyword
24__all__ = ["SieveLexer"]
27class SieveLexer(RegexLexer):
28 """
29 Lexer for sieve format.
31 .. versionadded:: 2.6
32 """
33 name = 'Sieve'
34 filenames = ['*.siv', '*.sieve']
35 aliases = ['sieve']
37 tokens = {
38 'root': [
39 (r'\s+', Text),
40 (r'[();,{}\[\]]', Punctuation),
41 # import:
42 (r'(?i)require',
43 Keyword.Namespace),
44 # tags:
45 (r'(?i)(:)(addresses|all|contains|content|create|copy|comparator|'
46 r'count|days|detail|domain|fcc|flags|from|handle|importance|is|'
47 r'localpart|length|lowerfirst|lower|matches|message|mime|options|'
48 r'over|percent|quotewildcard|raw|regex|specialuse|subject|text|'
49 r'under|upperfirst|upper|value)',
50 bygroups(Name.Tag, Name.Tag)),
51 # tokens:
52 (r'(?i)(address|addflag|allof|anyof|body|discard|elsif|else|envelope|'
53 r'ereject|exists|false|fileinto|if|hasflag|header|keep|'
54 r'notify_method_capability|notify|not|redirect|reject|removeflag|'
55 r'setflag|size|spamtest|stop|string|true|vacation|virustest)',
56 Name.Builtin),
57 (r'(?i)set',
58 Keyword.Declaration),
59 # number:
60 (r'([0-9.]+)([kmgKMG])?',
61 bygroups(Literal.Number, Literal.Number)),
62 # comment:
63 (r'#.*$',
64 Comment.Single),
65 (r'/\*.*\*/',
66 Comment.Multiline),
67 # string:
68 (r'"[^"]*?"',
69 String),
70 # text block:
71 (r'text:',
72 Name.Tag, 'text'),
73 ],
74 'text': [
75 (r'[^.].*?\n', String),
76 (r'^\.', Punctuation, "#pop"),
77 ]
78 }