comparison vim/bundle/jinja/jinja.vim @ 115:a3f756f0c95a

Added Jinja syntax highlighting in Vim.
author Ludovic Chabant <ludovic@chabant.com>
date Tue, 18 Sep 2012 21:13:39 -0700
parents
children
comparison
equal deleted inserted replaced
114:ccc3902408d2 115:a3f756f0c95a
1 " Vim syntax file
2 " Language: Jinja template
3 " Maintainer: Armin Ronacher <armin.ronacher@active-4.com>
4 " Last Change: 2008 May 9
5 " Version: 1.1
6 "
7 " Known Bugs:
8 " because of odd limitations dicts and the modulo operator
9 " appear wrong in the template.
10 "
11 " Changes:
12 "
13 " 2008 May 9: Added support for Jinja2 changes (new keyword rules)
14
15 " For version 5.x: Clear all syntax items
16 " For version 6.x: Quit when a syntax file was already loaded
17 if version < 600
18 syntax clear
19 elseif exists("b:current_syntax")
20 finish
21 endif
22
23 syntax case match
24
25 " Jinja template built-in tags and parameters (without filter, macro, is and raw, they
26 " have special threatment)
27 syn keyword jinjaStatement containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained and if else in not or recursive as import
28
29 syn keyword jinjaStatement containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained is filter skipwhite nextgroup=jinjaFilter
30 syn keyword jinjaStatement containedin=jinjaTagBlock contained macro skipwhite nextgroup=jinjaFunction
31 syn keyword jinjaStatement containedin=jinjaTagBlock contained block skipwhite nextgroup=jinjaBlockName
32
33 " Variable Names
34 syn match jinjaVariable containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained skipwhite /[a-zA-Z_][a-zA-Z0-9_]*/
35 syn keyword jinjaSpecial containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained false true none loop super caller varargs kwargs
36
37 " Filters
38 syn match jinjaOperator "|" containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained nextgroup=jinjaFilter
39 syn match jinjaFilter contained skipwhite /[a-zA-Z_][a-zA-Z0-9_]*/
40 syn match jinjaFunction contained skipwhite /[a-zA-Z_][a-zA-Z0-9_]*/
41 syn match jinjaBlockName contained skipwhite /[a-zA-Z_][a-zA-Z0-9_]*/
42
43 " Jinja template constants
44 syn region jinjaString containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained start=/"/ skip=/\\"/ end=/"/
45 syn region jinjaString containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained start=/'/ skip=/\\'/ end=/'/
46 syn match jinjaNumber containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[0-9]\+\(\.[0-9]\+\)\?/
47
48 " Operators
49 syn match jinjaOperator containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[+\-*\/<>=!,:]/
50 syn match jinjaPunctuation containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[()\[\]]/
51 syn match jinjaOperator containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /\./ nextgroup=jinjaAttribute
52 syn match jinjaAttribute contained /[a-zA-Z_][a-zA-Z0-9_]*/
53
54 " Jinja template tag and variable blocks
55 syn region jinjaNested matchgroup=jinjaOperator start="(" end=")" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained
56 syn region jinjaNested matchgroup=jinjaOperator start="\[" end="\]" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained
57 syn region jinjaNested matchgroup=jinjaOperator start="{" end="}" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained
58 syn region jinjaTagBlock matchgroup=jinjaTagDelim start=/{%-\?/ end=/-\?%}/ skipwhite containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment
59
60 syn region jinjaVarBlock matchgroup=jinjaVarDelim start=/{{-\?/ end=/-\?}}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment
61
62 " Jinja template 'raw' tag
63 syn region jinjaRaw matchgroup=jinjaRawDelim start="{%\s*raw\s*%}" end="{%\s*endraw\s*%}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString,jinjaComment
64
65 " Jinja comments
66 syn region jinjaComment matchgroup=jinjaCommentDelim start="{#" end="#}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString
67
68 " Block start keywords. A bit tricker. We only highlight at the start of a
69 " tag block and only if the name is not followed by a comma or equals sign
70 " which usually means that we have to deal with an assignment.
71 syn match jinjaStatement containedin=jinjaTagBlock contained skipwhite /\({%-\?\s*\)\@<=\<[a-zA-Z_][a-zA-Z0-9_]*\>\(\s*[,=]\)\@!/
72
73 " and context modifiers
74 syn match jinjaStatement containedin=jinjaTagBlock contained /\<with\(out\)\?\s\+context\>/ skipwhite
75
76
77 " Define the default highlighting.
78 " For version 5.7 and earlier: only when not done already
79 " For version 5.8 and later: only when an item doesn't have highlighting yet
80 if version >= 508 || !exists("did_jinja_syn_inits")
81 if version < 508
82 let did_jinja_syn_inits = 1
83 command -nargs=+ HiLink hi link <args>
84 else
85 command -nargs=+ HiLink hi def link <args>
86 endif
87
88 HiLink jinjaPunctuation jinjaOperator
89 HiLink jinjaAttribute jinjaVariable
90 HiLink jinjaFunction jinjaFilter
91
92 HiLink jinjaTagDelim jinjaTagBlock
93 HiLink jinjaVarDelim jinjaVarBlock
94 HiLink jinjaCommentDelim jinjaComment
95 HiLink jinjaRawDelim jinja
96
97 HiLink jinjaSpecial Special
98 HiLink jinjaOperator Normal
99 HiLink jinjaRaw Normal
100 HiLink jinjaTagBlock PreProc
101 HiLink jinjaVarBlock PreProc
102 HiLink jinjaStatement Statement
103 HiLink jinjaFilter Function
104 HiLink jinjaBlockName Function
105 HiLink jinjaVariable Identifier
106 HiLink jinjaString Constant
107 HiLink jinjaNumber Constant
108 HiLink jinjaComment Comment
109
110 delcommand HiLink
111 endif
112
113 let b:current_syntax = "jinja"