1. <lexer>
    
  2.   <config>
    
  3.     <name>Twig</name>
    
  4.     <alias>twig</alias>
    
  5.     <filename>*.twig</filename>
    
  6.     <mime_type>application/x-twig</mime_type>
    
  7.     <dot_all>true</dot_all>
    
  8.   </config>
    
  9.   <rules>
    
  10.     <state name="var">
    
  11.       <rule pattern="\s+">
    
  12.         <token type="Text"/>
    
  13.       </rule>
    
  14.       <rule pattern="(-?)(\}\})">
    
  15.         <bygroups>
    
  16.           <token type="Text"/>
    
  17.           <token type="CommentPreproc"/>
    
  18.         </bygroups>
    
  19.         <pop depth="1"/>
    
  20.       </rule>
    
  21.       <rule>
    
  22.         <include state="varnames"/>
    
  23.       </rule>
    
  24.     </state>
    
  25.     <state name="tag">
    
  26.       <rule pattern="\s+">
    
  27.         <token type="Text"/>
    
  28.       </rule>
    
  29.       <rule pattern="(-?)(%\})">
    
  30.         <bygroups>
    
  31.           <token type="Text"/>
    
  32.           <token type="CommentPreproc"/>
    
  33.         </bygroups>
    
  34.         <pop depth="1"/>
    
  35.       </rule>
    
  36.       <rule>
    
  37.         <include state="varnames"/>
    
  38.       </rule>
    
  39.       <rule pattern=".">
    
  40.         <token type="Punctuation"/>
    
  41.       </rule>
    
  42.     </state>
    
  43.     <state name="root">
    
  44.       <rule pattern="[^{]+">
    
  45.         <token type="Other"/>
    
  46.       </rule>
    
  47.       <rule pattern="\{\{">
    
  48.         <token type="CommentPreproc"/>
    
  49.         <push state="var"/>
    
  50.       </rule>
    
  51.       <rule pattern="\{\#.*?\#\}">
    
  52.         <token type="Comment"/>
    
  53.       </rule>
    
  54.       <rule pattern="(\{%)(-?\s*)(raw)(\s*-?)(%\})(.*?)(\{%)(-?\s*)(endraw)(\s*-?)(%\})">
    
  55.         <bygroups>
    
  56.           <token type="CommentPreproc"/>
    
  57.           <token type="Text"/>
    
  58.           <token type="Keyword"/>
    
  59.           <token type="Text"/>
    
  60.           <token type="CommentPreproc"/>
    
  61.           <token type="Other"/>
    
  62.           <token type="CommentPreproc"/>
    
  63.           <token type="Text"/>
    
  64.           <token type="Keyword"/>
    
  65.           <token type="Text"/>
    
  66.           <token type="CommentPreproc"/>
    
  67.         </bygroups>
    
  68.       </rule>
    
  69.       <rule pattern="(\{%)(-?\s*)(verbatim)(\s*-?)(%\})(.*?)(\{%)(-?\s*)(endverbatim)(\s*-?)(%\})">
    
  70.         <bygroups>
    
  71.           <token type="CommentPreproc"/>
    
  72.           <token type="Text"/>
    
  73.           <token type="Keyword"/>
    
  74.           <token type="Text"/>
    
  75.           <token type="CommentPreproc"/>
    
  76.           <token type="Other"/>
    
  77.           <token type="CommentPreproc"/>
    
  78.           <token type="Text"/>
    
  79.           <token type="Keyword"/>
    
  80.           <token type="Text"/>
    
  81.           <token type="CommentPreproc"/>
    
  82.         </bygroups>
    
  83.       </rule>
    
  84.       <rule pattern="(\{%)(-?\s*)(filter)(\s+)((?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w-]|[^\x00-\x7f])*)">
    
  85.         <bygroups>
    
  86.           <token type="CommentPreproc"/>
    
  87.           <token type="Text"/>
    
  88.           <token type="Keyword"/>
    
  89.           <token type="Text"/>
    
  90.           <token type="NameFunction"/>
    
  91.         </bygroups>
    
  92.         <push state="tag"/>
    
  93.       </rule>
    
  94.       <rule pattern="(\{%)(-?\s*)([a-zA-Z_]\w*)">
    
  95.         <bygroups>
    
  96.           <token type="CommentPreproc"/>
    
  97.           <token type="Text"/>
    
  98.           <token type="Keyword"/>
    
  99.         </bygroups>
    
  100.         <push state="tag"/>
    
  101.       </rule>
    
  102.       <rule pattern="\{">
    
  103.         <token type="Other"/>
    
  104.       </rule>
    
  105.     </state>
    
  106.     <state name="varnames">
    
  107.       <rule pattern="(\|)(\s*)((?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w-]|[^\x00-\x7f])*)">
    
  108.         <bygroups>
    
  109.           <token type="Operator"/>
    
  110.           <token type="Text"/>
    
  111.           <token type="NameFunction"/>
    
  112.         </bygroups>
    
  113.       </rule>
    
  114.       <rule pattern="(is)(\s+)(not)?(\s*)((?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w-]|[^\x00-\x7f])*)">
    
  115.         <bygroups>
    
  116.           <token type="Keyword"/>
    
  117.           <token type="Text"/>
    
  118.           <token type="Keyword"/>
    
  119.           <token type="Text"/>
    
  120.           <token type="NameFunction"/>
    
  121.         </bygroups>
    
  122.       </rule>
    
  123.       <rule pattern="(?i)(true|false|none|null)\b">
    
  124.         <token type="KeywordPseudo"/>
    
  125.       </rule>
    
  126.       <rule pattern="(in|not|and|b-and|or|b-or|b-xor|isif|elseif|else|importconstant|defined|divisibleby|empty|even|iterable|odd|sameasmatches|starts\s+with|ends\s+with)\b">
    
  127.         <token type="Keyword"/>
    
  128.       </rule>
    
  129.       <rule pattern="(loop|block|parent)\b">
    
  130.         <token type="NameBuiltin"/>
    
  131.       </rule>
    
  132.       <rule pattern="(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w-]|[^\x00-\x7f])*">
    
  133.         <token type="NameVariable"/>
    
  134.       </rule>
    
  135.       <rule pattern="\.(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w-]|[^\x00-\x7f])*">
    
  136.         <token type="NameVariable"/>
    
  137.       </rule>
    
  138.       <rule pattern="\.[0-9]+">
    
  139.         <token type="LiteralNumber"/>
    
  140.       </rule>
    
  141.       <rule pattern=":?&#34;(\\\\|\\&#34;|[^&#34;])*&#34;">
    
  142.         <token type="LiteralStringDouble"/>
    
  143.       </rule>
    
  144.       <rule pattern=":?&#39;(\\\\|\\&#39;|[^&#39;])*&#39;">
    
  145.         <token type="LiteralStringSingle"/>
    
  146.       </rule>
    
  147.       <rule pattern="([{}()\[\]+\-*/,:~%]|\.\.|\?|:|\*\*|\/\/|!=|[&gt;&lt;=]=?)">
    
  148.         <token type="Operator"/>
    
  149.       </rule>
    
  150.       <rule pattern="[0-9](\.[0-9]*)?(eE[+-][0-9])?[flFLdD]?|0[xX][0-9a-fA-F]+[Ll]?">
    
  151.         <token type="LiteralNumber"/>
    
  152.       </rule>
    
  153.     </state>
    
  154.   </rules>
    
  155. </lexer>