17a329911SBram Moolenaar" Vim syntax file 27a329911SBram Moolenaar" Language: Liquid 37a329911SBram Moolenaar" Maintainer: Tim Pope <[email protected]> 47a329911SBram Moolenaar" Filenames: *.liquid 5*543b7ef7SBram Moolenaar" Last Change: 2013 May 30 67a329911SBram Moolenaar 77a329911SBram Moolenaarif exists('b:current_syntax') 87a329911SBram Moolenaar finish 97a329911SBram Moolenaarendif 107a329911SBram Moolenaar 117a329911SBram Moolenaarif !exists('main_syntax') 127a329911SBram Moolenaar let main_syntax = 'liquid' 137a329911SBram Moolenaarendif 147a329911SBram Moolenaar 157a329911SBram Moolenaarif !exists('g:liquid_default_subtype') 167a329911SBram Moolenaar let g:liquid_default_subtype = 'html' 177a329911SBram Moolenaarendif 187a329911SBram Moolenaar 197a329911SBram Moolenaarif !exists('b:liquid_subtype') && main_syntax == 'liquid' 207a329911SBram Moolenaar let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$") 217a329911SBram Moolenaar let b:liquid_subtype = matchstr(s:lines,'liquid_subtype=\zs\w\+') 227a329911SBram Moolenaar if b:liquid_subtype == '' 237a329911SBram Moolenaar let b:liquid_subtype = matchstr(&filetype,'^liquid\.\zs\w\+') 247a329911SBram Moolenaar endif 257a329911SBram Moolenaar if b:liquid_subtype == '' 267a329911SBram Moolenaar let b:liquid_subtype = matchstr(substitute(expand('%:t'),'\c\%(\.liquid\)\+$','',''),'\.\zs\w\+$') 277a329911SBram Moolenaar endif 287a329911SBram Moolenaar if b:liquid_subtype == '' 297a329911SBram Moolenaar let b:liquid_subtype = g:liquid_default_subtype 307a329911SBram Moolenaar endif 317a329911SBram Moolenaarendif 327a329911SBram Moolenaar 337a329911SBram Moolenaarif exists('b:liquid_subtype') && b:liquid_subtype != '' 347a329911SBram Moolenaar exe 'runtime! syntax/'.b:liquid_subtype.'.vim' 357a329911SBram Moolenaar unlet! b:current_syntax 367a329911SBram Moolenaarendif 377a329911SBram Moolenaar 387a329911SBram Moolenaarsyn case match 397a329911SBram Moolenaar 407a329911SBram Moolenaarif exists('b:liquid_subtype') && b:liquid_subtype != 'yaml' 417a329911SBram Moolenaar " YAML Front Matter 427a329911SBram Moolenaar syn include @liquidYamlTop syntax/yaml.vim 437a329911SBram Moolenaar unlet! b:current_syntax 447a329911SBram Moolenaar syn region liquidYamlHead start="\%^---$" end="^---\s*$" keepend contains=@liquidYamlTop,@Spell 457a329911SBram Moolenaarendif 467a329911SBram Moolenaar 477a329911SBram Moolenaarif !exists('g:liquid_highlight_types') 487a329911SBram Moolenaar let g:liquid_highlight_types = [] 497a329911SBram Moolenaarendif 507a329911SBram Moolenaar 517a329911SBram Moolenaarif !exists('s:subtype') 527a329911SBram Moolenaar let s:subtype = exists('b:liquid_subtype') ? b:liquid_subtype : '' 537a329911SBram Moolenaar 547a329911SBram Moolenaar for s:type in map(copy(g:liquid_highlight_types),'matchstr(v:val,"[^=]*$")') 557a329911SBram Moolenaar if s:type =~ '\.' 567a329911SBram Moolenaar let b:{matchstr(s:type,'[^.]*')}_subtype = matchstr(s:type,'\.\zs.*') 577a329911SBram Moolenaar endif 587a329911SBram Moolenaar exe 'syn include @liquidHighlight'.substitute(s:type,'\.','','g').' syntax/'.matchstr(s:type,'[^.]*').'.vim' 597a329911SBram Moolenaar unlet! b:current_syntax 607a329911SBram Moolenaar endfor 617a329911SBram Moolenaar unlet! s:type 627a329911SBram Moolenaar 637a329911SBram Moolenaar if s:subtype == '' 647a329911SBram Moolenaar unlet! b:liquid_subtype 657a329911SBram Moolenaar else 667a329911SBram Moolenaar let b:liquid_subtype = s:subtype 677a329911SBram Moolenaar endif 687a329911SBram Moolenaar unlet s:subtype 697a329911SBram Moolenaarendif 707a329911SBram Moolenaar 717a329911SBram Moolenaarsyn region liquidStatement matchgroup=liquidDelimiter start="{%" end="%}" contains=@liquidStatement containedin=ALLBUT,@liquidExempt keepend 727a329911SBram Moolenaarsyn region liquidExpression matchgroup=liquidDelimiter start="{{" end="}}" contains=@liquidExpression containedin=ALLBUT,@liquidExempt keepend 737a329911SBram Moolenaarsyn region liquidComment matchgroup=liquidDelimiter start="{%\s*comment\s*%}" end="{%\s*endcomment\s*%}" contains=liquidTodo,@Spell containedin=ALLBUT,@liquidExempt keepend 74*543b7ef7SBram Moolenaarsyn region liquidRaw matchgroup=liquidDelimiter start="{%\s*raw\s*%}" end="{%\s*endraw\s*%}" contains=TOP,@liquidExempt containedin=ALLBUT,@liquidExempt keepend 757a329911SBram Moolenaar 76*543b7ef7SBram Moolenaarsyn cluster liquidExempt contains=liquidStatement,liquidExpression,liquidComment,liquidRaw,@liquidStatement,liquidYamlHead 777a329911SBram Moolenaarsyn cluster liquidStatement contains=liquidConditional,liquidRepeat,liquidKeyword,@liquidExpression 787a329911SBram Moolenaarsyn cluster liquidExpression contains=liquidOperator,liquidString,liquidNumber,liquidFloat,liquidBoolean,liquidNull,liquidEmpty,liquidPipe,liquidForloop 797a329911SBram Moolenaar 807a329911SBram Moolenaarsyn keyword liquidKeyword highlight nextgroup=liquidTypeHighlight skipwhite contained 817a329911SBram Moolenaarsyn keyword liquidKeyword endhighlight contained 827a329911SBram Moolenaarsyn region liquidHighlight start="{%\s*highlight\s\+\w\+\s*%}" end="{% endhighlight %}" keepend 837a329911SBram Moolenaar 847a329911SBram Moolenaarfor s:type in g:liquid_highlight_types 857a329911SBram Moolenaar exe 'syn match liquidTypeHighlight "\<'.matchstr(s:type,'[^=]*').'\>" contained' 867a329911SBram Moolenaar 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') 877a329911SBram Moolenaarendfor 887a329911SBram Moolenaarunlet! s:type 897a329911SBram Moolenaar 907a329911SBram Moolenaarsyn region liquidString matchgroup=liquidQuote start=+"+ end=+"+ contained 917a329911SBram Moolenaarsyn region liquidString matchgroup=liquidQuote start=+'+ end=+'+ contained 927a329911SBram Moolenaarsyn match liquidNumber "-\=\<\d\+\>" contained 937a329911SBram Moolenaarsyn match liquidFloat "-\=\<\d\+\>\.\.\@!\%(\d\+\>\)\=" contained 947a329911SBram Moolenaarsyn keyword liquidBoolean true false contained 957a329911SBram Moolenaarsyn keyword liquidNull null nil contained 967a329911SBram Moolenaarsyn match liquidEmpty "\<empty\>" contained 977a329911SBram Moolenaar 987a329911SBram Moolenaarsyn keyword liquidOperator and or not contained 997a329911SBram Moolenaarsyn match liquidPipe '|' contained skipwhite nextgroup=liquidFilter 1007a329911SBram Moolenaar 1017a329911SBram Moolenaarsyn 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 1027a329911SBram Moolenaar 1037a329911SBram Moolenaarsyn keyword liquidConditional if elsif else endif unless endunless case when endcase ifchanged endifchanged contained 1047a329911SBram Moolenaarsyn keyword liquidRepeat for endfor tablerow endtablerow in contained 1057a329911SBram Moolenaarsyn match liquidRepeat "\%({%\s*\)\@<=empty\>" contained 1067a329911SBram Moolenaarsyn keyword liquidKeyword assign cycle include with contained 1077a329911SBram Moolenaar 1087a329911SBram Moolenaarsyn keyword liquidForloop forloop nextgroup=liquidForloopDot contained 1097a329911SBram Moolenaarsyn match liquidForloopDot "\." nextgroup=liquidForloopAttribute contained 1107a329911SBram Moolenaarsyn keyword liquidForloopAttribute length index index0 rindex rindex0 first last contained 1117a329911SBram Moolenaar 1127a329911SBram Moolenaarsyn keyword liquidTablerowloop tablerowloop nextgroup=liquidTablerowloopDot contained 1137a329911SBram Moolenaarsyn match liquidTablerowloopDot "\." nextgroup=liquidTableForloopAttribute contained 1147a329911SBram Moolenaarsyn keyword liquidTablerowloopAttribute length index index0 col col0 index0 rindex rindex0 first last col_first col_last contained 1157a329911SBram Moolenaar 1167a329911SBram Moolenaarhi def link liquidDelimiter PreProc 1177a329911SBram Moolenaarhi def link liquidComment Comment 1187a329911SBram Moolenaarhi def link liquidTypeHighlight Type 1197a329911SBram Moolenaarhi def link liquidConditional Conditional 1207a329911SBram Moolenaarhi def link liquidRepeat Repeat 1217a329911SBram Moolenaarhi def link liquidKeyword Keyword 1227a329911SBram Moolenaarhi def link liquidOperator Operator 1237a329911SBram Moolenaarhi def link liquidString String 1247a329911SBram Moolenaarhi def link liquidQuote Delimiter 1257a329911SBram Moolenaarhi def link liquidNumber Number 1267a329911SBram Moolenaarhi def link liquidFloat Float 1277a329911SBram Moolenaarhi def link liquidEmpty liquidNull 1287a329911SBram Moolenaarhi def link liquidNull liquidBoolean 1297a329911SBram Moolenaarhi def link liquidBoolean Boolean 1307a329911SBram Moolenaarhi def link liquidFilter Function 1317a329911SBram Moolenaarhi def link liquidForloop Identifier 1327a329911SBram Moolenaarhi def link liquidForloopAttribute Identifier 1337a329911SBram Moolenaar 1347a329911SBram Moolenaarlet b:current_syntax = 'liquid' 1357a329911SBram Moolenaar 1367a329911SBram Moolenaarif exists('main_syntax') && main_syntax == 'liquid' 1377a329911SBram Moolenaar unlet main_syntax 1387a329911SBram Moolenaarendif 139