summaryrefslogtreecommitdiffstats
path: root/syntax
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2013-09-12 17:26:31 +0200
committerAdam Stankiewicz <sheerun@sher.pl>2013-09-12 17:26:31 +0200
commite32871fd4a8d0dca327011b81d214ab5321f853d (patch)
tree6bcc21362dd73006063f16faaa5f67e19cb09ab1 /syntax
parenta127ca5ff2f12ae6394abf2c147bf26802be5b7d (diff)
downloadvim-polyglot-e32871fd4a8d0dca327011b81d214ab5321f853d.tar.gz
vim-polyglot-e32871fd4a8d0dca327011b81d214ab5321f853d.zip
Add twig syntax support
Diffstat (limited to 'syntax')
-rw-r--r--syntax/twig.vim109
1 files changed, 109 insertions, 0 deletions
diff --git a/syntax/twig.vim b/syntax/twig.vim
new file mode 100644
index 00000000..af3c2659
--- /dev/null
+++ b/syntax/twig.vim
@@ -0,0 +1,109 @@
+" Vim syntax file
+" Language: Twig template
+" Maintainer: Gabriel Gosselin <gabrielNOSPAM@evidens.ca>
+" Last Change: 2011 July 27
+" Version: 1.0
+"
+" Based Jinja syntax by: Armin Ronacher <armin.ronacher@active-4.com>
+"
+" Known Bugs:
+" because of odd limitations dicts and the modulo operator
+" appear wrong in the template.
+"
+" Changes:
+"
+" 2008 May 9: Added support for Jinja2 changes (new keyword rules)
+" 2011 July 27: Changed all references of jinja tp twig
+
+syntax case match
+
+" Jinja template built-in tags and parameters (without filter, macro, is and raw, they
+" have special threatment)
+syn keyword twigStatement containedin=twigVarBlock,twigTagBlock,twigNested contained and if else in not or recursive as import
+
+syn keyword twigStatement containedin=twigVarBlock,twigTagBlock,twigNested contained is filter skipwhite nextgroup=twigFilter
+syn keyword twigStatement containedin=twigTagBlock contained macro skipwhite nextgroup=twigFunction
+syn keyword twigStatement containedin=twigTagBlock contained block skipwhite nextgroup=twigBlockName
+
+" Variable Names
+syn match twigVariable containedin=twigVarBlock,twigTagBlock,twigNested contained skipwhite /[a-zA-Z_][a-zA-Z0-9_]*/
+syn keyword twigSpecial containedin=twigVarBlock,twigTagBlock,twigNested contained false true none loop super caller varargs kwargs
+
+" Filters
+syn match twigOperator "|" containedin=twigVarBlock,twigTagBlock,twigNested contained nextgroup=twigFilter
+syn match twigFilter contained skipwhite /[a-zA-Z_][a-zA-Z0-9_]*/
+syn match twigFunction contained skipwhite /[a-zA-Z_][a-zA-Z0-9_]*/
+syn match twigBlockName contained skipwhite /[a-zA-Z_][a-zA-Z0-9_]*/
+
+" Jinja template constants
+syn region twigString containedin=twigVarBlock,twigTagBlock,twigNested contained start=/"/ skip=/\\"/ end=/"/
+syn region twigString containedin=twigVarBlock,twigTagBlock,twigNested contained start=/'/ skip=/\\'/ end=/'/
+syn match twigNumber containedin=twigVarBlock,twigTagBlock,twigNested contained /[0-9]\+\(\.[0-9]\+\)\?/
+
+" Operators
+syn match twigOperator containedin=twigVarBlock,twigTagBlock,twigNested contained /[+\-*\/<>=!,:]/
+syn match twigPunctuation containedin=twigVarBlock,twigTagBlock,twigNested contained /[()\[\]]/
+syn match twigOperator containedin=twigVarBlock,twigTagBlock,twigNested contained /\./ nextgroup=twigAttribute
+syn match twigAttribute contained /[a-zA-Z_][a-zA-Z0-9_]*/
+
+" Jinja template tag and variable blocks
+syn region twigNested matchgroup=twigOperator start="(" end=")" transparent display containedin=twigVarBlock,twigTagBlock,twigNested contained
+syn region twigNested matchgroup=twigOperator start="\[" end="\]" transparent display containedin=twigVarBlock,twigTagBlock,twigNested contained
+syn region twigNested matchgroup=twigOperator start="{" end="}" transparent display containedin=twigVarBlock,twigTagBlock,twigNested contained
+syn region twigTagBlock matchgroup=twigTagDelim start=/{%-\?/ end=/-\?%}/ skipwhite containedin=ALLBUT,twigTagBlock,twigVarBlock,twigRaw,twigString,twigNested,twigComment
+
+syn region twigVarBlock matchgroup=twigVarDelim start=/{{-\?/ end=/-\?}}/ containedin=ALLBUT,twigTagBlock,twigVarBlock,twigRaw,twigString,twigNested,twigComment
+
+" Jinja template 'raw' tag
+syn region twigRaw matchgroup=twigRawDelim start="{%\s*raw\s*%}" end="{%\s*endraw\s*%}" containedin=ALLBUT,twigTagBlock,twigVarBlock,twigString,twigComment
+
+" Jinja comments
+syn region twigComment matchgroup=twigCommentDelim start="{#" end="#}" containedin=ALLBUT,twigTagBlock,twigVarBlock,twigString
+
+" Block start keywords. A bit tricker. We only highlight at the start of a
+" tag block and only if the name is not followed by a comma or equals sign
+" which usually means that we have to deal with an assignment.
+syn match twigStatement containedin=twigTagBlock contained skipwhite /\({%-\?\s*\)\@<=\<[a-zA-Z_][a-zA-Z0-9_]*\>\(\s*[,=]\)\@!/
+
+" and context modifiers
+syn match twigStatement containedin=twigTagBlock contained /\<with\(out\)\?\s\+context\>/ skipwhite
+
+
+" Define the default highlighting.
+" For version 5.7 and earlier: only when not done already
+" For version 5.8 and later: only when an item doesn't have highlighting yet
+if version >= 508 || !exists("did_twig_syn_inits")
+ if version < 508
+ let did_twig_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink twigPunctuation twigOperator
+ HiLink twigAttribute twigVariable
+ HiLink twigFunction twigFilter
+
+ HiLink twigTagDelim twigTagBlock
+ HiLink twigVarDelim twigVarBlock
+ HiLink twigCommentDelim twigComment
+ HiLink twigRawDelim twig
+
+ HiLink twigSpecial Special
+ HiLink twigOperator Normal
+ HiLink twigRaw Normal
+ HiLink twigTagBlock PreProc
+ HiLink twigVarBlock PreProc
+ HiLink twigStatement Statement
+ HiLink twigFilter Function
+ HiLink twigBlockName Function
+ HiLink twigVariable Identifier
+ HiLink twigString Constant
+ HiLink twigNumber Constant
+ HiLink twigComment Comment
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "twig"
+