...

Text file src/github.com/alecthomas/chroma/v2/lexers/embedded/metal.xml

Documentation: github.com/alecthomas/chroma/v2/lexers/embedded

     1<lexer>
     2  <config>
     3    <name>Metal</name>
     4    <alias>metal</alias>
     5    <filename>*.metal</filename>
     6    <mime_type>text/x-metal</mime_type>
     7    <ensure_nl>true</ensure_nl>
     8  </config>
     9  <rules>
    10    <state name="function">
    11      <rule>
    12        <include state="whitespace"/>
    13      </rule>
    14      <rule>
    15        <include state="statements"/>
    16      </rule>
    17      <rule pattern=";">
    18        <token type="Punctuation"/>
    19      </rule>
    20      <rule pattern="\{">
    21        <token type="Punctuation"/>
    22        <push/>
    23      </rule>
    24      <rule pattern="\}">
    25        <token type="Punctuation"/>
    26        <pop depth="1"/>
    27      </rule>
    28    </state>
    29    <state name="macro">
    30      <rule pattern="(include)(\s*(?:/[*].*?[*]/\s*)?)([^\n]+)">
    31        <bygroups>
    32          <token type="CommentPreproc"/>
    33          <token type="Text"/>
    34          <token type="CommentPreprocFile"/>
    35        </bygroups>
    36      </rule>
    37      <rule pattern="[^/\n]+">
    38        <token type="CommentPreproc"/>
    39      </rule>
    40      <rule pattern="/[*](.|\n)*?[*]/">
    41        <token type="CommentMultiline"/>
    42      </rule>
    43      <rule pattern="//.*?\n">
    44        <token type="CommentSingle"/>
    45        <pop depth="1"/>
    46      </rule>
    47      <rule pattern="/">
    48        <token type="CommentPreproc"/>
    49      </rule>
    50      <rule pattern="(?&lt;=\\)\n">
    51        <token type="CommentPreproc"/>
    52      </rule>
    53      <rule pattern="\n">
    54        <token type="CommentPreproc"/>
    55        <pop depth="1"/>
    56      </rule>
    57    </state>
    58    <state name="if0">
    59      <rule pattern="^\s*#if.*?(?&lt;!\\)\n">
    60        <token type="CommentPreproc"/>
    61        <push/>
    62      </rule>
    63      <rule pattern="^\s*#el(?:se|if).*\n">
    64        <token type="CommentPreproc"/>
    65        <pop depth="1"/>
    66      </rule>
    67      <rule pattern="^\s*#endif.*?(?&lt;!\\)\n">
    68        <token type="CommentPreproc"/>
    69        <pop depth="1"/>
    70      </rule>
    71      <rule pattern=".*?\n">
    72        <token type="Comment"/>
    73      </rule>
    74    </state>
    75    <state name="statements">
    76      <rule pattern="(namespace|constexpr|operator|template|using|this)\b">
    77        <token type="Keyword"/>
    78      </rule>
    79      <rule pattern="(enum)\b(\s+)(class)\b(\s*)">
    80        <bygroups>
    81          <token type="Keyword"/>
    82          <token type="Text"/>
    83          <token type="Keyword"/>
    84          <token type="Text"/>
    85        </bygroups>
    86        <push state="classname"/>
    87      </rule>
    88      <rule pattern="(class|struct|enum|union)\b(\s*)">
    89        <bygroups>
    90          <token type="Keyword"/>
    91          <token type="Text"/>
    92        </bygroups>
    93        <push state="classname"/>
    94      </rule>
    95      <rule pattern="\[\[.+\]\]">
    96        <token type="NameAttribute"/>
    97      </rule>
    98      <rule pattern="(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[LlUu]*">
    99        <token type="LiteralNumberFloat"/>
   100      </rule>
   101      <rule pattern="(\d+\.\d*|\.\d+|\d+[fF])[fF]?">
   102        <token type="LiteralNumberFloat"/>
   103      </rule>
   104      <rule pattern="0[xX]([0-9A-Fa-f](&#39;?[0-9A-Fa-f]+)*)[LlUu]*">
   105        <token type="LiteralNumberHex"/>
   106      </rule>
   107      <rule pattern="0(&#39;?[0-7]+)+[LlUu]*">
   108        <token type="LiteralNumberOct"/>
   109      </rule>
   110      <rule pattern="0[Bb][01](&#39;?[01]+)*[LlUu]*">
   111        <token type="LiteralNumberBin"/>
   112      </rule>
   113      <rule pattern="[0-9](&#39;?[0-9]+)*[LlUu]*">
   114        <token type="LiteralNumberInteger"/>
   115      </rule>
   116      <rule pattern="\*/">
   117        <token type="Error"/>
   118      </rule>
   119      <rule pattern="[~!%^&amp;*+=|?:&lt;&gt;/-]">
   120        <token type="Operator"/>
   121      </rule>
   122      <rule pattern="[()\[\],.]">
   123        <token type="Punctuation"/>
   124      </rule>
   125      <rule pattern="(continue|typedef|sizeof|extern|static|switch|struct|return|union|const|break|while|enum|else|case|for|do|if)\b">
   126        <token type="Keyword"/>
   127      </rule>
   128      <rule pattern="(bool|float|half|long|ptrdiff_t|size_t|unsigned|u?char|u?int((8|16|32|64)_t)?|u?short)\b">
   129        <token type="KeywordType"/>
   130      </rule>
   131      <rule pattern="(bool|float|half|u?(char|int|long|short))(2|3|4)\b">
   132        <token type="KeywordType"/>
   133      </rule>
   134      <rule pattern="packed_(float|half|long|u?(char|int|short))(2|3|4)\b">
   135        <token type="KeywordType"/>
   136      </rule>
   137      <rule pattern="(float|half)(2|3|4)x(2|3|4)\b">
   138        <token type="KeywordType"/>
   139      </rule>
   140      <rule pattern="atomic_u?int\b">
   141        <token type="KeywordType"/>
   142      </rule>
   143      <rule pattern="(rg?(8|16)(u|s)norm|rgba(8|16)(u|s)norm|srgba8unorm|rgb10a2|rg11b10f|rgb9e5)\b">
   144        <token type="KeywordType"/>
   145      </rule>
   146      <rule pattern="(array|depth(2d|cube)(_array)?|depth2d_ms(_array)?|sampler|texture_buffer|texture(1|2)d(_array)?|texture2d_ms(_array)?|texture3d|texturecube(_array)?|uniform|visible_function_table)\b">
   147        <token type="KeywordType"/>
   148      </rule>
   149      <rule pattern="(true|false|NULL)\b">
   150        <token type="NameBuiltin"/>
   151      </rule>
   152      <rule pattern="(threadgroup_imageblock|threadgroup|constant|ray_data|device|thread)\b">
   153        <token type="Keyword"/>
   154      </rule>
   155      <rule pattern="([a-zA-Z_]\w*)(\s*)(:)(?!:)">
   156        <bygroups>
   157          <token type="NameLabel"/>
   158          <token type="Text"/>
   159          <token type="Punctuation"/>
   160        </bygroups>
   161      </rule>
   162      <rule pattern="[a-zA-Z_]\w*">
   163        <token type="Name"/>
   164      </rule>
   165    </state>
   166    <state name="root">
   167      <rule>
   168        <include state="whitespace"/>
   169      </rule>
   170      <rule pattern="(fragment|kernel|vertex)?((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;{]*)(\{)">
   171        <bygroups>
   172          <token type="Keyword"/>
   173          <usingself state="root"/>
   174          <token type="NameFunction"/>
   175          <usingself state="root"/>
   176          <usingself state="root"/>
   177          <token type="Punctuation"/>
   178        </bygroups>
   179        <push state="function"/>
   180      </rule>
   181      <rule pattern="(fragment|kernel|vertex)?((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;]*)(;)">
   182        <bygroups>
   183          <token type="Keyword"/>
   184          <usingself state="root"/>
   185          <token type="NameFunction"/>
   186          <usingself state="root"/>
   187          <usingself state="root"/>
   188          <token type="Punctuation"/>
   189        </bygroups>
   190      </rule>
   191      <rule>
   192        <push state="statement"/>
   193      </rule>
   194    </state>
   195    <state name="classname">
   196      <rule pattern="(\[\[.+\]\])(\s*)">
   197        <bygroups>
   198          <token type="NameAttribute"/>
   199          <token type="Text"/>
   200        </bygroups>
   201      </rule>
   202      <rule pattern="[a-zA-Z_]\w*">
   203        <token type="NameClass"/>
   204        <pop depth="1"/>
   205      </rule>
   206      <rule pattern="\s*(?=[&gt;{])">
   207        <token type="Text"/>
   208        <pop depth="1"/>
   209      </rule>
   210    </state>
   211    <state name="whitespace">
   212      <rule pattern="^#if\s+0">
   213        <token type="CommentPreproc"/>
   214        <push state="if0"/>
   215      </rule>
   216      <rule pattern="^#">
   217        <token type="CommentPreproc"/>
   218        <push state="macro"/>
   219      </rule>
   220      <rule pattern="^(\s*(?:/[*].*?[*]/\s*)?)(#if\s+0)">
   221        <bygroups>
   222          <usingself state="root"/>
   223          <token type="CommentPreproc"/>
   224        </bygroups>
   225        <push state="if0"/>
   226      </rule>
   227      <rule pattern="^(\s*(?:/[*].*?[*]/\s*)?)(#)">
   228        <bygroups>
   229          <usingself state="root"/>
   230          <token type="CommentPreproc"/>
   231        </bygroups>
   232        <push state="macro"/>
   233      </rule>
   234      <rule pattern="\n">
   235        <token type="Text"/>
   236      </rule>
   237      <rule pattern="\s+">
   238        <token type="Text"/>
   239      </rule>
   240      <rule pattern="\\\n">
   241        <token type="Text"/>
   242      </rule>
   243      <rule pattern="//(\n|[\w\W]*?[^\\]\n)">
   244        <token type="CommentSingle"/>
   245      </rule>
   246      <rule pattern="/(\\\n)?[*][\w\W]*?[*](\\\n)?/">
   247        <token type="CommentMultiline"/>
   248      </rule>
   249      <rule pattern="/(\\\n)?[*][\w\W]*">
   250        <token type="CommentMultiline"/>
   251      </rule>
   252    </state>
   253    <state name="statement">
   254      <rule>
   255        <include state="whitespace"/>
   256      </rule>
   257      <rule>
   258        <include state="statements"/>
   259      </rule>
   260      <rule pattern="[{]">
   261        <token type="Punctuation"/>
   262        <push state="root"/>
   263      </rule>
   264      <rule pattern="[;}]">
   265        <token type="Punctuation"/>
   266        <pop depth="1"/>
   267      </rule>
   268    </state>
   269  </rules>
   270</lexer>

View as plain text