cap_n_proto.xml

  1<lexer>
  2  <config>
  3    <name>Cap&#39;n Proto</name>
  4    <alias>capnp</alias>
  5    <filename>*.capnp</filename>
  6  </config>
  7  <rules>
  8    <state name="root">
  9      <rule pattern="#.*?$">
 10        <token type="CommentSingle"/>
 11      </rule>
 12      <rule pattern="@[0-9a-zA-Z]*">
 13        <token type="NameDecorator"/>
 14      </rule>
 15      <rule pattern="=">
 16        <token type="Literal"/>
 17        <push state="expression"/>
 18      </rule>
 19      <rule pattern=":">
 20        <token type="NameClass"/>
 21        <push state="type"/>
 22      </rule>
 23      <rule pattern="\$">
 24        <token type="NameAttribute"/>
 25        <push state="annotation"/>
 26      </rule>
 27      <rule pattern="(struct|enum|interface|union|import|using|const|annotation|extends|in|of|on|as|with|from|fixed)\b">
 28        <token type="Keyword"/>
 29      </rule>
 30      <rule pattern="[\w.]+">
 31        <token type="Name"/>
 32      </rule>
 33      <rule pattern="[^#@=:$\w]+">
 34        <token type="Text"/>
 35      </rule>
 36    </state>
 37    <state name="type">
 38      <rule pattern="[^][=;,(){}$]+">
 39        <token type="NameClass"/>
 40      </rule>
 41      <rule pattern="[[(]">
 42        <token type="NameClass"/>
 43        <push state="parentype"/>
 44      </rule>
 45      <rule>
 46        <pop depth="1"/>
 47      </rule>
 48    </state>
 49    <state name="parentype">
 50      <rule pattern="[^][;()]+">
 51        <token type="NameClass"/>
 52      </rule>
 53      <rule pattern="[[(]">
 54        <token type="NameClass"/>
 55        <push/>
 56      </rule>
 57      <rule pattern="[])]">
 58        <token type="NameClass"/>
 59        <pop depth="1"/>
 60      </rule>
 61      <rule>
 62        <pop depth="1"/>
 63      </rule>
 64    </state>
 65    <state name="expression">
 66      <rule pattern="[^][;,(){}$]+">
 67        <token type="Literal"/>
 68      </rule>
 69      <rule pattern="[[(]">
 70        <token type="Literal"/>
 71        <push state="parenexp"/>
 72      </rule>
 73      <rule>
 74        <pop depth="1"/>
 75      </rule>
 76    </state>
 77    <state name="parenexp">
 78      <rule pattern="[^][;()]+">
 79        <token type="Literal"/>
 80      </rule>
 81      <rule pattern="[[(]">
 82        <token type="Literal"/>
 83        <push/>
 84      </rule>
 85      <rule pattern="[])]">
 86        <token type="Literal"/>
 87        <pop depth="1"/>
 88      </rule>
 89      <rule>
 90        <pop depth="1"/>
 91      </rule>
 92    </state>
 93    <state name="annotation">
 94      <rule pattern="[^][;,(){}=:]+">
 95        <token type="NameAttribute"/>
 96      </rule>
 97      <rule pattern="[[(]">
 98        <token type="NameAttribute"/>
 99        <push state="annexp"/>
100      </rule>
101      <rule>
102        <pop depth="1"/>
103      </rule>
104    </state>
105    <state name="annexp">
106      <rule pattern="[^][;()]+">
107        <token type="NameAttribute"/>
108      </rule>
109      <rule pattern="[[(]">
110        <token type="NameAttribute"/>
111        <push/>
112      </rule>
113      <rule pattern="[])]">
114        <token type="NameAttribute"/>
115        <pop depth="1"/>
116      </rule>
117      <rule>
118        <pop depth="1"/>
119      </rule>
120    </state>
121  </rules>
122</lexer>