1. <lexer>
    
  2.   <config>
    
  3.     <name>Crystal</name>
    
  4.     <alias>cr</alias>
    
  5.     <alias>crystal</alias>
    
  6.     <filename>*.cr</filename>
    
  7.     <mime_type>text/x-crystal</mime_type>
    
  8.     <dot_all>true</dot_all>
    
  9.   </config>
    
  10.   <rules>
    
  11.     <state name="pa-intp-string">
    
  12.       <rule pattern="\\[\(]">
    
  13.         <token type="LiteralStringOther"/>
    
  14.       </rule>
    
  15.       <rule pattern="\(">
    
  16.         <token type="LiteralStringOther"/>
    
  17.         <push/>
    
  18.       </rule>
    
  19.       <rule pattern="\)">
    
  20.         <token type="LiteralStringOther"/>
    
  21.         <pop depth="1"/>
    
  22.       </rule>
    
  23.       <rule>
    
  24.         <include state="string-intp-escaped"/>
    
  25.       </rule>
    
  26.       <rule pattern="[\\#()]">
    
  27.         <token type="LiteralStringOther"/>
    
  28.       </rule>
    
  29.       <rule pattern="[^\\#()]+">
    
  30.         <token type="LiteralStringOther"/>
    
  31.       </rule>
    
  32.     </state>
    
  33.     <state name="ab-regex">
    
  34.       <rule pattern="\\[\\&lt;&gt;]">
    
  35.         <token type="LiteralStringRegex"/>
    
  36.       </rule>
    
  37.       <rule pattern="&lt;">
    
  38.         <token type="LiteralStringRegex"/>
    
  39.         <push/>
    
  40.       </rule>
    
  41.       <rule pattern="&gt;[imsx]*">
    
  42.         <token type="LiteralStringRegex"/>
    
  43.         <pop depth="1"/>
    
  44.       </rule>
    
  45.       <rule>
    
  46.         <include state="string-intp"/>
    
  47.       </rule>
    
  48.       <rule pattern="[\\#&lt;&gt;]">
    
  49.         <token type="LiteralStringRegex"/>
    
  50.       </rule>
    
  51.       <rule pattern="[^\\#&lt;&gt;]+">
    
  52.         <token type="LiteralStringRegex"/>
    
  53.       </rule>
    
  54.     </state>
    
  55.     <state name="cb-regex">
    
  56.       <rule pattern="\\[\\{}]">
    
  57.         <token type="LiteralStringRegex"/>
    
  58.       </rule>
    
  59.       <rule pattern="\{">
    
  60.         <token type="LiteralStringRegex"/>
    
  61.         <push/>
    
  62.       </rule>
    
  63.       <rule pattern="\}[imsx]*">
    
  64.         <token type="LiteralStringRegex"/>
    
  65.         <pop depth="1"/>
    
  66.       </rule>
    
  67.       <rule>
    
  68.         <include state="string-intp"/>
    
  69.       </rule>
    
  70.       <rule pattern="[\\#{}]">
    
  71.         <token type="LiteralStringRegex"/>
    
  72.       </rule>
    
  73.       <rule pattern="[^\\#{}]+">
    
  74.         <token type="LiteralStringRegex"/>
    
  75.       </rule>
    
  76.     </state>
    
  77.     <state name="simple-backtick">
    
  78.       <rule>
    
  79.         <include state="string-intp-escaped"/>
    
  80.       </rule>
    
  81.       <rule pattern="[^\\`#]+">
    
  82.         <token type="LiteralStringBacktick"/>
    
  83.       </rule>
    
  84.       <rule pattern="[\\#]">
    
  85.         <token type="LiteralStringBacktick"/>
    
  86.       </rule>
    
  87.       <rule pattern="`">
    
  88.         <token type="LiteralStringBacktick"/>
    
  89.         <pop depth="1"/>
    
  90.       </rule>
    
  91.     </state>
    
  92.     <state name="string-intp">
    
  93.       <rule pattern="#\{">
    
  94.         <token type="LiteralStringInterpol"/>
    
  95.         <push state="in-intp"/>
    
  96.       </rule>
    
  97.     </state>
    
  98.     <state name="interpolated-regex">
    
  99.       <rule>
    
  100.         <include state="string-intp"/>
    
  101.       </rule>
    
  102.       <rule pattern="[\\#]">
    
  103.         <token type="LiteralStringRegex"/>
    
  104.       </rule>
    
  105.       <rule pattern="[^\\#]+">
    
  106.         <token type="LiteralStringRegex"/>
    
  107.       </rule>
    
  108.     </state>
    
  109.     <state name="cb-string">
    
  110.       <rule pattern="\\[\\{}]">
    
  111.         <token type="LiteralStringOther"/>
    
  112.       </rule>
    
  113.       <rule pattern="\{">
    
  114.         <token type="LiteralStringOther"/>
    
  115.         <push/>
    
  116.       </rule>
    
  117.       <rule pattern="\}">
    
  118.         <token type="LiteralStringOther"/>
    
  119.         <pop depth="1"/>
    
  120.       </rule>
    
  121.       <rule pattern="[\\#{}]">
    
  122.         <token type="LiteralStringOther"/>
    
  123.       </rule>
    
  124.       <rule pattern="[^\\#{}]+">
    
  125.         <token type="LiteralStringOther"/>
    
  126.       </rule>
    
  127.     </state>
    
  128.     <state name="in-macro-control">
    
  129.       <rule pattern="\{%">
    
  130.         <token type="LiteralStringInterpol"/>
    
  131.         <push/>
    
  132.       </rule>
    
  133.       <rule pattern="%\}">
    
  134.         <token type="LiteralStringInterpol"/>
    
  135.         <pop depth="1"/>
    
  136.       </rule>
    
  137.       <rule pattern="for\b|in\b">
    
  138.         <token type="Keyword"/>
    
  139.       </rule>
    
  140.       <rule>
    
  141.         <include state="root"/>
    
  142.       </rule>
    
  143.     </state>
    
  144.     <state name="interpolated-string">
    
  145.       <rule>
    
  146.         <include state="string-intp"/>
    
  147.       </rule>
    
  148.       <rule pattern="[\\#]">
    
  149.         <token type="LiteralStringOther"/>
    
  150.       </rule>
    
  151.       <rule pattern="[^\\#]+">
    
  152.         <token type="LiteralStringOther"/>
    
  153.       </rule>
    
  154.     </state>
    
  155.     <state name="in-macro-expr">
    
  156.       <rule pattern="\{\{">
    
  157.         <token type="LiteralStringInterpol"/>
    
  158.         <push/>
    
  159.       </rule>
    
  160.       <rule pattern="\}\}">
    
  161.         <token type="LiteralStringInterpol"/>
    
  162.         <pop depth="1"/>
    
  163.       </rule>
    
  164.       <rule>
    
  165.         <include state="root"/>
    
  166.       </rule>
    
  167.     </state>
    
  168.     <state name="simple-string">
    
  169.       <rule>
    
  170.         <include state="string-intp-escaped"/>
    
  171.       </rule>
    
  172.       <rule pattern="[^\\&#34;#]+">
    
  173.         <token type="LiteralStringDouble"/>
    
  174.       </rule>
    
  175.       <rule pattern="[\\#]">
    
  176.         <token type="LiteralStringDouble"/>
    
  177.       </rule>
    
  178.       <rule pattern="&#34;">
    
  179.         <token type="LiteralStringDouble"/>
    
  180.         <pop depth="1"/>
    
  181.       </rule>
    
  182.     </state>
    
  183.     <state name="cb-intp-string">
    
  184.       <rule pattern="\\[\{]">
    
  185.         <token type="LiteralStringOther"/>
    
  186.       </rule>
    
  187.       <rule pattern="\{">
    
  188.         <token type="LiteralStringOther"/>
    
  189.         <push/>
    
  190.       </rule>
    
  191.       <rule pattern="\}">
    
  192.         <token type="LiteralStringOther"/>
    
  193.         <pop depth="1"/>
    
  194.       </rule>
    
  195.       <rule>
    
  196.         <include state="string-intp-escaped"/>
    
  197.       </rule>
    
  198.       <rule pattern="[\\#{}]">
    
  199.         <token type="LiteralStringOther"/>
    
  200.       </rule>
    
  201.       <rule pattern="[^\\#{}]+">
    
  202.         <token type="LiteralStringOther"/>
    
  203.       </rule>
    
  204.     </state>
    
  205.     <state name="string-intp-escaped">
    
  206.       <rule>
    
  207.         <include state="string-intp"/>
    
  208.       </rule>
    
  209.       <rule>
    
  210.         <include state="string-escaped"/>
    
  211.       </rule>
    
  212.     </state>
    
  213.     <state name="sb-regex">
    
  214.       <rule pattern="\\[\\\[\]]">
    
  215.         <token type="LiteralStringRegex"/>
    
  216.       </rule>
    
  217.       <rule pattern="\[">
    
  218.         <token type="LiteralStringRegex"/>
    
  219.         <push/>
    
  220.       </rule>
    
  221.       <rule pattern="\][imsx]*">
    
  222.         <token type="LiteralStringRegex"/>
    
  223.         <pop depth="1"/>
    
  224.       </rule>
    
  225.       <rule>
    
  226.         <include state="string-intp"/>
    
  227.       </rule>
    
  228.       <rule pattern="[\\#\[\]]">
    
  229.         <token type="LiteralStringRegex"/>
    
  230.       </rule>
    
  231.       <rule pattern="[^\\#\[\]]+">
    
  232.         <token type="LiteralStringRegex"/>
    
  233.       </rule>
    
  234.     </state>
    
  235.     <state name="classname">
    
  236.       <rule pattern="[A-Z_]\w*">
    
  237.         <token type="NameClass"/>
    
  238.       </rule>
    
  239.       <rule pattern="(\()(\s*)([A-Z_]\w*)(\s*)(\))">
    
  240.         <bygroups>
    
  241.           <token type="Punctuation"/>
    
  242.           <token type="Text"/>
    
  243.           <token type="NameClass"/>
    
  244.           <token type="Text"/>
    
  245.           <token type="Punctuation"/>
    
  246.         </bygroups>
    
  247.       </rule>
    
  248.       <rule>
    
  249.         <pop depth="1"/>
    
  250.       </rule>
    
  251.     </state>
    
  252.     <state name="string-escaped">
    
  253.       <rule pattern="\\([\\befnstv#&#34;\&#39;]|x[a-fA-F0-9]{1,2}|[0-7]{1,3})">
    
  254.         <token type="LiteralStringEscape"/>
    
  255.       </rule>
    
  256.     </state>
    
  257.     <state name="sb-intp-string">
    
  258.       <rule pattern="\\[\[]">
    
  259.         <token type="LiteralStringOther"/>
    
  260.       </rule>
    
  261.       <rule pattern="\[">
    
  262.         <token type="LiteralStringOther"/>
    
  263.         <push/>
    
  264.       </rule>
    
  265.       <rule pattern="\]">
    
  266.         <token type="LiteralStringOther"/>
    
  267.         <pop depth="1"/>
    
  268.       </rule>
    
  269.       <rule>
    
  270.         <include state="string-intp-escaped"/>
    
  271.       </rule>
    
  272.       <rule pattern="[\\#\[\]]">
    
  273.         <token type="LiteralStringOther"/>
    
  274.       </rule>
    
  275.       <rule pattern="[^\\#\[\]]+">
    
  276.         <token type="LiteralStringOther"/>
    
  277.       </rule>
    
  278.     </state>
    
  279.     <state name="pa-regex">
    
  280.       <rule pattern="\\[\\()]">
    
  281.         <token type="LiteralStringRegex"/>
    
  282.       </rule>
    
  283.       <rule pattern="\(">
    
  284.         <token type="LiteralStringRegex"/>
    
  285.         <push/>
    
  286.       </rule>
    
  287.       <rule pattern="\)[imsx]*">
    
  288.         <token type="LiteralStringRegex"/>
    
  289.         <pop depth="1"/>
    
  290.       </rule>
    
  291.       <rule>
    
  292.         <include state="string-intp"/>
    
  293.       </rule>
    
  294.       <rule pattern="[\\#()]">
    
  295.         <token type="LiteralStringRegex"/>
    
  296.       </rule>
    
  297.       <rule pattern="[^\\#()]+">
    
  298.         <token type="LiteralStringRegex"/>
    
  299.       </rule>
    
  300.     </state>
    
  301.     <state name="in-attr">
    
  302.       <rule pattern="\[">
    
  303.         <token type="Operator"/>
    
  304.         <push/>
    
  305.       </rule>
    
  306.       <rule pattern="\]">
    
  307.         <token type="Operator"/>
    
  308.         <pop depth="1"/>
    
  309.       </rule>
    
  310.       <rule>
    
  311.         <include state="root"/>
    
  312.       </rule>
    
  313.     </state>
    
  314.     <state name="ab-intp-string">
    
  315.       <rule pattern="\\[&lt;]">
    
  316.         <token type="LiteralStringOther"/>
    
  317.       </rule>
    
  318.       <rule pattern="&lt;">
    
  319.         <token type="LiteralStringOther"/>
    
  320.         <push/>
    
  321.       </rule>
    
  322.       <rule pattern="&gt;">
    
  323.         <token type="LiteralStringOther"/>
    
  324.         <pop depth="1"/>
    
  325.       </rule>
    
  326.       <rule>
    
  327.         <include state="string-intp-escaped"/>
    
  328.       </rule>
    
  329.       <rule pattern="[\\#&lt;&gt;]">
    
  330.         <token type="LiteralStringOther"/>
    
  331.       </rule>
    
  332.       <rule pattern="[^\\#&lt;&gt;]+">
    
  333.         <token type="LiteralStringOther"/>
    
  334.       </rule>
    
  335.     </state>
    
  336.     <state name="in-intp">
    
  337.       <rule pattern="\{">
    
  338.         <token type="LiteralStringInterpol"/>
    
  339.         <push/>
    
  340.       </rule>
    
  341.       <rule pattern="\}">
    
  342.         <token type="LiteralStringInterpol"/>
    
  343.         <pop depth="1"/>
    
  344.       </rule>
    
  345.       <rule>
    
  346.         <include state="root"/>
    
  347.       </rule>
    
  348.     </state>
    
  349.     <state name="end-part">
    
  350.       <rule pattern=".+">
    
  351.         <token type="CommentPreproc"/>
    
  352.         <pop depth="1"/>
    
  353.       </rule>
    
  354.     </state>
    
  355.     <state name="root">
    
  356.       <rule pattern="#.*?$">
    
  357.         <token type="CommentSingle"/>
    
  358.       </rule>
    
  359.       <rule pattern="(instance_sizeof|pointerof|protected|abstract|require|private|include|unless|typeof|sizeof|return|extend|ensure|rescue|ifdef|super|break|begin|until|while|elsif|yield|next|when|else|then|case|with|end|asm|if|do|as|of)\b">
    
  360.         <token type="Keyword"/>
    
  361.       </rule>
    
  362.       <rule pattern="(false|true|nil)\b">
    
  363.         <token type="KeywordConstant"/>
    
  364.       </rule>
    
  365.       <rule pattern="(module|lib)(\s+)([a-zA-Z_]\w*(?:::[a-zA-Z_]\w*)*)">
    
  366.         <bygroups>
    
  367.           <token type="Keyword"/>
    
  368.           <token type="Text"/>
    
  369.           <token type="NameNamespace"/>
    
  370.         </bygroups>
    
  371.       </rule>
    
  372.       <rule pattern="(def|fun|macro)(\s+)((?:[a-zA-Z_]\w*::)*)">
    
  373.         <bygroups>
    
  374.           <token type="Keyword"/>
    
  375.           <token type="Text"/>
    
  376.           <token type="NameNamespace"/>
    
  377.         </bygroups>
    
  378.         <push state="funcname"/>
    
  379.       </rule>
    
  380.       <rule pattern="def(?=[*%&amp;^`~+-/\[&lt;&gt;=])">
    
  381.         <token type="Keyword"/>
    
  382.         <push state="funcname"/>
    
  383.       </rule>
    
  384.       <rule pattern="(class|struct|union|type|alias|enum)(\s+)((?:[a-zA-Z_]\w*::)*)">
    
  385.         <bygroups>
    
  386.           <token type="Keyword"/>
    
  387.           <token type="Text"/>
    
  388.           <token type="NameNamespace"/>
    
  389.         </bygroups>
    
  390.         <push state="classname"/>
    
  391.       </rule>
    
  392.       <rule pattern="(self|out|uninitialized)\b|(is_a|responds_to)\?">
    
  393.         <token type="KeywordPseudo"/>
    
  394.       </rule>
    
  395.       <rule pattern="(def_equals_and_hash|assert_responds_to|forward_missing_to|def_equals|property|def_hash|parallel|delegate|debugger|getter|record|setter|spawn|pp)\b">
    
  396.         <token type="NameBuiltinPseudo"/>
    
  397.       </rule>
    
  398.       <rule pattern="getter[!?]|property[!?]|__(DIR|FILE|LINE)__\b">
    
  399.         <token type="NameBuiltinPseudo"/>
    
  400.       </rule>
    
  401.       <rule pattern="(?&lt;!\.)(get_stack_top|StaticArray|Concurrent|with_color|Reference|Scheduler|read_line|Exception|at_exit|Pointer|Channel|Float64|sprintf|Float32|Process|Object|Struct|caller|UInt16|UInt32|UInt64|system|future|Number|printf|String|Symbol|Int32|Range|Slice|Regex|Mutex|sleep|Array|Class|raise|Tuple|Deque|delay|Float|Int16|print|abort|Value|UInt8|Int64|puts|Proc|File|Void|exit|fork|Bool|Char|gets|lazy|loop|main|rand|Enum|Int8|Time|Hash|Set|Box|Nil|Dir|Int|p)\b">
    
  402.         <token type="NameBuiltin"/>
    
  403.       </rule>
    
  404.       <rule pattern="(?&lt;!\w)(&lt;&lt;-?)([&#34;`\&#39;]?)([a-zA-Z_]\w*)(\2)(.*?\n)">
    
  405.         <token type="LiteralStringHeredoc"/>
    
  406.       </rule>
    
  407.       <rule pattern="(&lt;&lt;-?)(&#34;|\&#39;)()(\2)(.*?\n)">
    
  408.         <token type="LiteralStringHeredoc"/>
    
  409.       </rule>
    
  410.       <rule pattern="__END__">
    
  411.         <token type="CommentPreproc"/>
    
  412.         <push state="end-part"/>
    
  413.       </rule>
    
  414.       <rule pattern="(?:^|(?&lt;=[=&lt;&gt;~!:])|(?&lt;=(?:\s|;)when\s)|(?&lt;=(?:\s|;)or\s)|(?&lt;=(?:\s|;)and\s)|(?&lt;=\.index\s)|(?&lt;=\.scan\s)|(?&lt;=\.sub\s)|(?&lt;=\.sub!\s)|(?&lt;=\.gsub\s)|(?&lt;=\.gsub!\s)|(?&lt;=\.match\s)|(?&lt;=(?:\s|;)if\s)|(?&lt;=(?:\s|;)elsif\s)|(?&lt;=^when\s)|(?&lt;=^index\s)|(?&lt;=^scan\s)|(?&lt;=^sub\s)|(?&lt;=^gsub\s)|(?&lt;=^sub!\s)|(?&lt;=^gsub!\s)|(?&lt;=^match\s)|(?&lt;=^if\s)|(?&lt;=^elsif\s))(\s*)(/)">
    
  415.         <bygroups>
    
  416.           <token type="Text"/>
    
  417.           <token type="LiteralStringRegex"/>
    
  418.         </bygroups>
    
  419.         <push state="multiline-regex"/>
    
  420.       </rule>
    
  421.       <rule pattern="(?&lt;=\(|,|\[)/">
    
  422.         <token type="LiteralStringRegex"/>
    
  423.         <push state="multiline-regex"/>
    
  424.       </rule>
    
  425.       <rule pattern="(\s+)(/)(?![\s=])">
    
  426.         <bygroups>
    
  427.           <token type="Text"/>
    
  428.           <token type="LiteralStringRegex"/>
    
  429.         </bygroups>
    
  430.         <push state="multiline-regex"/>
    
  431.       </rule>
    
  432.       <rule pattern="(0o[0-7]+(?:_[0-7]+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?">
    
  433.         <bygroups>
    
  434.           <token type="LiteralNumberOct"/>
    
  435.           <token type="Text"/>
    
  436.           <token type="Operator"/>
    
  437.         </bygroups>
    
  438.       </rule>
    
  439.       <rule pattern="(0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?">
    
  440.         <bygroups>
    
  441.           <token type="LiteralNumberHex"/>
    
  442.           <token type="Text"/>
    
  443.           <token type="Operator"/>
    
  444.         </bygroups>
    
  445.       </rule>
    
  446.       <rule pattern="(0b[01]+(?:_[01]+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?">
    
  447.         <bygroups>
    
  448.           <token type="LiteralNumberBin"/>
    
  449.           <token type="Text"/>
    
  450.           <token type="Operator"/>
    
  451.         </bygroups>
    
  452.       </rule>
    
  453.       <rule pattern="((?:0(?![0-9])|[1-9][\d_]*)(?:\.\d[\d_]*)(?:e[+-]?[0-9]+)?(?:_?f[0-9]+)?)(\s*)([/?])?">
    
  454.         <bygroups>
    
  455.           <token type="LiteralNumberFloat"/>
    
  456.           <token type="Text"/>
    
  457.           <token type="Operator"/>
    
  458.         </bygroups>
    
  459.       </rule>
    
  460.       <rule pattern="((?:0(?![0-9])|[1-9][\d_]*)(?:\.\d[\d_]*)?(?:e[+-]?[0-9]+)(?:_?f[0-9]+)?)(\s*)([/?])?">
    
  461.         <bygroups>
    
  462.           <token type="LiteralNumberFloat"/>
    
  463.           <token type="Text"/>
    
  464.           <token type="Operator"/>
    
  465.         </bygroups>
    
  466.       </rule>
    
  467.       <rule pattern="((?:0(?![0-9])|[1-9][\d_]*)(?:\.\d[\d_]*)?(?:e[+-]?[0-9]+)?(?:_?f[0-9]+))(\s*)([/?])?">
    
  468.         <bygroups>
    
  469.           <token type="LiteralNumberFloat"/>
    
  470.           <token type="Text"/>
    
  471.           <token type="Operator"/>
    
  472.         </bygroups>
    
  473.       </rule>
    
  474.       <rule pattern="(0\b|[1-9][\d]*(?:_\d+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?">
    
  475.         <bygroups>
    
  476.           <token type="LiteralNumberInteger"/>
    
  477.           <token type="Text"/>
    
  478.           <token type="Operator"/>
    
  479.         </bygroups>
    
  480.       </rule>
    
  481.       <rule pattern="@@[a-zA-Z_]\w*">
    
  482.         <token type="NameVariableClass"/>
    
  483.       </rule>
    
  484.       <rule pattern="@[a-zA-Z_]\w*">
    
  485.         <token type="NameVariableInstance"/>
    
  486.       </rule>
    
  487.       <rule pattern="\$\w+">
    
  488.         <token type="NameVariableGlobal"/>
    
  489.       </rule>
    
  490.       <rule pattern="\$[!@&amp;`\&#39;+~=/\\,;.&lt;&gt;_*$?:&#34;^-]">
    
  491.         <token type="NameVariableGlobal"/>
    
  492.       </rule>
    
  493.       <rule pattern="\$-[0adFiIlpvw]">
    
  494.         <token type="NameVariableGlobal"/>
    
  495.       </rule>
    
  496.       <rule pattern="::">
    
  497.         <token type="Operator"/>
    
  498.       </rule>
    
  499.       <rule>
    
  500.         <include state="strings"/>
    
  501.       </rule>
    
  502.       <rule pattern="\?(\\[MC]-)*(\\([\\befnrtv#&#34;\&#39;]|x[a-fA-F0-9]{1,2}|[0-7]{1,3})|\S)(?!\w)">
    
  503.         <token type="LiteralStringChar"/>
    
  504.       </rule>
    
  505.       <rule pattern="[A-Z][A-Z_]+\b">
    
  506.         <token type="NameConstant"/>
    
  507.       </rule>
    
  508.       <rule pattern="\{%">
    
  509.         <token type="LiteralStringInterpol"/>
    
  510.         <push state="in-macro-control"/>
    
  511.       </rule>
    
  512.       <rule pattern="\{\{">
    
  513.         <token type="LiteralStringInterpol"/>
    
  514.         <push state="in-macro-expr"/>
    
  515.       </rule>
    
  516.       <rule pattern="(@\[)(\s*)([A-Z]\w*)">
    
  517.         <bygroups>
    
  518.           <token type="Operator"/>
    
  519.           <token type="Text"/>
    
  520.           <token type="NameDecorator"/>
    
  521.         </bygroups>
    
  522.         <push state="in-attr"/>
    
  523.       </rule>
    
  524.       <rule pattern="(\.|::)(\[\]\?|&lt;=&gt;|===|\[\]=|&gt;&gt;|&amp;&amp;|\*\*|\[\]|\|\||&gt;=|=~|!~|&lt;&lt;|&lt;=|!=|==|&lt;|/|=|-|\+|&gt;|\*|&amp;|%|\^|!|\||~)">
    
  525.         <bygroups>
    
  526.           <token type="Operator"/>
    
  527.           <token type="NameOperator"/>
    
  528.         </bygroups>
    
  529.       </rule>
    
  530.       <rule pattern="(\.|::)([a-zA-Z_]\w*[!?]?|[*%&amp;^`~+\-/\[&lt;&gt;=])">
    
  531.         <bygroups>
    
  532.           <token type="Operator"/>
    
  533.           <token type="Name"/>
    
  534.         </bygroups>
    
  535.       </rule>
    
  536.       <rule pattern="[a-zA-Z_]\w*(?:[!?](?!=))?">
    
  537.         <token type="Name"/>
    
  538.       </rule>
    
  539.       <rule pattern="(\[|\]\??|\*\*|&lt;=&gt;?|&gt;=|&lt;&lt;?|&gt;&gt;?|=~|===|!~|&amp;&amp;?|\|\||\.{1,3})">
    
  540.         <token type="Operator"/>
    
  541.       </rule>
    
  542.       <rule pattern="[-+/*%=&lt;&gt;&amp;!^|~]=?">
    
  543.         <token type="Operator"/>
    
  544.       </rule>
    
  545.       <rule pattern="[(){};,/?:\\]">
    
  546.         <token type="Punctuation"/>
    
  547.       </rule>
    
  548.       <rule pattern="\s+">
    
  549.         <token type="Text"/>
    
  550.       </rule>
    
  551.     </state>
    
  552.     <state name="multiline-regex">
    
  553.       <rule>
    
  554.         <include state="string-intp"/>
    
  555.       </rule>
    
  556.       <rule pattern="\\\\">
    
  557.         <token type="LiteralStringRegex"/>
    
  558.       </rule>
    
  559.       <rule pattern="\\/">
    
  560.         <token type="LiteralStringRegex"/>
    
  561.       </rule>
    
  562.       <rule pattern="[\\#]">
    
  563.         <token type="LiteralStringRegex"/>
    
  564.       </rule>
    
  565.       <rule pattern="[^\\/#]+">
    
  566.         <token type="LiteralStringRegex"/>
    
  567.       </rule>
    
  568.       <rule pattern="/[imsx]*">
    
  569.         <token type="LiteralStringRegex"/>
    
  570.         <pop depth="1"/>
    
  571.       </rule>
    
  572.     </state>
    
  573.     <state name="ab-string">
    
  574.       <rule pattern="\\[\\&lt;&gt;]">
    
  575.         <token type="LiteralStringOther"/>
    
  576.       </rule>
    
  577.       <rule pattern="&lt;">
    
  578.         <token type="LiteralStringOther"/>
    
  579.         <push/>
    
  580.       </rule>
    
  581.       <rule pattern="&gt;">
    
  582.         <token type="LiteralStringOther"/>
    
  583.         <pop depth="1"/>
    
  584.       </rule>
    
  585.       <rule pattern="[\\#&lt;&gt;]">
    
  586.         <token type="LiteralStringOther"/>
    
  587.       </rule>
    
  588.       <rule pattern="[^\\#&lt;&gt;]+">
    
  589.         <token type="LiteralStringOther"/>
    
  590.       </rule>
    
  591.     </state>
    
  592.     <state name="pa-string">
    
  593.       <rule pattern="\\[\\()]">
    
  594.         <token type="LiteralStringOther"/>
    
  595.       </rule>
    
  596.       <rule pattern="\(">
    
  597.         <token type="LiteralStringOther"/>
    
  598.         <push/>
    
  599.       </rule>
    
  600.       <rule pattern="\)">
    
  601.         <token type="LiteralStringOther"/>
    
  602.         <pop depth="1"/>
    
  603.       </rule>
    
  604.       <rule pattern="[\\#()]">
    
  605.         <token type="LiteralStringOther"/>
    
  606.       </rule>
    
  607.       <rule pattern="[^\\#()]+">
    
  608.         <token type="LiteralStringOther"/>
    
  609.       </rule>
    
  610.     </state>
    
  611.     <state name="strings">
    
  612.       <rule pattern="\:@{0,2}[a-zA-Z_]\w*[!?]?">
    
  613.         <token type="LiteralStringSymbol"/>
    
  614.       </rule>
    
  615.       <rule pattern="\:@{0,2}(\[\]\?|&lt;=&gt;|===|\[\]=|&gt;&gt;|&amp;&amp;|\*\*|\[\]|\|\||&gt;=|=~|!~|&lt;&lt;|&lt;=|!=|==|&lt;|/|=|-|\+|&gt;|\*|&amp;|%|\^|!|\||~)">
    
  616.         <token type="LiteralStringSymbol"/>
    
  617.       </rule>
    
  618.       <rule pattern=":&#39;(\\\\|\\&#39;|[^&#39;])*&#39;">
    
  619.         <token type="LiteralStringSymbol"/>
    
  620.       </rule>
    
  621.       <rule pattern="&#39;(\\\\|\\&#39;|[^&#39;]|\\[^&#39;\\]+)&#39;">
    
  622.         <token type="LiteralStringChar"/>
    
  623.       </rule>
    
  624.       <rule pattern=":&#34;">
    
  625.         <token type="LiteralStringSymbol"/>
    
  626.         <push state="simple-sym"/>
    
  627.       </rule>
    
  628.       <rule pattern="([a-zA-Z_]\w*)(:)(?!:)">
    
  629.         <bygroups>
    
  630.           <token type="LiteralStringSymbol"/>
    
  631.           <token type="Punctuation"/>
    
  632.         </bygroups>
    
  633.       </rule>
    
  634.       <rule pattern="&#34;">
    
  635.         <token type="LiteralStringDouble"/>
    
  636.         <push state="simple-string"/>
    
  637.       </rule>
    
  638.       <rule pattern="(?&lt;!\.)`">
    
  639.         <token type="LiteralStringBacktick"/>
    
  640.         <push state="simple-backtick"/>
    
  641.       </rule>
    
  642.       <rule pattern="%\{">
    
  643.         <token type="LiteralStringOther"/>
    
  644.         <push state="cb-intp-string"/>
    
  645.       </rule>
    
  646.       <rule pattern="%[wi]\{">
    
  647.         <token type="LiteralStringOther"/>
    
  648.         <push state="cb-string"/>
    
  649.       </rule>
    
  650.       <rule pattern="%r\{">
    
  651.         <token type="LiteralStringRegex"/>
    
  652.         <push state="cb-regex"/>
    
  653.       </rule>
    
  654.       <rule pattern="%\[">
    
  655.         <token type="LiteralStringOther"/>
    
  656.         <push state="sb-intp-string"/>
    
  657.       </rule>
    
  658.       <rule pattern="%[wi]\[">
    
  659.         <token type="LiteralStringOther"/>
    
  660.         <push state="sb-string"/>
    
  661.       </rule>
    
  662.       <rule pattern="%r\[">
    
  663.         <token type="LiteralStringRegex"/>
    
  664.         <push state="sb-regex"/>
    
  665.       </rule>
    
  666.       <rule pattern="%\(">
    
  667.         <token type="LiteralStringOther"/>
    
  668.         <push state="pa-intp-string"/>
    
  669.       </rule>
    
  670.       <rule pattern="%[wi]\(">
    
  671.         <token type="LiteralStringOther"/>
    
  672.         <push state="pa-string"/>
    
  673.       </rule>
    
  674.       <rule pattern="%r\(">
    
  675.         <token type="LiteralStringRegex"/>
    
  676.         <push state="pa-regex"/>
    
  677.       </rule>
    
  678.       <rule pattern="%&lt;">
    
  679.         <token type="LiteralStringOther"/>
    
  680.         <push state="ab-intp-string"/>
    
  681.       </rule>
    
  682.       <rule pattern="%[wi]&lt;">
    
  683.         <token type="LiteralStringOther"/>
    
  684.         <push state="ab-string"/>
    
  685.       </rule>
    
  686.       <rule pattern="%r&lt;">
    
  687.         <token type="LiteralStringRegex"/>
    
  688.         <push state="ab-regex"/>
    
  689.       </rule>
    
  690.       <rule pattern="(%r([\W_]))((?:\\\2|(?!\2).)*)(\2[imsx]*)">
    
  691.         <token type="LiteralString"/>
    
  692.       </rule>
    
  693.       <rule pattern="(%[wi]([\W_]))((?:\\\2|(?!\2).)*)(\2)">
    
  694.         <token type="LiteralString"/>
    
  695.       </rule>
    
  696.       <rule pattern="(?&lt;=[-+/*%=&lt;&gt;&amp;!^|~,(])(\s*)(%([\t ])(?:(?:\\\3|(?!\3).)*)\3)">
    
  697.         <bygroups>
    
  698.           <token type="Text"/>
    
  699.           <token type="LiteralStringOther"/>
    
  700.           <token type="None"/>
    
  701.         </bygroups>
    
  702.       </rule>
    
  703.       <rule pattern="^(\s*)(%([\t ])(?:(?:\\\3|(?!\3).)*)\3)">
    
  704.         <bygroups>
    
  705.           <token type="Text"/>
    
  706.           <token type="LiteralStringOther"/>
    
  707.           <token type="None"/>
    
  708.         </bygroups>
    
  709.       </rule>
    
  710.       <rule pattern="(%([\[{(&lt;]))((?:\\\2|(?!\2).)*)(\2)">
    
  711.         <token type="LiteralString"/>
    
  712.       </rule>
    
  713.     </state>
    
  714.     <state name="sb-string">
    
  715.       <rule pattern="\\[\\\[\]]">
    
  716.         <token type="LiteralStringOther"/>
    
  717.       </rule>
    
  718.       <rule pattern="\[">
    
  719.         <token type="LiteralStringOther"/>
    
  720.         <push/>
    
  721.       </rule>
    
  722.       <rule pattern="\]">
    
  723.         <token type="LiteralStringOther"/>
    
  724.         <pop depth="1"/>
    
  725.       </rule>
    
  726.       <rule pattern="[\\#\[\]]">
    
  727.         <token type="LiteralStringOther"/>
    
  728.       </rule>
    
  729.       <rule pattern="[^\\#\[\]]+">
    
  730.         <token type="LiteralStringOther"/>
    
  731.       </rule>
    
  732.     </state>
    
  733.     <state name="funcname">
    
  734.       <rule pattern="(?:([a-zA-Z_]\w*)(\.))?([a-zA-Z_]\w*[!?]?|\*\*?|[-+]@?|[/%&amp;|^`~]|\[\]=?|&lt;&lt;|&gt;&gt;|&lt;=?&gt;|&gt;=?|===?)">
    
  735.         <bygroups>
    
  736.           <token type="NameClass"/>
    
  737.           <token type="Operator"/>
    
  738.           <token type="NameFunction"/>
    
  739.         </bygroups>
    
  740.         <pop depth="1"/>
    
  741.       </rule>
    
  742.       <rule>
    
  743.         <pop depth="1"/>
    
  744.       </rule>
    
  745.     </state>
    
  746.     <state name="simple-sym">
    
  747.       <rule>
    
  748.         <include state="string-escaped"/>
    
  749.       </rule>
    
  750.       <rule pattern="[^\\&#34;#]+">
    
  751.         <token type="LiteralStringSymbol"/>
    
  752.       </rule>
    
  753.       <rule pattern="[\\#]">
    
  754.         <token type="LiteralStringSymbol"/>
    
  755.       </rule>
    
  756.       <rule pattern="&#34;">
    
  757.         <token type="LiteralStringSymbol"/>
    
  758.         <pop depth="1"/>
    
  759.       </rule>
    
  760.     </state>
    
  761.   </rules>
    
  762. </lexer>