1<lexer>
  2  <config>
  3    <name>C#</name>
  4    <alias>csharp</alias>
  5    <alias>c#</alias>
  6    <filename>*.cs</filename>
  7    <mime_type>text/x-csharp</mime_type>
  8    <dot_all>true</dot_all>
  9    <ensure_nl>true</ensure_nl>
 10  </config>
 11  <rules>
 12    <state name="root">
 13      <rule pattern="^\s*\[.*?\]">
 14        <token type="NameAttribute"/>
 15      </rule>
 16      <rule pattern="[^\S\n]+">
 17        <token type="Text"/>
 18      </rule>
 19      <rule pattern="\\\n">
 20        <token type="Text"/>
 21      </rule>
 22      <rule pattern="///[^\n\r]+">
 23        <token type="CommentSpecial"/>
 24      </rule>
 25      <rule pattern="//[^\n\r]+">
 26        <token type="CommentSingle"/>
 27      </rule>
 28      <rule pattern="/[*].*?[*]/">
 29        <token type="CommentMultiline"/>
 30      </rule>
 31      <rule pattern="\n">
 32        <token type="Text"/>
 33      </rule>
 34      <rule pattern="[~!%^&amp;*()+=|\[\]:;,.&lt;&gt;/?-]">
 35        <token type="Punctuation"/>
 36      </rule>
 37      <rule pattern="[{}]">
 38        <token type="Punctuation"/>
 39      </rule>
 40      <rule pattern="@&#34;(&#34;&#34;|[^&#34;])*&#34;">
 41        <token type="LiteralString"/>
 42      </rule>
 43      <rule pattern="\$@?&#34;(&#34;&#34;|[^&#34;])*&#34;">
 44        <token type="LiteralString"/>
 45      </rule>
 46      <rule pattern="&#34;(\\\\|\\&#34;|[^&#34;\n])*[&#34;\n]">
 47        <token type="LiteralString"/>
 48      </rule>
 49      <rule pattern="&#39;\\.&#39;|&#39;[^\\]&#39;">
 50        <token type="LiteralStringChar"/>
 51      </rule>
 52      <rule pattern="0[xX][0-9a-fA-F]+[Ll]?|\d[_\d]*(\.\d*)?([eE][+-]?\d+)?[flFLdD]?">
 53        <token type="LiteralNumber"/>
 54      </rule>
 55      <rule pattern="#[ \t]*(if|endif|else|elif|define|undef|line|error|warning|region|endregion|pragma|nullable)\b[^\n\r]+">
 56        <token type="CommentPreproc"/>
 57      </rule>
 58      <rule pattern="\b(extern)(\s+)(alias)\b">
 59        <bygroups>
 60          <token type="Keyword"/>
 61          <token type="Text"/>
 62          <token type="Keyword"/>
 63        </bygroups>
 64      </rule>
 65      <rule pattern="(abstract|as|async|await|base|break|by|case|catch|checked|const|continue|default|delegate|do|else|enum|event|explicit|extern|false|finally|fixed|for|foreach|goto|if|implicit|in|init|internal|is|let|lock|new|null|on|operator|out|override|params|private|protected|public|readonly|ref|return|sealed|sizeof|stackalloc|static|switch|this|throw|true|try|typeof|unchecked|unsafe|virtual|void|while|get|set|new|partial|yield|add|remove|value|alias|ascending|descending|from|group|into|orderby|select|thenby|where|join|equals)\b">
 66        <token type="Keyword"/>
 67      </rule>
 68      <rule pattern="(global)(::)">
 69        <bygroups>
 70          <token type="Keyword"/>
 71          <token type="Punctuation"/>
 72        </bygroups>
 73      </rule>
 74      <rule pattern="(bool|byte|char|decimal|double|dynamic|float|int|long|object|sbyte|short|string|uint|ulong|ushort|var)\b\??">
 75        <token type="KeywordType"/>
 76      </rule>
 77      <rule pattern="(class|struct|record|interface)(\s+)">
 78        <bygroups>
 79          <token type="Keyword"/>
 80          <token type="Text"/>
 81        </bygroups>
 82        <push state="class"/>
 83      </rule>
 84      <rule pattern="(namespace|using)(\s+)">
 85        <bygroups>
 86          <token type="Keyword"/>
 87          <token type="Text"/>
 88        </bygroups>
 89        <push state="namespace"/>
 90      </rule>
 91      <rule pattern="@?[_a-zA-Z]\w*">
 92        <token type="Name"/>
 93      </rule>
 94    </state>
 95    <state name="class">
 96      <rule pattern="@?[_a-zA-Z]\w*">
 97        <token type="NameClass"/>
 98        <pop depth="1"/>
 99      </rule>
100      <rule>
101        <pop depth="1"/>
102      </rule>
103    </state>
104    <state name="namespace">
105      <rule pattern="(?=\()">
106        <token type="Text"/>
107        <pop depth="1"/>
108      </rule>
109      <rule pattern="(@?[_a-zA-Z]\w*|\.)+">
110        <token type="NameNamespace"/>
111        <pop depth="1"/>
112      </rule>
113    </state>
114  </rules>
115</lexer>