codekingpro/portable-devtools
114k
1" Vim syntax file2" Language: Jinja3" Maintainer: Gregory Anders4" Upstream: https://gitlab.com/HiPhish/jinja.vim5" Last Change: 2024 Oct 166 7if exists('b:current_syntax') && b:current_syntax =~? 'jinja'8 finish9endif10 11syntax case match12syntax sync fromstart13 14" Jinja template built-in tags and parameters (without filter, macro, is and raw, they15" have special threatment)16syn keyword jinjaStatement containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained and if else in not or recursive as import17 18syn keyword jinjaStatement containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained is filter skipwhite nextgroup=jinjaFilter19syn keyword jinjaStatement containedin=jinjaTagBlock contained macro skipwhite nextgroup=jinjaFunction20syn keyword jinjaStatement containedin=jinjaTagBlock contained block skipwhite nextgroup=jinjaBlockName21 22" Variable Names23syn match jinjaVariable containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[a-zA-Z_][a-zA-Z0-9_]*/24syn keyword jinjaSpecial containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained false true none False True None loop super caller varargs kwargs25 26" Filters27syn match jinjaOperator "|" containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained skipwhite nextgroup=jinjaFilter28syn match jinjaFilter contained /[a-zA-Z_][a-zA-Z0-9_]*/29syn match jinjaFunction contained /[a-zA-Z_][a-zA-Z0-9_]*/30syn match jinjaBlockName contained /[a-zA-Z_][a-zA-Z0-9_]*/31 32" Jinja template constants33syn region jinjaString containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained start=/"/ skip=/\(\\\)\@<!\(\(\\\\\)\@>\)*\\"/ end=/"/34syn region jinjaString containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained start=/'/ skip=/\(\\\)\@<!\(\(\\\\\)\@>\)*\\'/ end=/'/35syn match jinjaNumber containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[0-9]\+\(\.[0-9]\+\)\?/36 37" Operators38syn match jinjaOperator containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[+\-*\/<>=!,:]/39syn match jinjaPunctuation containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[()\[\]]/40syn match jinjaOperator containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /\./ nextgroup=jinjaAttribute41syn match jinjaAttribute contained /[a-zA-Z_][a-zA-Z0-9_]*/42 43" Jinja template tag and variable blocks44syn region jinjaNested matchgroup=jinjaOperator start="(" end=")" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained45syn region jinjaNested matchgroup=jinjaOperator start="\[" end="\]" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained46syn region jinjaNested matchgroup=jinjaOperator start="{" end="}" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained47syn region jinjaTagBlock matchgroup=jinjaTagDelim start=/{%-\?/ end=/-\?%}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment48 49syn region jinjaVarBlock matchgroup=jinjaVarDelim start=/{{-\?/ end=/-\?}}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment50 51" Jinja template 'raw' tag52syn region jinjaRaw matchgroup=jinjaRawDelim start="{%\s*raw\s*%}" end="{%\s*endraw\s*%}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString,jinjaComment53 54" Jinja comments55syn region jinjaComment matchgroup=jinjaCommentDelim start="{#" end="#}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString56 57" Block start keywords. A bit tricker. We only highlight at the start of a58" tag block and only if the name is not followed by a comma or equals sign59" which usually means that we have to deal with an assignment.60syn match jinjaStatement containedin=jinjaTagBlock contained /\({%-\?\s*\)\@<=\<[a-zA-Z_][a-zA-Z0-9_]*\>\(\s*[,=]\)\@!/61 62" and context modifiers63syn match jinjaStatement containedin=jinjaTagBlock contained /\<with\(out\)\?\s\+context\>/64 65hi def link jinjaPunctuation jinjaOperator66hi def link jinjaAttribute jinjaVariable67hi def link jinjaFunction jinjaFilter68 69hi def link jinjaTagDelim jinjaTagBlock70hi def link jinjaVarDelim jinjaVarBlock71hi def link jinjaCommentDelim jinjaComment72hi def link jinjaRawDelim jinja73 74hi def link jinjaSpecial Special75hi def link jinjaOperator Normal76hi def link jinjaRaw Normal77hi def link jinjaTagBlock PreProc78hi def link jinjaVarBlock PreProc79hi def link jinjaStatement Statement80hi def link jinjaFilter Function81hi def link jinjaBlockName Function82hi def link jinjaVariable Identifier83hi def link jinjaString Constant84hi def link jinjaNumber Constant85hi def link jinjaComment Comment86 87let b:current_syntax = 'jinja'88 