summaryrefslogtreecommitdiffstats
path: root/syntax
diff options
context:
space:
mode:
Diffstat (limited to 'syntax')
-rw-r--r--syntax/vcl.vim110
1 files changed, 110 insertions, 0 deletions
diff --git a/syntax/vcl.vim b/syntax/vcl.vim
new file mode 100644
index 00000000..3bd91a5c
--- /dev/null
+++ b/syntax/vcl.vim
@@ -0,0 +1,110 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vcl') == -1
+
+" Vim syntax file
+" Filename: vcl.vim
+" Language: Varnish configuation Language, http://www.varnish-cache.org/wiki/VCL
+" Maintainer: Elan Ruusamäe <glen@delfi.ee>
+" Version Info: $Revision: 1.7 $
+" Last Change: $Date: 2010/04/06 08:24:28 $ UTC
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" TODO
+" - sub ...
+" - backend/director/...
+" - acl ...
+" - error when invalid operator used in if (...)
+" - +=, = operators
+" - functions
+
+" Code Blocks
+" sub NAME {
+" backend NAME {
+" director NAME FLAGS {
+" acl NAME {
+"syn region vclCodeBlock start="\s*\<sub\|backend\|director\|acl\>" end="{"he=e-1 contains=vclCodeBlockName,vclFunctionName
+"syn match vclCodeBlockName "\<sub\|backend\|director\|acl\>" contained
+"syn match vclFunctionName "\h[[:alnum:]_:]*" contained
+"syn match vclFunctionName "\h\w*[^:]" contained
+"
+syn keyword vclOperator set call return error esi synthetic include remove unset
+" return modes
+syn keyword vclModes deliver pipe pass hash lookup discard fetch restart
+
+" C strings
+syn region vclString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=vclSpecial
+syn match vclSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
+syn match vclSpecialError "L\='\\[^'\"?\\abfnrtv]'"
+syn match vclSpecialCharacter "L\='\\['\"?\\abfnrtv]'"
+syn match vclSpecialCharacter display "L\='\\\o\{1,3}'"
+syn match vclSpecialCharacter display "'\\x\x\{1,2}'"
+syn match vclSpecialCharacter display "L'\\x\x\+'"
+
+syn keyword vclConditional if else elsif elseif
+
+" Numbers
+syn match vclNumbers display transparent "\<\d\|\.\d" contains=vclNumber,vclNumberTime
+syn match vclNumber display contained "\d\+"
+" set obj.ttl = 0s, 0m;
+syn match vclNumberTime display contained "\d\+[dhsm]"
+
+" client
+syn match vclOption /client\.\(ip\|identity\)/
+" server
+syn match vclOption /server\.\(ip\|port\)/
+" req
+syn match vclOption /req\.\(hash\|request\|method\|url\|proto\|backend\healthy\|backend\|grace\|xid\|restarts\)/
+" bereq
+syn match vclOption /bereq\.\(request\|method\|url\|proto\|connect_timeout\|first_byte_timeout\|between_bytes_timeout\)/
+" beresp
+syn match vclOption /beresp\.\(proto\|status\|response\|cacheable\|ttl\|lastuse\|hits\|hash\|grace\|prefetch\|saintmode\|keep\)/
+" obj
+syn match vclOption /obj\.\(proto\|status\|response\|cacheable\|ttl\|lastuse\|hits\|hash\|grace\|prefetch\)/
+" resp
+syn match vclOption /resp\.\(proto\|status\|response\)/
+" common: http.HEADERNAME
+syn match vclOption /\(req\|bereq\|resp\|beresp\|obj\)\.http\.[A-Za-z][-_A-Za-z0-9]*/
+
+" Highlight the C block
+syn include @vclC syntax/c.vim
+unlet b:current_syntax
+
+" Mark block tags itself as comment
+syn region vclCBlock matchgroup=vclComment start=/C{/ end=/}C/ contains=@vclC keepend
+
+" Synthetic
+syn region vclSynthetic start=/{"/hs=s+2 end=/"}/he=e-2 contains=@vclHTML keepend
+
+" Allow html in synthetic
+syn include @vclHTML syntax/html.vim
+unlet b:current_syntax
+
+syn match vclComment '#.*'
+syn match vclComment "//.*"
+syn region vclComment start="/\*" end="\*/"
+
+syn sync ccomment vclComment
+
+hi link vclCodeBlock Function
+hi link vclComment Comment
+hi link vclStatement Statement
+hi link vclFunctionName Identifier
+hi link vclCodeBlockName Statement
+hi link vclSpecial SpecialChar
+hi link vclString String
+hi link vclConditional Conditional
+hi link vclSynthetic vclString
+hi link vclSpecialCharacter vclSpecialSpecial
+hi link vclOperator Operator
+hi link vclModes Operator
+hi link vclOption Identifier
+hi link vclNumber Number
+hi link vclNumberTime Number
+
+endif