1. <lexer>
    
  2.   <config>
    
  3.     <name>D</name>
    
  4.     <alias>d</alias>
    
  5.     <filename>*.d</filename>
    
  6.     <filename>*.di</filename>
    
  7.     <mime_type>text/x-d</mime_type>
    
  8.     <ensure_nl>true</ensure_nl>
    
  9.   </config>
    
  10.   <rules>
    
  11.     <state name="root">
    
  12.       <rule pattern="[^\S\n]+">
    
  13.         <token type="Text"/>
    
  14.       </rule>
    
  15.       <rule pattern="//.*?\n">
    
  16.         <token type="CommentSingle"/>
    
  17.       </rule>
    
  18.       <rule pattern="/\*.*?\*/">
    
  19.         <token type="CommentMultiline"/>
    
  20.       </rule>
    
  21.       <rule pattern="/\+.*?\+/">
    
  22.         <token type="CommentMultiline"/>
    
  23.       </rule>
    
  24.       <rule pattern="(asm|assert|body|break|case|cast|catch|continue|default|debug|delete|do|else|finally|for|foreach|foreach_reverse|goto|if|in|invariant|is|macro|mixin|new|out|pragma|return|super|switch|this|throw|try|typeid|typeof|version|while|with)\b">
    
  25.         <token type="Keyword"/>
    
  26.       </rule>
    
  27.       <rule pattern="__(FILE|FILE_FULL_PATH|MODULE|LINE|FUNCTION|PRETTY_FUNCTION|DATE|EOF|TIME|TIMESTAMP|VENDOR|VERSION)__\b">
    
  28.         <token type="NameBuiltin"/>
    
  29.       </rule>
    
  30.       <rule pattern="__(traits|vector|parameters)\b">
    
  31.         <token type="NameBuiltin"/>
    
  32.       </rule>
    
  33.       <rule pattern="((?:(?:[^\W\d]|\$)[\w.\[\]$&lt;&gt;]*\s+)+?)((?:[^\W\d]|\$)[\w$]*)(\s*)(\()">
    
  34.         <bygroups>
    
  35.           <usingself state="root"/>
    
  36.           <token type="NameFunction"/>
    
  37.           <token type="Text"/>
    
  38.           <token type="Operator"/>
    
  39.         </bygroups>
    
  40.       </rule>
    
  41.       <rule pattern="@[\w.]*">
    
  42.         <token type="NameDecorator"/>
    
  43.       </rule>
    
  44.       <rule pattern="(abstract|auto|alias|align|const|delegate|deprecated|enum|export|extern|final|function|immutable|inout|lazy|nothrow|override|package|private|protected|public|pure|ref|scope|shared|static|synchronized|template|unittest|__gshared)\b">
    
  45.         <token type="KeywordDeclaration"/>
    
  46.       </rule>
    
  47.       <rule pattern="(void|bool|byte|ubyte|short|ushort|int|uint|long|ulong|cent|ucent|float|double|real|ifloat|idouble|ireal|cfloat|cdouble|creal|char|wchar|dchar)\b">
    
  48.         <token type="KeywordType"/>
    
  49.       </rule>
    
  50.       <rule pattern="(size_t|ptrdiff_t|noreturn|string|wstring|dstring|Object|Throwable|Exception|Error|imported)\b">
    
  51.         <token type="NameBuiltin"/>
    
  52.       </rule>
    
  53.       <rule pattern="(module)(\s+)">
    
  54.         <bygroups>
    
  55.           <token type="KeywordNamespace"/>
    
  56.           <token type="Text"/>
    
  57.         </bygroups>
    
  58.         <push state="import"/>
    
  59.       </rule>
    
  60.       <rule pattern="(true|false|null)\b">
    
  61.         <token type="KeywordConstant"/>
    
  62.       </rule>
    
  63.       <rule pattern="(class|interface|struct|template|union)(\s+)">
    
  64.         <bygroups>
    
  65.           <token type="KeywordDeclaration"/>
    
  66.           <token type="Text"/>
    
  67.         </bygroups>
    
  68.         <push state="class"/>
    
  69.       </rule>
    
  70.       <rule pattern="(import)(\s+)">
    
  71.         <bygroups>
    
  72.           <token type="KeywordNamespace"/>
    
  73.           <token type="Text"/>
    
  74.         </bygroups>
    
  75.         <push state="import"/>
    
  76.       </rule>
    
  77.       <rule pattern="[qr]?&#34;(\\\\|\\&#34;|[^&#34;])*&#34;[cwd]?">
    
  78.         <token type="LiteralString"/>
    
  79.       </rule>
    
  80.       <rule pattern="(`)([^`]*)(`)[cwd]?">
    
  81.         <token type="LiteralString"/>
    
  82.       </rule>
    
  83.       <rule pattern="&#39;\\.&#39;|&#39;[^\\]&#39;|&#39;\\u[0-9a-fA-F]{4}&#39;">
    
  84.         <token type="LiteralStringChar"/>
    
  85.       </rule>
    
  86.       <rule pattern="(\.)((?:[^\W\d]|\$)[\w$]*)">
    
  87.         <bygroups>
    
  88.           <token type="Operator"/>
    
  89.           <token type="NameAttribute"/>
    
  90.         </bygroups>
    
  91.       </rule>
    
  92.       <rule pattern="^\s*([^\W\d]|\$)[\w$]*:">
    
  93.         <token type="NameLabel"/>
    
  94.       </rule>
    
  95.       <rule pattern="([0-9][0-9_]*\.([0-9][0-9_]*)?|\.[0-9][0-9_]*)([eE][+\-]?[0-9][0-9_]*)?[fFL]?i?|[0-9][eE][+\-]?[0-9][0-9_]*[fFL]?|[0-9]([eE][+\-]?[0-9][0-9_]*)?[fFL]|0[xX]([0-9a-fA-F][0-9a-fA-F_]*\.?|([0-9a-fA-F][0-9a-fA-F_]*)?\.[0-9a-fA-F][0-9a-fA-F_]*)[pP][+\-]?[0-9][0-9_]*[fFL]?">
    
  96.         <token type="LiteralNumberFloat"/>
    
  97.       </rule>
    
  98.       <rule pattern="0[xX][0-9a-fA-F][0-9a-fA-F_]*[lL]?">
    
  99.         <token type="LiteralNumberHex"/>
    
  100.       </rule>
    
  101.       <rule pattern="0[bB][01][01_]*[lL]?">
    
  102.         <token type="LiteralNumberBin"/>
    
  103.       </rule>
    
  104.       <rule pattern="0[0-7_]+[lL]?">
    
  105.         <token type="LiteralNumberOct"/>
    
  106.       </rule>
    
  107.       <rule pattern="0|[1-9][0-9_]*[lL]?">
    
  108.         <token type="LiteralNumberInteger"/>
    
  109.       </rule>
    
  110.       <rule pattern="([~^*!%&amp;\[\](){}&lt;&gt;|+=:;,./?-]|q{)">
    
  111.         <token type="Operator"/>
    
  112.       </rule>
    
  113.       <rule pattern="([^\W\d]|\$)[\w$]*">
    
  114.         <token type="Name"/>
    
  115.       </rule>
    
  116.       <rule pattern="\n">
    
  117.         <token type="Text"/>
    
  118.       </rule>
    
  119.     </state>
    
  120.     <state name="class">
    
  121.       <rule pattern="([^\W\d]|\$)[\w$]*">
    
  122.         <token type="NameClass"/>
    
  123.         <pop depth="1"/>
    
  124.       </rule>
    
  125.     </state>
    
  126.     <state name="import">
    
  127.       <rule pattern="[\w.]+\*?">
    
  128.         <token type="NameNamespace"/>
    
  129.         <pop depth="1"/>
    
  130.       </rule>
    
  131.     </state>
    
  132.   </rules>
    
  133. </lexer>