Mercurial > dotfiles
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" |