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