1. <lexer>
    
  2.   <config>
    
  3.     <name>CoffeeScript</name>
    
  4.     <alias>coffee-script</alias>
    
  5.     <alias>coffeescript</alias>
    
  6.     <alias>coffee</alias>
    
  7.     <filename>*.coffee</filename>
    
  8.     <mime_type>text/coffeescript</mime_type>
    
  9.     <dot_all>true</dot_all>
    
  10.     <not_multiline>true</not_multiline>
    
  11.   </config>
    
  12.   <rules>
    
  13.     <state name="commentsandwhitespace">
    
  14.       <rule pattern="\s+">
    
  15.         <token type="Text"/>
    
  16.       </rule>
    
  17.       <rule pattern="###[^#].*?###">
    
  18.         <token type="CommentMultiline"/>
    
  19.       </rule>
    
  20.       <rule pattern="#(?!##[^#]).*?\n">
    
  21.         <token type="CommentSingle"/>
    
  22.       </rule>
    
  23.     </state>
    
  24.     <state name="multilineregex">
    
  25.       <rule pattern="[^/#]+">
    
  26.         <token type="LiteralStringRegex"/>
    
  27.       </rule>
    
  28.       <rule pattern="///([gim]+\b|\B)">
    
  29.         <token type="LiteralStringRegex"/>
    
  30.         <pop depth="1"/>
    
  31.       </rule>
    
  32.       <rule pattern="#\{">
    
  33.         <token type="LiteralStringInterpol"/>
    
  34.         <push state="interpoling_string"/>
    
  35.       </rule>
    
  36.       <rule pattern="[/#]">
    
  37.         <token type="LiteralStringRegex"/>
    
  38.       </rule>
    
  39.     </state>
    
  40.     <state name="slashstartsregex">
    
  41.       <rule>
    
  42.         <include state="commentsandwhitespace"/>
    
  43.       </rule>
    
  44.       <rule pattern="///">
    
  45.         <token type="LiteralStringRegex"/>
    
  46.         <push state="#pop" state="multilineregex"/>
    
  47.       </rule>
    
  48.       <rule pattern="/(?! )(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/([gim]+\b|\B)">
    
  49.         <token type="LiteralStringRegex"/>
    
  50.         <pop depth="1"/>
    
  51.       </rule>
    
  52.       <rule pattern="/">
    
  53.         <token type="Operator"/>
    
  54.       </rule>
    
  55.       <rule>
    
  56.         <pop depth="1"/>
    
  57.       </rule>
    
  58.     </state>
    
  59.     <state name="tsqs">
    
  60.       <rule pattern="&#39;&#39;&#39;">
    
  61.         <token type="LiteralString"/>
    
  62.         <pop depth="1"/>
    
  63.       </rule>
    
  64.       <rule pattern="#|\\.|\&#39;|&#34;">
    
  65.         <token type="LiteralString"/>
    
  66.       </rule>
    
  67.       <rule>
    
  68.         <include state="strings"/>
    
  69.       </rule>
    
  70.     </state>
    
  71.     <state name="dqs">
    
  72.       <rule pattern="&#34;">
    
  73.         <token type="LiteralString"/>
    
  74.         <pop depth="1"/>
    
  75.       </rule>
    
  76.       <rule pattern="\\.|\&#39;">
    
  77.         <token type="LiteralString"/>
    
  78.       </rule>
    
  79.       <rule pattern="#\{">
    
  80.         <token type="LiteralStringInterpol"/>
    
  81.         <push state="interpoling_string"/>
    
  82.       </rule>
    
  83.       <rule pattern="#">
    
  84.         <token type="LiteralString"/>
    
  85.       </rule>
    
  86.       <rule>
    
  87.         <include state="strings"/>
    
  88.       </rule>
    
  89.     </state>
    
  90.     <state name="sqs">
    
  91.       <rule pattern="&#39;">
    
  92.         <token type="LiteralString"/>
    
  93.         <pop depth="1"/>
    
  94.       </rule>
    
  95.       <rule pattern="#|\\.|&#34;">
    
  96.         <token type="LiteralString"/>
    
  97.       </rule>
    
  98.       <rule>
    
  99.         <include state="strings"/>
    
  100.       </rule>
    
  101.     </state>
    
  102.     <state name="tdqs">
    
  103.       <rule pattern="&#34;&#34;&#34;">
    
  104.         <token type="LiteralString"/>
    
  105.         <pop depth="1"/>
    
  106.       </rule>
    
  107.       <rule pattern="\\.|\&#39;|&#34;">
    
  108.         <token type="LiteralString"/>
    
  109.       </rule>
    
  110.       <rule pattern="#\{">
    
  111.         <token type="LiteralStringInterpol"/>
    
  112.         <push state="interpoling_string"/>
    
  113.       </rule>
    
  114.       <rule pattern="#">
    
  115.         <token type="LiteralString"/>
    
  116.       </rule>
    
  117.       <rule>
    
  118.         <include state="strings"/>
    
  119.       </rule>
    
  120.     </state>
    
  121.     <state name="root">
    
  122.       <rule>
    
  123.         <include state="commentsandwhitespace"/>
    
  124.       </rule>
    
  125.       <rule pattern="^(?=\s|/)">
    
  126.         <token type="Text"/>
    
  127.         <push state="slashstartsregex"/>
    
  128.       </rule>
    
  129.       <rule pattern="\+\+|~|&amp;&amp;|\band\b|\bor\b|\bis\b|\bisnt\b|\bnot\b|\?|:|\|\||\\(?=\n)|(&lt;&lt;|&gt;&gt;&gt;?|==?(?!&gt;)|!=?|=(?!&gt;)|-(?!&gt;)|[&lt;&gt;+*`%&amp;\|\^/])=?">
    
  130.         <token type="Operator"/>
    
  131.         <push state="slashstartsregex"/>
    
  132.       </rule>
    
  133.       <rule pattern="(?:\([^()]*\))?\s*[=-]&gt;">
    
  134.         <token type="NameFunction"/>
    
  135.         <push state="slashstartsregex"/>
    
  136.       </rule>
    
  137.       <rule pattern="[{(\[;,]">
    
  138.         <token type="Punctuation"/>
    
  139.         <push state="slashstartsregex"/>
    
  140.       </rule>
    
  141.       <rule pattern="[})\].]">
    
  142.         <token type="Punctuation"/>
    
  143.       </rule>
    
  144.       <rule pattern="(?&lt;![.$])(for|own|in|of|while|until|loop|break|return|continue|switch|when|then|if|unless|else|throw|try|catch|finally|new|delete|typeof|instanceof|super|extends|this|class|by)\b">
    
  145.         <token type="Keyword"/>
    
  146.         <push state="slashstartsregex"/>
    
  147.       </rule>
    
  148.       <rule pattern="(?&lt;![.$])(true|false|yes|no|on|off|null|NaN|Infinity|undefined)\b">
    
  149.         <token type="KeywordConstant"/>
    
  150.       </rule>
    
  151.       <rule pattern="(Array|Boolean|Date|Error|Function|Math|netscape|Number|Object|Packages|RegExp|String|sun|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|document|window)\b">
    
  152.         <token type="NameBuiltin"/>
    
  153.       </rule>
    
  154.       <rule pattern="[$a-zA-Z_][\w.:$]*\s*[:=]\s">
    
  155.         <token type="NameVariable"/>
    
  156.         <push state="slashstartsregex"/>
    
  157.       </rule>
    
  158.       <rule pattern="@[$a-zA-Z_][\w.:$]*\s*[:=]\s">
    
  159.         <token type="NameVariableInstance"/>
    
  160.         <push state="slashstartsregex"/>
    
  161.       </rule>
    
  162.       <rule pattern="@">
    
  163.         <token type="NameOther"/>
    
  164.         <push state="slashstartsregex"/>
    
  165.       </rule>
    
  166.       <rule pattern="@?[$a-zA-Z_][\w$]*">
    
  167.         <token type="NameOther"/>
    
  168.       </rule>
    
  169.       <rule pattern="[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?">
    
  170.         <token type="LiteralNumberFloat"/>
    
  171.       </rule>
    
  172.       <rule pattern="0x[0-9a-fA-F]+">
    
  173.         <token type="LiteralNumberHex"/>
    
  174.       </rule>
    
  175.       <rule pattern="[0-9]+">
    
  176.         <token type="LiteralNumberInteger"/>
    
  177.       </rule>
    
  178.       <rule pattern="&#34;&#34;&#34;">
    
  179.         <token type="LiteralString"/>
    
  180.         <push state="tdqs"/>
    
  181.       </rule>
    
  182.       <rule pattern="&#39;&#39;&#39;">
    
  183.         <token type="LiteralString"/>
    
  184.         <push state="tsqs"/>
    
  185.       </rule>
    
  186.       <rule pattern="&#34;">
    
  187.         <token type="LiteralString"/>
    
  188.         <push state="dqs"/>
    
  189.       </rule>
    
  190.       <rule pattern="&#39;">
    
  191.         <token type="LiteralString"/>
    
  192.         <push state="sqs"/>
    
  193.       </rule>
    
  194.     </state>
    
  195.     <state name="interpoling_string">
    
  196.       <rule pattern="\}">
    
  197.         <token type="LiteralStringInterpol"/>
    
  198.         <pop depth="1"/>
    
  199.       </rule>
    
  200.       <rule>
    
  201.         <include state="root"/>
    
  202.       </rule>
    
  203.     </state>
    
  204.     <state name="strings">
    
  205.       <rule pattern="[^#\\\&#39;&#34;]+">
    
  206.         <token type="LiteralString"/>
    
  207.       </rule>
    
  208.     </state>
    
  209.   </rules>
    
  210. </lexer>