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=":?"(\\\\|\\"|[^"])*"">
140        <token type="LiteralStringDouble"/>
141      </rule>
142      <rule pattern=":?'(\\\\|\\'|[^'])*'">
143        <token type="LiteralStringSingle"/>
144      </rule>
145      <rule pattern="([{}()\[\]+\-*/,:~]|[><=]=?)">
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>