sieve.xml

 1<lexer>
 2  <config>
 3    <name>Sieve</name>
 4    <alias>sieve</alias>
 5    <filename>*.siv</filename>
 6    <filename>*.sieve</filename>
 7  </config>
 8  <rules>
 9    <state name="root">
10      <rule pattern="\s+">
11        <token type="Text"/>
12      </rule>
13      <rule pattern="[();,{}\[\]]">
14        <token type="Punctuation"/>
15      </rule>
16      <rule pattern="(?i)require">
17        <token type="KeywordNamespace"/>
18      </rule>
19      <rule pattern="(?i)(:)(addresses|all|contains|content|create|copy|comparator|count|days|detail|domain|fcc|flags|from|handle|importance|is|localpart|length|lowerfirst|lower|matches|message|mime|options|over|percent|quotewildcard|raw|regex|specialuse|subject|text|under|upperfirst|upper|value)">
20        <bygroups>
21          <token type="NameTag"/>
22          <token type="NameTag"/>
23        </bygroups>
24      </rule>
25      <rule pattern="(?i)(address|addflag|allof|anyof|body|discard|elsif|else|envelope|ereject|exists|false|fileinto|if|hasflag|header|keep|notify_method_capability|notify|not|redirect|reject|removeflag|setflag|size|spamtest|stop|string|true|vacation|virustest)">
26        <token type="NameBuiltin"/>
27      </rule>
28      <rule pattern="(?i)set">
29        <token type="KeywordDeclaration"/>
30      </rule>
31      <rule pattern="([0-9.]+)([kmgKMG])?">
32        <bygroups>
33          <token type="LiteralNumber"/>
34          <token type="LiteralNumber"/>
35        </bygroups>
36      </rule>
37      <rule pattern="#.*$">
38        <token type="CommentSingle"/>
39      </rule>
40      <rule pattern="/\*.*\*/">
41        <token type="CommentMultiline"/>
42      </rule>
43      <rule pattern="&#34;[^&#34;]*?&#34;">
44        <token type="LiteralString"/>
45      </rule>
46      <rule pattern="text:">
47        <token type="NameTag"/>
48        <push state="text"/>
49      </rule>
50    </state>
51    <state name="text">
52      <rule pattern="[^.].*?\n">
53        <token type="LiteralString"/>
54      </rule>
55      <rule pattern="^\.">
56        <token type="Punctuation"/>
57        <pop depth="1"/>
58      </rule>
59    </state>
60  </rules>
61</lexer>