blob: da315ac30289c212b2a0d92d56ea809554ea24df [file] [log] [blame]
Bram Moolenaardb552d602006-03-23 22:59:57 +00001" Vim syntax file
2" Language: Django template
3" Maintainer: Dave Hodder <dmh@dmh.org.uk>
Bram Moolenaardbc28022014-07-26 13:40:44 +02004" Last Change: 2014 Jul 13
Bram Moolenaardb552d602006-03-23 22:59:57 +00005
6" For version 5.x: Clear all syntax items
7" For version 6.x: Quit when a syntax file was already loaded
8if version < 600
9 syntax clear
10elseif exists("b:current_syntax")
11 finish
12endif
13
14syntax case match
15
Bram Moolenaar756ec0f2007-05-05 17:59:48 +000016" Mark illegal characters
17syn match djangoError "%}\|}}\|#}"
18
Bram Moolenaardb552d602006-03-23 22:59:57 +000019" Django template built-in tags and parameters
20" 'comment' doesn't appear here because it gets special treatment
Bram Moolenaar218116c2010-05-20 21:46:00 +020021syn keyword djangoStatement contained autoescape csrf_token empty
22" FIXME ==, !=, <, >, <=, and >= should be djangoStatements:
23" syn keyword djangoStatement contained == != < > <= >=
Bram Moolenaar53bfca22012-04-13 23:04:47 +020024syn keyword djangoStatement contained and as block endblock by cycle debug else elif
Bram Moolenaar218116c2010-05-20 21:46:00 +020025syn keyword djangoStatement contained extends filter endfilter firstof for
Bram Moolenaardb552d602006-03-23 22:59:57 +000026syn keyword djangoStatement contained endfor if endif ifchanged endifchanged
27syn keyword djangoStatement contained ifequal endifequal ifnotequal
28syn keyword djangoStatement contained endifnotequal in include load not now or
29syn keyword djangoStatement contained parsed regroup reversed spaceless
30syn keyword djangoStatement contained endspaceless ssi templatetag openblock
31syn keyword djangoStatement contained closeblock openvariable closevariable
Bram Moolenaar756ec0f2007-05-05 17:59:48 +000032syn keyword djangoStatement contained openbrace closebrace opencomment
Bram Moolenaar79166c42007-05-10 18:29:51 +000033syn keyword djangoStatement contained closecomment widthratio url with endwith
Bram Moolenaar756ec0f2007-05-05 17:59:48 +000034syn keyword djangoStatement contained get_current_language trans noop blocktrans
35syn keyword djangoStatement contained endblocktrans get_available_languages
36syn keyword djangoStatement contained get_current_language_bidi plural
Bram Moolenaardb552d602006-03-23 22:59:57 +000037
38" Django templete built-in filters
39syn keyword djangoFilter contained add addslashes capfirst center cut date
40syn keyword djangoFilter contained default default_if_none dictsort
Bram Moolenaar5c736222010-01-06 20:54:52 +010041syn keyword djangoFilter contained dictsortreversed divisibleby escape escapejs
Bram Moolenaardb552d602006-03-23 22:59:57 +000042syn keyword djangoFilter contained filesizeformat first fix_ampersands
Bram Moolenaar218116c2010-05-20 21:46:00 +020043syn keyword djangoFilter contained floatformat get_digit join last length length_is
Bram Moolenaardb552d602006-03-23 22:59:57 +000044syn keyword djangoFilter contained linebreaks linebreaksbr linenumbers ljust
45syn keyword djangoFilter contained lower make_list phone2numeric pluralize
Bram Moolenaar218116c2010-05-20 21:46:00 +020046syn keyword djangoFilter contained pprint random removetags rjust slice slugify
47syn keyword djangoFilter contained safe safeseq stringformat striptags
Bram Moolenaar53bfca22012-04-13 23:04:47 +020048syn keyword djangoFilter contained time timesince timeuntil title truncatechars
Bram Moolenaar5c736222010-01-06 20:54:52 +010049syn keyword djangoFilter contained truncatewords truncatewords_html unordered_list upper urlencode
Bram Moolenaardb552d602006-03-23 22:59:57 +000050syn keyword djangoFilter contained urlize urlizetrunc wordcount wordwrap yesno
51
Bram Moolenaar756ec0f2007-05-05 17:59:48 +000052" Keywords to highlight within comments
53syn keyword djangoTodo contained TODO FIXME XXX
54
Bram Moolenaardb552d602006-03-23 22:59:57 +000055" Django template constants (always surrounded by double quotes)
56syn region djangoArgument contained start=/"/ skip=/\\"/ end=/"/
57
Bram Moolenaar756ec0f2007-05-05 17:59:48 +000058" Mark illegal characters within tag and variables blocks
Bram Moolenaar218116c2010-05-20 21:46:00 +020059syn match djangoTagError contained "#}\|{{\|[^%]}}\|[&#]"
Bram Moolenaar79166c42007-05-10 18:29:51 +000060syn match djangoVarError contained "#}\|{%\|%}\|[<>!&#%]"
Bram Moolenaardb552d602006-03-23 22:59:57 +000061
Bram Moolenaar756ec0f2007-05-05 17:59:48 +000062" Django template tag and variable blocks
63syn region djangoTagBlock start="{%" end="%}" contains=djangoStatement,djangoFilter,djangoArgument,djangoTagError display
64syn region djangoVarBlock start="{{" end="}}" contains=djangoFilter,djangoArgument,djangoVarError display
65
66" Django template 'comment' tag and comment block
Bram Moolenaardbc28022014-07-26 13:40:44 +020067syn region djangoComment start="{%\s*comment\(\s\+.\{-}\)\?%}" end="{%\s*endcomment\s*%}" contains=djangoTodo
Bram Moolenaar756ec0f2007-05-05 17:59:48 +000068syn region djangoComBlock start="{#" end="#}" contains=djangoTodo
Bram Moolenaardb552d602006-03-23 22:59:57 +000069
70" Define the default highlighting.
71" For version 5.7 and earlier: only when not done already
72" For version 5.8 and later: only when an item doesn't have highlighting yet
73if version >= 508 || !exists("did_django_syn_inits")
74 if version < 508
75 let did_django_syn_inits = 1
76 command -nargs=+ HiLink hi link <args>
77 else
78 command -nargs=+ HiLink hi def link <args>
79 endif
80
81 HiLink djangoTagBlock PreProc
82 HiLink djangoVarBlock PreProc
83 HiLink djangoStatement Statement
84 HiLink djangoFilter Identifier
85 HiLink djangoArgument Constant
Bram Moolenaar756ec0f2007-05-05 17:59:48 +000086 HiLink djangoTagError Error
87 HiLink djangoVarError Error
88 HiLink djangoError Error
Bram Moolenaardb552d602006-03-23 22:59:57 +000089 HiLink djangoComment Comment
Bram Moolenaar756ec0f2007-05-05 17:59:48 +000090 HiLink djangoComBlock Comment
91 HiLink djangoTodo Todo
Bram Moolenaardb552d602006-03-23 22:59:57 +000092
93 delcommand HiLink
94endif
95
96let b:current_syntax = "django"