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