jinja.vim (4582B)
1 " Vim syntax file 2 " Language: Jinja 3 " Maintainer: Gregory Anders 4 " Upstream: https://gitlab.com/HiPhish/jinja.vim 5 " Last Change: 2024 Oct 16 6 7 if exists('b:current_syntax') && b:current_syntax =~? 'jinja' 8 finish 9 endif 10 11 syntax case match 12 syntax sync fromstart 13 14 " Jinja template built-in tags and parameters (without filter, macro, is and raw, they 15 " have special threatment) 16 syn keyword jinjaStatement containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained and if else in not or recursive as import 17 18 syn keyword jinjaStatement containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained is filter skipwhite nextgroup=jinjaFilter 19 syn keyword jinjaStatement containedin=jinjaTagBlock contained macro skipwhite nextgroup=jinjaFunction 20 syn keyword jinjaStatement containedin=jinjaTagBlock contained block skipwhite nextgroup=jinjaBlockName 21 22 " Variable Names 23 syn match jinjaVariable containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[a-zA-Z_][a-zA-Z0-9_]*/ 24 syn keyword jinjaSpecial containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained false true none False True None loop super caller varargs kwargs 25 26 " Filters 27 syn match jinjaOperator "|" containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained skipwhite nextgroup=jinjaFilter 28 syn match jinjaFilter contained /[a-zA-Z_][a-zA-Z0-9_]*/ 29 syn match jinjaFunction contained /[a-zA-Z_][a-zA-Z0-9_]*/ 30 syn match jinjaBlockName contained /[a-zA-Z_][a-zA-Z0-9_]*/ 31 32 " Jinja template constants 33 syn region jinjaString containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained start=/"/ skip=/\(\\\)\@<!\(\(\\\\\)\@>\)*\\"/ end=/"/ 34 syn region jinjaString containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained start=/'/ skip=/\(\\\)\@<!\(\(\\\\\)\@>\)*\\'/ end=/'/ 35 syn match jinjaNumber containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[0-9]\+\(\.[0-9]\+\)\?/ 36 37 " Operators 38 syn match jinjaOperator containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[+\-*\/<>=!,:]/ 39 syn match jinjaPunctuation containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[()\[\]]/ 40 syn match jinjaOperator containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /\./ nextgroup=jinjaAttribute 41 syn match jinjaAttribute contained /[a-zA-Z_][a-zA-Z0-9_]*/ 42 43 " Jinja template tag and variable blocks 44 syn region jinjaNested matchgroup=jinjaOperator start="(" end=")" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained 45 syn region jinjaNested matchgroup=jinjaOperator start="\[" end="\]" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained 46 syn region jinjaNested matchgroup=jinjaOperator start="{" end="}" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained 47 syn region jinjaTagBlock matchgroup=jinjaTagDelim start=/{%-\?/ end=/-\?%}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment 48 49 syn region jinjaVarBlock matchgroup=jinjaVarDelim start=/{{-\?/ end=/-\?}}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment 50 51 " Jinja template 'raw' tag 52 syn region jinjaRaw matchgroup=jinjaRawDelim start="{%\s*raw\s*%}" end="{%\s*endraw\s*%}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString,jinjaComment 53 54 " Jinja comments 55 syn region jinjaComment matchgroup=jinjaCommentDelim start="{#" end="#}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString 56 57 " Block start keywords. A bit tricker. We only highlight at the start of a 58 " tag block and only if the name is not followed by a comma or equals sign 59 " which usually means that we have to deal with an assignment. 60 syn match jinjaStatement containedin=jinjaTagBlock contained /\({%-\?\s*\)\@<=\<[a-zA-Z_][a-zA-Z0-9_]*\>\(\s*[,=]\)\@!/ 61 62 " and context modifiers 63 syn match jinjaStatement containedin=jinjaTagBlock contained /\<with\(out\)\?\s\+context\>/ 64 65 hi def link jinjaPunctuation jinjaOperator 66 hi def link jinjaAttribute jinjaVariable 67 hi def link jinjaFunction jinjaFilter 68 69 hi def link jinjaTagDelim jinjaTagBlock 70 hi def link jinjaVarDelim jinjaVarBlock 71 hi def link jinjaCommentDelim jinjaComment 72 hi def link jinjaRawDelim jinja 73 74 hi def link jinjaSpecial Special 75 hi def link jinjaOperator Normal 76 hi def link jinjaRaw Normal 77 hi def link jinjaTagBlock PreProc 78 hi def link jinjaVarBlock PreProc 79 hi def link jinjaStatement Statement 80 hi def link jinjaFilter Function 81 hi def link jinjaBlockName Function 82 hi def link jinjaVariable Identifier 83 hi def link jinjaString Constant 84 hi def link jinjaNumber Constant 85 hi def link jinjaComment Comment 86 87 let b:current_syntax = 'jinja'