| 
									
										
										
										
											2024-09-17 20:12:47 +02:00
										 |  |  | " Vim syntax file | 
					
						
							|  |  |  | " Language: Jinja | 
					
						
							|  |  |  | " Maintainer: Gregory Anders | 
					
						
							|  |  |  | " Upstream: https://gitlab.com/HiPhish/jinja.vim | 
					
						
							| 
									
										
										
										
											2024-10-16 21:30:01 +02:00
										 |  |  | " Last Change: 2024 Oct 16 | 
					
						
							| 
									
										
										
										
											2024-09-17 20:12:47 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-16 21:30:01 +02:00
										 |  |  | if exists('b:current_syntax') && b:current_syntax =~? 'jinja' | 
					
						
							| 
									
										
										
										
											2024-09-17 20:12:47 +02:00
										 |  |  |     finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | syntax case match | 
					
						
							|  |  |  | syntax sync fromstart | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Jinja template built-in tags and parameters (without filter, macro, is and raw, they | 
					
						
							|  |  |  | " have special threatment) | 
					
						
							|  |  |  | syn keyword jinjaStatement containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained and if else in not or recursive as import | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | syn keyword jinjaStatement containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained is filter skipwhite nextgroup=jinjaFilter | 
					
						
							|  |  |  | syn keyword jinjaStatement containedin=jinjaTagBlock contained macro skipwhite nextgroup=jinjaFunction | 
					
						
							|  |  |  | syn keyword jinjaStatement containedin=jinjaTagBlock contained block skipwhite nextgroup=jinjaBlockName | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Variable Names | 
					
						
							|  |  |  | syn match jinjaVariable containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[a-zA-Z_][a-zA-Z0-9_]*/ | 
					
						
							|  |  |  | syn keyword jinjaSpecial containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained false true none False True None loop super caller varargs kwargs | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Filters | 
					
						
							|  |  |  | syn match jinjaOperator "|" containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained skipwhite nextgroup=jinjaFilter | 
					
						
							|  |  |  | syn match jinjaFilter contained /[a-zA-Z_][a-zA-Z0-9_]*/ | 
					
						
							|  |  |  | syn match jinjaFunction contained /[a-zA-Z_][a-zA-Z0-9_]*/ | 
					
						
							|  |  |  | syn match jinjaBlockName contained /[a-zA-Z_][a-zA-Z0-9_]*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Jinja template constants | 
					
						
							|  |  |  | syn region jinjaString containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained start=/"/ skip=/\(\\\)\@<!\(\(\\\\\)\@>\)*\\"/ end=/"/ | 
					
						
							|  |  |  | syn region jinjaString containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained start=/'/ skip=/\(\\\)\@<!\(\(\\\\\)\@>\)*\\'/ end=/'/ | 
					
						
							|  |  |  | syn match jinjaNumber containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[0-9]\+\(\.[0-9]\+\)\?/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Operators | 
					
						
							|  |  |  | syn match jinjaOperator containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[+\-*\/<>=!,:]/ | 
					
						
							|  |  |  | syn match jinjaPunctuation containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[()\[\]]/ | 
					
						
							|  |  |  | syn match jinjaOperator containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /\./ nextgroup=jinjaAttribute | 
					
						
							|  |  |  | syn match jinjaAttribute contained /[a-zA-Z_][a-zA-Z0-9_]*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Jinja template tag and variable blocks | 
					
						
							|  |  |  | syn region jinjaNested matchgroup=jinjaOperator start="(" end=")" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained | 
					
						
							|  |  |  | syn region jinjaNested matchgroup=jinjaOperator start="\[" end="\]" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained | 
					
						
							|  |  |  | syn region jinjaNested matchgroup=jinjaOperator start="{" end="}" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained | 
					
						
							|  |  |  | syn region jinjaTagBlock matchgroup=jinjaTagDelim start=/{%-\?/ end=/-\?%}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | syn region jinjaVarBlock matchgroup=jinjaVarDelim start=/{{-\?/ end=/-\?}}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Jinja template 'raw' tag | 
					
						
							|  |  |  | syn region jinjaRaw matchgroup=jinjaRawDelim start="{%\s*raw\s*%}" end="{%\s*endraw\s*%}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString,jinjaComment | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Jinja comments | 
					
						
							|  |  |  | syn region jinjaComment matchgroup=jinjaCommentDelim start="{#" end="#}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Block start keywords.  A bit tricker.  We only highlight at the start of a | 
					
						
							|  |  |  | " tag block and only if the name is not followed by a comma or equals sign | 
					
						
							|  |  |  | " which usually means that we have to deal with an assignment. | 
					
						
							|  |  |  | syn match jinjaStatement containedin=jinjaTagBlock contained /\({%-\?\s*\)\@<=\<[a-zA-Z_][a-zA-Z0-9_]*\>\(\s*[,=]\)\@!/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " and context modifiers | 
					
						
							|  |  |  | syn match jinjaStatement containedin=jinjaTagBlock contained /\<with\(out\)\?\s\+context\>/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | hi def link jinjaPunctuation jinjaOperator | 
					
						
							|  |  |  | hi def link jinjaAttribute jinjaVariable | 
					
						
							|  |  |  | hi def link jinjaFunction jinjaFilter | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | hi def link jinjaTagDelim jinjaTagBlock | 
					
						
							|  |  |  | hi def link jinjaVarDelim jinjaVarBlock | 
					
						
							|  |  |  | hi def link jinjaCommentDelim jinjaComment | 
					
						
							|  |  |  | hi def link jinjaRawDelim jinja | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | hi def link jinjaSpecial Special | 
					
						
							|  |  |  | hi def link jinjaOperator Normal | 
					
						
							|  |  |  | hi def link jinjaRaw Normal | 
					
						
							|  |  |  | hi def link jinjaTagBlock PreProc | 
					
						
							|  |  |  | hi def link jinjaVarBlock PreProc | 
					
						
							|  |  |  | hi def link jinjaStatement Statement | 
					
						
							|  |  |  | hi def link jinjaFilter Function | 
					
						
							|  |  |  | hi def link jinjaBlockName Function | 
					
						
							|  |  |  | hi def link jinjaVariable Identifier | 
					
						
							|  |  |  | hi def link jinjaString Constant | 
					
						
							|  |  |  | hi def link jinjaNumber Constant | 
					
						
							|  |  |  | hi def link jinjaComment Comment | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let b:current_syntax = 'jinja' |