1. <lexer>
    
  2.   <config>
    
  3.     <name>Elm</name>
    
  4.     <alias>elm</alias>
    
  5.     <filename>*.elm</filename>
    
  6.     <mime_type>text/x-elm</mime_type>
    
  7.   </config>
    
  8.   <rules>
    
  9.     <state name="shader">
    
  10.       <rule pattern="\|(?!\])">
    
  11.         <token type="NameEntity"/>
    
  12.       </rule>
    
  13.       <rule pattern="\|\]">
    
  14.         <token type="NameEntity"/>
    
  15.         <pop depth="1"/>
    
  16.       </rule>
    
  17.       <rule pattern=".*\n">
    
  18.         <token type="NameEntity"/>
    
  19.       </rule>
    
  20.     </state>
    
  21.     <state name="root">
    
  22.       <rule pattern="\{-">
    
  23.         <token type="CommentMultiline"/>
    
  24.         <push state="comment"/>
    
  25.       </rule>
    
  26.       <rule pattern="--.*">
    
  27.         <token type="CommentSingle"/>
    
  28.       </rule>
    
  29.       <rule pattern="\s+">
    
  30.         <token type="Text"/>
    
  31.       </rule>
    
  32.       <rule pattern="&#34;">
    
  33.         <token type="LiteralString"/>
    
  34.         <push state="doublequote"/>
    
  35.       </rule>
    
  36.       <rule pattern="^\s*module\s*">
    
  37.         <token type="KeywordNamespace"/>
    
  38.         <push state="imports"/>
    
  39.       </rule>
    
  40.       <rule pattern="^\s*import\s*">
    
  41.         <token type="KeywordNamespace"/>
    
  42.         <push state="imports"/>
    
  43.       </rule>
    
  44.       <rule pattern="\[glsl\|.*">
    
  45.         <token type="NameEntity"/>
    
  46.         <push state="shader"/>
    
  47.       </rule>
    
  48.       <rule pattern="(import|module|alias|where|port|else|type|case|then|let|as|of|if|in)\b">
    
  49.         <token type="KeywordReserved"/>
    
  50.       </rule>
    
  51.       <rule pattern="[A-Z]\w*">
    
  52.         <token type="KeywordType"/>
    
  53.       </rule>
    
  54.       <rule pattern="^main ">
    
  55.         <token type="KeywordReserved"/>
    
  56.       </rule>
    
  57.       <rule pattern="\((&lt;-|\|\||\|&gt;|&amp;&amp;|\+\+|-&gt;|\.\.|//|&gt;&gt;|&gt;=|/=|==|::|&lt;~|&lt;\||&lt;=|&lt;&lt;|~|&lt;|=|:|&gt;|&#39;|/|\\|\.|\^|-|`|\+|\*|\||%)\)">
    
  58.         <token type="NameFunction"/>
    
  59.       </rule>
    
  60.       <rule pattern="(&lt;-|\|\||\|&gt;|&amp;&amp;|\+\+|-&gt;|\.\.|//|&gt;&gt;|&gt;=|/=|==|::|&lt;~|&lt;\||&lt;=|&lt;&lt;|~|&lt;|=|:|&gt;|&#39;|/|\\|\.|\^|-|`|\+|\*|\||%)">
    
  61.         <token type="NameFunction"/>
    
  62.       </rule>
    
  63.       <rule>
    
  64.         <include state="numbers"/>
    
  65.       </rule>
    
  66.       <rule pattern="[a-z_][a-zA-Z_\&#39;]*">
    
  67.         <token type="NameVariable"/>
    
  68.       </rule>
    
  69.       <rule pattern="[,()\[\]{}]">
    
  70.         <token type="Punctuation"/>
    
  71.       </rule>
    
  72.     </state>
    
  73.     <state name="comment">
    
  74.       <rule pattern="-(?!\})">
    
  75.         <token type="CommentMultiline"/>
    
  76.       </rule>
    
  77.       <rule pattern="\{-">
    
  78.         <token type="CommentMultiline"/>
    
  79.         <push state="comment"/>
    
  80.       </rule>
    
  81.       <rule pattern="[^-}]">
    
  82.         <token type="CommentMultiline"/>
    
  83.       </rule>
    
  84.       <rule pattern="-\}">
    
  85.         <token type="CommentMultiline"/>
    
  86.         <pop depth="1"/>
    
  87.       </rule>
    
  88.     </state>
    
  89.     <state name="doublequote">
    
  90.       <rule pattern="\\u[0-9a-fA-F]{4}">
    
  91.         <token type="LiteralStringEscape"/>
    
  92.       </rule>
    
  93.       <rule pattern="\\[nrfvb\\&#34;]">
    
  94.         <token type="LiteralStringEscape"/>
    
  95.       </rule>
    
  96.       <rule pattern="[^&#34;]">
    
  97.         <token type="LiteralString"/>
    
  98.       </rule>
    
  99.       <rule pattern="&#34;">
    
  100.         <token type="LiteralString"/>
    
  101.         <pop depth="1"/>
    
  102.       </rule>
    
  103.     </state>
    
  104.     <state name="imports">
    
  105.       <rule pattern="\w+(\.\w+)*">
    
  106.         <token type="NameClass"/>
    
  107.         <pop depth="1"/>
    
  108.       </rule>
    
  109.     </state>
    
  110.     <state name="numbers">
    
  111.       <rule pattern="_?\d+\.(?=\d+)">
    
  112.         <token type="LiteralNumberFloat"/>
    
  113.       </rule>
    
  114.       <rule pattern="_?\d+">
    
  115.         <token type="LiteralNumberInteger"/>
    
  116.       </rule>
    
  117.     </state>
    
  118.   </rules>
    
  119. </lexer>