Install vim74
[msysgit.git] / share / vim / vim74 / syntax / liquid.vim
blob295a91775e319b62489dffe82ea75ce3458df102
1 " Vim syntax file
2 " Language:     Liquid
3 " Maintainer:   Tim Pope <vimNOSPAM@tpope.org>
4 " Filenames:    *.liquid
5 " Last Change:  2013 May 30
7 if exists('b:current_syntax')
8   finish
9 endif
11 if !exists('main_syntax')
12   let main_syntax = 'liquid'
13 endif
15 if !exists('g:liquid_default_subtype')
16   let g:liquid_default_subtype = 'html'
17 endif
19 if !exists('b:liquid_subtype') && main_syntax == 'liquid'
20   let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
21   let b:liquid_subtype = matchstr(s:lines,'liquid_subtype=\zs\w\+')
22   if b:liquid_subtype == ''
23     let b:liquid_subtype = matchstr(&filetype,'^liquid\.\zs\w\+')
24   endif
25   if b:liquid_subtype == ''
26     let b:liquid_subtype = matchstr(substitute(expand('%:t'),'\c\%(\.liquid\)\+$','',''),'\.\zs\w\+$')
27   endif
28   if b:liquid_subtype == ''
29     let b:liquid_subtype = g:liquid_default_subtype
30   endif
31 endif
33 if exists('b:liquid_subtype') && b:liquid_subtype != ''
34   exe 'runtime! syntax/'.b:liquid_subtype.'.vim'
35   unlet! b:current_syntax
36 endif
38 syn case match
40 if exists('b:liquid_subtype') && b:liquid_subtype != 'yaml'
41   " YAML Front Matter
42   syn include @liquidYamlTop syntax/yaml.vim
43   unlet! b:current_syntax
44   syn region liquidYamlHead start="\%^---$" end="^---\s*$" keepend contains=@liquidYamlTop,@Spell
45 endif
47 if !exists('g:liquid_highlight_types')
48   let g:liquid_highlight_types = []
49 endif
51 if !exists('s:subtype')
52   let s:subtype = exists('b:liquid_subtype') ? b:liquid_subtype : ''
54   for s:type in map(copy(g:liquid_highlight_types),'matchstr(v:val,"[^=]*$")')
55     if s:type =~ '\.'
56       let b:{matchstr(s:type,'[^.]*')}_subtype = matchstr(s:type,'\.\zs.*')
57     endif
58     exe 'syn include @liquidHighlight'.substitute(s:type,'\.','','g').' syntax/'.matchstr(s:type,'[^.]*').'.vim'
59     unlet! b:current_syntax
60   endfor
61   unlet! s:type
63   if s:subtype == ''
64     unlet! b:liquid_subtype
65   else
66     let b:liquid_subtype = s:subtype
67   endif
68   unlet s:subtype
69 endif
71 syn region  liquidStatement  matchgroup=liquidDelimiter start="{%" end="%}" contains=@liquidStatement containedin=ALLBUT,@liquidExempt keepend
72 syn region  liquidExpression matchgroup=liquidDelimiter start="{{" end="}}" contains=@liquidExpression  containedin=ALLBUT,@liquidExempt keepend
73 syn region  liquidComment    matchgroup=liquidDelimiter start="{%\s*comment\s*%}" end="{%\s*endcomment\s*%}" contains=liquidTodo,@Spell containedin=ALLBUT,@liquidExempt keepend
74 syn region  liquidRaw        matchgroup=liquidDelimiter start="{%\s*raw\s*%}" end="{%\s*endraw\s*%}" contains=TOP,@liquidExempt containedin=ALLBUT,@liquidExempt keepend
76 syn cluster liquidExempt contains=liquidStatement,liquidExpression,liquidComment,liquidRaw,@liquidStatement,liquidYamlHead
77 syn cluster liquidStatement contains=liquidConditional,liquidRepeat,liquidKeyword,@liquidExpression
78 syn cluster liquidExpression contains=liquidOperator,liquidString,liquidNumber,liquidFloat,liquidBoolean,liquidNull,liquidEmpty,liquidPipe,liquidForloop
80 syn keyword liquidKeyword highlight nextgroup=liquidTypeHighlight skipwhite contained
81 syn keyword liquidKeyword endhighlight contained
82 syn region liquidHighlight start="{%\s*highlight\s\+\w\+\s*%}" end="{% endhighlight %}" keepend
84 for s:type in g:liquid_highlight_types
85   exe 'syn match liquidTypeHighlight "\<'.matchstr(s:type,'[^=]*').'\>" contained'
86   exe 'syn region liquidHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\..*','','').' start="{%\s*highlight\s\+'.matchstr(s:type,'[^=]*').'\s*%}" end="{% endhighlight %}" keepend contains=@liquidHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\.','','g')
87 endfor
88 unlet! s:type
90 syn region liquidString matchgroup=liquidQuote start=+"+ end=+"+ contained
91 syn region liquidString matchgroup=liquidQuote start=+'+ end=+'+ contained
92 syn match liquidNumber "-\=\<\d\+\>" contained
93 syn match liquidFloat "-\=\<\d\+\>\.\.\@!\%(\d\+\>\)\=" contained
94 syn keyword liquidBoolean true false contained
95 syn keyword liquidNull null nil contained
96 syn match liquidEmpty "\<empty\>" contained
98 syn keyword liquidOperator and or not contained
99 syn match liquidPipe '|' contained skipwhite nextgroup=liquidFilter
101 syn keyword liquidFilter date capitalize downcase upcase first last join sort size strip_html strip_newlines newline_to_br replace replace_first remove remove_first truncate truncatewords prepend append minus plus times divided_by contained
103 syn keyword liquidConditional if elsif else endif unless endunless case when endcase ifchanged endifchanged contained
104 syn keyword liquidRepeat      for endfor tablerow endtablerow in contained
105 syn match   liquidRepeat      "\%({%\s*\)\@<=empty\>" contained
106 syn keyword liquidKeyword     assign cycle include with contained
108 syn keyword liquidForloop forloop nextgroup=liquidForloopDot contained
109 syn match liquidForloopDot "\." nextgroup=liquidForloopAttribute contained
110 syn keyword liquidForloopAttribute length index index0 rindex rindex0 first last contained
112 syn keyword liquidTablerowloop tablerowloop nextgroup=liquidTablerowloopDot contained
113 syn match liquidTablerowloopDot "\." nextgroup=liquidTableForloopAttribute contained
114 syn keyword liquidTablerowloopAttribute length index index0 col col0 index0 rindex rindex0 first last col_first col_last contained
116 hi def link liquidDelimiter             PreProc
117 hi def link liquidComment               Comment
118 hi def link liquidTypeHighlight         Type
119 hi def link liquidConditional           Conditional
120 hi def link liquidRepeat                Repeat
121 hi def link liquidKeyword               Keyword
122 hi def link liquidOperator              Operator
123 hi def link liquidString                String
124 hi def link liquidQuote                 Delimiter
125 hi def link liquidNumber                Number
126 hi def link liquidFloat                 Float
127 hi def link liquidEmpty                 liquidNull
128 hi def link liquidNull                  liquidBoolean
129 hi def link liquidBoolean               Boolean
130 hi def link liquidFilter                Function
131 hi def link liquidForloop               Identifier
132 hi def link liquidForloopAttribute      Identifier
134 let b:current_syntax = 'liquid'
136 if exists('main_syntax') && main_syntax == 'liquid'
137   unlet main_syntax
138 endif