mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-03 17:24:29 +00:00 
			
		
		
		
	fixes: #vim/vim#15880
closes: vim/vim#15885
5e53fca76f
Co-authored-by: Gregory Anders <greg@gpanders.com>
		
	
		
			
				
	
	
		
			88 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
" Vim syntax file
 | 
						|
" Language: Jinja
 | 
						|
" Maintainer: Gregory Anders
 | 
						|
" Upstream: https://gitlab.com/HiPhish/jinja.vim
 | 
						|
" Last Change: 2024 Oct 16
 | 
						|
 | 
						|
if exists('b:current_syntax') && b:current_syntax =~? 'jinja'
 | 
						|
    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'
 |